CotEditor のスクリプトが便利

2018年6月15日

 いつのころからか、CotEditor のスクリプトが一部、使えなくなっていた。選択した文字列に UNIX コマンドで処理を加えようとしても、選択した文字列が消えてしまい、うまくいかないことがあったのだ。
 最近アップデートされて 3.2.8(213) というバージョンでは不具合が修正されていた。試してみると確かに直ってるみたい。
 これ使い方を覚えるといろいろ出来て楽しい。

 使えるスクリプトは

  • sh
  • pl
  • php
  • rb
  • py
  • js
  • swift

 とのこと。
 あと AppleScript も使用できる。


スポンサード リンク

 つってもおれは bash のコマンドくらいしかわからない。
 でも単純に、いつも使うタグや文字列・文章を、すぱっと貼りたい、くらいなら echo でいいみたいだ。

💭 divbox.sh

#!/bin/bash
#%%%{CotEditorXInput=None}%%%
#%%%{CotEditorXOutput=InsertAfterSelection}%%%

echo '
' echo '' echo '
'

 CotEditor でこんなふうに書いて、改行コード LF で保存。
 文字コードはたぶん、UTF-8 でいいと思う。
 その際、「実行権を付与」にチェックを入れておく。
 作ったスクリプトの置き場は、

~/ライブラリ/Application Scripts/com.coteditor.CotEditor/

 となっている。
 メニューの「ウィンドウ」と「ヘルプ」の間にある、スクリプトのアイコンに、「スクリプトフォルダを開く」というのがあり、それを選択すると置き場のフォルダを開いてくれる。
 なかに作ったスクリプトをぶちこんでおくと、このスクリプトのアイコンのメニューに反映されて実行できるようになるわけ。

 上記のスクリプトを実行すると、こういうのが出力される。

 この echo '<div class="box">' 云々の部分を、たとえば以下のようにすると、面倒がはぶける。


echo '○○様'
echo ''
echo ' ご連絡ありがとうございます。'
echo ' 担当のばくろうと申します。'
echo ' お問い合わせの件についてお答えいたします。'
echo ''
echo '本文'
echo ''
echo ' 以上となります。'
echo ' ご参考いただけましたら幸いです。'

📜 スクリプトにテキストを渡す。

 にしても、上記のスクリプトの冒頭にある、


#%%%{CotEditorXInput=None}%%%
#%%%{CotEditorXOutput=InsertAfterSelection}%%%

 みたいな、気味悪いのはなにか。
 これ、CotEditor で選択したテキストのインプットとアウトプットの指定でなんである。

CotEditorXInput=None

 というのは、スクリプトになにも渡さない、という意味。

CotEditorXOutput=InsertAfterSelection

 選択範囲の直後に出力する、ということらしい。
 このへん、CotEditor メニューの「ヘルプ > スクリプトマニュアル > スクリプトについて」という項にちゃんと書いてある。

入力(インプット)

%%%{CotEditorXInput=xxxx}%%%

Selection 現在選択しているテキスト
AllText 書類のすべてのテキスト
None 何も渡さない(デフォルト)
出力(アウトプット)

%%%{CotEditorXOutput=xxxx}%%%

ReplaceSelection 現在選択しているテキストを出力内容で置き換えます。
ReplaceAllText 書類のすべてのテキストを出力内容で置き換えます。
InsertAfterSelection 選択範囲の直後に出力内容を挿入します。
AppendToAllText 書類の末尾に出力内容を挿入します。
NewDocument 新規書類を作成し、そこに出力内容を挿入します。
Pasteboard puts クリップボードに出力内容を格納します。
Discard 何もしない(デフォルト)

 渡したテキストをどのように取り出せばいいか。
 CotEditor が用意しているサンプルに書いてあった。
 サンプルは GitHub で紹介されている。

🔗 GitHub – coteditor/SampleScripts: Sample scripts for CotEditor

 bash の場合は cat - でいいみたい。
 上記のスクリプトを改良してみると、こうなった。

💭 divbox.sh

#!/bin/bash
#%%%{CotEditorXInput=Selection}%%%
#%%%{CotEditorXOutput=ReplaceSelection}%%%

lines=`cat -`
echo '
' echo "$lines" echo '
'

 これで、選択したテキストを好きなタグで囲める。
 行末に <br> をくっつけるなら、こんなふうに書けるかと思う。

💭 br.sh

#!/bin/bash
#%%%{CotEditorXInput=Selection}%%%
#%%%{CotEditorXOutput=ReplaceSelection}%%%

sed -e 's/$/
/'

📜 いろんな使い方

 ここまでくると、いろんな使い方が考えられる。
 Mac には open というコマンドがあり、URL を渡すと Safari とかのデフォルトブラウザで開いてくれる。
 おれは日本語で文章を書くことが多いので、類語を調べるスクリプトを作ってみた。

💭 類語.sh

#!/bin/sh

# %%%{CotEditorXInput=Selection}%%%
# %%%{CotEditorXOutput=Discard}%%%

INPUT=`cat -`
open "https://thesaurus.weblio.jp/content/${INPUT}"

 単語を選択してこのスクリプトを実行すると、「類語辞典・シソーラス・対義語 – Weblio辞書」で類語を検索してくれる。
 同じようなやり口で、Wikipedia もいけると思う。

 また、渡すのは選択したテキストだけではない。編集中のファイルが保存されているなら、そのファイルの場所を引数として渡していてくれているらしい。
 bash の場合は $1 という変数に入っている。
 これでただちに思いつくのがバックアップだ。

💭 バックアップ.sh

#!/bin/bash
#%%%{CotEditorXInput=None}%%%
#%%%{CotEditorXOutput=Discard}%%%

finename=`basename "$1"`
cp "$1" "/Users/ユーザーネーム/Library/Mobile Documents/com~apple~CloudDocs/バックアップ/$filename"

 上記のスクリプトでは、iCloud のなかにバックアップというフォルダがあるものとしている。あとユーザーネームも編集する必要がある。

 ほかにもいろいろ出来そうな感じだ。
 このうえ、AppleScript や JavaScript も使えるのだから、どえらい時代になったといわざるを得ない。
 ま、おれは AppleScript も JavaScript もさっぱりだけど、ちょっと調べて作ってみたよ。
 Safari で現在ひらいているページの URL を取得して、<a> タグにするスクリプト。

💭 alink.js

#!/usr/bin/osascript -l JavaScript

safari = Application('Safari')
safari.includeStandardAdditions = true
win = safari.windows

pagetitle = win[0].currentTab.name()
pageurl = win[0].currentTab.url()
alink = '' + pagetitle + ''

safari.setTheClipboardTo(alink)

sys = Application('System Events')
sys.keystroke("v", {using:"command down"})

 実行すると、

Google

 というようなリンクを出してくれる。
(ただし、一度コピーして、CotEditor にペーストする、というやり方で出力している。幼稚な発言かもだけど、bash でいう echo みたいなやつは、どうやればいいのかわからなかった)

📜 ショートカットキーをふる

 頻繁に使うスクリプトには、キーボードのショートカットを割り当てたくなる。
 その設定もこれまた簡単。
 スクリプトのファイル名を変更するだけなんである。

 コマンド + 数字の 0 でスクリプトを実行する場合、ファイル名をこんなふうにする。


divbox.@0.sh

 ファイル名.修飾キー + 文字キー.拡張子。
 という感じで OK。
 メニューのスクリプトを見ると「⌘0」と、ちゃんと振ってくれている。
 やってみるとちゃんと動く。
 修飾キーを示す記号は以下の通り。

^ Ctrl(コントロール)
$ Shift(シフト)
~ Option(オプション)
@ Command(コマンド)

 コマンド + オプション + シフト + t なら、


ファイル名.@~T.sh

 これでいける。
 シフト + t で大文字の T になるわけ。
 調子こいてバンバン登録しちゃえば、HTML のコーディングとかだいぶ違ってくると思う。
 ただし、リターンキーみたいな、文字に出来ない特別なキーは使えないようだ。

 ヘルプの「スクリプトのファイル名規則」というページに詳しく書いてあるんだけど、ファイル名の前に「1)divbox.sh」みたいに、数字と閉じカッコをつけると順番を調節できる。
 また、例えば 03)- という名前の空のフォルダを入れておくと、メニューの三番目に線をつけてくれる。
 「_」で始まる名前のフォルダは、メニューに表示されなくなるので、ライブラリスクリプトなんかはここに入れておくといいみたい。

 スクリプトフォルダの中身が、例えば以下のような場合、


📁 _library
📃 1)divbox.@0.sh
📃 2)類語.sh
📁 3)-
📃 alink.js
📃 br.sh
📃 バックアップ.sh

 スクリプト・メニューは以下のようになる。

 とりあえずこんな感じです。

スポンサードリンク