如何使用任意函数或一组列使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如何打电话 lsdired-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-regexpdired-permission-flags-regexp. 。由于您对格式的更改非常激进,因此您可能更喜欢重写功能 dired-move-to-filenamedired-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}'"))
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top