【问题标题】:How to customize dired's display如何自定义dired的显示
【发布时间】:2011-05-05 11:42:52
【问题描述】:

如何让 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 的源代码,它似乎从我试图替换的这些格式中获取信息,所以我想知道以这种方式更改它是否可行,或者我是否最终不得不重写所有内容。

【问题讨论】:

    标签: emacs dired


    【解决方案1】:

    编写一个函数,将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 缓冲区的格式,尽管不像您建议的那样彻底。)

    如果你坚持截断文件名,你会做很多工作,因为dired-mode假设它可以通过调用来获取当前行的文件名

    (buffer-substring (dired-move-to-filename) (dired-move-to-end-of-filename))
    

    【讨论】:

      【解决方案2】:

      Dired 模式对ls 输出格式做了很多假设,所以改变格式会破坏很多东西。我认为更可行的方法是不考虑格式,并使用文本属性或覆盖来更改演示文稿。

      【讨论】:

      【解决方案3】:

      这并不像您正在寻找的那么激烈,但可以自定义 Emacs 如何在 dired-mode 中调用 ls

      M-x customize-variable RET dired-listing-switches RET
      

      我用它通过-o 选项省略了文件的组ID,从而节省了一些水平屏幕空间。

      【讨论】:

        【解决方案4】:

        我会在这里使用答案: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}'"))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-07-27
          • 1970-01-01
          • 2021-11-26
          • 1970-01-01
          • 1970-01-01
          • 2021-03-15
          • 2016-09-04
          相关资源
          最近更新 更多