Was ist der einfachste Weg, um den Ordner mit der aktuellen Datei mit dem Standard-Explorer des Betriebssystems zu öffnen?

10

Was ist der einfachste Weg, um den Ordner mit der aktuellen Datei mit dem Standard-Explorer des Betriebssystems zu öffnen (z. B. explorer.exe im Fall eines Windows-Betriebssystems)?

Name
quelle
1
Ich habe eine Ahnung (Browse-URL-of-File-Standardverzeichnis) würde es tun, das funktioniert auf OSX mit Finder, ich würde denken, es würde mit Windows funktionieren, kann es aber nicht testen.
Jordon Biondo
@ JordanBiondo es funktioniert! Bitte wandeln Sie Ihren Kommentar in eine Antwort um.
Name

Antworten:

14

Die Verwendung browse-url-of-filesollte funktionieren, wenn ein Verzeichnis angegeben wird.

Sie können einen Befehl implementieren, der das Verzeichnis der aktuellen Datei wie folgt öffnet:

(defun browse-file-directory ()
  "Open the current file's directory however the OS would."
  (interactive)
  (if default-directory
      (browse-url-of-file (expand-file-name default-directory))
    (error "No `default-directory' to open")))

Dann M-x browse-file-directorysollte das Verzeichnis im Dateibrowser Ihres Betriebssystems geöffnet werden.

Jordon Biondo
quelle
Es gab eine kleine Inkompatibilität mit Emacs 25. * unter Windows, aber die Lösung funktioniert gut mit Emacs 26.1 unter Windows.
Name
Wäre es möglich, die Datei wie in VS auszuwählen? Siehe Trick 20 in dev.to/devmount/23-lesser-known-vs-code-shortcuts-as-gif-80
user3341592
1

Führen Sie shell-command( M+ !) mit dem Standard-Explorer-Programm und dem aktuellen Ordner aus, z. B. für MS Windows.explorer .

estownya
quelle
0

Kopieren Sie zunächst den vollständigen Pfad in die Zwischenablage:

;; you need install xsel under Linux
;; xclip has some problem when copying under Linux
(defun copy-yank-str (msg &optional clipboard-only)
  (unless clipboard-only (kill-new msg))
  (cond
   ;; display-graphic-p need windows 23.3.1
   ((and (display-graphic-p) x-select-enable-clipboard)
    (x-set-selection 'CLIPBOARD msg))
   (t (with-temp-buffer
        (insert msg)
        (shell-command-on-region (point-min) (point-max)
                                 (cond
                                  ((eq system-type 'cygwin) "putclip")
                                  ((eq system-type 'darwin) "pbcopy")
                                  (t "xsel -ib")))))))

(defun cp-fullpath-of-current-buffer ()
  "copy full path into the yank ring and OS clipboard"
  (interactive)
  (when buffer-file-name
    (copy-yank-str (file-truename buffer-file-name))
    (message "file full path => clipboard & yank ring")))
Chen Bin
quelle