这个需求是因为在处理问题的时候,一般只需要关心很少的文件列表,treemacs显示全部文件对我来说是个干扰,很希望有个经过某种规则过滤后的列表显示,可以是
- 类似idea的changed files
- 对关心的文件打上tag
当然我可以选择给文件加bookmark?或者直接开个窗口看magit的显示?
不知道是不是我的习惯比较奇怪 ,能一直清晰的看到修改文件列表会有一种莫名的安全感…
这个需求是因为在处理问题的时候,一般只需要关心很少的文件列表,treemacs显示全部文件对我来说是个干扰,很希望有个经过某种规则过滤后的列表显示,可以是
当然我可以选择给文件加bookmark?或者直接开个窗口看magit的显示?
不知道是不是我的习惯比较奇怪 ,能一直清晰的看到修改文件列表会有一种莫名的安全感…
简单写了一个,就是不知道怎么自动刷新,看有没有大佬指导一下
(require 'treemacs)
(defun changed-buffers ()
"Get the list of buffers, grouped by their major mode."
(seq-filter
(lambda (buf)
(and (buffer-file-name buf)
(buffer-modified-p buf)))
(buffer-list)))
(defun changed-files-visit-buffer (&rest _)
"Switch to the buffer saved in node at point."
(let* ((node (treemacs-current-button))
(buffer (treemacs-button-get node :buffer)))
(when (buffer-live-p buffer)
(select-window (next-window))
(switch-to-buffer buffer))))
(treemacs-define-leaf-node changed-files-leaf
""
:ret-action #'changed-files-visit-buffer
:tab-action #'changed-files-visit-buffer
:mouse1-action (lambda (&rest args) (interactive) (changed-files-visit-buffer args)))
(treemacs-define-expandable-node changed-files-root
:icon-open (treemacs-as-icon "- " 'face 'font-lock-string-face)
:icon-closed (treemacs-as-icon "+ " 'face 'font-lock-string-face)
:query-function (changed-buffers)
:render-action
(treemacs-render-node
:icon (treemacs-icon-for-file (buffer-file-name item))
:label-form (file-name-nondirectory (buffer-file-name item))
:state treemacs-changed-files-leaf-state
:face 'font-lock-keyword-face
:key-form (buffer-file-name item)
:more-properties (:buffer item))
:top-level-marker t
:root-label "Changed Files"
:root-face 'font-lock-type-face
:root-key-form 'ChangedFiles)
(treemacs-define-top-level-extension
:extension #'treemacs-CHANGED-FILES-ROOT-extension
:position 'top)
谢谢回复! 我没理解错的话,用 buffer-modified-p 判断的是文件对应的buffer是否被修改,那么一旦我保存了可能就被过滤掉了
我理想中的情况是利用git来记录文件是否是被修改的 不管是staged还是unstaged,感觉这样会更可靠一些。
另外很抱歉提问之前没有做足够的搜索,昨晚检索了之后,感觉这个需求我应该有办法自己实现,可能可以使用treemacs的 treemacs-pre-file-insert-predicates函数来处理? 准备周末研究下…