Pythonistaのカスタムキーボードにはペーストはあるのにコピーがないのでアクションを作りました
Pythonista、便利ですね。出先でちょろっとコーディングするにも最適ですし、GUIも簡単に作れるのでiOS端末のハックにもとても使い勝手が良いです。
カスタムキーボードも良く出来てて不満はほとんどないんですけど、ペーストキーはあるのにコピーキーがないのはなんでなんじゃいというわけでアクションで代用してみることにしました。
※ 本記事執筆時のiOSバージョンは9.3.2、Pythonistaのバージョンは2.0です
序論 Pythonistaとは
まずはPythonistaについて簡単にご紹介。PythonistaはiOS用の有料アプリでiPhone/iPad両対応のPython開発環境です。
オンラインコンパイラではなく、本物のPython1が同梱されておりローカル上で動作します。
またiOS用に設計されたカスタムキーボードの操作性も十分実用に耐えうるもので、ストレスのないコーディングが行えます。
同梱の専用モジュールも強力で、
- クリップボードへのアクセス
- 位置情報へのアクセス
- iOSのカメラ機能へのアクセス
- 共有シートからのデータ受け渡し
- Objective-Cのクラスへのアクセス
等々、ちょっと引くレベルの機能が満載です。パワフルなモジュールを使うことで、楽しい開発が行えるとってもオススメな環境です。
現在ユーザーの熱い要望によりPython3系のPythonistaベータ版も現在開発中とのこと。
本論 アクションを作成してエディタを拡張する
上記動画でもやっていますが、Pythonistaではキーボードを2本指スワイプで選択範囲をスムーズに変更できるのですが、範囲設定後Copyコマンドが出てこないのがストレスでした。
そこでPythonistaの勉強がてら、選択範囲の文字列をクリップボードにコピーするアクションを作ってみました。以下その作業手順です。
site-packagesディレクトリにcopy_text.pyを作成する
site-packageディレクトリはPythonistaにデフォルトで用意されているディレクトリで、インポートパスが通ってるとのこと。(Readme.txtに書いてありました)
言われたとおり、そこにcopy_text.pyを作成しましょう。後々選択した文字列を取得して改変する用途も考えて、get_selected_textとcopy_textというふたつのメソッドに機能を切り分けています。(簡単なコードなのでスクリプトの説明は割愛します)
# coding: utf-8
import sys,editor,clipboard,console
reload(sys)
sys.setdefaultencoding('utf-8')
def get_selected_text():
text = editor.get_text()
selection = editor.get_selection()
selected_text = text[selection[0]:selection[1]]
return selected_text
def copy_text():
if get_selected_text():
clipboard.set(get_selected_text())
if __name__ == "__main__":
copy_text()
コードが書き終わったら、copy_text.pyの編集画面でテキストを選択、Runボタンを実行すればクリップボードに選択範囲のテキストがコピーされているはずです。
アクションを作成する
次にcopy_text.pyをアクションに登録します。アクションへの登録は画面右上のスパナボタンから。その様子も動画に撮ったのでご参照ください。(ファイルサイズの問題で解像度を半分に落としています)
手順としては下記のとおりです。
- スパナボタンを押す
- Editを押す
- +マークを押す
- カスタムコマンド名、アイコンを指定する
使う
任意のファイルを編集中にコピーしたいテキストを選択したら、スパナボタンを押しCopyを実行するだけ。
もちろん、対象ファイルではcopy_textモジュールのインポートは不要です。
結論
Pythonista楽しい!!
-
Pythonista2.0ではPythonのバージョンは2.7.5です。 ↩