以下设置在本地非常有效(OSX),但阻止Emacs在远程服务器(Linux)上正确显示目录/文件:
(setq dired-listing-switches "-aBhl --group-directories-first")我登录到远程服务器时:
C-x C-f /ssh:user@server:/home/user/因此,需要在本地设置dired-listing-switches,但需要远程设置nil。如何以编程方式完成这一任务?
发布于 2014-04-09 21:20:55
如果您这样做只是为了交互式使用dired,而不是对函数dired进行编程调用,那么您不需要(也不应该)建议dired。
相反,只需定义一个新命令my-dired,它使用file-remote-p测试其arg,然后使用适当的开关调用dired。然后将dired重新映射到您的命令中,以获得键绑定。同样,对于dired-other-window也是如此。
如果您希望允许类似于dired的前缀arg行为,您也可以这样做。例如,如果current-prefix-arg然后读取和使用用户提供的开关,则按上述方式进行:测试arg并相应设置开关。
例如(未经测试):
(defun my-dired (dirname &optional switches)
"..."
(interactive
(let* ((dir (if (next-read-file-uses-dialog-p)
(read-directory-name "Dired (directory): "
nil default-directory nil)
(read-file-name "Dired (directory): "
nil default-directory nil)))
(sws (if current-prefix-arg
(read-string "Dired listing switches: "
dired-listing-switches)
(if (file-remote-p dir)
"-al"
"-aBhl --group-directories-first"))))
(list dir sws)))
(switch-to-buffer (dired-noselect dirname switches)))记住,建议会改变您建议的功能。问问自己,你是一般地想要这样做,还是只是为了交互式地使用这个函数。如果是后者,则通常不需要或希望通知该函数--只需定义和使用不同的命令即可。
https://stackoverflow.com/questions/22971299
复制相似问题