LoginSignup
2
0

More than 1 year has passed since last update.

Pythonでクリップボードへリッチテキストをコピーする方法

Posted at

はじめに

何かと便利なクリップボード、コピペでソースコード取ってくるのはもちろん、Clipyなどのツールを使えばスニペットまで設定できてしまいます。リッチテキストも便利ですよね。太字やリスト形式をそのままコピーできて、Slackなどのメッセージをコピペするときに重宝します。
今回はそのクリップボードをPythonからいじる方法についてまとめてみました。

セットアップ

MacのOS機能にアクセスするためにPyObjCをインストールします。

pip install pyobjc

関数の定義

import AppKit
import Foundation


def copy(plain, html):
    data = {
        'public.utf8-plain-text': plain,
        'public.html': html
    }
    pb = AppKit.NSPasteboard.generalPasteboard()
    # クリップボードの内容をクリアする
    pb.clearContents()
    pb.declareTypes_owner_(data.keys(), None)

    for fmt, value in data.items():
        # 内容をエンコードする
        new_data = Foundation.NSString.stringWithString_(
            value
        ).nsstring(
        ).dataUsingEncoding_(
            Foundation.NSUTF8StringEncoding
        )
        # クリップボードへ値をセットする
        pb.setData_forType_(new_data, fmt)

実行例

太字の設定

copy('hoge', '<b>hoge</b>')

image.png

image.png

プレーンテキスト(Visual Studio Code)でもリッチテキスト(Slack)でも貼り付けられていることがわかります。ただ、少し違いが分かりづらいですね:sweat: なので、次はもう少し分かりやすい例を出してみます。

リストの設定

copy('a. hoge\nb. fuga\nc. moge', '<ol><li>hoge</li><li>fuga</li><li>moge</li></ol>')

image.png
image.png

この通り!プレーンテキストではa,b,cで指定し、リッチテキストでは<ol>とだけ指定していたので、数字で連番が振られています。

もちろんこのリストは入れ子にしても正しく展開されます。

copy('dummy', '<ol><li>hoge<ol><li>ほげ</li><li>ふが</li></ol></li><li>fuga</li><li>moge</li></ol>')

image.png
ちゃんと「ほげ」と「ふが」のアイテムが2階層目に入っていることがわかります。

この他にも斜体<i>タグや、取り消し線<strike>タグ、リンク<a>タグなどにも対応しているので良かったら試してみてください。

余談(この記事を書くに至った経緯)

僕は毎日Slackで日報を書くのですが、最初は自分宛のDMに日報のフォーマットを作っておいてコピペして使いまわしていました。しかし日付の部分を今日に変更することがだんだん面倒になってきました。定型文に日付を挿入しつつ箇条書きの部分まで自動的に作ってくれるととても効率的に入力できます。
便利なPythonのことだし、クリップボード操作用のモジュールもすぐに見つかるだろうと思ったのですが、なかなか見つかりません。やっとのことでrichxeroxというモジュールを見つけたものの、なんと開発がストップしていて、bitbucketへのリンクも切れてしまっているではありませんか。
そこで、richxeroxのソースコードを読み解いて、まとめたものがこちらの記事になります。
richxeroxのソースコードを自分で読んでみたいよという方はこちらからダウンロードしてみてください。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0