選択したテキストを1行ずつペーストするKMマクロ
選択したテキストを1行ずつペーストするAppleScriptを配布されている方がいて、それをKeyboard Maestroでマクロ化して使っていました。
次のような不満点がありました。
ペースト時に改行が入ってしまう(フォームなどに入れていくとき、誤操作が生じる)
再配布できない
Keyboard Maestroだけで完結するように作り直してみましたので、その知見を共有します。
まずは復習コンテンツ
複数行のテキストを配列として扱う(1)
次のようなテキストがあるとしましょう。
イチゴ
桃
りんご
改行を,に置換することでKeyboard Maestroでは配列として扱えます。
イチゴ,桃,りんご
次のマクロを実行すると
次が返ります。
配列の要素数:3
2つ目の配列:桃
複数行のテキストを配列として扱う(2a)
ところが、テキスト内に「,」があると、
,で個別の要素と扱われてしまうため、うまくありません。
この場合には配列を認識させるための区切り文字を「,」以外の文字にします。今回は「〓」(げた)に設定します。
これを実行すると、期待どおりの値は戻ります。
複数行のテキストを配列として扱う(2b)
「〓」以外の記号を使いたいことを想定し、変数化します。
この場合、Filterアクションを使って変数内変数を処理する必要があります。
その他の配慮
次の場合は除外できるようにします。
スペースやタブだけの行
空行
完成したマクロ
次の2つのマクロを用意しました。
区切り文字を「〓」で決め打ち
区切り文字を変更できるように
原稿内で「ここにツールアイコンが入る」目印として「〓」を使うことがあるため、区切り文字を変更できるように変数化しましたが、「〓」以外に何を使えばよいのか…は、それはそれで悩みます。
区切り文字を「〓」で決め打ち
区切り文字を変更できるように
配列を使わないバージョン
「どうにもまわりくどいよな〜」と悩み、配列を使わないバージョンを考えました。
基本的なロジック
1行目のみを取り出せるように、次の正規表現を使います。
(?<!\n)(.*)\n
変数「local__Array」からSearch Variableアクションで「(?<!\n)(.*)\n」にマッチする文字列を取り出し、変数「local__firstline」に入れます。
変数「local__Array」からSearch and Replace アクションで変数「local__firstline」と改行(\n)を削除します。
マクロの全容
非常に短くなり、、「〓」の問題もクリアされました。
次は何がペーストされる?
ClipEyeを入れておくと、メニューバー内にクリップボードが可視化されます。
「〓」および2つ目以降も表示されてしまいますが、用は足ります。
ダウンロード
サンプル
マクロ
ここから先は
DTP Transit 定期購読マガジン
マガジン限定記事やサンプルファイルをダウンロードできます。
定期マガジンを購読されるとサンプルファイルをダウンロードいただけます。 https://note.com/dtp_tranist/m/mebd7eab21ea5