📖
【MacOS】iPythonでクリップボードを共有する
モチベーション
対話式実行環境(REPL; run-eval-print-loop)として古株のiPython。jupyter notebookも登場して久しいですが、ブラウザを立ち上げるまでもないようなターミナルでちょちょっとコード走らせたいときに、ipythonは今なお便利です。
私はデータ分析に取り組むとき、ipythonでコードを試し書きし、うまくいったコードをプログラムに清書するというスタイルで作業をしています。よって、ipythonから他のテキストエディタにコピペという作業が頻繁に発生するわけです。
ここで問題になるのが、ipython内のクリップボード(kill-ring)はMacOS全体のクリップボードとは独立しているという事実です。これを修正する方法をまとめます。
手順
pyperclipというモジュールをインストールします。
pip install pyperclip
次にprompt_toolkitというモジュールの中身を編集します。環境によってモジュールのパスは様々ですが、一度Pythonを開いて
import prompt_toolkit
print(prompt_toolkit.__file__)
とすればパスがわかります。
prompt_toolkit/application/application.pyにて、InMemoryClipboard
となっているところをPyperclipClipboard
に置き換えます。具体的には
- 43行目
from prompt_toolkit.clipboard import Clipboard, InMemoryClipboard
↓
from prompt_toolkit.clipboard import Clipboard, PyperclipClipboard
- 253行目
self.clipboard = InMemoryClipboard()
↓
self.clipboard = PyperclipClipboard()
最後に、prompt_toolkit/clipboard/__init__.pyにて
from .pyperclip import PyperclipClipboard
を追加する、あるいはコメントアウトされていたらアンコメントします。
Discussion