Sat, 18 Jun 2005
CotEditor用のスクリプトを書いてみるそのよん
CotEditor用のスクリプトの話しのつづき。前からやってみたかった、AppleScriptでダイアログとかを出してその結果によってShell Scriptの処理を分岐させて…というのを考えてみました。お題は数値文字参照。
処理の流れは次の通りで出来た。リストの画面でキャンセルを押した場合の挙動が他の場合(ダイアログとか)と違っているので、少し悩みました。うーむ、もっとかっこいいダイアログを出せないものだろうか。それと、メンテナンスするのに、常に二箇所修正しないといけないな…
- AppleScriptでリストを表示
- 選択結果を変数${UIINPUT}に格納
- 変数${UIINPUT}の値をもとに、変数${OUTPUT}に対応する数値文字参照の値を代入
- CotEditorの選択範囲を変数${OUTPUT}に置換
- キャレットを選択範囲の文字数分後へ移動
#! /bin/sh
# %%%{CotEditorXInput=Selection}%%%
# %%%{CotEditorXOutput=ReplaceSelection}%%%
UIINPUT=`osascript << EOF
tell app "SystemUIServer"
activate
try
set myList to {\
"&", \
"<", \
">", \
"nb space", \
"copyright sign", \
"registered sign", \
"inverted !", \
"inverted ?" \
}
set myResult to (choose from list myList default items "&")
on error
beep
end try
return myResult
end tell
EOF`
case ${UIINPUT} in
false) OUTPUT="" ;;
\&) OUTPUT=" " ;;
\<) OUTPUT="<" ;;
\>) OUTPUT=">" ;;
"nb space") OUTPUT=" " ;;
"copyright sign") OUTPUT="©" ;;
"registered sign") OUTPUT="®" ;;
"inverted !") OUTPUT="¡" ;;
"inverted ?") OUTPUT="¿" ;;
esac
osascript << EOF
tell application "CotEditor"
activate
if exists front document then
set {loc, len} to (range of selection of front document)
set (contents of selection of front document) to "${OUTPUT}"
set numOfMove to (count of character of selection)
set (range of selection of front document) to {Loc + numOfMove, 0}
end if
end tell
EOF