Hatena::ブログ(Diary)

三等兵

2012-06-13

AppleScriptをEmacsで編集するときの注意点とapples-mode導入手引き

EmacsでAppleScriptを書くときの設定。


とりあえずメジャーモードを導入

Major mode for AppleScript - Clipboard

ひと通り機能が揃っている。

  • キーワードの色付け
  • インデント
  • AppleScript の実行と結果の表示
  • エラー箇所のハイライト
  • 機能の殆どはメニューからアクセス可能
http://d.hatena.ne.jp/tequilasunset/20110116/p1

さらに、デコンパイルもできるのでコンパイル済みのファイルも編集可能。すばらしい。希少種のEmacs使いAppleScripter歓喜。


利用するのであれば.emacs(dot.emacs.d/init.el)に次のコードを記述。

(autoload 'apples-mode "apples-mode" "Happy AppleScripting!" t)
(autoload 'apples-open-scratch "apples-mode" "Open scratch buffer for AppleScript." t)
(add-to-list 'auto-mode-alist '("\\.\\(applescri\\|sc\\)pt\\'" . apples-mode))

これでapplescriptのファイルを開けば色付けされており実行も可能となる。しかし、「applescriptテキストエディタで編集したファイル」は普通には開けない。


applescriptテキストエディタで作成されたapplescriptファイルを開く場合

applescriptテキストエディタで編集されたapplescriptファイルをEmacsで開くとutf-8などで開くと文字化けするかもしれない。

どうもapplescriptはshift-jisみたい。なんでじゃ。AppleScriptエディタから文字コードいじれない。Emacsをshift-jis以外で利用しているのであれば文字化けすることになるからshift-jisで開き直す。

applescriptファイルのバッファ上でC-x RET r sjisとタイプ。指定した文字コードで再読み込みすることができる。sjisのとこはshift-jisとかjapanese-shift-jis-unixなどそれっぽいことを書く。

これで再読み込みされて日本語の文字化けが治ったはず。おそらくバックスラッシュの部分は正しく変換できずに\200みたいになってるはずだからこれは手作業で直すしかない。

そうしてこのファイルをたとえばutf-8に変換して保存するには、C-x RET f utf-8として保存することで変換できる。このとき\200などの文字があればたぶん変換できないので手動で直すかなんかする。


scptファイルを開く時と保存の時に自動で(デ)コンパイルする

個人的にはapplescriptをテキスト形式で保存するといったことはほとんどなくコンパイルしてscptで保存している。

しかし、コンパイルされたscptファイルのデータはバイトコードなのでEmacsでそのままで開くとわやくそ。これはapples-modeのM-x apples-decompileを使うかC-c t dでデコンパイルすることができる。

とはいえいちいち叩くのが面倒なので、ファイルを開くときに自動で行うように設定して、ついでに保存するときにコンパイルするような設定にしておこう。また、これはscptファイルのみに対して行うようにする。

開くときの設定。

;; scptファイルを開くと自動でデコンパイル
(add-hook 'find-file-hook
          '(lambda ()
            (when (and (string-match "\\.scpt$" (buffer-file-name))
                       (> (length  (buffer-string)) 0))
              (apples-decompile (buffer-file-name)))))

scpt拡張子のついたファイルを開くとミニバッファにどのように開くかメッセージが表示されるので、普通に開くときはoキーをタイプする。

個人的にはこのoをタイプするのも面倒だから、

;; デコンパイル終了後の確認を無効
(setq apples-decompile-query '?o)

とした。次は保存の設定。

;; scptファイルを保存すると自動でコンパイルした内容を保存
(add-hook 'before-save-hook
          '(lambda ()
            (when (and (string-match "\\.scpt$" (buffer-file-name))
                       (> (length  (buffer-string)) 0))
              (apples-compile (buffer-file-name)))))

C-x C-sなどで保存するときに、scptファイルの場合コンパイルして保存するようにしている。コンパイルせずに保存するこれはまた面倒なことになる。

というわけで、もろもろ含めて.emacsの設定は以下の通りにした。

(autoload 'apples-mode "apples-mode" "Happy AppleScripting!" t)
(autoload 'apples-open-scratch "apples-mode" "Open scratch buffer for AppleScript." t)
(add-to-list 'auto-mode-alist '("\\.\\(applescri\\|sc\\)pt\\'" . apples-mode))

;; デコンパイル終了後の確認を無効
(setq apples-decompile-query '?o)

;; scptファイルを開くと自動でデコンパイル
(add-hook 'find-file-hook
          (lambda ()
            (when (and (string-match "\\.scpt$" (buffer-file-name))
                       (> (length  (buffer-string)) 0))
              (apples-decompile (buffer-file-name)))))

;; scptファイルを保存すると自動でコンパイルした内容を保存
(add-hook 'before-save-hook
          (lambda ()
            (when (and (string-match "\\.scpt$" (buffer-file-name))
                       (> (length  (buffer-string)) 0))
              (apples-compile (buffer-file-name)))))

最低限覚えておくと良いコマンド

  • apples-open-scratch
    • scratchバッファのapplescript版
    • C-c t r
  • apples-decompile
    • デコンパイル
    • C-c t d
  • apples-compile
    • コンパイル
    • C-c t k
  • apples-run-region/buffer
  • スクリプト実行
    • C-c t r
  • AppleScriptエディタにスクリプト写して起動
    • C-c t s

ほとんどメニューから利用できる。キーバインドはいじった方が良いかもしれない。めんどくさい。


おまけでapples-modeのauto-complete用の辞書

ついでに作ったんでauto-completeを利用しているのであれば辞書もどうぞ。

これでひと通り機能は揃ったはず。

細かい部分で動作がおかしいところがあるから修正しつつ使ってみようと思ったけど細かい確認になるとAppleScriptエディタの方が便利だしあまり困ってないしずっとAppleScriptと付き合っていける自信がないしたぶんするつもりもないので放置する。ひどい。

とはいえ、面白い言語です。気軽に書く程度なら簡単んだし文法が英語だから英語できる人ならすんなり入れると思う。でもハッシュみたいなのないから扱いにくい。言語としてはシェルスクリプトっぽいのを目指したのかな。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/sandai/20120613/p2
リンク元