Emacs повторно связывает Ci, сохраняя <tab> переплеты </tab>

726
mckeed

Я использую 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.

3

1 ответ на вопрос

2
Ivan Andrus

Это немного сложно, но возможно. Что я могу сделать для этой конкретной ситуации является создание минорного режима, а именно gvol-mode, а затем в ней связываются C-iс 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>или C-iэто было бы на месте, если бы второстепенный режим не был включен. Затем, чтобы некоторые функции работали, я должен установить this-commandна indent-for-tab-command. Я также заставляю его выглядеть так, как будто я напечатал, C-iчто позволяет работать с yasnippet-modeIIRC.

Это сработало отлично. Спасибо! Особенно приятно иметь эти исправления в крайнем случае, я уверен, что вы избавили меня от многих разочарований. mckeed 11 лет назад 0
Мне также удалось использовать этот метод для [возврата] и См. Очень полезно. mckeed 11 лет назад 1
Пожалуйста, и да, было много разочарований. `` :-) Ivan Andrus 11 лет назад 0

Похожие вопросы