Как отключить подпиксельный знак подчеркивания (_) в Emacs, метод ввода TeX
В Emacs, редактируя текстовый документ заметок для себя (документ .txt
, а не документ .tex
), я использую M-x set-input-method
Ret TeX
, чтобы получить легкий доступ к различным символам Юникода. Так, например, ввод \ t o space вызывает "→" для ввода в текст, а ввод x ^ 2 вызывает "x 2", поскольку используемый шрифт поддерживает кодировки Unicode 0x2192
и 0x00B2
соответственно.
Один из специально обработанных символов в методе - для символа подчеркивания _. Тем не менее, шрифт, который я использую для Emacs, по-видимому, не поддерживает кодовые точки для различных символов подстрочного индекса, например, индексный индекс (код 0x2080), и поэтому, когда я набираю _ 0, я получаю что-то отображаемое как тонкая пустота в моем выходе. Я бы предпочел просто иметь два символа _0
в этом случае.
Я могу получить _0
неудобной последовательностью нажатия клавиш _ space del 0, так как нажатие клавиши space в середине последовательности заставляет Emacs прерывать входной метод TeX. Но это неудобно.
Итак, мой вопрос: как я могу локально настроить Emacs, чтобы не переназначить ключ _ вообще, когда я нахожусь в методе ввода TeX? Или как я могу создать модифицированный клон (или расширение и т.д.) Метода ввода TeX, который не выделяет подчеркивание из его магии?
Вещи, которые я пробовал до сих пор:
- Я уже сделал M-x
describe-key
на _; но он просто привязан к self-insert-command
, как и многие другие текстовые символы. Я видел там post-self-insert-hook
, но я не исследовал попытку использовать это, чтобы подорвать метод ввода TeX.
Вещи, которые я еще не пробовал:
- Я не пробовал ничего узнать о архитектуре метода ввода или его исходном коде. Из моего краткого описания кода и методов. это не похоже на то, что я мог бы быстро перепрыгнуть.
Ответы
Ответ 1
Итак, вот решение, которое я только что нашел: сделайте персонализированную копию метода ввода TeX, удалив все нежелательные записи. Затем при использовании M-x set-input-method
выберите персонализированную версию вместо TeX
.
Я бы попробовал это раньше, но встроенная документация для set-input-mode
и его ilk не предоставляет достаточных указаний фактическому источнику для методов ввода для меня, чтобы найти его. Это было сделано только после выполнения другого поиска на SO и нахождения этого: Emacs: не удалось активировать метод ввода, что я смог получить достаточно информации, чтобы сделать это самостоятельно.
Подробнее:
-
В Emacs откройте /usr/share/emacs/22.1/leim/leim-list.el
и найдите запись для метода ввода, который вы хотите настроить. Запись будет выглядеть примерно так:
(register-input-method
"TeX" "UTF-8" 'quail-use-package
"\\" "LaTeX-like input method for many characters."
"quail/latin-ltx")
-
Обратите внимание на префикс имени файла, указанный в последнем элементе в приведенной выше форме. Найдите соответствующий исходный файл Elisp; в этом случае это относительный путь к файлу quail/latin-ltx.el[.gz]
. Откройте этот файл в Emacs и проверьте его; он должен иметь записи для переименований метода, как желаемых, так и нежелательных.
-
Создайте локальную копию этого исходного файла Elisp среди ваших других настроек Emacs. Откройте эту локальную копию в Emacs.
-
В вашей локальной копии найдите (quail-define-package ...)
форму в файле и измените имя пакета; Я использовал FSK-TeX
как мое новое имя, например:
(quail-define-package
"FSK-TeX" "UTF-8" "\\" t ;; <-- The first argument here is the important bit to change.
"LaTeX-like input method for many characters but not as many as you might think.
...)
-
Пройдите через локальную копию и удалите все S-выражения для сопоставлений, которые вам не нужны.
-
В конфигурационном файле .emacs зарегистрируйте свой настраиваемый метод ввода, используя форму, аналогичную той, которую вы видели при просмотре leim-list.el
на шаге 1:
(register-input-method
"FSK-TeX" "UTF-8" 'quail-use-package
"\\" "FSK-customized LaTeX-like input method for many characters."
"~/ConfigFiles/Elisp/leim/latin-ltx")
-
Перезапустите Emacs и протестируйте новый метод ввода; в моем случае, выполнив M-x set-input-method FSK-TeX
, набрав a _ 0 и подтвердив, что a_0
отображается в буфере.
Итак, есть хотя бы один ответ, который менее неудобен, как только вы его установили, чем некоторые из обходных решений, перечисленных в вопросе (и, как выясняется, также официально задокументированы в руководстве Emacs 22 как способ отрезать обработка входного метода).
Тем не менее, я не очень доволен этим решением, так как я предпочел бы наследовать будущие изменения в TeX-режиме и просто удалил бы .emacs
нежелательные записи при запуске.
Итак, я подожду, чтобы узнать, найдет ли кто-нибудь другой лучший ответ, чем это.
Ответ 2
Я не тестировал это сам, но это, похоже, точная вещь, которую вы ищете:
"Как отключить нижний индекс подчеркивания в режиме TeX в emacs" - источник
В этом blogpot приводятся два решения:
-
Автор blogpost: (setq font-lock-maximum-decoration nil)
(от максимума)
-
Упоминается как комментарий:
(eval-after-load "tex-mode" '(fset 'tex-font-lock-subscript 'ignore))
Ответ 3
evil плагин для модного привязки vim-типа позволяет сопоставлять два последующих нажатия клавиши _
с вставкой одиночный символ _
:
(set-input-method 'TeX)
(define-key evil-insert-state-local-map (kbd "_ _")
(lambda () (interactive) (insert "_")))
(define-key evil-insert-state-local-map (kbd "^ ^")
(lambda () (interactive) (insert "^")))
При нажатии _
и затем 1
мы получаем ₁
, как и раньше, но
когда _
и затем _
нажата, мы получаем _
.
Аналогично для ^
.
Ответ 4
Как уже объяснялось в ответе pnkfelix, похоже, нам нужно сделать персонализированную копию метода ввода TeX. Но здесь есть более легкий способ сделать это без каких-либо настроек файла. Просто поместите в ваш .emacs
:
(eval-after-load "quail/latin-ltx"
'(let ((pkg (copy-tree (quail-package "TeX"))))
(setcar pkg "MyTeX")
(assq-delete-all ?_ (nth 2 pkg))
(quail-add-package pkg)))
(set-input-method 'TeX)
(register-input-method "MyTeX" "UTF-8" 'quail-use-package "\\")
(set-input-method 'MyTeX)
Важной частью является assq-delete-all
в середине, которая удаляет все ярлыки, начинающиеся с _
. Это что-то вроде взлома, но, похоже, работает. Поскольку меня также раздражают ярлыки, начинающиеся с -
и ^
, я также использую следующие две строки, чтобы отключить их:
(assq-delete-all ?- (nth 2 pkg))
(assq-delete-all ?^ (nth 2 pkg))
Обратите внимание, что впоследствии вы можете в любое время Mx set-input-method
и указать TeX
или MyTeX
для переключения между нетронутым методом ввода TeX или индивидуальным.