git - Mode-Line 中的 Subversion 分支

标签 git svn emacs version-control modeline

如果文件位于以 trunkbranches/X 结尾的 Subversion 存储库支持的目录中,我该如何创建 trunkX 在模式行中显示为 SVN-trunkSVN-X 类似于 Git 支持的文件中通常显示为Git-master.

最佳答案

判断SVN状态

我不知道有任何内置方法可以做到这一点,但您可以为此目的编写自己的代码。

基于 vc-svn-repository-namevc-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/

相关文章:

git - 同步多个远程git仓库

git - 当我使用参数化分支 : fatal: Couldn't find remote ref refs/heads/${BUILD_BRANCH} 时,Jenkins 无法构建

git - 如何找到提交的相应树哈希和 blob 哈希?

Git 归咎于暂存文件

团队基础服务器 2012 中的 SVN 外部替代方案

python - 在 org 模式下调试 PYTHON 代码块 babel

emacs - SLIME 和 SWANK 入门 : Lisp connection closed unexpectedly: connection broken by remote peer

svn - 说明 SVN 中发生了多少代码重构的最佳方式

svn - 为 Web 开发实现版本控制

带有 slime-fancy 的 clojure 和 common lisp 的 emacs 设置 (slime-autodoc)