Подтвердить что ты не робот

Как отключить подпиксельный знак подчеркивания (_) в 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.

Вещи, которые я еще не пробовал:

  • Я не пробовал ничего узнать о архитектуре метода ввода или его исходном коде. Из моего краткого описания кода и методов. это не похоже на то, что я мог бы быстро перепрыгнуть.
4b9b3361

Ответ 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 или индивидуальным.