初めての CotEditor(TeX を使う設定:環境編)

環境入力(\begin{hoge}〜\end{hoge} を入力)を支援する CotEditor 用 AppleScript を作ってみました。

CotEditor で環境入力

Emacs には環境を閉じる(\end{hoge} を補完する)コマンド「latex-close-block」が用意されていて重宝していますが、残念ながら AppleScript だけで同じ機能を実現することは難しいので、今回は

  1. 通常は素朴に \begin{hoge}〜\end{hoge} を入力し、
  2. 行を選択している場合は、\begin{hoge}選択行\end{hoge} を入力する。

設計にしました。

参考にさせていただいたサイトは下記の通りです。ありがとうございました。

環境名をリストから選択

まずはじめに、主な環境名をあらかじめリスト化しておいて、選択する方法を考えてみました。

tell application "CotEditor"
	if not (exists front document) then return

	tell front document
		set envlist to {"align", "align*", "document", "enumerate", "equation", "equation*", "itemize", "minipage", "multline", "multline*", "pspicture", "quote", "tikzpicture"}
		set envname to (choose from list envlist)
		if envname is false then
			return
		else
			set {loc, len} to range of selection
			set benv to "\\begin{" & envname & "}"
			set eenv to "\\end{" & envname & "}"
			if (len = 0) then
				set contents of selection to benv & "\n\n" & eenv
				set range of selection to {loc + (count of character of benv) + 1, 0}
			else
				set curStr to contents of selection
				set newStr to benv & "\n" & curStr & eenv & "\n"
				set contents of selection to newStr
				set range of selection to {loc + (count of character of newStr), 0}
			end if
		end if
	end tell
end tell

5 行目でよく使う環境名をリスト化しています。素朴に(何も選択せずに)このスクリプトを実行した場合の処理が 14〜15 行目、環境で囲みたい行を選択した状態で実行した場合の処理が 17〜20 行目です。なお、15 行目と 20 行目はカーソル移動のための処理です。

これを「環境を選択して挿入.^~e.applescript」というファイル名で保存しておくと、キーボードショートカット「control + option + e」で呼び出すことができます。

環境名を手打ちする方法

上のスクリプトで、例えば「align*」環境を入力する場合、キーボードでは、「a」、「↓」、「return」とタイプしていくことになり、実際に使ってみると、かなり思考の妨げになることに気づかされます。そこで、いっそのこと環境名は直接入力するようにしてはどうか、と考えて作成したのが次のスクリプトです。

tell application "CotEditor"
	if not (exists front document) then return

	tell front document
		try
			set ans to display dialog "環境名を入力してください:" default answer "align*"
		on error
			return
		end try
		set envname to the text returned of ans
		set {loc, len} to range of selection
		set benv to "\\begin{" & envname & "}"
		set eenv to "\\end{" & envname & "}"
		if (len = 0) then
			set contents of selection to benv & "\n\n" & eenv
			set range of selection to {loc + (count of character of benv) + 1, 0}
		else
			set curStr to contents of selection
			set newStr to benv & "\n" & curStr & eenv & "\n"
			set contents of selection to newStr
			set range of selection to {loc + (count of character of newStr), 0}
		end if
	end tell
end tell

ダイアログは、キャンセル(「キャンセル」ボタン、「esc」キー)すると、エラーを返す仕様のため、try 文の中で実行しています(5〜9 行目)。この他の部分は先のスクリプトと同様です。

これを「環境を選択して挿入.^e.applescript」というファイル名で保存しておくと、キーボードショートカット「control + e」で呼び出すことができます。