📝

RaycastのScript Command機能を利用して文章中のバッククォートを除去

に公開

Raycast で選択テキストのバッククォートを除去するのだ

やりたいこと

  • 文章中のバッククォートを除去したい
  • 作業中のテキストエディタなどから離れたくない
  • バッククォートを除去するスクリプトを手軽に実行させさせたい

Raycast を使ってホットキー一発で除去・置換させる

作業中のエディタから離れることなく、選択したテキストのバッククォートをホットキー一発で除去・置換したいのだ。その実現方法として、RaycastのScript Command機能を利用するのだ。

https://www.raycast.com/blog/getting-started-with-script-commands

macOSでバッククォートが含まれた文章をコピーして、決めたホットキーで Raycast を呼び出すのだ。
そして、表示されたウィンドウにペーストしてEnterキーを押すだけで、バッククォートが消えた文章に置き換えたいのだ。

例えば、こんな風に変換したいのだ。

【Before:まずこの文章をコピー】

`きらきら`ながれる`川`であそぶのが、いちばん楽しいのだ!


決めたホットキーでRaycastを呼び出す
呼び出されたRaycast

【After:RaycastにペーストしてEnterするとこうなる】

きらきらながれる川であそぶのが、いちばん楽しいのだ!

スクリプト

さっそく、完成したスクリプトを見せるのだ。これをRaycastに登録するだけで、面倒な作業が自動化できるのだ。

#!/bin/bash

# Required parameters:
# @raycast.schemaVersion 1
# @raycast.title remove backticks
# @raycast.mode silent

# Optional parameters:
# @raycast.icon 🤖
# @raycast.argument1 { "type": "text", "placeholder": "Selected Text", "fallbackText": "{selection}" }

echo "$1" | tr -d '`' | pbcopy
osascript -e 'tell application "System Events" to keystroke "v" using {command down}'

このスクリプトをRaycastに設定すると、以下の操作が可能になるのだ。

まず、バッククォートを含むテキストをコピーする。次に、設定したホットキーでRaycastを呼び出すと、専用の入力ウィンドウが表示されるのだ。そのウィンドウに先ほどコピーしたテキストをペーストしてEnterキーを押すと、スクリプトが実行される。

最終的に、バッククォートが除去されたテキストがクリップボードにコピーされ、さらに元のアプリケーションのカーソル位置へ自動的にペーストされるのだ。

設定手順

設定手順をメモしておくのだ

専用フォルダを作るのだ

まず、スクリプトを保存しておくためのフォルダを作るのだ。Finderで分かりやすい場所に RaycastScripts みたいな名前のフォルダを作るといいのだ。

Raycastにフォルダを登録するのだ

次にRaycastの設定画面を開いて、「Extensions > Script Commands」に進むのだ。そこにある「Add Directory」ボタンを押して、さっき作った RaycastScripts フォルダを登録するのだ。

Raycastにフォルダを登録

スクリプトファイルを作るのだ

RaycastScripts フォルダの中に、例えばremove-backticks.sh という名前で新しいファイルを作るのだ。そして、さっきの「完成したScriptのコード」をそのまま貼り付けて保存するのだ。

実行権限を与えるのだ

このままだとただのテキストファイルだから、スクリプトとして動くように「実行権限」を与える必要があるのだ。ターミナルアプリを開いて、chmod +x (+xの後に半角スペースを忘れずに)と入力したあと、作った remove-backticks.sh ファイルをターミナルにドラッグ&ドロップして、Enterキーを押せば完了なのだ。

ホットキーを設定するのだ

最後に、Raycastの設定画面に戻って、今作った remove backticks スクリプトに好きなホットキーを割り当てるのだ。これで、いつでも一発で呼び出せるようになるのだ!

スクリプトの仕組み

どうしてこのスクリプトが動くのか、中身を少しだけ解説するのだ。

まず、さっきのスクリプトは、Raycastの機能を活用して以下の処理を自動化しているのだ。

  • ユーザーが選択したテキストをスクリプトが受け取る

  • 受け取ったテキストから全てのバッククォートを削除する

  • 加工後のテキストをmacOSのクリップボードにコピーする

  • 最後に、ペーストのショートカットキー(Command + V)を擬似的に実行し、元の選択テキストを加工後のテキストで置き換える。

Raycast用の設定情報(メタデータ)

シェバンやRaycast設定が書いてあるのだ

処理の本体部分

ここが、実際にバッククォートを消す処理の心臓部なのだ。

echo "$1" | tr -d '`' | pbcopy

これは3つのコマンドを パイプ | でつないでいるのだ。左のコマンドの結果を、右のコマンドが受け取って処理するリレーみたいなものなのだ。

詳細

echo "$1"

Raycastから受け取った選択テキストを出力するのだ。

tr -d '`'

tr コマンドが、受け取ったテキストからバッククォートを全部削除(delete)してくれるのだ。

pbcopy

pbcopy コマンドをつかってバッククォートが消えたキレイなテキストを、macOSのクリップボードにコピーするのだ。

参考:
https://curiosum.com/til/copy-paste-within-terminal-macos-and-linux

仕上げのペースト操作

最後に、このコマンドで置き換えを完了させるのだ。

osascript -e 'tell application "System Events" to keystroke "v" using {command down}'

これは osascript というコマンドで、AppleScript[1]を実行しているのだ。「System Events」というアプリにお願いして、Commandキーを押しながら "v" を押す、つまりペーストのショートカットを擬似的に実行[2]しているのだ。これで、クリップボードに入れたテキストが元の場所に貼り付けられて、置換が完了するのだ。

脚注
  1. osascript で使った AppleScript は、まるで英語の文章みたいに書けるように作られた特別な言語なのだ。「tell application "Finder" to empty the trash」(Finderにゴミ箱を空にするよう伝える)みたいに、コンピュータへの命令を直感的に書けるのが特徴なのだ。AppleScriptは便利でぼくは結構つかうのだ。 ↩︎

  2. ちなみにpbpasteコマンドだと、クリップボードの内容を標準出力に出力するのだ。なので、現在アクティブなアプリケーションのカーソル位置へ直接ペーストする osascript の挙動とは異なるのだ。 ↩︎

Discussion