Как переключать раскладки клавиатуры для разных языков?

11

Вопрос: как переключаться между методами ввода для разных языков при использовании нестандартной раскладки клавиатуры?

Я должен редактировать текст на двух разных языках. Я хотел бы иметь возможность использовать свои сочетания клавиш на двух языках, кроме, конечно, при вставке текста в буфер. Похоже, я должен быть в состоянии toggle-input-method( C-\) и выбрать альтернативный язык.

Пока почти так хорошо.

Вот в чем проблема: я использую английскую раскладку Dvorak, которую я установил на уровне ОС (то есть, с помощью setxkbmap). Когда я toggle-input-method, текст, который я вставляю, будет правильным, если у меня будет раскладка QWERTY (стандарт в США), но он будет выдумкой, потому что я на Дворжаке. (FWIW, когда я переключаю свой макет на стандартный США, он работает нормально.)

Итак: как мне сообщить Emacs, что я использую Dvorak, чтобы toggle-input-methodи друзья перевели мои нажатия клавиш на правильные символы на другом языке?

Дэн
источник
У меня работают шведский-постфикс и другие методы композиционного ввода, с какими методами у вас возникают проблемы?
Шапр
@shapr: я переключаюсь с английского на арабский. Кажется, проблема в том, что я использую макет Dvorak на уровне ОС, так как переключение работает нормально, когда я использую стандартную компоновку США на уровне ОС.
Дан

Ответы:

7

Существует способ изменить определение физического макета для метода ввода путем установки quail-keyboard-layout-type. Но похоже, что Дворжака нет среди возможных кандидатов quail-keyboard-layout-alistв моем Emacs 24.4.

Вы можете определить новую физическую раскладку клавиатуры, взглянув на определение quail-keyboard-layout-alistin, quail.elили создать новый метод ввода, определив соответствующие арабские клавиши для раскладки Dvorak.

Я не опытный в первом, но я могу засвидетельствовать второй подход легче, чем вы думаете. (Я должен был создать метод ввода Старотурецкого поверх фарси.) Копия arabic.el(который находится в моей системе Debian в /usr/share/emacs/24.4/lisp/leim/quail/arabic.el.gz) в ваш дом site-lispи менять ключи в соответствии с вашими предпочтениями. Также не забудьте изменить имена методов ввода и т. Д. Вы только что создали новый дворак-арабский метод ввода.

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

Эмре Сахин
источник
Спасибо! Это поставило меня на правильный путь. Я выложу дополнительный ответ, в котором изложено, как я попал туда по ...-alistверсии.
Дан
Пожалуйста. Вы можете отправить свое обновление в quail-. *-alistразработку Emacs. Я уверен, что есть другие пользователи Dvorak, которые извлекут выгоду из этого.
Эмре Сахин
7

@EmreSahin поставил меня на правильный путь, чтобы ответить на этот вопрос, поэтому я выкладываю немного деталей на случай, если кто-нибудь еще когда-нибудь столкнется с такой проблемой, как эта.

Как указывает Эмре, нам нужно добавить макет Dvorak quail-keyboard-layout-alist. Оказывается, quailбиблиотека недостаточно документирована в руководстве , в котором две связанные функции упоминаются при передаче на одном узле.

Однако, посмотрев эту ветку справки и, особенно, страницу EmacsWiki на русском языке с Дворжаком (от которого этот ответ извлекает информацию), я думаю, я понял это.

Строка документации для переменной quail-keyboard-layoutописывает, что нам нужно вставить quail-keyboard-layout-alist. Это длинная строка, соответствующая 6 строкам по 15 клавиш в каждой. Каждая строка соответствует несмещенным и сдвинутым значениям каждой клавиши, всего 30 символов в строке. Я менее уверен в следующем пункте, но, похоже, для того, что я назову «полустандартными» клавиатурами с 4 рядами клавиш, первая и шестая строки должны иметь по 30 пробелов.

Большое раскрытие:

(require 'quail)

(add-to-list 'quail-keyboard-layout-alist
             `("dvorak" . ,(concat "                              "
                                   "  1!2@3#4$5%6^7&8*9(0)[{]}`~  "
                                   "  '\",<.>pPyYfFgGcCrRlL/?=+    "
                                   "  aAoOeEuUiIdDhHtTnNsS-_\\|    "
                                   "  ;:qQjJkKxXbBmMwWvVzZ        "
                                   "                              ")))

(quail-set-keyboard-layout "dvorak")
Дэн
источник