Что хороший путь состоит в том, чтобы иметь дело с немецкой клавиатурой при использовании Emacs на Mac OS X?

Возможно, немного странно задать этот вопрос на английском языке, потому что моей проблемой является довольно неанглийская. Я - пользователь Mac OS X, и я на пути к изучению Emac. Я решил использовать Emac 23.1 сборки Какао, которые значением по умолчанию используют высокий звук/функциональную клавишу клавиатуры Mac в качестве метаклавиши. Но потому что я немец, и я использую немецкую клавиатуру, конечно, это get’s, довольно хитрый для ввода круглых скобок, которые необходимы для программирования экстенсивно: { } [ ]

Для получения этих символов на немецкой раскладке клавиатуры, необходимо нажать следующие клавиши:

alt-5 for '['
alt-8 for '{'

которые переводят согласно ситуации, описанной выше к

M-5
M-8

оба выполнения команды digit-argument в Emacs.

Я не действительно уверен, как обойти эту проблему. Я знаю, что можно изменить фактический ключ, который должен использоваться в качестве метаклавиши (например, Я мог изменить метаклавишу, чтобы быть командной клавишей). Но я думаю, что каждый выбор произойдет в стоимость и иметь некоторые очевидные недостатки, поскольку он “переопределяет”, некоторые предопределили поведение ОС, которое может быть необходимо при редактировании с клавиатурой иностранного языка.

На данный момент наилучший вариант мне, кажется, для использования клавиши CAPS LOCK в качестве метаклавиши, поскольку этот выбор не вмешивается в существующие ранее сочетания клавиш.

Что Ваши события касаются этой проблемы? Вы (неанглийский язык) используете английскую клавиатуру (расположение) при кодировании? Разве Вы не становитесь путавшими с такими контекстно-зависимыми раскладками клавиатуры? Или там существует некоторые лучшие практики который ключ использовать в качестве метаклавиши на немецкой или подобной клавиатуре? Или даже некоторые параметры конфигурации?

10
задан Abhranil Das 30 April 2012 в 12:21
поделиться

3 ответа

Да и нет

Первый инициализируется явным образом, а второй инициализируется копированием. Стандарты позволяют заменить второй на первый. На практике изготовленный кодекс является тем же самым.

Вот что происходит в двух словах:

std::string s1("foo");

Строковый конструктор формы

string ( const char * s );

вызывается для s1 .

Во втором случае. Создается временный элемент, для которого вызывается упомянутый конструктор earler. Затем вызывается конструктор копирования. Например:

string s1 = string("foo");

На практике вторая форма оптимизирована, чтобы быть в форме первой. Я не видел компилятор, который не оптимизирует второй случай.

-121--1660220-

Предположим, что у вас есть родитель, а у этого родителя есть коллекция потомков. Теперь гибернация может "лениво-нагружать" нижестоящие элементы, что означает, что она фактически не загружает все нижестоящие элементы при загрузке родительского элемента. Вместо этого они загружаются по запросу. Вы можете либо запросить это явно, либо, что гораздо чаще, спящий режим загружает их автоматически, когда вы пытаетесь получить доступ к потомку.

Ленивая загрузка может значительно повысить производительность, поскольку часто вам не нужны дети, и поэтому они не будут загружены.

Также остерегайтесь n + 1-проблемы. При доступе к коллекции Hibernate загружает не всех потомков. Вместо этого он загружает каждого ребенка по отдельности. При итерации по коллекции это вызывает запрос для каждого нижестоящего элемента. Во избежание этого можно использовать функцию гибернации для одновременной загрузки всех нижестоящих элементов, например, путем вызова parent.getChildren () .size ().

-121--654310-

С помощью небольшой практики вы можете мысленно переключаться между раскладкой клавиатуры США и DE - даже поменявшиеся Y и Z становятся второй природой через некоторое время. Я делал это годами, работая в Германии.

Но даже при раскладке клавиатуры в США все еще есть символы, которые нельзя вводить без Alt. Я лично использую Command в качестве Meta по этой причине, оставляя Alt/Option для встроенных мертвых клавиш OS X, например, "alt-shift-2" = > €, "alt-e" = > é:

  (setq mac-command-modifier 'meta
        mac-option-modifier 'none
        default-input-method "MacOSX")

Другой вариант - переместить "проблемные клавиши"

7
ответ дан 3 December 2019 в 21:59
поделиться

Если бы нам разрешили считать, что вход можно отсортировать в O (N) по radix sort, я бы немного улучшил решение Криса:

  • radix отсортировать вход.
  • Для первого элемента результата линейный поиск вперед до тех пор, пока мы не найдем либо его квадрат (в этом случае стоп на true), либо конец (в этом случае стоп на false), либо значение больше квадрата (в этом случае продолжить поиск квадрата второго и последующих элементов отсортированного массива).

Каждый из двух "указателей" движется строго вперед, поэтому общая сложность равна O (N), предполагая, что сортировка по радиусу равна O (N) и что возведение в квадрат и сравнение равны O (1). Предположительно, тот, кто поставил этот вопрос, намеревался сделать эти предположения.

В ответ на комментарий спрашивающего на другой ответ: если целые числа на входе не ограничены, то я не думаю, что это можно сделать. Просто вычисление квадрата целого числа требует больше линейного времени (по крайней мере: не известен линейный алгоритм умножения), поэтому рассмотрим вход размером n бит, состоящий из двух целых чисел размером n/3 бит и 2 * n/3 бит. Проверка того, является ли один квадратом другого, не может быть выполнена в O (n). Думаю. Я могу ошибаться.

-121--2397731-

Ответ Марка показывает, как выполнить то, что вы хотите, но вы также спросили в более общем плане о том, как выполнить [двустороннее связывание] и что на самом деле это означает.

Одностороннее связывание означает, что цель связывания (например, элемент управления) будет отображать данные из источника привязки (например, бизнес-объект), и будет обновляться по мере изменения бизнес-объекта, но эти изменения в элементе управления не будут распространяться обратно на бизнес-объект. Например, если Person.Name изменяется с "bob" на "kate", объект TextBlock.Text, привязанный к имени, также изменится с "bob" на "kate".

Двусторонняя привязка означает, что не только изменения в бизнес-объекте отражаются в пользовательском интерфейсе, но и изменения, сделанные пользователем в пользовательском интерфейсе, распространяются обратно в бизнес-объект. Теперь, когда пользователь редактирует TextBox.Text, привязанный к имени, скажем, изменяя "kate" на "edmund", WPF также установит свойство Person.Name на "edmund".

Для этого достаточно установить Mode = TwoWay в декларации Binding. Некоторые свойства по умолчанию привязываются двусторонне: TextBox.Text, например, привязывает TwoWay по умолчанию, поэтому код Марка не нуждается в объявлении Mode. Кроме того, как отмечает Марк, WPF по умолчанию распространяет изменения обратно в бизнес-объект, когда элемент управления теряет фокус. Если два элемента пользовательского интерфейса привязаны к одному и тому же свойству, это может означать, что они выглядят несинхронизированными, и в этом случае можно использовать StartSourceTrigger для принудительного распространения WPF при каждом изменении свойства.

MSDN подробно описывает это с помощью нескольких четких диаграмм: см. Обзор привязки данных в SDK WPF.

-121--2748796-

Можно нажать "Command;"чтобы изменить ключ параметра между метаклюком и обычным ключом параметра. Я верю, что вы можете сделать это в середине ключевой последовательности. Когда мне нужно ввести диакритические знаки в Emacs, я просто нажимаю «Command;» вместо того, чтобы использовать различные режимы ввода в Emacs. Доступ к настройке можно также получить по пути Опции - > Опция - > Клавиша опции - Мета.

Другой вариант - повторная привязка ключей в файле .emacs.

Говоря о переключении раскладок клавиатуры, я переключаюсь между Dvorak и US Qwerty достаточно часто, чтобы это меня не беспокоило, и они намного больше отличаются от американских и немецких раскладок. (Дворжак снижает напряжение рук для меня).

2
ответ дан 3 December 2019 в 21:59
поделиться

Aquamacs ( http://aquamacs.org/ ) - это версия Emacs для Mac. У них есть предварительный просмотр (и ночные выпуски), основанный на Cocoa и Emacs 23.1.

Aquamacs имеет возможность повторно привязать команду параметров и метаданные на различных этапах между привязками клавиш Mac и привязками Emacs. Вы должны найти сцену, которая подходит вашим пальцам.

1
ответ дан 3 December 2019 в 21:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: