2011-07-27 9 views

Respuesta

19

Sí. Use ! mientras está en dirección para ejecutar un comando de shell en un archivo.

En el caso de evince, es más inteligente usar &, que ejecutará el comando de forma asíncrona, por lo que emacs seguirá siendo utilizable mientras tenga el PDF abierto.

3

Puede usar ! para abrir el archivo y luego especificar un comando.

+4

Y '&' en lugar de '!' si desea ejecutar ese comando de forma asincrónica. – Thomas

14

Hay más de una forma de hacerlo. Sugiero OpenWith biblioteca. Configuración de su caso puede parecerse a lo siguiente:

(add-to-list 'load-path "/path/to/downloaded/openwith.el") 
(require 'openwith) 
(setq openwith-associations '(("\\.pdf\\'" "evince" (file)))) 
(openwith-mode t) 

Establece manejador de archivo que funcionará tanto dired y find-file.

+3

Al menos en Mac OSX, reemplacé 'evince' con' open', y luego usa el software predeterminado ('Skim' en mi caso). – Dror

+3

Tenga en cuenta que en este caso, simplemente presione 'RET' en el nombre del archivo en dired en lugar de usar'! 'O' & 'para ejecutar un comando de shell.También pierde todas las asociaciones integradas al usar setq en openwith-associations. ¿Podría haber una mejor manera de cambiar solo la asociación de pdf mientras se deja en asociaciones para .mp3, .jpg, ...? –

+0

Sí, hay una manera fácil de cambiar la asociación de PDF sin perder las otras: M-x personalizar-grupo RET abrir con RET – Jorge

8

Pruebe esto.

(defun dired-open-file() 
    "In dired, open the file named on this line." 
    (interactive) 
    (let* ((file (dired-get-filename nil t))) 
    (message "Opening %s..." file) 
    (call-process "gnome-open" nil 0 nil file) 
    (message "Opening %s done" file))) 
+3

Esto funcionó muy bien. Sustituyo 'gnome-open' con' xdg-open', en caso de usarlo en otra GUI como KDE. –

3

Tenga en cuenta que usted puede mantener vivo el proceso después de salir de Emacs usando nohup [Wikipedia], a fin de poner el punto en un único archivo en dired:

C-u ! nohup evince ? & 

que crea un Persistent Processes [EmacsWiki] .

0

Aquí está un abierto con cualquier aplicación externa desde el modo direc en un cuadro OSX, usando un atajo de teclado de C-c o cuando el cursor está en una línea con un archivo que el usuario quiere abrir con una aplicación externa: el segundo búfer directo se abre en la carpeta /Applications y la tecla Intro selecciona la aplicación externa. [Seleccionar varios archivos está fuera del alcance de esta respuesta, sin embargo, he incluido una definición para dired-get-marked-files por si acaso alguien estaba interesado. También he incluido una opción para abrir una aplicación externa como alternativa al uso de Finder.app o Dock.app o Spotlight. De la carpeta /Applications, la clave RET ofrecerá al usuario la opción de abrir el aplicación externa o entrar en la carpeta de aplicación empaquetada]

un segundo método sería utilizar algo como (equal (file-name-extension input-filename) ".pdf")) para establecer condiciones y utilizar start-process . . . para activar una aplicación externa en particular para abrir el archivo seleccionado -. por ejemplo, (start-process "pdf-with-skim" nil "open" "-a" "/Applications/Skim.app/Contents/MacOS/Skim" input-filename). Esto puede hacerse bastante complejo con sub-opciones (por ejemplo, Adobe, Skim o Vista previa), y también se puede hacer para usar una función string-match o una variedad de extensiones de archivo. Este segundo enfoque se orienta más hacia las preferencias personales del usuario en función de los programas particulares que se instalan, mientras que la primera opción (a continuación) se puede utilizar para acceder a cualquier aplicación externa instalada.

(require 'dired) 

(defun dired-read-file-name (&optional directory) 
    (if directory 
     (dired directory) 
    (dired nil)) 
    (let (output-filename) 
     (recursive-edit) 
     output-filename)) 

;; Open with external application. 
(defvar open-with-variable nil) 
(define-key dired-mode-map (kbd "C-c o") (lambda() (interactive) 
    (setq open-with-variable t) 
    (let* (
     (lawlist-filename (dired-get-file-for-visit)) 
     (application (dired-read-file-name "/Applications"))) 
    (start-process "external" nil "open" "-a" application lawlist-filename) 
    (setq open-with-variable nil)))) 

;; select file or directory. 
(define-key dired-mode-map (kbd "<return>") (lambda() (interactive) 
    (let* (
    (input-filename 
     (if (or (re-search-backward "^*" nil t) 
      (re-search-forward "^*" nil t)) 
     (dired-get-marked-files) 
     (dired-get-file-for-visit))) 
    (dired-buffer-name (buffer-name))) 
    (cond 
    ;; open file 
    ((and (not (file-directory-p input-filename)) 
     (file-exists-p input-filename) 
     (not (equal input-filename (concat (file-name-directory input-filename) "."))) 
     (not open-with-variable)) 
     (kill-buffer dired-buffer-name) 
     (find-file input-filename)) 
    ;; open with external application 
    ((and (file-directory-p input-filename) 
     (not (equal input-filename (concat (file-name-directory input-filename) "."))) 
     open-with-variable 
     (equal (file-name-extension input-filename) "app")) 
     (setq output-filename input-filename) 
     (kill-buffer dired-buffer-name) 
     (throw 'exit nil)) 
    ;; Enter the directory; or, open an application 
    ((and (file-directory-p input-filename) 
     (not (equal input-filename (concat (file-name-directory input-filename) ".")))) 
     (if (equal (file-name-extension input-filename) "app") 
     (progn 
      (message "[o]pen %s" (file-name-nondirectory input-filename)) 
      (let* ((open-or-enter (read-char-exclusive))) 
      (cond 
       ((eq open-or-enter ?o) 
       (start-process "application" nil "open" "-a" input-filename) 
       (kill-buffer dired-buffer-name)) 
       (t 
       (dired-find-file) 
       (goto-char (point-min)) 
       (re-search-forward " \\.\\.$" nil t) 
       (kill-buffer dired-buffer-name))))) 
     (dired-find-file) 
     (goto-char (point-min)) 
     (re-search-forward " \\.\\.$" nil t) 
     (kill-buffer dired-buffer-name))))))) 
1

En Windows, ya no uso. y comando "explorador" para abrir PDF/Word/Excel ...

+0

Creo que "comenzar" debería funcionar también y es más corto. –

Cuestiones relacionadas