Safari で開いているページのリンクを作成する

ブログ記事を書くときなど、ブラウザで開いているページのリンクを半自動的に作れると便利である。

Copy Link to Pasteboard

Safari で開いているページの URL とタイトルを取得して、自動的にリンクを作成してくれる機能拡張がある。

Mac App Store | Copy Link to Pasteboard

アイコンを右クリックすると上の画像のように動作する。また右クリックメニューに「Copy Link To Pasteboard」という項目が追加される。
 HTML や Markdown 形式などのリンクをサポートしている。また URL のみ、タイトルのみ取得することも出来て便利だ。
 取得失敗する場合は、機能拡張のアイコンをクリックで青くしてから、右クリックで実行するとうまくいく。

シェルスクリプト

ページのタイトル、URL の取得は、シェルスクリプトでも割と簡単に実現できる。
 Mac に限るが、osascript コマンドを用いれば、アップルスクリプトを利用できるのだ。
 safari の現在のタブのタイトルと url を取得する場合は以下のように書く。

# タイトル
osascript -e 'tell app "safari" to get the name of the current tab of window 1'

# URL
osascript -e 'tell app "safari" to get the url of the current tab of window 1'

これをふまえて、以下のようなスクリプトが考えられると思う。

#!/bin/sh

URL=$(osascript -e 'tell app "safari" to get the url of the current tab of window 1')

TITLE=$(osascript -e 'tell app "safari" to get the name of the current tab of window 1')

# HTML
# echo '<a href="'$URL'" >'$TITLE'</a>' | pbcopy
# Markdown
echo '['$TITLE']('$URL')' | pbcopy
# org-mode
# echo '[['$URL']['$TITLE']]' | pbcopy

拡張子を .sh じゃなく、.command にすれば、ダブルクリックでリンクが取得できるようになる。ただ command ファイルを叩くとターミナルが開いてしまうので、そこがちょっとな、という感じ。

ブックマークレット

javascript でもリンクを生成できる。
 こういう冴えたやり方があるのだ。
 以下は Markdown の場合。

javascript:prompt('copy this','['+document.title+']('+location.href+')');

document.title がタイトルで、location.href が URL ということだろう。javascript では文字列を「 + 」で接続する。
 下記のブログさまで勉強させていただきました。

🔗 ブラウザで開いているURLのorg-mode用のリンクを生成するブックマークレット | 祭り前

実行するとこんな風になる。

ブックマークレットは、どこか適当なページをブックマークして、それを土台に作る。
 ブックマークの編集画面は、[command] + [option] + [ b ] で呼び出せる。

タイトルと URL の部分をクリックすれば、編集できるようになる。
 適当な名前をつけて、URL の部分に上述の javascript を入れるだけだ。

ページのリンクを作成するやり方は、ほかにもありそうなんだけど、ひとまずはこんな感じで。