3

Я использую Aquamacs. Он может различать <tab> , фактическую клавишу табуляции и TAB , который происходит от ввода C-i . Я хочу навсегда связать C-i со 'next-line . Это работает для этого:

(global-set-key (kbd "TAB") 'next-line)

Но тогда карты режима переопределяют TAB с автоматическим завершением поведения или чем-то еще, и я теряю свою функциональность следующей строки. Я мог бы поместить свою привязку в overriding-terminal-local-map, но я бы предпочел карты режимов переназначить <tab> чтобы я мог по-прежнему использовать функцию, которую режим назначает tab.

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

1 ответ1

2

Это немного сложно, но возможно. Что я делаю для этой конкретной ситуации, так это создаю вспомогательный режим, а именно gvol-mode , и затем в нем связываю Ci с previous-line (или с чем угодно). Затем я связываю <tab> с функцией ниже.

(defun gvol-indent-for-tab-command ()
  "This is to fix `indent-for-tab-command' for `gvol-mode'.
It runs [tab] or C-i with `gvol-mode' nil because `gvol-mode'
binds C-i to a different command.  Ideally this should take into
account window system so that it can DTRT in a terminal (whatever
the right thing is)."
  (interactive)
  (let* ((gvol-mode nil)
         (command (or (key-binding [tab])
                      (key-binding "\C-i"))))
    ;; This is to satisfy `python-indent-line' which checks
    ;; `this-command' to cycle
    (setq this-command 'indent-for-tab-command)
    ;; Make people think this was called with C-i.  This allows
    ;; `self-insert-command' to work
    (setq last-command-event 9)
    (call-interactively command)))

Чтобы объяснить это немного, я позволю привязать gvol-mode к nil чтобы при поиске ключа мой второстепенный режим не работал . Таким образом, он найдет привязку для <tab> или Ci, которая была бы на месте, если бы второстепенный режим не был включен. Затем, чтобы некоторые функции работали, я должен установить для this-command indent-for-tab-command . Я также заставляю его выглядеть так, как будто я набрал Ci, что позволяет ему работать с yasnippet-mode IIRC в режиме yasnippet.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .