题
如何使用任意函数或一组列使DireD显示其文件?基本上我想从以下方式更改:
-rw-r--r-- 1 konrad konrad 3847863 Out 18 14:17 ClojureinAction.pdf
-rw-rw-r-- 1 tamara tamara 27338341 Out 20 07:16 Halliday, Resnick, Walker - Fundamentals of Physics.pdf
-rw-r--r-- 1 konrad konrad 3921024 Set 22 11:11 Pragmatic.Programming.Clojure.May.2009.pdf
像这样的东西
644 1-5MB ClojureinAction.pdf PDF (5 days ago, 400pgs)
664 10-100MB Halliday, Resnic...pdf PDF (3 days ago, 1000pgs, Tamara's)
644 1-5MB Pragmatic.Progra...pdf PDF (1 min ago, 100 pages)
谢谢!
编辑: 感谢您的回答,Gareth,但是请您更详细吗?显然,挂钩只会允许我在加载缓冲区时运行任意代码。 Dire甚至不会停止加载缓冲区:(
(defun foo (&rest args) (unlocking-buffer (message "foo") (insert "foo\n")))
瞥了一眼Dired的源代码,似乎它从我要替换的这些非常格式的信息中获取信息,因此我想知道它是否可行,或者我最终不得不重写所有内容。
解决方案
Dired模式对 ls
输出格式,因此更改格式将破坏许多事情。我认为一种更可行的方法是单独使用该格式,并使用文本构成或叠加层来更改演示文稿。
其他提示
这几乎不像您想要的那样剧烈,但是可以自定义Emacs如何打电话 ls
在 dired-mode
.
M-x customize-variable RET dired-listing-switches RET
我用它来省略文件的组ID -o
选项,节省一些水平屏幕房地产。
编写一个转换输出的功能 ls
进入您想要的格式,然后将该功能添加到 dired-after-readin-hook
.
编辑以添加: dired-mode
通过解析输出来确定文件的名称 ls
, ,因此,当您更改格式时,Dired的某些功能将破裂。您可以通过更改来使其(其中一些)再次工作 directory-listing-before-filename-regexp
和 dired-permission-flags-regexp
. 。由于您对格式的更改非常激进,因此您可能更喜欢重写功能 dired-move-to-filename
和 dired-move-to-end-of-filename
.
(这听起来很艰难,但这并非不可能。我以我描述的方式自定义了Dired Buffer的格式,尽管几乎没有您建议做的。)
如果您坚持将文件名截断,因为 dired-mode
假设它可以通过调用当前行上的文件名获取文件名
(buffer-substring (dired-move-to-filename) (dired-move-to-end-of-filename))
我在这里使用答案: https://stackoverflow.com/a/1796009/714357以及将在您的默认目录中运行的'compile命令。因此,它将为您提供一个新的缓冲区,但这是您要寻找的信息。
(defun my/ls-mode-numbers ()
(interactive)
(compile " ls -l | awk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/) \
*2^(8-i));if(k)printf(\"%0o \",k);print}'"))