Как связать ключ для запуска команды оболочки в Dired Emacs - PullRequest
8 голосов
/ 06 декабря 2011

Когда я использую режим dired в emacs, я могу запустить команду оболочки по типу! Xxx, но как связать ключ для запуска этой команды? Например, я хочу нажать O для файла, затем dired запустит «cygstart», чтобы открыть этот файл.

Ответы [ 2 ]

12 голосов
/ 06 декабря 2011

Вы можете использовать функцию shell-command. Например:

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

Чтобы определить команду в одном буфере, вы можете использовать local-set-key. В Dired вы можете получить имя файла в точке, используя dired-file-name-at-point. Итак, чтобы сделать именно то, что вы просили:

(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)))
3 голосов
/ 01 февраля 2015
;; 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 определяет вместо этого анонимную функцию.Таким образом, вам не нужно определять вспомогательную функцию, которая будет привязана к ключу на другом шаге.

lambda - это ключевое слово, а следующая пара скобок содержит ваши аргументы, если они были необходимы.Отдых аналогичен любому обычному определению функции.

...