[请教]在dired怎么用默认程序打开包含中文名字的文件

啊 我的我的 大写拓展名啊

左边的窗口还有点大,覆盖了部分modelline

不是窗口大,你不要用 dired-free-space 这个选项。把它改成默认值或者 nil。 如果你需要看剩余空间,直接设置 dirvish 的 header-line 或者 mode-line。看这里

手机拍的,默认的大写。但有一个小于1M的可以预览,也是大写拓展名。

这次应该行了。如果那个报错还在,或者 modeline 还是不正常,就麻烦你提一下issue 吧,谢啦

还有问题,我提个issue吧

你确认用的是 3ca15d381de609d178c6690c2b6631d73f7c2a5d 吗 我刚覆盖了几次

是的,我刚用git看了,这一会儿崩溃了几次,要不要提issue。

你提一个吧,你这个 modeline 可能是有点问题的。你用中文没关系,我会改标题的

哈哈,大神也太含蓄了,应该大大方方推广一下 dirvish 这个包。已经抛弃 ranger 换了 dirvish,真香!

1 个赞

我含蓄吗 :joy:,我这不天天自卖自夸。要不改天发个帖子详细讲讲,最近更新了挺多的。

你不说我还真没有发现。 我在MacOS12用Emacs28.2也有这个问题。

我是直接输入 ! open 来打开文件或者文件夹。

有2个需求,没查到dired是否有实现。 1、在系统文件管理器中显示当前文件,也就是打开系统自带的文件管理器,并将当前文件选中; 2、复制当前文件的全路径名,dired-copy-filename-as-kill只能复制文件名,没有带上路径。

(defun xdg-open (&optional filename)
  (interactive)
  (let ((process-connection-type))
    (start-process
     "" nil (cond ((eq system-type 'gnu/linux) "xdg-open")
                  ((eq system-type 'darwin) "open")
                  ((eq system-type 'windows-nt) "start")
                  (t "")) (expand-file-name
                  (or filename (dired-file-name-at-point))))))

(defun find-file-auto (orig-fun &rest args)
  (let ((filename (car args)))
    (if (cl-find-if
         (lambda (regexp) (string-match regexp filename))
         '("\\.pdf\\'" "\\.mp4\\'" "\\.docx?\\'"))
        (xdg-open filename)
      (apply orig-fun args))))

(advice-add 'find-file :around 'find-file-auto)

这是我的解决方案 直接回车打开。

2 个赞

2 C-u0 dired-copy-filename-as-kill

w runs the command dired-copy-filename-as-kill (found in dired-mode-map), which is an interactive
byte-compiled Lisp function in ‘dired.el’.

It is bound to w.

(dired-copy-filename-as-kill &optional ARG)

Copy names of marked (or next ARG) files into the kill ring.
If there are several names, they will be separated by a space,
and file names that have spaces or quote characters in them will
be quoted (with double quotes).  (When there’s a single file, no
quoting is done.)

With a zero prefix arg, use the absolute file name of each marked file.
With M-x universal-argument, use the file name relative to the Dired buffer’s
‘default-directory’.  (This still may contain slashes if in a subdirectory.)

If on a subdir headerline, use absolute subdirname instead;
prefix arg and marked files are ignored in this case.

You can then feed the file name(s) to other commands with C-y.

  Probably introduced at or before Emacs version 22.1.

  1. 可以参考以下链接,不过我已经好久没用过 系统文件管理器了https://github.com/jixiuf/vmacs/blob/master/lazy/lazy-open-in-file-manager.el#L11

使用系统默认程序直接打开,dired有browse-url-of-dired-file命令,绑定到按键W,够用了。但是我希望的是增加一个需求:在资源管理器中打开。

复制全路径名,我找到了,默认绑定到0w,但是我没找到对应的命令。。。

C-h k查绑定,按0就直接输出帮助了,没有机会按0w。

0w 就是执行的dired-copy-filename-as-kill 命令, 0 是传给w 的参数

With a zero prefix arg, use the absolute file name of each marked file.
With M-x universal-argument, use the file name relative to the Dired buffer’s
‘default-directory’.  (This still may contain slashes if in a subdirectory.)
1 个赞

这段话第2行,“With M-x universal-argument”是什么意思,怎么传参数?

C-u 绑定的就是 universal-argument 意思就是C-uw

这个试用了一下下,Windows下打开文件夹正常,打开文件不对,没有进到当前路径下。我对照着试了下exporer命令,又是对的。

dired-get-filename返回的路径符是/,explorer需要的路径符是\,路径不对就打开“我的电脑”,猜测是w32-shell-execute没有自动转换路径符,有别的函数可以转换吗?

C-uw返回结果和w一样。