Wie kann ich Standard-Shell-Befehle für verschiedene Dateitypen hinzufügen?

7

Wenn ich !eine *.tar.bz2Datei in Dired verwende, wird die folgende Eingabeaufforderung angezeigt:

! on WANem_3.0_Beta2.tar.bz2: {3 guesses} [bunzip2 -c * | tar xvf -] -!-

Wie kann ich ähnliche Funktionen für andere Dateitypen hinzufügen?

Sean Allred
quelle
1
leicht verwandt: github.com/abo-abo/make-it-so
abo-abo
@ abo-abo ordentlich !!
Sean Allred

Antworten:

7

TL; DR:

Diese Funktionalität kommt von dired-x, nicht von Dired. Verwenden Sie (require 'dired-x)in Ihrer Init-Datei und passen Sie sie dann an dired-guess-shell-alist-user.


Wir können jedoch sehen, wo Dired einsteckt dired-x:

(defun dired-read-shell-command (prompt arg files)
  "Read a dired shell command.
PROMPT should be a format string with one \"%s\" format sequence,
which is replaced by the value returned by `dired-mark-prompt',
with ARG and FILES as its arguments.  FILES should be a list of
file names.  The result is used as the prompt.

This normally reads using `read-shell-command', but if the
`dired-x' package is loaded, use `dired-guess-shell-command' to
offer a smarter default choice of shell command."
  (minibuffer-with-setup-hook
      (lambda ()
    (set (make-local-variable 'minibuffer-default-add-function)
         'minibuffer-default-add-dired-shell-commands))
    (setq prompt (format prompt (dired-mark-prompt arg files)))
    (if (functionp 'dired-guess-shell-command) ; <<<<<<<<<<<<<<<<<<<<<<<<<<<
    (dired-mark-pop-up nil 'shell files
               'dired-guess-shell-command prompt files)
      (dired-mark-pop-up nil 'shell files
             'read-shell-command prompt nil nil))))

Nachdem Sie das dired-xHandbuch gelesen haben (info "dired-x"), lernen Sie die Variable kennen dired-guess-shell-alist-user, die Sie anpassen können.

Hier ist ein Beispiel für eine Änderung dired-guess-shell-alist-user

(setq dired-guess-shell-alist-user
      '(("\\.e?ps$" "gv" "xloadimage" "lpr")
        ("\\.chm$" "xchm")
        ("\\.rar$" "unrar x")
        ("\\.e?ps\\.g?z$" "gunzip -qc * | gv -")
        ("\\.pdf$" "zathura")
        ("\\.flv$" "mplayer")
        ("\\.mov$" "mplayer")
        ("\\.3gp$" "mplayer")
        ("\\.png$" "feh")
        ("\\.jpg$" "feh")
        ("\\.JPG$" "feh")
        ("\\.avi$" "mplayer")))
Sean Allred
quelle
2
In Summe: (require 'dired-x)und anpassen dired-guess-shell-alist-user. ;-)
Drew
@Drew Ich würde mich schlecht fühlen, wenn ich so eine kurze Antwort poste! XD Ich werde deine TL hinzufügen; DR :)
Sean Allred
Ich habe diesen Kommentar überhaupt nicht als Ersatz für Ihre vollständigere Antwort gemeint.
Drew
@Drew :) Aber du machst einen guten Punkt - es war nicht einfach, 'die Antwort' aus meiner Antwort zu erhalten. Ich brauche etwas Übung beim Schreiben; Das ist einer der Gründe, warum ich hier bin :)
Sean Allred
1
Gut. Wenn Sie besser kommunizieren möchten, zeigt sich, wie sehr Sie versuchen, Menschen zu helfen.
Drew