1

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

1 回答 1

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 用户熟悉的模式,即创建一个可自定义的变量,该变量包含一个格式指令,您可以将可用值替换为该指令。然后,用户可以编辑此字符串以自定义文件的显示方式,而无需像您一样编辑源代码。当然,这比只添加一个东西要大得多。为了获得灵感,您可以查看gnus-summary-line-format文档);它有一组非常全面的信息,您可能希望为文件夹中的每封电子邮件显示,并且使用它的代码一定是有启发性的。

于 2015-10-27T19:54:04.660 回答