2011-12-06 10 views

cevap

10

shell-command işlevini kullanabilirsiniz. Örneğin:

(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... 

tek tampon maddesi içinde bir komut tanımlamak için, local-set-key kullanabilir. Direkt olarak, dosyanın adını dired-file-name-at-point kullanarak noktadan alabilirsiniz. Yani, sorulan tam olarak ne yapmalı:

(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

Not: Soruyu yanıtlamadan önce bu işlevlerden hiçbirini bilmiyordum. 'M-! 'Üzerindeki' C-h k' kullanarak 'shell-command' ismini aldım; Öncelikle bir "dired-' "işlevi olduğunu tahmin edip" C-h f "ve sekmeyi kullanarak ismin otomatik olarak tamamlandığını tahmin ederek" dosya-ad-isim-ismi "aldım. Ayrıca, Emacs işlev isimlerini ve bunun gibi efektleri kolayca anlayabilirsiniz - her şeyden önce bir kendini belgeleyen ** editörüdür! Bu, harika olan birçok yoldan sadece biri. –

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")))) 

lambda yerine isimsiz işlev tanımlar. Bu şekilde, başka bir adımda bir anahtara bağlı olacak bir yardımcı işlev tanımlamanız gerekmez.

lambda anahtar sözcüktür ve bir sonraki parantez çifti, gerekirse, bağımsız değişkenler içerir. Dinlenme herhangi bir normal fonksiyon tanımına benzer.

İlgili konular