Emacs EIN优化需求:让Modeline仅显示文件名而非完整路径
解决EIN笔记本Modeline显示过长路径的问题
针对EIN打开笔记本时Modeline显示完整路径导致分屏不便的问题,你可以尝试以下几种针对性的配置方案(这些配置需要添加到你的init.el文件中):
方案一:仅显示笔记本名称(最简方案)
EIN提供了ein:notebook-name函数直接获取笔记本的名称,我们可以通过模式钩子局部修改Modeline格式,只保留必要信息:
(add-hook 'ein:notebook-mode-hook (lambda () (setq-local mode-line-format (list '(:eval (ein:notebook-name)) ; 仅显示笔记本名称 " %* " ; 显示缓冲区状态(只读/修改等) mode-name ; 显示EIN模式名称 " %l:%c" ; 显示当前行列号 ))))
方案二:显示简化后的路径
如果需要保留部分路径信息但避免过长,可以使用f-short函数(需先通过M-x package-install RET f RET安装f.el库)来缩短路径:
(add-hook 'ein:notebook-mode-hook (lambda () (setq-local mode-line-format (list '(:eval (f-short (buffer-file-name))) ; 简化后的路径+文件名 " %* " mode-name " %l:%c" ))))
若不想额外安装库,也可以自定义一个简化路径的函数,比如只保留最后两级目录和文件名:
(defun my-simplify-path (path) "保留路径的最后两级目录和文件名" (let* ((components (split-string path "/")) (len (length components))) (if (<= len 3) path (string-join (subseq components (- len 3)) "/")))) (add-hook 'ein:notebook-mode-hook (lambda () (setq-local mode-line-format (list '(:eval (my-simplify-path (buffer-file-name))) " %* " mode-name " %l:%c" ))))
方案三:替换默认的缓冲区识别组件
Modeline中显示缓冲区信息的部分由mode-line-buffer-identification控制,我们可以针对EIN模式局部替换这个变量:
(add-hook 'ein:notebook-mode-hook (lambda () (setq-local mode-line-buffer-identification '(:eval (concat "[" (ein:notebook-name) "]")))))
这种方式会保留你全局Modeline的其他设置,仅替换缓冲区名称部分。
生效方法
修改完init.el后,要么重启Emacs,要么选中修改的代码区域,按下M-x eval-region执行代码,之后打开EIN笔记本即可看到效果。
内容的提问来源于stack exchange,提问作者d m
相关产品推荐
相关产品推荐

