如果文件位于以 trunk
或 branches/X
结尾的 Subversion 存储库支持的目录中,我该如何创建 trunk
或 X
在模式行中显示为 SVN-trunk
或 SVN-X
类似于 Git 支持的文件中通常显示为Git-master
.
最佳答案
判断SVN状态
我不知道有任何内置方法可以做到这一点,但您可以为此目的编写自己的代码。
基于 vc-svn-repository-name
和 vc-backend
你可以编写一个函数来返回 SVN 的自定义模式文本,并回退到默认值对于所有其他 VC 系统:
(defun lunaryorn-vc-mode-line ()
(let ((backend (vc-backend (buffer-file-name))))
(if (eq backend 'SVN)
(let ((url (vc-svn-repository-hostname (buffer-file-name))))
(cond
((string-match-p "/trunk/" url) "SVN-trunk")
((string-match "/branches/\\([^/]+\\)/" url)
(concat "SVN-" (match-string 1 url)))
(t vc-mode)))
;; Use default mode text for other backends
vc-mode)))
如果当前文件在SVN下,我们会根据您的约定检查其repo URL并编译相应的模式文本。不要被 vc-svn-repository-hostname
的名称混淆,该函数实际上返回给定文件的完整 repo URL。
对于所有其他后端,或者如果 URL 不匹配任何模式,我们将回退到 vc-mode
中的默认 VC 状态文本。
添加到模式行
然后您可以在模式行中使用此函数,方法是将相应的模式行构造添加到 mode-line-format
:
(setq-default mode-line-format
'(…
(vc-mode (" " (:eval (lunaryorn-vc-mode-line))))
…))
因为 mode-line-format
是缓冲区局部的,我们使用 setq-default
来改变它的全局值。我们新的模式行构造检查 vc-mode
是否处于事件状态,即文件是否处于版本控制之下,并评估我们在这种情况下的功能,以获得我们的自定义状态文本。参见 Mode Line Data有关模式行构造的更多信息。
省略号代表模式行的其他内容,您也可以根据自己的喜好进行自定义。不过,我建议您只需复制 mode-line-format
的默认值,并将 (vc-mode vc-mode)
替换为我们的新结构。这将简单地用我们的自定义状态文本替换旧的 VC 信息,并让其他一切保持原样。
关于git - Mode-Line 中的 Subversion 分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25316133/