ひとりぶろぐ

価値ある情報をユーザー視点で発信するブログ

Emacs / Vimユーザの僕が惚れ込んだiOS用エディタMyEditor

      2016/03/16

スクリプトで機能拡張可能なMyEditor

ひとりぶろぐのmoyashi (@hitoriblog) です。

Skitched 20121208 053039

僕は普段、Emacs、Vimなどのテキストエディタ使っています。
僕がEmacsやVimを好きなのは、テキスト編集するための機能を自分で追加できるからです。

それと同じ理由で、iOS用ではMyEditorが気に入っています。

MyEditor 1.3(¥350)

カテゴリ: ビジネス, 仕事効率化
現在の価格: ¥350(サイズ: 0.4 MB)
販売元: Takeyoshi Nakayama – Takeyoshi Nakayama
リリース日: 2012/11/11

App + iPhone/iPadの両方に対応

現在のバージョンの評価: 無し(0件の評価)
全てのバージョンの評価: (2件の評価)

ss1 ss2

EmacsはEmacs Lispで、VimはVim Scriptで機能を追加できます。
MyEditorはJavaScriptで機能を追加できるのです。

正確には、MyEditorはiOS用のJavaScript開発実行環境MyScriptsとの連携を前提に設計されたもので、MyEditorからMyScriptsを呼び出していろいろなことができるようになっています。

MyScripts 2.5(¥350)App
カテゴリ: 仕事効率化, ユーティリティ
販売元: Takeyoshi Nakayama – Takeyoshi Nakayama(サイズ: 2.3 MB)
全てのバージョンの評価: (15件の評価)
+ iPhone/iPadの両方に対応

MyScriptsはiOSのアプリケーション間連携の機能(URL Scheme、クリップボード、Open In)にすべて対応しているので、テキスト処理だけでなく、もっといろいろなことができます。クロスドメイン制約の無いXHRも使えます。(続きは[Read More]から)

MyScriptsを呼び出すときに渡すパラメータでち密な連携が可能

MyEditorからMyScriptsはopenURLで呼び出します。このときに、MyScriptsに対して自動的にJSONでパラメータを渡します。
MyScripts側では、次のようにしてJSONとして渡されたパラメータをパース。


var options = JSON.parse(OPTION);

パラメータのうちわけは以下の通りです。

  • options.document.title – 書類のタイトル
  • options.document.text – 書類の本文
  • options.cursor.location – カーソル位置。書類の先頭からのインデックス
  • options.cursor.selection – 選択範囲の長さ。選択されていないときは0
  • options.cursor.text – 選択範囲の文字列。選択されていないときは””
  • options.clipboard – クリップボード履歴の配列。インデックス0が最新
  • options.callbackurl – コールバックURL。”myeditor://”

MyEditorから呼び出されたMyScripts側で、MyEditorから渡されたパラメータで呼び出したMyEditor側の様子をある程度把握し、それに応じて処理を分岐できるため、MyEditorと親和性の高いスクリプトを書くことができるようになっています。

MyEditor用に書いたMyScriptsスクリプトでは、主にテキスト処理をした後、最後にMyEditorに折り返すためMyEditorを起動するためにopenURLするというのが定石となります(実際にはdocument.locationにMyEditorのURLをセットする)。

MyEditor用のMyScriptsスクリプト

MyEditor用に書いたMyScriptsスクリプトの具体例です。

箇条書きをhtmlのリストに加工

箇条書きをhtmlのリスト(UL、OL)に加工するスクリプトが以下です。

MyEditor側のテキスト選択の状態をMyScripts側で把握して、それに応じて処理を分岐しています。

クリップボード履歴からツイートリンクを抽出してショートコードに加工

MyEditorは、バックグラウンドに回ったときにクリップボードの変化の監視を開始。

クリップボードにテキストがコピーされたときにそれを履歴に溜め込んで、テキスト編集時に利用できます。

クリップボード履歴はMyScripts連携時に渡されるパラメータにも含まれますので、スクリプトからも利用が可能です。

  • options.clipboard – クリップボード履歴の配列。インデックス0が最新

配列として参照できるので、以下のような感じで利用ができます。

このスクリプトは、MyEditorがバックグラウンドで実行されている状態でTweetbotでツイートリンクを次々とコピー。
MyEditorのクリップボード履歴にツイートリンクを溜め込んだ後実行するものです。

クリップボード履歴に含まれるツイートリンクを、ブログに埋め込む際に使うショートコードにまとめて変換してしまいます。

ツイートリンクというのは、以下のようなもの。(展開されないようにhttpsの頭のhを抜いています)


ttps://twitter.com/hitoriblog/status/277078050884161536

ショートコードに加工するとこうなります。(展開されないようにtweetを全角で書いています)


[tweet https://twitter.com/hitoriblog/status/277078050884161536]

クリップボードの履歴を配列として取得でき、JavaScriptで加工できるというのは、想像するだに便利だと思える一方で、恐らくMyEditor+MyScriptsを除いてほかに例が無いのではないでしょうか。実際、しびれるほど便利ですよ。

MyScriptsはiPhone単体でもスクリプトが書きやすい

MyScripts 2.5(¥350)App
カテゴリ: 仕事効率化, ユーティリティ
販売元: Takeyoshi Nakayama – Takeyoshi Nakayama(サイズ: 2.3 MB)
全てのバージョンの評価: (15件の評価)
+ iPhone/iPadの両方に対応

こんなスクリプトはiOS機ではとても書く気にならない、そう思う人は多かろうと思います。

しかし、MyScriptsのエディタ機能もまたよく出来ていて、静的な辞書、スクリプト内の単語を拾った学習結果を参照し、タイピングの途中で補完候補を出してくれるので、関数名などを全部タイプする必要は無く、補完、補完でどんどんスクリプトを書いていくことができます。

TextExpanderにも対応しているので、あらかじめ用意したスニペットを展開することもできます。

オートインデントに対応しているので、入れ子の制御構文を書くときに、スペースを連打する必要はありません。

カーリーブレース、アスタリスクなどソフトウェアキーボードからは入力しづらい文字は、キーボードアクセサリからすぐ入力できるようになっています。

今回紹介したスクリプトぐらいなら、片手でもわりとサッサと書けてしまいます。

便利機能が詰め込まれたMyEditor

MyEditorに搭載された便利機能は、これ以外にもたくさんあります。

URL経由で呼び出せるたくさんの機能。TextExpanderによるスニペット展開、iCloud対応によるiOS機間の同期機能などなど。

それをすべて紹介することはここではしませんが、今回のエントリでフォーカスしたMyScripts連携によって機能の作り込みが可能であるという部分を見ていただきさえすれば、エディタ好きのハートにはズキュンと来るのではないかと思います。

moyashiはMyEditorをお勧めします。恐らく、これからもド変態な進化をしていくことは間違いありません。

MyEditor 1.3(¥350)App
カテゴリ: ビジネス, 仕事効率化
販売元: Takeyoshi Nakayama – Takeyoshi Nakayama(サイズ: 0.4 MB)
全てのバージョンの評価: (2件の評価)
+ iPhone/iPadの両方に対応

 - iPad, iPhone, JavaScript