editor — Pythonista のテキストエディターのスクリプトへのアクセスのための関数
editor モジュールは現在編集中のスクリプトへのアクセスを提供します。指定した範囲のテキストを取得したり設定したり、置き換えをすることができます。
(注 選択可能な範囲を越えるなどの選択に関する誤った入力値や、テキスト操作関数に関する誤入力については、警告を出さず静かに無視するだけにしています。この部分は今後のアップデートの際に変更するかも知れません。)
このモジュールは、バージョン1.1で新規に導入したカスタマイズ可能なアクションメニューと組み合わせると非常に便利です。現在編集中のスクリプトとは関係なく、あなたのライブラリーのどんなスクリプトでもエディターから素早く実行できるようメニューに追加することができます。このメニューは設定で変更することができます。(Editor > Actions Menu)
(注 翻訳者の使用しているver3.3の環境では、この部分は変更になっているようです。)
以下のスクリプトは、Pythonista アプリそのものの能力を拡張できる可能性があります。アクションとして情報の断片にアクセスすることで、着想を得ることができます:
# 選択したテキストを開発者用ウェブサイト「StackOverflow」内で探す import editor import webbrowser text = editor.get_text() s = editor.get_selection() selection = text[s[0]:s[1]] if len(selection) > 0: from urllib.parse import quote q = quote(selection) search_url = 'http://stackoverflow.com/search?q=' + q webbrowser.open(search_url) else: from console import alert i = alert('No Selection', 'Do you want to open the StackOverflow homepage?', 'StackOverflow') if i == 1: webbrowser.open('http://stackoverflow.com')
このサンプルでは、選択したテキストを人気Q&Aサイトである「StackOverflow」で検索します。テキストが選択されていない場合には、代わりにこのウェブサイトを開くかどうかを確認するダイアログをポップアップ表示します。
余談ですが、webbrowser モジュールはアプリ独自のURLルールを実行できます。例えば、ツイートbotをwebbrowser.open('tweetbot:///post?text=Hello)の形で立ち上げることもできます。
以下の例は、get_line_selection() の便利な機能を用いて、どのようにしたら選択した行の先頭にコメントを示す「#」を付けたり外したりできるかを示したものです。コメントにしたい行の全てを選択しなくても、タッチした全ての行に対して実行します:
#Comment/Uncomment selected lines import editor text = editor.get_text() selection = editor.get_line_selection() selected_text = text[selection[0]:selection[1]] is_comment = selected_text.strip().startswith('#') replacement = '' for line in selected_text.splitlines(): if is_comment: if line.strip().startswith('#'): replacement += line[line.find('#') + 1:] + '\n' else: replacement += line + '\n' else: replacement += '#' + line + '\n' editor.replace_text(selection[0], selection[1], replacement) editor.set_selection(selection[0], selection[0] + len(replacement) - 1)
以下の関数は editor モジュールに含まれています。
editor.get_path()
現在エディター上に開いているスクリプトの絶対パスを返します。
スクリプトを開いていない場合、None を返します。
editor.get_text()
編集中のスクリプトの全てのテキストを返します。
編集内容を全て保存していない場合には、get_path() で返されるファイルを読み込むのとは異なることに注意してください。
editor.get_selection()
選択した範囲の始点と終点の形式のタプルとして返します。
エディターでファイルを開いていない場合には、None を返します。
editor.get_line_selection()
選択した全ての行の範囲を開始行と終了行の形式のタプルとして返します。
エディターでファイルを開いていない場合には、None を返します。
editor.set_selection(start, end=None, scroll=False)
エディターで開いているテキストの中で、引数 start と end で指定した範囲を指定します。
start と end は整数値で指定して下さい。end が None の場合には、テキストは選択せず挿入記号(プロンプト)を start で指定した場所に表示します。
editor.replace_text(start, end, replacement)
引数 start と end で指定した範囲のテキストを引数 replacement で置換します。
テキストを挿入(又は追加)したい場合には、start と end を同じ場所(範囲の長さをゼロ)にして下さい。
全ての変更については、通常のアンドゥキーを使って元に戻すことができます。何回かに分けて呼出した場合には、影響した文字数に関わらず、それぞれの段階まで元のスクリプトに回復できます。
editor.make_new_file([name, content])
エディターで新しいファイルを新規作成し、開きます。
引数 name で与えたファイル名のファイルが既に存在している場合には、ファイル名の後に番号を自動的に付加します。引数 content の内容は、新しいファイルの中にテキストとして配置されます。省略した場合には、中身が空のファイルを生成します。
現在開いているファイルは、新しいファイルを開く前に、自動的に保存されます。
editor.open_file(name, new_tab=False)
引数 name で指定したファイルをエディターで開きます。
名前はスクリプトライブラリーの保管場所からの相対パスのほか、絶対パスでも付けられます。
拡張子「 .py」は省略することもできます。エディターで開いていたファイルは自動的に保存されます。
editor.apply_ui_theme(ui_view, theme_name=None)
ui.View とそこから派生した View を、引数 ui_view と theme_name で指定した UI テーマに設定します。
theme_name が None(デフォルトです)がない場合、現在選択されているテーマが使用されます。その他の場合、設定にある通りのテーマ名でなければなりません。
editor.present_themed(ui_view, theme_name=None, **kwargs)
ui.View とそこから派生した VIew を apply_ui_theme() を使って引数で指定した UI テーマに設定して表示します。
引数の **kwargs(Keyword arguments) は、title_bar_color と title_color を除き ui.View.present() に渡されて、UI テーマに自動的に設定されます。
editor.annotate_line(lineno, text='', style='warning', expanded=True, filename=None, scroll=False)
エディターで開いているコード行にラベルをつけます。
引数 lineno は、ファイルの1から始まる行番号でなければなりません。
引数 style には、‘success’, ‘warning’ または ‘error’ を設定します。
引数 expanded が False の場合、アイコンのみ表示します。アイコンをタップすると、注釈の文字を表示されます。その他の場合、文字は即座に表示されます。
引数 filename が None の場合、エディターに現在開かれているファイルの行に注釈を付けます。
引数 filename や 引数 lineno が不適切な場合には、エラー表示などをすることなく無視します。
editor.clear_annotations(filename=None)
annotate_line() で付けられた注釈を削除します。