如何使用任意函数或一组列使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,但请你更详细一点,好吗?显然,钩子只允许我在缓冲区加载时运行任意代码。 Dired甚至不会停止加载缓冲区:(
(defun foo (&rest args) (unlocking-buffer (message "foo") (insert "foo\n")))
瞥了一眼dired的源代码,似乎它从我试图替换的这些格式中获取信息,所以我想知道以这种方式改变它是否可行,或者我是否最终必须重写所有内容。
答案 0 :(得分:3)
Dired模式对ls
输出格式做了很多假设,因此更改格式会破坏很多东西。我认为更可行的方法是单独保留格式,并使用文本属性或叠加来更改演示文稿。
答案 1 :(得分:3)
这并不像您要查找的那样激烈,但可以自定义Emacs在ls
中调用dired-mode
的方式。
M-x customize-variable RET dired-listing-switches RET
我用它来省略-o
选项的文件组ID,节省了一些水平屏幕空间。
答案 2 :(得分:2)
编写一个函数,将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-mode
假设它可以通过调用
(buffer-substring (dired-move-to-filename) (dired-move-to-end-of-filename))
答案 3 :(得分:0)
我会在这里使用答案:https://stackoverflow.com/a/1796009/714357 和'将在您的默认目录中运行的编译命令。所以它会给你一个新的缓冲区,但它是你正在寻找的信息。
(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}'"))