Posted at

クリップボード内のMarkdownをHTMLに変換して貼り付ける

さてみなさま。クリップボードツールには何をお使いでしょうか。わたしはClipboard-Historyというツールを利用しています。ざっくり以下のような機能をサポートしているツールです。


  • クリップボードの履歴取得・履歴からの貼り付け

  • スタッククリップボード(連続コピー&連続貼り付け)機能

  • 定型文貼り付け機能

  • 定型文への簡単な文字列処理組込み機能

  • 定型文メニューからのスクリプト呼び出し機能←ここについて書きます

Config.txtというテキストファイルの記述によって、定型文メニューを生成、そこで選択した項目をクリップボードに貼り付けたり、メッセージダイアログとして表示したりと、色々出来るツールです。この種のソフトはいろいろありますが、作者さんも現在アクティブに活動されているツールのようでありがたく使用させて頂いております。

ということで、今回は定型文メニューからのスクリプト呼び出し機能を使って、クリップボードにコピーしたMarkdown記法をHTMLとして貼り付ける ということをやってみたので、今回簡単に書きます。


定型文メニューからのスクリプト呼び出し機能について

Clipboard-Historyの該当機能というのは、定型文メニュー用のコマンド、RunにPythonなどのスクリプトファイルのパスを指定することで、スクリプトに現在のクリップボードの中身を引き渡したり、その出力をそのまま現在アクティブなウィンドウに貼り付けたりすることができる というものです。

例えば以下のように書くと…。


Config.txt

クリップボードのMarkdownをHTMLに変換    || <#clip, #paste> || Run | <スクリプトファイルパス> | I O


標準入力にクリップボードの中のテキストを入れた状態でスクリプトファイルが起動し、処理結果を現在アクティブなウィンドウに貼り付けることができます。


PythonでMarkdown形式テキストをHTMLに変換する

PythonでMarkdown形式テキストを扱う場合は、Markdownというそのままの名前のモジュールを使うのが便利です。

事前にpipでインストールしておきます。


コマンド

> pip install markdown


そして、次のようなスクリプトを適当なフォルダに配置します。


md.py

r"""

クリップボード内のMarkdownをHTMLに変換して貼り付ける。
markdownモジュールのインストールが必要
`pip install markdown`
# Clipboard-Historyで使う場合の例
クリップボードのMarkdownをHTMLに変換 || <#clip, #paste> || Run | D:\Users\TakamiChie\AppData\Local\Packages\6432853C62D86.ClipboardHistory_mmq3pnrvshaxt\LocalCache\Roaming\ClipboardHistory\md.py | I O
"""

import sys
from markdown import Markdown
base = "\n".join(sys.stdin.readlines())
md = Markdown().convert(base)
print(md)

一応GithubのGistにもアップロードしています。

https://gist.github.com/TakamiChie/101e4ee6d3c5582e7b639bf4c444c94e

そして、作成したmd.pyを、Clipboard-Historyのコンフィグファイルから呼び出します。

※ なお、Clipboard-Historyのヘルプによると、「パスを相対パスとした場合、Config.txtからの相対パスとみなす」とのことですが、そのとおりConfig.txtと同じフォルダにmd.pyを置いてファイル名のみを記述しても、現行のClipboard-Historyではうまく動きませんでした。絶対パスでスクリプトファイルを指定する必要があります。

すると、大体以下のような感じ。Markdownを受け付けてくれないサイト等では役に立つかなと。

Clipboard-History自体は、Python以外でも、インタプリタ系の言語であればなんでも受け付けるので、いろいろ応用はできると思います。

ただし、Clipboard-Historyは仮にスクリプトがエラーを発生しても(標準エラーに何か出力しても)それを捨ててしまうので、何かがあったときの対処はベットしておいた方が良さそうですね。