LINUX.ORG.RU

emacsclient русская раскладка

 


3

5

Использую следующий костыль для работы хоткеев в русской раскладке, нашёл когда-то на просторах LOR'а

(defun reverse-input-method (input-method)
  "Build the reverse mapping of single letters from INPUT-METHOD."
  (interactive
   (list (read-input-method-name "Use input method (default current): ")))
  (if (and input-method (symbolp input-method))
      (setq input-method (symbol-name input-method)))
  (let ((current current-input-method)
	(modifiers '(nil (control) (meta) (control meta))))
    (when input-method
      (activate-input-method input-method))
    (when (and current-input-method quail-keyboard-layout)
      (dolist (map (cdr (quail-map)))
	(let* ((to (car map))
	       (from (quail-get-translation
		      (cadr map) (char-to-string to) 1)))
	  (when (and (characterp from) (characterp to))
	    (dolist (mod modifiers)
	      (define-key local-function-key-map
		(vector (append mod (list from)))
		(vector (append mod (list to)))))))))
    (when input-method
      (activate-input-method current))))

(reverse-input-method 'russian-computer)
Но при запуске emacs server + emacsclient он не считывается, приходится принудительно выполнять eval-buffer в .emacs, после этого всё снова работает. Подобная проблема встречается только в gtk-версии, в терминале (в обычном и эмуляторах) всё в порядке.

https://github.com/liaonau/emxkb у меня вот такой костыль для переключения раскладки одним и тем же хоткеем либо через xkb, либо внутренней эмаксовой, если клиент в фокусе — emacs. По моему довольно удобно.

liaonau ()

Пардон, а как вы этим пользуетесь? Это же, как я понял, в точности то же, что в Виме зовется langmap’ом. То есть для пар раскладок, где есть общие символы на разных клавишах (QWERTY + обе русские среди них), это не подходит — ломает сочетания с такими символами при включенной QWERTY.

Вам они не нужны, что ли? Или вам латиница не нужна, вы только по-русски пишете?

И как этот reverse-input-method отключить, кстати?

Zmicier ★★★★★ ()
Ответ на: комментарий от Zmicier

общие символы на разных клавишах

Такие случаи возможны, но на практике я их не особо часто встречаю. Данный костыль не идеален, но меня пока устраивает.

вы только по-русски пишете?

Заметки пишу в org-mode преимущественно на русском, программирование - english only.

И как этот reverse-input-method отключить, кстати?

Я не гуру и знаю только такой способ - закомментировать функцию и перезапустить emacs.

Karthago ★★ ()
Ответ на: комментарий от liaonau

Решил попробовать твой вариант, собрал, но возникла проблема при запуске бинарника:

./emxbd emacs
отрабатывает и тут же заканчивает работу. Эффекта после это нет. В общем, я не понял, как воспользоваться этим костылём.

Karthago ★★ ()
Ответ на: комментарий от Karthago

Это нецикличное переключение раскладок. emxkb 0 включает английскую, emxkb 1 — русскую раскладку, просто вызывая XkbLockGroup. Вешается на хоткеи. У меня super+space, hyper+space. Но если в фокусе клиент emacs, то группа устанавливается в 0 и клиенту посылается нажатие клавиши (в принципе любой, можно поменять в коде).

В .emacs

(global-set-key (kbd "s-SPC") (lambda () (interactive) (deactivate-input-method)))
(global-set-key (kbd "H-SPC") (lambda () (interactive) (set-input-method 'russian-computer)))
Так я просто переключаю раскладку одними и теми же хоткеями везде не задумываясь.

liaonau ()

Попробуй добавить его в ~/.emacs.d/init.el. У меня таким образом работает.

Deleted ()
Ответ на: комментарий от liaonau

Я юзаю Caps как переключатель и уже привык к циклическому варианту. Плюс, ЕМНИП, Caps вроде не может использоваться в хоткеях.

Karthago ★★ ()
Ответ на: комментарий от Karthago

На цикличную можно переписать, конечно, но мне лень. Суть не в (а)цикличности, а в проверке класса клиента в фокусе и использовании родной переключалки эмакса по тому же хоткею, что и в целом в иксах.

Caps вроде не может использоваться в хоткеях.

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

привык к циклическому варианту

немного не по теме, но ацикличное переключение рулит, после него от цикличного плюешся просто. даже индикатор раскладки не нужен. а уж если языков более двух…

liaonau ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.