![見出し画像](https://assets.st-note.com/production/uploads/images/145809676/rectangle_large_type_2_757be065a8775131859943d458b0d6a8.png?width=1200)
選択したテキストを1行ずつペーストするKMマクロ
選択したテキストを1行ずつペーストするAppleScriptを配布されている方がいて、それをKeyboard Maestroでマクロ化して使っていました。
次のような不満点がありました。
ペースト時に改行が入ってしまう(フォームなどに入れていくとき、誤操作が生じる)
再配布できない
Keyboard Maestroだけで完結するように作り直してみましたので、その知見を共有します。
まずは復習コンテンツ
複数行のテキストを配列として扱う(1)
次のようなテキストがあるとしましょう。
イチゴ
桃
りんご
改行を,に置換することでKeyboard Maestroでは配列として扱えます。
イチゴ,桃,りんご
次のマクロを実行すると
![](https://assets.st-note.com/img/1719798607694-6NkNnPIac3.png?width=1200)
次が返ります。
配列の要素数:3
2つ目の配列:桃
![](https://assets.st-note.com/img/1719798618530-i7GCX9OD2R.png?width=1200)
複数行のテキストを配列として扱う(2a)
ところが、テキスト内に「,」があると、
![](https://assets.st-note.com/img/1719799508144-dRZkyqjuFc.png?width=1200)
,で個別の要素と扱われてしまうため、うまくありません。
![](https://assets.st-note.com/img/1719799564049-5lyq1rv7A8.png?width=1200)
この場合には配列を認識させるための区切り文字を「,」以外の文字にします。今回は「〓」(げた)に設定します。
![](https://assets.st-note.com/img/1719799762539-vBrrD4KuQ9.png?width=1200)
これを実行すると、期待どおりの値は戻ります。
![](https://assets.st-note.com/img/1719799779465-qIJEnCaC2M.png?width=1200)
複数行のテキストを配列として扱う(2b)
「〓」以外の記号を使いたいことを想定し、変数化します。
![](https://assets.st-note.com/img/1719799934027-8bvmEqAIXe.png?width=1200)
この場合、Filterアクションを使って変数内変数を処理する必要があります。
![](https://assets.st-note.com/img/1719799945547-03i1hmje2J.png?width=1200)
その他の配慮
次の場合は除外できるようにします。
スペースやタブだけの行
空行
![](https://assets.st-note.com/img/1719802400302-AAZ9xuePEH.png?width=1200)
完成したマクロ
次の2つのマクロを用意しました。
区切り文字を「〓」で決め打ち
区切り文字を変更できるように
原稿内で「ここにツールアイコンが入る」目印として「〓」を使うことがあるため、区切り文字を変更できるように変数化しましたが、「〓」以外に何を使えばよいのか…は、それはそれで悩みます。
区切り文字を「〓」で決め打ち
![](https://assets.st-note.com/img/1719803661208-fp9KL6XwOz.png?width=1200)
区切り文字を変更できるように
![](https://assets.st-note.com/img/1719803645783-3pIBgP2pzX.png?width=1200)
配列を使わないバージョン
「どうにもまわりくどいよな〜」と悩み、配列を使わないバージョンを考えました。
基本的なロジック
1行目のみを取り出せるように、次の正規表現を使います。
(?<!\n)(.*)\n
変数「local__Array」からSearch Variableアクションで「(?<!\n)(.*)\n」にマッチする文字列を取り出し、変数「local__firstline」に入れます。
![](https://assets.st-note.com/img/1719826551330-uFXQYMiIrB.png?width=1200)
変数「local__Array」からSearch and Replace アクションで変数「local__firstline」と改行(\n)を削除します。
![](https://assets.st-note.com/img/1719826614218-xxxe88Wml8.png?width=1200)
マクロの全容
非常に短くなり、、「〓」の問題もクリアされました。
![](https://assets.st-note.com/img/1719810298619-lD7SD1u6HO.png?width=1200)
次は何がペーストされる?
ClipEyeを入れておくと、メニューバー内にクリップボードが可視化されます。
「〓」および2つ目以降も表示されてしまいますが、用は足ります。
![](https://assets.st-note.com/img/1719803134061-BUmOORTlTR.png?width=1200)
ダウンロード
サンプル
マクロ
ここから先は
![](https://assets.st-note.com/production/uploads/images/7425662/profile_a5ee2a599e9dc5d7e0de3dfdbdf04018.jpg?fit=bounds&format=jpeg&quality=85&width=330)
DTP Transit 定期購読マガジン
マガジン限定記事やサンプルファイルをダウンロードできます。
定期マガジンを購読されるとサンプルファイルをダウンロードいただけます。 https://note.com/dtp_tranist/m/mebd7eab21ea5