すでにいろいろやり方が書いてあるので、やってみた。
- http://sakito.jp/mac/dictionary.html
- http://d.hatena.ne.jp/tomoya/20091218/1261138091
- http://d.hatena.ne.jp/tomoya/20100103/1262482873
俺の環境 (Mac OSX Leopard) だと dict.m がコンパイルできなかったのと、マウスカーソルじゃなくてカーソル位置の単語を引きたかったので、上記三つの URL の内容をまぜこぜにしたバージョンを作った。
;; Dictionary.app を Emacs から引く ;; (+ "http://sakito.jp/mac/dictionary.html" ;; "http://d.hatena.ne.jp/tomoya/20091218/1261138091" ;; "http://d.hatena.ne.jp/tomoya/20100103/1262482873") (defvar dict-bin "~/.emacs.d/dict.py" "dict 実行ファイルのパス") (defun my-dictionary () (interactive) (let ((pt (save-excursion (mouse-set-point last-nonmenu-event))) (old-buf (current-buffer)) (dict-buf (get-buffer-create "*dictionary.app*")) beg end) (if (and mark-active (<= (region-beginning) pt) (<= pt (region-end))) (setq beg (region-beginning) end (region-end)) (save-excursion (goto-char pt) (setq end (progn (forward-word) (point))) (setq beg (progn (backward-word) (point))) )) (setq word (buffer-substring-no-properties beg end)) (set-buffer dict-buf) (erase-buffer) (call-process dict-bin nil "*dictionary.app*" t word "Japanese-English" "Japanese" "Japanese Synonyms") (setq dict (buffer-string)) (set-buffer old-buf) (when (not (eq (length dict) 0)) (popup-tip dict :margin t :scroll-bar t) t) )) ;(defvar dict-timer nil) ;(defvar dict-delay 1.0) ;(defun dict-timer () ; (when (and (not (minibufferp)) ; (and mark-active transient-mark-mode)) ; (ns-popup-dictionary))) ;(setq dict-timer (run-with-idle-timer dict-delay dict-delay 'dict-timer)) (define-key global-map (kbd "C-M-d") 'my-dictionary)
experimentail/hackers パッチを当ててるので C-M-d は DictionaryService 連携で乗っ取られてて Emacs 側にこないので C-M-S-d を押すとできる。 (translated from C-M-S-d) だそうで。知らなかった (適当に Shift 一緒に押したらこうなった)