Lesson27.ワークフローを放置する
ワークフロー
選択中のテキストはLesson3同様HOTKEYの設定タブのSelection in macOSで取得します
その後、ArgandValsユーティリティを使って変数に格納します
ArgandValsユーティリティというのはワークフローで『>』となっているオブジェクトです
開くと、{query}をselectionに格納する設定方法がわかりますので、ご参考まで
上記selectionの中身をチェックします
Conditionalユーティリティを利用しています
先ほどセットしたselectionは{var:selection}として記載します
Null値の場合(トップのアプリケーションで何も選択されていない場合)は
ワークフローを放置しています
放置でOkというのは、スクリプトとしてはなかなか衝撃的ですね
実際に稼働するときは、エラー音(?)が鳴りますが問題ありません
selectionに何か文字列がある場合、alfredバーが表示されます
ここでユーザーは切り取りたい文字数や行数を入力し、ScriptFilterに制御が渡ります
ScriptFilterの先頭で入力された内容が自然数かどうか判定しています
その方法はif文の条件を正規表現としてチェックするものです
if [[ $1 =~ ^[1-9][0-9]* ]];then
ポイントは
・二重のブランケットで囲う『[[』と『]]』
・等号は『=~』
・正規表現は直書き。コーテーションなどで囲わない
『^[1-9][0-9]*』の意味は、『1から9で始まって、その後0から9が0回以上連続する』
というものです。
selection=`echo "$selection" | tr '"' '”' | tr '\' '\' | tr "'" "’" `
$selectionというのが、ArgandValsユーティリティで取得・設定したテキストです
trで3つの置換をしています。ちょっと見難いですが、
『’』『”』『\』をそのまま使うと、JSONフォーマットがうまく作れないので全角に
変更しています
n行目の抽出は、sedの-nオプションで実施しています
`echo "$selection" | sed -n $1p`
$1は入力した数字です
n文字目の抽出は変数の部分参照を使っています
${selection:$(($1-1)):20}
『$((数式))』は数式の計算結果です
$1は入力した数字なので、例えば5を入力した場合、5マイナス1で4となります
これは、変数の取り出したい位置を指定するものですが、先頭の1文字目を0として表すための
計算です
最後の20は取り出したい文字数になります
つまり、下記の書式となります
${変数:取り出したい位置:取り出したい文字数}
Alfredのリターンとして2つ使います
1つは○文字目、2つ目は○行目です
なお、ブランク行の場合は、2つ目を表示させないようにしています
ブランク行かどうかは、変数がNull値かどうかで判定しています
if [ -n "$line" ] ; then
JSONフォーマットでargを”“として、後続につなげていません
いわば、ここでも放置です
Alfredバーで選択してもなにも起こりません
ただ、Alfredバーの入力訂正はできるので、○文字目、○行目を何度でも書き換えてOKです
alfredのデバッグツールでエラーメッセージが出力される際に、○○行目とか○○文字目という
ような記載があったりします
数字が大きくなると流石に手動で数えるのは面倒なのでツール化してみました
ちなみに○○行目というのであれば、テキストエディットの⌘Lで検索することができますが
○○文字目を見つける機能はなさそうでした
選択中テキストのn文字目とn行目を表示する
1.Alfredworkflowをダウンロード
2.ファイルをダブルクリックしてワークフローに登録
・文字列を選択してHotkey『⌃c』を入力(Hotkeyはご自身での設定が必要です)
・表示されたAlfredバーに数字を入力
トップページに戻る