記事を書くのが楽になる!選択範囲内のリンクタグすべてを新規ウィンドウで開くように指定する CopyQ スクリプト

f:id:dot-harley:20200110233155j:plain

ブログの記事を書いていて、このリンクは新規ウィンドウで開くようにしたいってときありますよね。

CopyQ の定型文にtarget="_blank" rel="noopener"という文字列をを登録しておいて、リンクタグにひとつひとつ追加していってもいいのですが、大量に書く場合はタイヘンですよね。

そこで選択範囲内のリンクタグすべてにtarget="_blank" rel="noopener"を追加する CopyQ スクリプトを作りました。

特徴

  • 選択範囲内のすべてのリンクタグにtarget="_blank" rel="noopener"が追加されます。

  • マークダウン形式のリンクタグは HTML 形式に変換されます。

  • リンクタグがすでに「_blank」以外のターゲット属性を持っている場合は追加されません。例えばtarget="_self"target="_self"のまま。rel="noopener"も付きません。

  • 正規表現による置換を繰り返すことで実現してます。「もっとスマートなやり方があるよ」という方はぜひコメント欄にお願いします。

免責事項

無保証です。このスクリプトを使用して何らかの損害が発生したとしても、作者は責任を負いません。

不具合の報告はコメント欄にお願いします。直せるかどうか分かりませんが。。。

コード

[Command]
Command="
    copyq:
    if (!copy())
      abort()
    
    var text = str(clipboard())
    
    var newText = text.replace(/^\\[/ , ' [')
    newText = newText.replace(/([^\\!])\\[(.*?)\\]\\((.*?)\\)/g , '$1<a href=\"$3\">$2</a>')
    newText = newText.replace(/^ / , '')
    
    newText = newText.replace(/<a (.*?)>/g, '<a $1 target=\"_blank\">')
    
    newText = newText.replace(/<a (.*?)(target=\".\\w*?\")(.*?) target=\"_blank\"(.*?)>/g , '<a $1$2$3$4>')
    
    newText = newText.replace(/<a (.*?)(target=\"_blank\")(.*?)>/g , '<a $1$2$3 rel=\"noopener\">')
    
    newText = newText.replace(/<a (.*?)rel=\"(.*?)\"(.*?)rel=\"(.*?)\"(.*?)>/g , '<a $1$3$5 rel=\"$2 $4\">')
    
    newText = newText.replace(/<a (.*?)rel=\"(.*?)noopener(.*?)noopener(.*?)\"(.*?)>/g , '<a $1rel=\"$2noopener$3$4\"$5>')
    
    newText = newText.replace(/rel=\"(.*?)\\s\"/g , 'rel=\"$1\"')
    
    newText = newText.replace(/ {2,}/g , ' ')
    
    if (text == newText)
      abort();
    
    copy(newText)
    paste()"

Enable=true
Icon=\xf121
InMenu=true
Input=text/plain
Name="test""

使い方

あらかじめ以下の記事を参考に、スクリプトを登録しておきます。

CopyQ に共有スクリプトを追加する方法 - In my mind

あらかじめ CopyQ を起動しておきます。

テキストエディタやブログの記事編集画面でtarget="_blank" rel="noopener"を追加したいリンクタグを含むように選択範囲を作ります。

選択範囲をつくる

デスクトップパネルの CopyQ アイコン(ハサミの形したやつ)を右クリック。

出てきたメニューからスクリプトをクリックすると実行されます。

スクリプトを実行

スクリーンショットを撮影していて気づいたのですが、クリップボード<EMPTY>だとスクリプト名がメニューに表示されません。

何かテキトーなテキストでもコピーしておいてください。

参考

Change Upper/Lower Case of Selected Text

選択範囲をゴニョゴニョしたいときはstr(clipboard())を変数に格納していじれば良いのかφ(..)

正規表現の先読み・後読みを極める! - あらびき日記

けっきょく今回は使いませんでしたが「先読み・後読み」とかまじカオス🤯

スクリプト制作メモ

CopyQ の「選択したコマンドをコピー」「コマンドを貼り付け」で日本語が文字化けする。

コピー時に日本語という文字列は\x65e5\x672c\x8a9eになるし、貼付け時に日本語はトーフになって動作に支障をきたす。


アイキャッチ画像提供:A MacBook with lines of code on its screen on a busy desk photo – Free Computer Image on Unsplash