Hatena::ブログ(Diary)

日々、とんは語る。

この日記のはてなブックマーク数 はてなスターカウンター Peace この日記をあなたのはてなアンテナに追加する。 rss
お問い合わせ先 mailto

2010-01-03 最後の三が日。

Mac の Emacs でツールチップ辞書 パート2。

| 10:41 |

前回の記事から、ちょっとパワーアップと整理をしたので、とりあえず現状を公開します。

前回との違いは、

という感じです。

id:kiririmode さんの記事で紹介されているのを見てやる気を出しました。

リードオンリーバッファについては、view-mode と buffer-read-only を混同していたので、*info* バッファー等で利用できなかったのに対応しました。

また、例えば substring の string だけを辞書引きしたい場合などのために、transient-mark-mode を使っている場合は、ワードを厳選できるようにしました。

jaspace-mode を利用していない場合は、(temp-cancel-read-only '(popup-tip dict :margin t :scroll-bar t) t) を (temp-cancel-read-only '(popup-tip dict :margin t :scroll-bar t)) にしておいてください。

なんか、コードが when ばっかりで、もっといい書き方ないのかなぁと思いますが。

(defvar dict-bin "/Users/tomoya/projects/commandline-dictionary-app/src/dict"
  "dict 実行ファイルのパス")

(defun temp-cancel-read-only (function &optional jaspace-off)
  "eval temporarily cancel buffer-read-only
&optional t is turn of jaspace-mode"
  (let ((read-only-p nil)
	(jaspace-mode-p nil))
    (when jaspace-off
      (when jaspace-mode
	(jaspace-mode)
	(setq jaspace-mode-p t)))
    (when buffer-read-only
      (toggle-read-only)
      (setq read-only-p t))
    (eval function)
    (when read-only-p
      (toggle-read-only))
    (when jaspace-mode-p
      (jaspace-mode))))

(defun ns-popup-dictionary ()
   "マウスカーソルの単語を Mac の辞書でひく"
   (interactive)
   (let ((word (substring-no-properties (thing-at-point 'word)))
	 (old-buf (current-buffer))
	 (dict-buf (get-buffer-create "*dictionary.app*"))
	 (dict))
     (when (and mark-active transient-mark-mode)
       (setq word (buffer-substring-no-properties (region-beginning) (region-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))
       (temp-cancel-read-only '(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))
<< 2010/01 >>
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Connection: close