如,我想在.el下面利用header line 显示路径,但是在scratch buffer下面不显示怎么做?
我使用 setq-default header-line-format
要么都显示要不都不显示。
使用 setq header-line-format
的话只有当前buffer显示是对的,但是是手动的。怎么动态都判断当前buffer是否需要显示而控制这个变量?
如,我想在.el下面利用header line 显示路径,但是在scratch buffer下面不显示怎么做?
我使用 setq-default header-line-format
要么都显示要不都不显示。
使用 setq header-line-format
的话只有当前buffer显示是对的,但是是手动的。怎么动态都判断当前buffer是否需要显示而控制这个变量?
我使用了这个hook,(add-hook 'buffer-list-update-hook #'header--header-line-active)
不知道对不对?可以达到效果。
一个思路
(defun foo ()
(when buffer-file-name
(setq header-line-format "%f")))
(add-hook 'emacs-lisp-mode-hook #'foo)
这个覆盖面积有点大了。是我没说清楚。我是需要有一个过滤器来根据规则显示。
有可能要显示的是1.el,2.md,但是2.el,1.md就不显示。这个过滤器是个自定义函数。所以要对每个buffer做下判断才行
再请教个题外话。hook有执行顺序么?有没有办法控制在同一个hook下的函数执行顺序?
看你想从哪里控制,如果有个别文件需要的话,可以用 file local variable;
;; -*- eval: (setq header-line-format "%f"); -*-
还可以写个 Global 或者 Local Minor Mode 控制,在里面做控制,注意 Global Minor Mode 杀伤力大。
EDIT: Global minor mode 好像不行,试试 find-file-hook。
有,见 add-hook 的参数。
我有根据不同的文件来显示不同的header line,文件都是同一个mode,就在hook里面写if语句判断文件后缀名做不同操作,比如我org文件的header-line默认显示行号,文件名,完整路径。但后缀名是data.org的文件又对header-line做了其它处理
(add-hook 'org-mode-hook (lambda ()
(cond
;;如果文件最后8个字符是data.org
((equal (substring buffer-file-name -8) "data.org")
(progn
(setq header-line-format '(" %l " my-data-org-title " " default-directory ))
))
)))
我data.org的文件内容是保存在数据库里,浏览器中查看的,生成data.org是为了方便编辑,于是定义了一个变量在header-line标注当前文件状态是已连接数据库在同步中,还是已断开连接
可以参考awesome-tab代码