Мне также нравится циклическое и переключающее поведение iflipb, оно очень похоже на поведение Windows Alt-Tab.Однако, как указывалось ранее, Emacs не позволяет легко заметить, когда вы отпускаете управляющую клавишу.Это делает переключение между двумя верхними буферами несовершенным: если вы нажмете C-Tab (и отпустите), а затем C-Tab (и отпустите), вы не переключитесь между двумя верхними.Вместо этого iflipb просто идет дальше по списку буферов.Но если вы выполняете любую другую команду Emacs между двумя событиями C-Tab, тогда iflipb распознает, что он запускается заново в ходе буфера, и переключается.
В Windows AutoHotKey может прийти на помощьи отправьте Emacs нажатие клавиши, когда вы отпустите клавишу управления.Вот мой сценарий:
#if WinActive("ahk_class Emacs")
^Tab::
Send {Blind}^{Tab}
SetTimer, WaitForCtrlUp, 10
return
WaitForCtrlUp:
if(!GetKeyState("LControl", "P") and !GetKeyState("RControl","P"))
{
if WinActive("ahk_class Emacs")
Send ^c:
SetTimer, WaitForCtrlUp, Off
}
return
Всякий раз, когда в emacs нажимается C-Tab, сценарий начинает опрашивать состояние управляющей клавиши.Когда ключ отпускается, он отправляет Emacs последовательность клавиш C-c :
.У меня есть этот ключ, связанный с «нулевой» командой, которой достаточно, чтобы iflipb заметил, что происходит.
Вот соответствующий отрывок .emacs:
; see http://www.emacswiki.org/emacs/iflipb
(require 'iflipb)
(global-set-key (kbd "<C-tab>") 'iflipb-next-buffer)
(global-set-key
(if (featurep 'xemacs) (kbd "<C-iso-left-tab>") (kbd "<C-S-tab>"))
'iflipb-previous-buffer)
(defun null-command ()
"Do nothing (other than standard command processing such as remembering this was the last command executed)"
(interactive))
(global-set-key "\C-c:" 'null-command)
Итак, это отчасти хакерство, но оно работает.Спасибо постерам на http://www.autohotkey.com/board/topic/72433-controltab/,, которые пытались решить подобную проблему.