如何使用彩色多线提示获取dirtrack模式

时间:2013-04-28 03:30:04

标签: emacs elisp

我对我的Emacs shell使用以下提示:

PS1='\n\[\e[33m\]\w\033[36m\]$(parse_git_branch)\[\033[00m\]\n$ '

输出如下:

Emacs prompt

我尝试使用regexp "(^[^\\(]*)"来匹配路径并将其设置在dirtrack-list中:

(setq-default dirtrack-list '("(^[^\\(]*)" 1 1))

但是由于颜色的原因,shell永远不会匹配(所以它无法跟踪我的cwd)。是否可以扩展我的正则表达式以包含颜色?


包括@ tripleee的正则表达式:

(setq-default dirtrack-list '("\\s-\\(\033\\[[0-9]+m\\)*\\([^\033\\(]+\\)" 2 1))

但现在当我cd我在*Warnings*缓冲区中随机出现以下错误时:

Warning (emacs):   
/ does not exist

3 个答案:

答案 0 :(得分:1)

尝试类似"^\\(\033\\[[0-9]+m\\)*\\([^\033\\(]+\\)"的内容并抓住第二个捕获组而不是第一个捕获组。

答案 1 :(得分:1)

tracking.el中没有任何内容可以发出警告。我使用以下.emacs来尝试重现问题并且没有错:

(add-hook 'shell-mode-hook
         (lambda ()
           (shell-dirtrack-mode -1)
           (dirtrack-mode 1)))

(add-hook 'dirtrack-directory-change-hook
          (lambda ()
            (message default-directory)))

(setq-default dirtrack-list '("\\s-\\(\033\\[[0-9]+m\\)*\\([^\033\\(]+\\)" 2 1))

您使用的是什么操作系统和哪些版本的emacs?

答案 2 :(得分:1)

问题来自rvm部分。当您在该特定存储库中cd时,它会自动吐出一行,告诉您它正在使用gemset。正则表达式不够窄,无法消除这种误报。我相信以下正则表达式应该有效:"\\s-\\(\033\\[[0-9]+m\\)\\([^\033\\(]+\\)"