2011-12-06 13 views

Respuesta

10

Puede usar la función shell-command. Por ejemplo:

(defun ls() 
    "Lists the contents of the current directory." 
    (interactive) 
    (shell-command "ls")) 

(global-set-key (kbd "C-x :") 'ls); Or whatever key you want... 

Para definir un comando en una única memoria intermedia, puede utilizar local-set-key. In directo, puede obtener el nombre del archivo en el punto usando dired-file-name-at-point. Por lo tanto, para hacer exactamente lo que pidieron:

(defun cygstart-in-dired() 
    "Uses the cygstart command to open the file at point." 
    (interactive) 
    (shell-command (concat "cygstart " (dired-file-name-at-point)))) 
(add-hook 'dired-mode-hook '(lambda() 
           (local-set-key (kbd "O") 'cygstart-in-dired))) 
+5

Nota: No conocía ninguna de estas funciones antes de responder la pregunta. Obtuve el nombre de 'shell-command' utilizando' C-h k' en 'M-!'; Obtuve el 'nombre de archivo direccional en el punto' al adivinar primero que sería una función' dired-'y luego usar' C-h f' y tab para autocompletar el nombre. También puede averiguar fácilmente los nombres y efectos de funciones de Emacs como este: ¡es un editor de ** auto-documentación **, después de todo! Es solo una de las muchas formas en que es impresionante. –

3
;; this will output ls 
(global-set-key (kbd "C-x :") (lambda() (interactive) (shell-command "ls"))) 

;; this is bonus and not directly related to the question 
;; will insert the current date into active buffer 
(global-set-key (kbd "C-x :") (lambda() (interactive) (insert (shell-command-to-string "date")))) 

El lambda define una función anónima en su lugar. De esta forma, no tiene que definir una función auxiliar que estará vinculada a una tecla en otro paso.

lambda es la palabra clave, y el siguiente par de paréntesis contiene sus argumentos, si es necesario. El resto es análogo a cualquier definición de función normal.

Cuestiones relacionadas