AlfredWorkflowで遊ぶページ

Lesson27.ワークフローを放置する

開発メモ

ワークフロー
 

1.選択中のテキストを変数に格納する

 選択中のテキストはLesson3同様HOTKEYの設定タブのSelection in macOSで取得します
 その後、ArgandValsユーティリティを使って変数に格納します
 ArgandValsユーティリティというのはワークフローで『>』となっているオブジェクトです
 開くと、{query}をselectionに格納する設定方法がわかりますので、ご参考まで
 

2.ワークフローを放置する

 上記selectionの中身をチェックします
 Conditionalユーティリティを利用しています
 先ほどセットしたselectionは{var:selection}として記載します
 Null値の場合(トップのアプリケーションで何も選択されていない場合)は
 ワークフローを放置しています
 放置でOkというのは、スクリプトとしてはなかなか衝撃的ですね
 実際に稼働するときは、エラー音(?)が鳴りますが問題ありません
 

3.自然数のチェック

 selectionに何か文字列がある場合、alfredバーが表示されます
 ここでユーザーは切り取りたい文字数や行数を入力し、ScriptFilterに制御が渡ります
 
 ScriptFilterの先頭で入力された内容が自然数かどうか判定しています
 その方法はif文の条件を正規表現としてチェックするものです

  if  [[ $1 =~ ^[1-9][0-9]* ]];then


 ポイントは
  ・二重のブランケットで囲う『[[』と『]]』
  ・等号は『=~』
  ・正規表現は直書き。コーテーションなどで囲わない
 
  『^[1-9][0-9]*』の意味は、『1から9で始まって、その後0から9が0回以上連続する』
  というものです。 

4.エラー回避のための置換

  selection=`echo "$selection" | tr '"' '”' | tr '\' '\' | tr "'" "’" `


 $selectionというのが、ArgandValsユーティリティで取得・設定したテキストです
 trで3つの置換をしています。ちょっと見難いですが、
 『’』『”』『\』をそのまま使うと、JSONフォーマットがうまく作れないので全角に
 変更しています

5.n行目の抽出、n文字目の抽出

 n行目の抽出は、sedの-nオプションで実施しています

`echo "$selection" | sed -n $1p`


 $1は入力した数字です
 
 n文字目の抽出は変数の部分参照を使っています

 ${selection:$(($1-1)):20}


 『$((数式))』は数式の計算結果です
 $1は入力した数字なので、例えば5を入力した場合、5マイナス1で4となります
 これは、変数の取り出したい位置を指定するものですが、先頭の1文字目を0として表すための
 計算です
 最後の20は取り出したい文字数になります
 
 つまり、下記の書式となります

 ${変数:取り出したい位置:取り出したい文字数}

6.JSONフォーマット作成

 Alfredのリターンとして2つ使います
 1つは○文字目、2つ目は○行目です
 なお、ブランク行の場合は、2つ目を表示させないようにしています
 ブランク行かどうかは、変数がNull値かどうかで判定しています

  if [ -n "$line" ] ; then 

7.再びの放置

 JSONフォーマットでargを”“として、後続につなげていません
 いわば、ここでも放置です
 Alfredバーで選択してもなにも起こりません
 ただ、Alfredバーの入力訂正はできるので、○文字目、○行目を何度でも書き換えてOKです
 
 

背景

 alfredのデバッグツールでエラーメッセージが出力される際に、○○行目とか○○文字目という
 ような記載があったりします
 数字が大きくなると流石に手動で数えるのは面倒なのでツール化してみました
 ちなみに○○行目というのであれば、テキストエディットの⌘Lで検索することができますが
 ○○文字目を見つける機能はなさそうでした
 

取扱説明

機能:

 選択中テキストのn文字目とn行目を表示する

インストール:

 1.Alfredworkflowをダウンロード
 2.ファイルをダブルクリックしてワークフローに登録

使い方:

 ・文字列を選択してHotkey『⌃c』を入力(Hotkeyはご自身での設定が必要です)
 ・表示されたAlfredバーに数字を入力

トップページに戻る