辞書(Dictionary).appを使い倒そう

更新日:2010年03月21日()

Mac OS X 10.4から標準で「辞書(Dictionary).app」というアプリケーションが付属しています。

名前の通り辞書ツールです。

この文書では Mac OS X 10.5以降の「辞書(Dictionary).app」の機能に関して記述しています。

概要

Mac OS X 10.5 からは「大辞泉(国語辞書)」、「プログレッシブ英和・和英中辞典」、「類語例解辞典」、「Apple用語辞典」、「New Oxford American Dictionary(英英辞典)」、「Oxford American Writes's Thesaurus(英語類語辞典)」、「Wikipedia」が初期インストールされています。

「Wikipedia」はインターネットのWikipediaのサイトに検索を実施しますが他の辞書はローカルに辞書ファイルを持っています。

../shared/images/dictionaryimg/dictionary.png

辞書.app は「アプリケーション」フォルダの中にありますのでダブルクリックにて起動してください。

環境設定

環境設定画面では有効にする辞書の選択や、並び変えが可能です。

チェックしてある辞書が有効な辞書で、並び変える場合はドラッグドロップで可能です。

またラベル部分(国語辞典等の文字が表示されている部分)でコンテクストメニューを表示すると「ラベルの編集」が可能です。

../shared/images/dictionaryimg/settings.png

ショートカットキー

Cocoaアプリケーション上の場合「Control + Command + D」を押して調べたい文字を上にカーソルを置くと辞書を引きます。

ショートカットの変更は「システム環境設定」の「キーボードとマウス」にある「キーボードショトカット」にある「辞書で調べる」のショートカットを変更することで可能です。

Safari や Mail 等の標準アプリケーションで試してみると便利さが実感できるはずです。

Spotlight

Spotlight から辞書を引く事ができます。

標準では「Control + スペース」で「Spotlight」メニューを開き、検索を開始します。

Spotlight で調べたい文字を入力すれば「定義」として辞書を引くことができます。

Spotlight を使いこなすには Spotlight のショートカット を確認してください。

../shared/images/dictionaryimg/spotlight.png

Dashboard Widget

Dashboard Widget も用意されています。

標準では F12 を押すとDashboardが起動しますので、左下の「+」を押すとWidget選択が出ます。2ページ目に辞書の Widget がありますので、クリックすると利用できるようになります。

Dashboard は ESC キーを押すと終了します。

../shared/images/dictionaryimg/widget.png

URL Scheme

辞書はAppleScriptに対応していませんが、「dict://」というURL Schemeが用意されています。

すべてのアプリケーションからこのスキームが利用できます。

「dict://」 を利用した場合の辞書の優先順序は環境設定に従います。

辞書の作成と追加

辞書を追加することが可能です。

辞書を完全に自分で作成する場合は、Developer Toolsをインストールしていると「/Developer/Extras/Dictionary Development Kit/」以下にサンプルやドキュメントが配置されているのでこれを読むと作成することができます。

ドキュメントは Dictionary Services Programming Guide でも公開されています。

また既存の辞書を変換して追加することもできます。

mac-dictionary-kit を利用すると StarDict 用の辞書を辞書.app用に変換することが可能です。

簡単な文章を読むだけであれば、ドイツ語やフランス語などの辞書は StarDict 用の辞書を利用すればだいたい済んでしまうかと思います。

コマンドラインでの操作に慣れている人なら Leopardの「辞書」アプリで「英辞郎」を使う 等を参照すれば他のフォーマットの辞書も変換することが可能です。

いずれにしても現状ではやや辞書を追加するのは面倒な作業になっています。

応用的な設定

辞書.app には GUI からでなく Terminal.app からしかできない設定がいくつかあります。

結果を常に同じウィンドウを利用して表示する

辞書.app はデフォルトは複数のウィンドウが開きますが、単一ウィンドウが共通的に利用された方が使い易いかもしれません。設定は以下で実施します。設定したらログアウトしてログインしなおすと反映されます。

defaults write com.apple.Dictionary ProhibitNewWindowForRequest -bool TRUE

もとに戻したくなったら以下で元に戻ります。

defaults write com.apple.Dictionary ProhibitNewWindowForRequest -bool FALSE

Spotlight の検索結果をドラッグドロップできるようにする

Spotlight の検索結果はクリックすると辞書.app が開きますが、直接テキストエディタ等にドラッグドロップしたい場合以下の設定で実施します。この設定をすると 辞書.app 以外の検索結果もドラッグドロップできるようになります。

defaults write com.apple.spotlight AllowMenuDrag -bool TRUE

もとに戻したくなったら以下で元に戻ります。

defaults write com.apple.spotlight AllowMenuDrag -bool FALSE

Terminal から利用する

「dict://」が利用できることを応用して、

open dict://文字列

とコマンドを実行すると辞書を引くことができます。

毎回このコマンドを実行するのが面倒な場合は、bashの場合「.bash_profile」に以下を記述すると「dict 文字列」とすれば辞書をコマンドラインから引くことができます。

dict () { open dict:///"$@" ; }

ただこれだと辞書.appがメイン画面になってしまうのでターミナルの中に結果が出力されると良いと思うかもしれません。

辞書を引くコマンドがあるかと探したのですが、今の所みつけていません。後で説明するPythonプログラムを利用してコマンドで辞書を引いています。

Firefox から利用する

Firefoxではショットカットキーで辞書を引くことができません。

「dict://」が利用できることを応用して、アドレス欄に「dict://文字列」と入れれば辞書が引けますが多少面倒です。

この操作をコンテクストメニュー(右クリック)から実行できるFirefox の拡張「 Look Up in Dictionary 」が存在しています。

インストールして Firefox を再起動するとコンテクストメニューに「辞書で調べる」という選択肢が追加されます。

拡張をインストールしたく無い等の理由がある場合はBookmarklet等を利用する手もあります。

javascript:x=escape(getSelection());if(!x)%7Bvoid(x=prompt('word?',''))%7D;window.location='dict:///'+x

Emacs から利用する

Emacs23 は Cocoa アプリケーションになりましたが、辞書を引くショートカット(「Control + Command + D」)に対応していません。

Emacs23 に experimental/hackers-only パッチの適用 をしてコンパイルするとこのショートカットが有効になります。

パッチを当てない Emacs の場合は、「dict://」を利用します。「dict://」を呼ぶには「browse-url」を利用すれば簡単です。

(browse-url (concat "dict:///" "文字列"))

で辞書を引くことが可能です。

日本語を利用する場合は UTF-8 に設定しておいた方が良いかもしれません。

MacKeyMode を設定すればコンテクストメニューから辞書を引くことが可能です。

辞書機能だけ利用したいのであれば以下の設定を.emacsに記述すると文字を選択して「C-cw」を押すと辞書を引けます。

「dict://」を利用しているのでEmacs内で完結しないで辞書.appが起動します。Emacs内で完結させたい場合は後で説明するPythonプログラムを利用してください。

(defun dictionary ()
  "dictionary.app"
  (interactive)

  (let ((editable (not buffer-read-only))
        (pt (save-excursion (mouse-set-point last-nonmenu-event)))
        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)))
        ))

    (browse-url
     (concat "dict:///"
             (url-hexify-string (buffer-substring-no-properties beg end))))))
(define-key global-map (kbd "C-c w") 'dictionary)

Python から利用する

Pythonから 「dict://」を利用するには「urllib」等を利用すれば可能ですが、ここではCocoaの機能を利用してみます。

PythonからCocoaの機能を利用するには PyObjC を必要としますが、Mac OS X 10.5では初期インストールされているのですぐ利用することができます。

Mac OS X 10.6では Python 2.6.1 に含まれる PyObjC で正常に DictionaryServices が動作しません。 Python 2.5.1 に含まれる PyObjC は動作しますので、 Python2.5 を指定して動作させます。

PyObjC がインストールされていれば Pythonから「DictionaryServices」を利用することで辞書を引くことができます。エラー処理等一切考慮しないサンプルソースは以下となります。

#!/usr/bin/python2.5

import sys
from DictionaryServices import *

def main():
    word = sys.argv[1].decode('utf-8')
    result = DCSCopyTextDefinition(None, word, (0, len(word)))
    print result.encode('utf-8')

if __name__ == '__main__':
    main()

「dict.py」という名前で保存して、実行権限を付与して以下のように実行すると文字列として与えた文字で辞書を引きます。

dict.py '文字列'

これを利用すると辞書.appのウィンドウが表示されずに、コマンドラインで辞書を引くことができます。

PyObjC がインストールされていなかったり動作しない環境では PyObjC をインストールする必要があります。easy_installを利用してインストールします。

sudo easy_install -Z pyobjc
sudo easy_install -Z pyobjc-framework-DictionaryServices

Dictionary Services Reference を参照すると関連する機能と型は以下になっています。

  • DCSCopyTextDefinition
  • DCSGetTermRangeInString
  • HIDictionaryWindowShow
  • DCSDictionaryRef

ここらあたりちゃんと利用すると結構いろいろ作成できるはずですが、とりあえずDCSDictionaryRef に None を設定しておくと優先度の高い順に辞書を串刺し検索します。

Emacsから利用する場合 start-process を利用するとこのコマンドを呼ぶことが可能です。「dict://」版を改造した物が以下です。

;; exec-path を設定しないと実行できない場合があります
(setq exec-path
     (append
      (list "/usr/local/bin" "/sw/bin" "/usr/bin" "~/bin") exec-path)
     )
;; PATHが正しくとおっていないとフルパスで呼ばないといけなくなります
(setenv "PATH"
       (concat '"/usr/local/bin:/sw/bin:" (getenv "PATH"))
       )
;; C-cwで選択した文字列を辞書で引き別バッファに表示します。
(defun dictionary ()
 "dictionary.app"
 (interactive)

 (let ((editable (not buffer-read-only))
       (pt (save-excursion (mouse-set-point last-nonmenu-event)))
       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))
   (let ((win (selected-window))
         (tmpbuf " * dict-process *"))
     (pop-to-buffer tmpbuf)
     (erase-buffer)
     (insert word "\n")
     (start-process "dict-process" tmpbuf "dict.py" word)
     (select-window win)
     )
 ))
 (define-key global-map (kbd "C-c w") 'dictionary)

修正履歴メモ

  • 2010-03-21: Terminal.app からしか設定できない項目に関して追記。Emacs のパッチに関して追記
  • 2009-10-17: Mac OS X 10.6 に関する記述を追加
  • 2009-07-22: 標準Pythonを利用していない環境を考慮した文を追記(Thanks id:tsukkee)

関連エントリ

Author: sakito Updated: 2010年03月21日() category: /mac Permalink: Permalink
このエントリーをはてなブックマークする はてなブックマーク数 このエントリーをdel.icio.usに登録する このエントリーを Tumblr する このエントリーに Twitter 経由でコメントする
以下はゲストコメント可能です。名前とメールアドレスは任意の物を入力していただいてかまいません。
blog comments powered by Disqus

このページの先頭へ

copyright (CC-by) 1999-2024 sakito
Powered by pyblosxom. Theme: TheBuckmaker.