¿Cómo puedo agregar comandos de shell predeterminados para varios tipos de archivos?

7

Cuando lo uso !en un *.tar.bz2archivo en Dired, me aparece el siguiente mensaje:

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

¿Cómo puedo agregar una funcionalidad similar para otros tipos de archivos?

Sean Allred
fuente
1
ligeramente relacionado: github.com/abo-abo/make-it-so
abo-abo el
@ abo-abo ordenado !!
Sean Allred

Respuestas:

7

TL; DR:

Esta funcionalidad proviene dired-x, no Dired. Úselo (require 'dired-x)en su archivo de inicio y luego personalícelo dired-guess-shell-alist-user.


Sin embargo, podemos ver dónde se conecta Dired 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))))

Después de leer el dired-xmanual (info "dired-x"), aprenderá la variable dired-guess-shell-alist-user, que puede personalizar.

Aquí hay un ejemplo de cambio 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
fuente
2
En suma: (require 'dired-x)y personalizar dired-guess-shell-alist-user. ;-)
Dibujó
@Drew ¡Sin embargo, me sentiría mal por publicar una respuesta tan corta! XD Agregaré tu TL; DR :)
Sean Allred
No quise decir en absoluto ese comentario como un sustituto de su respuesta más completa.
Dibujó
@Drew :) Pero haces un buen punto: no fue sencillo obtener 'la respuesta' de mi respuesta. Necesito practicar mi escritura; esa es una de las razones por las que estoy aquí :)
Sean Allred
1
Bueno. Querer comunicarse mejor muestra cuánto está tratando de ayudar a las personas.
Dibujó