如何让magit在状态缓冲区中显示文件大小(至少是未分段文件)?这有助于我避免直接向git添加大文件。
以下是状态缓冲区现在的样子示例:
Local: master ~/some/repo/
Remote: master @ server (git@server.com:path/to/repo.git)
Head: ea55b10 last commit message
Untracked files:
new_file_1.ext
new_file_2.ext
Unstaged changes:
Modified old_file_1.ext
Modified old_file_2.ext
Unpushed commits:
ea55b10 last commit message
以下是我希望看到的内容:
Local: master ~/some/repo/
Remote: master @ server (git@server.com:path/to/repo.git)
Head: ea55b10 last commit message
Untracked files:
new_file_1.ext 10K
new_file_2.ext 5M
Unstaged changes:
Modified old_file_1.ext 100K
Modified old_file_2.ext 530
Unpushed commits:
ea55b10 last commit message
答案 0 :(得分:2)
没有简单的方法来配置它;你必须修补magit。
我首先寻找magit-status
函数的定义。 C-h f magit-status RET
为我提供了帮助,包括一个方便的源代码链接。此函数调用magit-status-internal
,它会打开一个缓冲区并调用magit-status-refresh-buffer
来显示状态信息。 magit-status-refresh-buffer
调用变量magit-status-sections-hook
中的所有钩子函数;其中一个函数称为magit-insert-untracked-files
;这看起来很有希望我还没有阅读所有支持代码(例如magit-insert-section
),但这似乎在列表中的每个文件上调用magit-insert-un/tracked-files-1
。该函数实际上确实将内容插入缓冲区:
(insert (propertize file 'face 'magit-filename) ?\n)
它只是插入文件名(带有自定义面),然后是换行符;它在这里你必须查找文件大小并插入它。
您可以使用elisp函数file-attributes
来获取有关文件的信息,包括文件大小。
如果你这样做,那么我建议将更改作为拉取请求提交回magit。
您可能还考虑更改代码以采用大多数emacs用户都熟悉的模式,即创建一个可自定义的变量,该变量包含一个format指令,您可以在其中替换可用的值。然后,用户可以编辑此字符串以自定义文件的显示方式,而无需像您一样编辑源代码。当然,这是一个相当大的变化,而不仅仅是添加一件事。为了获得灵感,您可以查看gnus-summary-line-format
(docs);它可以为文件夹中的每封电子邮件提供一套非常全面的信息,使用它的代码必将具有指导意义。