【发布时间】:2013-11-23 08:52:46
【问题描述】:
我想停止在 OSX 中使用 finder 并改用 dired。 OSX 有一个命令“open”,可以从 cli 打开默认应用程序中的任何文件。 (例如:“打开 $the_file”)。这适用于 C-!然后我输入“打开”,但我想用一个组合键来做这两件事,比如 C-0。
如何创建一个相当于“C-!”的函数-> 当我将光标放在文件路径上按 C-0 时“打开”?
(编辑:我找到了解决方案,宏!)
【问题讨论】:
我想停止在 OSX 中使用 finder 并改用 dired。 OSX 有一个命令“open”,可以从 cli 打开默认应用程序中的任何文件。 (例如:“打开 $the_file”)。这适用于 C-!然后我输入“打开”,但我想用一个组合键来做这两件事,比如 C-0。
如何创建一个相当于“C-!”的函数-> 当我将光标放在文件路径上按 C-0 时“打开”?
(编辑:我找到了解决方案,宏!)
【问题讨论】:
我在每个示例的末尾将lawlist-filename 重置为nil,以便它可以用于各种其他功能,包括但不限于dired-read-file-name:dired-read-file-name: pop-up dired mode to read-file-name
编辑:在@phils 的帮助下重写——使用let 绑定,而不是全局变量。
(eval-after-load "dired" '(progn
;; open anything externally with OSX default app -- Wide-Open-Throttle!
(define-key dired-mode-map (kbd "z") (lambda () (interactive)
(let ((lawlist-filename (dired-get-file-for-visit)))
(start-process "default-app" nil "open" lawlist-filename))))
;; open *.pdf file externally with the OSX default *.pdf viewer.
(define-key dired-mode-map (kbd "<SPC>") (lambda () (interactive)
(let ((lawlist-filename (dired-get-file-for-visit)))
(if (equal (file-name-extension lawlist-filename) "pdf")
(start-process "default-pdf-app" nil "open" lawlist-filename)))))
;; open *.pdf file externally using Skim.
(define-key dired-mode-map (kbd "v") (lambda () (interactive)
(let* (
(lawlist-filename (dired-get-file-for-visit))
(skim "/Applications/Skim.app/Contents/MacOS/Skim") )
(if (equal (file-name-extension lawlist-filename) "pdf")
(start-process "pdf-with-skim" nil "open" "-a" skim lawlist-filename)))))
))
【讨论】:
这行得通,但看起来不优雅:
http://www.emacswiki.org/emacs/KeyboardMacros
我用了一个宏:
(fset 'my_macro
[?! ?o ?p ?e ?n ? return])
【讨论】: