はじめに
本コードはクリップボードにコピーされたテキストファイルを”http://”を避けてURLエンコードしてクリップボードにコピーし直すというものです。
- URLをクリップボードにコピー
- 本コードを実行
- クリップボードに変換後の内容が入っている
という趣旨です。
ところで
2つ目の投稿。2021-05-18時点でPython歴3週間です。改善点等があればご指摘いただければ助かります。投稿のお作法さえもまだまったく分からない状態です……。
Macユーザー向けにAutomatorでの方法も記載しておきました。
きっかけ
知識の亡者として知られる、とあるお髭のハンガリー研究者と語り合っているうちに、ハイパーリンクをコピペで貼り付け用にWikipediaのURLをパーセントエンコードする時に、“//”の部分などもエンコードされてしまい甚だ迷惑。Googleマップも文中に日本語が入ってハイパーリンクが千切れてしまうという話題になりました。
そして、ググってみてもいくつかの記事で方法の指南はあるものの、正直言って私には難しすぎる……それなら、QuickBasic以来プログラミングなんてしたこともなかったのに、なぜか文法が異常に頭に入りやすく、しかもネットに例文が恐ろしいほどあるPythonで作ってしまおうと思ったというわけです。
前準備
Pythonとモジュールのインストール方法等は別途、お調べいただければと思います。必要なモジュールは
import pyperclip
import urllib.parse
を使用しましたので、pip install [モジュール名]
で必要なものをインストールしましょう。
ソースコード
必要なものをインストールした後で、下記のコードを作成します。
Python3編
普通にPython3を使っていらっしゃる方は、こちらがよろしいかと思います。
import pyperclip
import urllib.parse
if len(pyperclip.paste()) == 0:
pass
else:
str_raw = pyperclip.paste()
str_enc = urllib.parse.quote(str_raw, safe='/:=@,.!?')
pyperclip.copy(str_enc)
Python2.7編
import urllib
import urlparse
text = raw_input()
if len(text) == 0:
pass
else:
str_raw = text
str_enc = urllib.quote(str_raw, safe='/:=@,.!?')
print(str_enc)
Automatorに入れ込む
アプリ編
- Automatorで新規作成「アプリケーション」を指定。
- クリップボードの内容を取得
- シェルスクリプトを実行:シェルを“/usr/bin/python”に指定
- 「Python2.7編」のソースコードをシェルの入力欄にコピペ
- クリップボードにコピー
- 適当な名前で保存。
- 実行ファイルにしたい場合は保存時や「書き出す...」で設定可能。
サービス編
テキストを選択した時に現れる「サービス」を利用したものです。
- Automatorで新規作成「クイックアクション」を指定。
- ワークフローが受け取る現在の項目:テキスト
- 検索対象:すべてのアプリケーション
- 「選択されたテキストを出力で置き換える」にチェック
- シェルスクリプトを実行:シェルを“/usr/bin/python”に指定
- 「Python2.7編」のソースコードをシェルの入力欄にコピペ
- 適当な名前で保存。あまり長いとメニュー欄が邪魔になります。
#Pythonista31編
Pythonista3ではモジュールpyperclipが使用できないため、違うモジュール(clipboard)を使用します。
import clipboard
import urllib.parse
if len(clipboard.get()) == 1:
pass
else:
str_raw = clipboard.get()
str_enc = urllib.parse.quote(str_raw, safe='/:=@,.!?"\'')
clipboard.set(str_enc)
終わりに
GoogleMapでも変換の検証済みです。なお、iPhoneアプリ版Wikipediaは「共有」のメニューでコピーした場合、複数のリンクを記事があるため2、Pythonista3版も考えざるをえませんでした……。
謝辞
早速のご教示ありがとうございます。