思索的逍遥の記。

いろいろな考え事。

Pythonista のエディタに置換機能がなかったので自作した

Pythonista 3

Pythonista 3

  • omz:software
  • 仕事効率化
  • ¥1,220

Pythonista のエディタには文字列検索機能はあるが、置換機能はない。変数や関数の命名が途中で気に入らなくなり、一括で新しい名前に変更したい時などは不便である。

幸い Pythonista は、アプリ内エディタの機能を拡張するための editorモジュールを備えており、ユーザーがエディタに好きなように機能を追加できる。

各 Pythonista ユーザーは置換機能を自作しているのかもしれないが、ググり足りないのかあまりそんな記事を見かけないため、自作した文字列置換機能を紹介することにした。

一括置換と、置換候補一覧を表示して置換対象を選択するものとで、2種類の方式を選択できるようにした。もっとうまく作れそうな気もするが、あまり作り込みすぎても他のスクリプト作成に割く時間がなくなるだけなので、当面はこれで凌ごうかと思う。

このスクリプトを表示している状態で、レンチボタンを押すと、ツールアイコンが並んだポップアップが出てくる。下の段はユーザーが勝手にツールを追加できるようになっており、"Edit"ボタンを押してアイコン追加のための"+"ボタンを押す。アイコン画像やアイコンのタイトル、起動時の引数などを設定できるようになっている。以下の画像はすでに"Replace"アイコンを追加した状態である。

これで、Pythonista 内のどのスクリプトを編集している時でも、レンチボタンからこの文字列置換スクリプトを呼び出せる。試しに、このスクリプト自体で文字列置換を試してみよう。

例えば、8行目と17行目の"choice", 32行目と36行目の"choice2"は、console.alert関数の戻り値を記憶するためのものだが、名前がイケていない気がする。何の選択肢に対する選択なのかが、いまいち良くわからない。

そこで、まず"choice"の方を、"use_selected"という変数名に変えたい。表示するアラートの問いは「選択中の文字列を変えたいか? 新しく文字列を指定するか?」というものだからだ(これでもまだイケていないというなら、またあとで変えれば良い)。

Pythonista 組み込みの検索機能は、幸いにして最初にヒットした文字列を自動で選択するようになっているから、これを取得できる。"Replace"アイコンを押して、次のダイアログを表示させる。

今は"choice"が選択されているから、「はい」を押して"choice"を置換の対象として指定する。

続いて、置換後の文字列を入力するためのダイアログが表示される。"use_selected"と入力して「指定」を押す。

次に表示されるダイアログで、以下のように「全置換」するか「置換文字列を選択」するかを選べるようにしてある。今は"choice"の方だけを"use_selected"に置き換えたいのであり、"choice2"は置換したくない。なので、後者の「置換文字列を選択」を選ぶ。

「置換文字列を選択」を選ぶと、スクリプト中の位置と置換候補の文字列 + 後ろの20文字をアイテムとするリストを表示する(iOS13でよく見かけるバグで、上の方が一部透けてしまっている)。

今回置換したいのは、最初の2つの項目。タップして選ぶと選択項目が暗くなるのでわかりやすい。"Done"を押すと置換処理を続行する。

置換が終わったら、終了報告をするダイアログが表示されて、これで終わり。

実際に確認してみると、"choice"の方は"use_selected"に置き換わっている一方、"choice2"は置き換わっていない。

「全置換」か「置換文字列を選択」を選ぶとき、「全置換」を選べば、そのまま全ての置換対象を置換する。以下の画像は、"choice2"を"replace_method"に全置換した図。

このように、Pythonista は Pythonista 自身を容易に拡張できるので、自分のカスタマイズ次第でどんどん使い勝手の良いプログラミング環境になる。

余談だが、最近リリースされた Pythonista 3.3 は、キーボードのカスタマイズもできるようになったようだ。いいアイディアが思いついたら何か作ってみたいと思う。