在ps-left-header中的Git分支名称

3

我想在通过postscrpt打印时,在标题中显示我当前所在的Git分支,但我无法找到如何实现它的方法。

它出现在模式行中,似乎是(vc-mode vc-mode),但将其添加到ps-left-header中不起作用。

有人能帮忙吗?


请问您能否澄清一下您的问题?您所说的模式行是指什么?听起来像是在谈论emacs中的某些内容。 - UpAndAdam
是的,我指的是 Emacs。我以为我在发布关于 Emacs 的特定主题板块上,抱歉。 - jimzat
1
在你的问题中使用像 gitps 这样的标签会吸引非 Emacs 的受众,因此人们会对你的问题进行负面评价并可能投票关闭你的问题。 - lawlist
vc-hooks.el 库中的 vc-mode-line 函数看起来很有趣,特别是其中的 (setq vc-mode (concat ... 部分 -- 或许这可以引导你朝正确的方向前进 -- 也就是说,检查该变量的值并查看它是否符合你想要的。 - lawlist
你需要编辑你的问题;人们不应该需要阅读标签和评论才能理解你在谈论emacs。 - UpAndAdam
1个回答

2

我认为你已经接近所需的内容了。如果在ps-left-header列表中放置一个符号,那么该符号将被调用。虽然我在文档中找不到这个信息,但它似乎会以当前打印的缓冲区作为当前缓冲区来调用。

现在,变量vc-mode是一个缓冲区局部变量,由处理模式行的代码设置为有用的值。实际上,它通常看起来像" Git-master"(带有前导空格),因此您可能需要对其进行一些转换。此外,它带有许多我们不需要的文本属性。假设您编写了一个更有用的版本:

(defun vc-mode-as-string () (substring-no-properties vc-mode))

我认为您可以将符号vc-mode-as-string添加到ps-left-header中,以获得您想要的结果。也许vc-mode-as-string还应该检查vc-mode是否为字符串,否则返回""。(我刚刚检查了一下,变量总是绑定的,但没有版本控制时为nil)。
在编写此内容时进行“快速且肮脏”的检查,我在IELM中使用了以下内容:
ELISP> (let ((ps-left-header (cons 'vc-mode-as-string ps-left-header)))
         (with-current-buffer "app.cc"
           (ps-spool-buffer-with-faces)))
"Formatting...done"

("app.cc"是我目前在Emacs中版本控制的缓冲区。)
希望这些提示足以帮助您构建所需的内容。

谢谢@Rupert,我已将以下内容添加到我的.emacs文件中,现在我的Postscript头部中有了Git信息:;Append the Git branchname to the postscript header (defun vc-mode-as-string () (substring-no-properties vc-mode)) (setq ps-left-header (append ps-left-header '(vc-mode-as-string))) - jimzat
我不得不更改 (defun vc-mode-as-string () (if vc-mode (substring-no-properties vc-mode) " ")) - jimzat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接