使magit显示文件大小

时间:2015-10-27 13:44:43

标签: git emacs magit

如何让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

1 个答案:

答案 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-formatdocs);它可以为文件夹中的每封电子邮件提供一套非常全面的信息,使用它的代码必将具有指导意义。