我目前使用的终端终结者, 和我有一个bash函数 set_title() { printf '\e]2;%s\a' "$*"; }
至极允许我设定的终止窗口标题执行shell命令
所以,我想知道,如果它是可能执行这个特定的shell命令(像这样): set_title ##filename
在emacs中每次打开(或重新打开)上述文件?
(顺便说一句英语不是我的母语,请放纵!)
我目前使用的终端终结者, 和我有一个bash函数 set_title() { printf '\e]2;%s\a' "$*"; }
至极允许我设定的终止窗口标题执行shell命令
所以,我想知道,如果它是可能执行这个特定的shell命令(像这样): set_title ##filename
在emacs中每次打开(或重新打开)上述文件?
(顺便说一句英语不是我的母语,请放纵!)
如果你的意思你在Terminator里面运行非GUI Emacs,你想让Terminator的标题反映Emacs中的当前文件,那么bash位于它们之间对你来说是没有用的:Emacs在这里控制着。
但是你可以定义一个elisp的功能,将做同样的工作,为您的SET_TITLE:
(defun my-set-title (title)
(send-string-to-terminal (format "\e]2;%s\a" title)))
然后你可以通过查找文件钩使用它:
(add-hook 'find-file-hook (lambda() (my-set-title buffer-file-name)))
注意这会将终端的标题设置为Emacs访问的最后一个文件,因此如果通过C-x C-b
切换回到先前的文件缓冲区,标题将不会更新以反映当前缓冲区的文件名。如果你想这样做,你需要更多的东西:
(defvar my-last-file nil)
(defun my-keep-file-title()
(when (and buffer-file-name
(not (equal buffer-file-name my-last-file)))
(setq my-last-file buffer-file-name)
(my-set-title buffer-file-name)))
(add-hook 'post-command-hook #'my-keep-file-title)
至于建议由@丹,你可以做
(add-hook find-file-hook
(lambda()
(when (string= buffer-file-name "my-file")
(shell-command "printf ...."))))
打电话printf
当您打开"my-file"
。
但是,如果你想要的是设置帧标题(Emacs的呼吁“框架”经理所说的“窗口”什么窗口), 您应该设置frame-title-format
,如:
(setq frame-title-format
'(buffer-file-name "%b - %f" ; File buffer
(dired-directory dired-directory ; Dired buffer
(revert-buffer-function "%b" ; Buffer Menu
("%b - Dir: " default-directory)))) ; Plain buffer
icon-title-format "%b")
你可以使用['shell-command'](http://www.emacswiki.org/emacs/ExecuteExternalCommand)和['find-file-hook'](http://www.gnu.org/software/emacs/manual/html_node/elisp/Visiting-Functions.html#Visiting-Functions)来实现此功能。 – Dan 2014-09-19 11:28:57