ぶていのログでぶログ

思い出したが吉日

WSLからハイパーリンクが付いたテキストをクリップボードにコピーしてリッチテキストとして貼り付ける

ニッチではあるのだけど、Markdown形式ではなくリッチテキスト形式でハイパーリンクされたテキストをコピーしたいときがある*1。 具体的にはSlackのワークフローでリッチテキスト形式のテキストボックスは、Markdownを解釈してくない。

Markdownでかけないとスクリプトで処理するのはめんどくさい。 そこで、リッチテキスト形式でペーストできるようにクリップボードにコピーすることにした。

echo HTML | wl-copy -t text/html

結論から書くと

  1. HTML形式でコピーする内容を作る
  2. クリップボードにコピーするときにMIMEタイプをtext/htmlにする

この2つだけ。 例えばGoogleへのリンクがついたテキストをリッチテキスト形式でコピーする場合は以下のような感じ。

$ echo '<html><body><a href="https://google.com">Google</a></body></html>' | wl-copy -t text/html

これを貼り付けるとハイパーリンク付きのテキストになるはず。

ここでのポイントはHTMLはaタグだけではだめで、正しくhtmlタグとbodyタグで囲う必要があること。 また、wl-copyコマンドのオプションで明示的に-t text/htmlとよい*2

wl-copyコマンドとは?

一応、wl-copyコマンドについて説明しておく。 wl-copyコマンドは、WaylandというLinuxディストリビューションでよく使われているデスクトッププロトコルを使って、クリップボードにデータをコピーするコマンドである。 WSLはWSLgを使うことで、このWaylandを経由してWindowsのGUI環境にアクセスすることができる。 クリップボードも同様でwl-copyを使えばクリップボードにコピーでき、wl-pasteを使えばクリップボードから貼り付けできる。 wlで始まっていてややこしいが、wslではない。 Ubuntuであればwl-clipboardパッケージをインストールすると使えるようになる。

$ sudo apt install wl-clipboard

おわりに

Markdown形式でリンク付きテキストをペーストできなくて、めんどくせ~~ってなっていたがHTML形式にしてクリップボードにコピーすることで回避できた。 試していないがMS Officeにコピーすることもできるはず。 しかし、Google Spreadsheetではよくわからないテキストが追加されてしまいいまいちだった*3

余談だが、この記事のアイキャッチ画像をChatGPTに生成してもらった。 お題はこの記事のタイトルなのだが、それっぽいようなそれっぽくないような画像になった。 ChatGPT(というかDALL-E?)でテッキーなブログ記事のアイキャッチ画像を生成しようとするとサイバーパンクっぽい、マトリックスのようななんかダークな感じになるのはなんでなんだぜ?

*1:ちなみに、リンク無しでペーストしたい場合はCtrl+Shift+Vにするとよい

*2:自動で判定されるので指定しなくてもうまく動くかもしれない

*3:察するにクリップボードからペーストするときにOS?ブラウザ?によって付与されるタグみたいなものをそのまま貼り付けているのだろうか