見出し画像

選択したテキストを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つ目以降も表示されてしまいますが、用は足ります。

ダウンロード

サンプル

マクロ

ここから先は

12字 / 2ファイル
月に10-20本くらいの記事を投稿しています。定期購読されると、更新のお知らせを受け取ったり、マガジン限定記事やサンプルファイルをダウンロードできます。 購読を開始した月に更新された記事から読むことができます(初月無料)。

DTP Transit 定期購読マガジン

¥100 / 月 初月無料

マガジン限定記事やサンプルファイルをダウンロードできます。

定期マガジンを購読されるとサンプルファイルをダウンロードいただけます。 https://note.com/dtp_tranist/m/mebd7eab21ea5