Emacs повторно связывает Ci, сохраняя привязки <tab>
Я использую Aquamacs. Можно различить <tab>, фактическая клавиша табуляции, и TAB, который приходит от набора текста C-i, Я хочу связать C-i в 'next-line постоянно. Это работает для этого:
(global-set-key (kbd "TAB") 'next-line)
Но тогда карты режима переопределяют TAB с автоматическим завершением поведения или чем-то еще, и я теряю свою функциональность следующей строки. Я мог бы поместить свою привязку в overriding-terminal-local-map, но я бы предпочел переназначить карты режимов <tab> так что я все еще могу использовать функцию, которую режим назначает вкладке.
Я могу вручную перепривязать вкладку для каждого режима, который я использую, но я надеюсь, что есть простой способ перенаправить все TAB сопоставления с вкладкой без ошибок C-i,
1 ответ
Это немного сложно, но возможно. То, что я делаю для этой конкретной ситуации, это создание второстепенного режима, а именно gvol-mode, а затем в нем привязать Ci к previous-line (или что хочешь). Затем я связываю 
(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 так что, когда я делаю поиск ключей, мой второстепенный режим не будет в игре. Таким образом, он найдет привязку для this-command в indent-for-tab-command, Я также заставляю его выглядеть так, как будто я набрал Ci, что позволяет ему работать с yasnippet-mode IIRC.