📖

【MacOS】iPythonでクリップボードを共有する

2021/12/18に公開

モチベーション

対話式実行環境(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