自动关闭emacs shell模式tab-completion缓冲区?
这让我疯狂了很久,我想知道是否有办法解决它?希望我可以很好的形容情况.
为了简单起见,说我有以下目录结构:?jer / dirA和?jer / dirB 在emacs内的shell中,我从我的顶级目录(?jer)开始,键入’cd dir’,然后点击tab. 我的窗口分为2,我有一个*达成*缓冲区.这很酷;我看到我的选择是’dirA’和’dirB’,我键入一个’A'(所以我的完整命令是’cd dirA’),然后按回车键,但*达成*缓冲区保持打开,我必须手动关闭它(通常使用’Cx 1′,因为我在我要保存的shell缓冲区中,但是如果我已经有一个分割窗口,这更令人讨厌,因为* Completions *缓冲区取代了另一个已经在那里,我必须切换到那个,并按Cx k手动杀死它). 所以我的问题是:一旦完成我的命令,有没有办法使* Completions *自动死机?在上面的例子中,一键输入’cd DirA’后,我打算输入缓冲区即可. 谢谢,我希望这是有道理的.注意,我不认为这是Is there any way to automatically close filename completetion buffers in Emacs?的重复,因为这是关于使用find-file(在这种情况下* * Completions *缓冲区关闭.
我想这正是你想要的.
每次输入命令时都会执行delete-completion-window-buffer功能.它找到所有当前窗口,并从中获取缓冲区.检查缓冲区的名称是否“* Completions *”,缓冲区让你生气,如果是这样杀死缓冲区并删除相应的窗口. 最后,它将输出字符串传递给您的下一个钩子comint-preoutput-filter-functions. 为什么有输出参数?请参阅comint-preoutput-filter-functions的文档.最好在那里解释 (defun delete-completion-window-buffer (&optional output) (interactive) (dolist (win (window-list)) (when (string= (buffer-name (window-buffer win)) "*Completions*") (delete-window win) (kill-buffer "*Completions*"))) output) (add-hook 'comint-preoutput-filter-functions 'delete-completion-window-buffer) 但是,实际上,完成缓冲区不会给我很多困扰.令人困扰的是,这个命令是“清除”的 (defun clear-shell () (interactive) (let ((comint-buffer-maximum-size 0)) (comint-truncate-buffer))) (define-key shell-mode-map (kbd "C-l") 'clear-shell) 我绑定到Ctrl-L,正常的终端绑定.尼斯代码希望你喜欢! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |