Isso é um pouco complicado, mas é possível. O que eu faço para essa situação exata é criar um modo menor, a saber gvol-mode
, e então ligar C-i para previous-line
(ou o que você quiser). Então eu ligo
(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)))
Para explicar um pouco, eu deixo o bind gvol-mode
para nil
para que quando eu fizer a pesquisa de chave, meu modo menor não esteja em jogo. Assim, ele encontrará a ligação para < tab > ou C-i que estaria no lugar se o modo secundário não estivesse ativado. Então, para que algumas funções funcionem, eu tenho que definir this-command
para indent-for-tab-command
. Eu também faço parecer que eu digitei C-i que permite trabalhar com yasnippet-mode
IIRC.