BBEdit.appでハードラップを使って箇条書きの整形をしてみる

●ハードラップ(文字数を指定して強制的に改行する)

プレーンテキストで文章を作成している時に、箇条書きのパートを作ることはよくありますが、その時に文字数を決めてリバースインデントを使って2行目以下を折りたたみたいことがあります。
レイアウトソフトで整形するのであれば、原稿は未整形のままであるべきですが、受け取る側もプレーンテキストで見る場合のことです。
プレーンテキストで送信したいメールなどがこのケースでしょう。
BBEdit.appのテキスト整形能力は非常に高いので、組み込みのコマンドで”Hard Wrap…”というものを備えているのですが、日本語を対象にすると指定した文字数で折り返すのではなく、句読点などと一部の記号を折り返しのマークと認識しているようで、意図した文字数以内で折り返してしまいます。
その上で、禁則はほとんど考慮してくれないという症状です。
そこで、やはりスクリプトで対処することにしました。
折り返しの文字数は、任意に指定できます。

property cNum : "38"

tell application "BBEdit"
	activate
	if (selection of text window 1 as string) is not "" then
		display dialog "折り返しの文字数を指定してください。" default answer cNum buttons {"キャンセル", "設定"} default button 2 with title "折り返しの文字数設定" with icon note returning {text returned:theVart, button returned:theVarb}
		set cNum to theVart
		replace "([^\\n]{" & cNum & "})(?=[^\\n$]*)" using "\\1\\n" searching in the selection of text 1 of text document 1 options {search mode:grep, starting at top:true, wrap around:false, backwards:false, case sensitive:false, match words:false, extend selection:false}
	else
		display notification "文字列を選択してから実行しましょう。" with title "Notification" subtitle ""
	end if
end tell

ダイアログ内の初期値は、設定値に置き換わる(前回の設定値を保持する)仕様なので、毎回リセットしたい場合はダイアログから返される値を代入する変数の名前を変えてください。

●ハードラップをリセットする

ハードラップで強制的に整形した段落を元に戻すスクリプトです。
行頭のインデントも削除するようになっていますので、これを1回実行するだけでリセットできるでしょう。

tell application "BBEdit"
	activate
	if (selection of text window 1 as string) is not "" then
		replace "([^。.)」】])([\\r\\n]+)+([> \\s]*)" using "\\1" searching in selection of text window 1 options {search mode:grep, starting at top:false, wrap around:false, backwards:false, case sensitive:false, match words:false, extend selection:false}
	else
		display notification "文字列を選択してから実行しましょう。" with title "Notification" subtitle "" --sound name "Frog"
	end if
end tell
広告

BBEdit.appで箇条書きのリストを作成するスクリプトとそれを削除するスクリプト

嘗てはActaなどのアウトラインプロセッサを使うことが多かったのですが、最近はほとんど手にしなくなりました。そのため、アウトライン的な表現を多用する時にはマークダウンで代用したりしているのですが、プレーンテキストでもそれなりに箇条書きのニーズはあります。
そこで、段落の頭に任意のブレットを付加するスクリプトの登場です。
段落の先頭にブレットを付加するだけですから、折り返しのインデント設定は行っていません。
(プレーンテキストだけでインデント表現をしようと思っていませんので…。要は、レイアウトソフトへ持って行ってから整形するつもりなのです)

●箇条書きのリスト表示をするスクリプト

property Bullet : "• " -- "•, ‣, ⁃, ◦" -- 任意のブレットを設定して下さい。

tell application "BBEdit"
	activate
	if (selection of text window 1 as string) is not "" then
		display dialog "箇条書きのブレットを設定して下さい。" buttons {"キャンセル", "設定"} default answer Bullet default button 2 with icon note returning {button returned:theVarb, text returned:theVart}
		if theVart is not "" then set RtndBullet to theVart
		replace "^[  \\t]*" using RtndBullet searching in selection of text window 1 options {search mode:grep, starting at top:false, wrap around:false, backwards:false, case sensitive:false, match words:false, extend selection:false}
	else
		display notification "文字列を選択してから実行しましょう。" with title "Notification" subtitle ""
	end if
end tell

(*
	初期設定の"• "を起動の度にリセットして表示するようにしていますが、前回の設定を保持したい場合は、
	RtndBulletをBulletに置き換えて下さい。

*)

初期値としてブレット設定のダイアログで、”• “としていますが、任意のキャラクタを設定できます。また、
区切りの半角スペースをタブに設定する場合は、”•\t”とすればOKです。
AppleScriptだからといって、”\\t”でダブルエスケープする必要はありません。

●段落先頭のブレットを削除するスクリプト

tell application "BBEdit"
	activate
	if (selection of text window 1 as string) is not "" then
		replace "^[\\s->•‣⁃◦・*○●]+[\\s]*" using "" searching in selection of text window 1 options {search mode:grep, starting at top:false, wrap around:false, backwards:false, case sensitive:false, match words:false, extend selection:false}
	else
		display notification "文字列を選択してから実行しましょう。" with title "Notification" subtitle ""
	end if
end tell

削除対象のブレットのキャラクタは、任意で書き換えて下さい。(適当に設定しているのですが、※がないではないかと言われそうです…)

●BBEdit.appの”Text”メニューにある”Prefix/Sufix Line…”コマンドでは

“Prefix/Sufix Line…”で”Prefix”の「Insert」を設定すれば、行頭にブレットを付加できます。
注意しなければいけないのは、段落を選択しないで実行した場合、全ての段落にブレットが適用されることで、その点だけ注意が必要です。
上記のスクリプトを書いた時点では、このメニューコマンドに気がついていなくて、気がついた時点で掲載をやめようかとも持ったのですが、まあ、これはこれで…。

BBEdit.appで、行頭に段落番号を追加する/削除するスクリプト

以前、TextWrangler.app用に「Add Line Number.scpt」という名称で、段落番号を追加するスクリプトを公開しましたが、番号が1から開始するだけの仕様だったため、任意の番号から始められるように加筆したものを今回記載します。

●段落番号を追加するスクリプト

選択した範囲の段落の先頭に番号を指定した任意の番号(半角)から順に付加していきます。
オプションとして、桁合わせのために先頭に半角スペースか0を付加することができます。
次に、段落番号の後ろに、区切り文字を入れることができます。デフォルトでは「. 」となっていますが、任意の文字列を指定できます。
(残念ながら、増加分の指定は出来ません)

property Leading : "0"
property SuffixStr : ". "
property ParaList : {}
property LNUm : "1"

on run
	tell application "BBEdit"
		activate
		if (selection of text window 1 as string) is not "" then
			copy every line of selection of text window 1 to ParaList
			set NumParagraphs to count of items in ParaList
			display dialog "段落番号の開始番号を設定してください。" & return & return & "また、桁合わせのリーディングを使用しますか?" buttons {"キャンセル", "使用する", "数字だけ"} default answer LNUm default button 3 with icon note returning {button returned:theVarb, text returned:theVart}
			set LNUm to theVart
			if theVarb is "数字だけ" then
				set Leading to ""
			else
				display dialog "桁合わせのリーディングにゼロ ‘0’を使用しますか?" & return & return & "スペースにしますか?" buttons {"キャンセル", "0", "スペース"} default button 2 with icon note returning {button returned:theVarb}
				if theVarb is "0" then
					set Leading to "0"
				else
					set Leading to " "
				end if
			end if
			display dialog "区切りに ‘.’を使いますか?" & return & return & "スペースにしますか?" default answer SuffixStr buttons {"キャンセル", "設定"} default button 2 with icon note returning {button returned:theVarb2, text returned:theVart2}
			if theVarb2 is "設定" and theVart2 is not "" then
				set SuffixStr to theVart2
			end if
			set theResult to {}
			repeat with i from 1 to NumParagraphs
				if NumParagraphs < 10 then
					set end of theResult to (LNUm - 1 + i) & SuffixStr & item i of ParaList & return
				else if NumParagraphs < 100 then
					set end of theResult to my zeroL2((LNUm - 1 + i), Leading) & SuffixStr & item i of ParaList & return
				else if NumParagraphs < 1000 then
					set end of theResult to my zeroL3((LNUm - 1 + i), Leading) & SuffixStr & item i of ParaList & return
				end if
			end repeat
			set selection of text window 1 to (theResult as string)
		else
			beep
			display notification "文字列を選択してから実行しましょう。" with title "Notification" subtitle "" --sound name "Frog"
		end if
	end tell
end run

to zeroL2(n, leadingChar)
	if n < 10 then
		return leadingChar & n as string
	else if n < 100 then
		return n as string
	else
		return n as string
	end if
end zeroL2

to zeroL3(n, leadingChar)
	if n < 10 then
		return leadingChar & leadingChar & n as string
	else if n < 100 then
		return leadingChar & n as string
	else
		return n as string
	end if
end zeroL3

●行頭の段落番号除去スクリプト

行頭の段落番号除去バージョンです。

tell application "BBEdit"
	activate
	if (selection of text window 1 as string) is not "" then
		replace "^[\\s\\d0-9]+[\\..\\s ]*" using "" searching in selection of text window 1 options {search mode:grep, starting at top:false, wrap around:false, backwards:false, case sensitive:false, match words:false, extend selection:false}
	else
		display notification "文字列を選択してから実行しましょう。" with title "Notification" subtitle ""
	end if
end tell

こちらは区切り文字に合わせて変更しながら使用して下さい。

BBEdit.appのスクリプトパレット

BBEdit.appを使っていると、いつの間にかスクリプトの数が増えて、常用するスクリプトだけをリストアップしているのですが、図のようになっています。

 

図は、スクリプトパレットと呼ばれるようで、「Window」メニューの「Palettes」から「Scripts」を選択することで開けます。
BBEdit.appでは、下の図のようにpreferenceから殆どのメニュー項目にショートカットを設定できますので(ver.11、12で確認)、ここからスクリプトパレットにショートカットを設定しても良いのですが、上の図のようにスクリプトパレットを呼び出す/閉じるスクリプトを書いて、スクリプトパレットに表示させショートカットを割り当てることにしました。

●スクリプトパレットを呼び出す

tell application "BBEdit" to open scripts list

●スクリプトパレットを閉じる

tell application "BBEdit" to close scripts list -- saving no

“open”/”close”だけというシンプルなものです。
ショートカットの設定は、スクリプトパレット上の「Set Shortcut」ボタンをクリックしてから設定するといいでしょう。

BBEdit.appで、「, . .,→。、+全角()[]」の変換スクリプトなど

随分と久し振りに理工学書系統の組版をやりました。以前はほぼ理工学書専門と言っていい時期もあったのですが最近はご無沙汰で、何屋だか分からないような事をやっているのですが…。
そこで、原稿は当然のようにWordということになり、これはもうそれ以外ないようなもので(とは言えTeXで貰ってもねぇ…)Word形式は問題ないのですが、著者ごとに句読点が滅茶苦茶で、半角全角カンマピリオド読点句点のごちゃ混ぜで、かな漢字の間でも半角カンマだったり、今時これはないんじゃないのと頭を抱えたくなる混沌状態でした。
遠い昔、ワープロ全盛期からパソコンへの移行期、プロポーショナルフォントに慣れない世代にこういったことがあったといったことを聞いたことがあります(なんだかこじつけのような気がします…)。
今時こんなでいいのかと思った次第ですが、受けた側としてはなんとかするしかないわけで、結句、今回紹介するようなスクリプトを書く羽目になりました。
これまでも、句読点やパーレンの統一のための変換スクリプトはいくつか書いてはいましたが、今回のようなケースではなんとか手間を省きたいので、半角英数字混じりの文を一括で処理したいと思ったわけです。
原稿によって条件があまりに乱れているので、今回も全てに適用できたわけではないのですが、まあ、一つの足掻きの例として紹介する次第です。

●「, . .,→。、+全角()[]」の変換

変換用のスクリプトは、BBEdit.app用です。

tell application "BBEdit"
	activate
	if (selection of text window 1 as string) is not "" then
		replace "," using "、" searching in the selection of text 1 of text document 1 options {search mode:literal}
		replace "." using "。" searching in the selection of text 1 of text document 1 options {search mode:literal}
		replace "、 *" using "、" searching in the selection of text 1 of text document 1 options {search mode:grep}
		replace "(, *)(?=[^\\x00-\\x7f]+)" using "、" searching in the selection of text 1 of text document 1 options {search mode:grep}
		replace "(\\. *)(?=[^\\x00-\\x7f]+)" using "。" searching in the selection of text 1 of text document 1 options {search mode:grep}
		replace "(?<=[^\\x00-\\x7f])(, *)" using "、" searching in the selection of text 1 of text document 1 options {search mode:grep}
		replace "(?<=[^\\x00-\\x7f])(\\. *)" using "。" searching in the selection of text 1 of text document 1 options {search mode:grep}
		replace "(?<=[^\\x00-\\x7f])( *\\( *)" using "(" searching in the selection of text 1 of text document 1 options {search mode:grep}
		replace "( *\\( *)(?=[^\\x00-\\x7f]+)" using "(" searching in the selection of text 1 of text document 1 options {search mode:grep}
		replace "( *\\) *)(?=[^\\x00-\\x7f]+)" using ")" searching in the selection of text 1 of text document 1 options {search mode:grep}
		replace "(?<=[^\\x00-\\x7f])( *\\) *)" using ")" searching in the selection of text 1 of text document 1 options {search mode:grep}
		replace "(?<=[^\\x00-\\x7f])( *\\[ *)" using "[" searching in the selection of text 1 of text document 1 options {search mode:grep}
		replace "( *\\[ *)(?=[^\\x00-\\x7f]+)" using "[" searching in the selection of text 1 of text document 1 options {search mode:grep}
		replace "( *\\] *)(?=[^\\x00-\\x7f]+)" using "]" searching in the selection of text 1 of text document 1 options {search mode:grep}
		replace "(?<=[^\\x00-\\x7f])( *\\] *)" using "]" searching in the selection of text 1 of text document 1 options {search mode:grep}
		
		replace "([\\x00-\\x7f]+?)(、)([\\x00-\\x7f]+?)" using "\\1, \\3" searching in the selection of text 1 of text document 1 options {search mode:grep}
		replace "([\\x00-\\x7f]+?)(.)([\\x00-\\x7f]+?)" using "\\1. \\3" searching in the selection of text 1 of text document 1 options {search mode:grep}
	else
		display notification "文字列を選択してから実行しましょう。" with title "Notification" subtitle ""
	end if
end tell

かなりの悪足掻きです。まだまだ最終解というわけには行かず、参考文献のフォーマット部分の日本語文献では使えないでしょう。

●逆方向ceでは「。、→.,+全角()[]」

tell application "BBEdit"
	activate
	if (selection of text window 1 as string) is not "" then
		replace "、 *" using "," searching in the selection of text 1 of text document 1 options {search mode:grep}
		replace "、" using "," searching in the selection of text 1 of text document 1 options {search mode:literal}
		replace "。" using "." searching in the selection of text 1 of text document 1 options {search mode:literal}
		replace "(?<=[^\\x00-\\x7f])( *\\( *)" using "(" searching in the selection of text 1 of text document 1 options {search mode:grep}
		replace "( *\\( *)(?=[^\\x00-\\x7f]+)" using "(" searching in the selection of text 1 of text document 1 options {search mode:grep}
		replace "( *\\) *)(?=[^\\x00-\\x7f]+)" using ")" searching in the selection of text 1 of text document 1 options {search mode:grep}
		replace "(?<=[^\\x00-\\x7f])( *\\) *)" using ")" searching in the selection of text 1 of text document 1 options {search mode:grep}
		replace "(?<=[^\\x00-\\x7f])( *\\[ *)" using "[" searching in the selection of text 1 of text document 1 options {search mode:grep}
		replace "( *\\[ *)(?=[^\\x00-\\x7f]+)" using "[" searching in the selection of text 1 of text document 1 options {search mode:grep}
		replace "( *\\] *)(?=[^\\x00-\\x7f]+)" using "]" searching in the selection of text 1 of text document 1 options {search mode:grep}
		replace "(?<=[^\\x00-\\x7f])( *\\] *)" using "]" searching in the selection of text 1 of text document 1 options {search mode:grep}
		replace "([\\x00-\\x7f]+?)(、)([\\x00-\\x7f]+?)" using "\\1, \\3" searching in the selection of text 1 of text document 1 options {search mode:grep}
		replace "([\\x00-\\x7f]+?)(.)([\\x00-\\x7f]+?)" using "\\1. \\3" searching in the selection of text 1 of text document 1 options {search mode:grep}
	else
		display notification "文字列を選択してから実行しましょう。" with title "Notification" subtitle ""
	end if
end tell

こちらも同じように限定された条件では破綻します。
まあ、万能な対応というものは出来ないのでしょうが、なんだか不完全燃焼気味ではありますし、まだまだ何度も書き直しをやることになる気がします。

●行頭行末スペース除去

tell application "BBEdit"
	activate
	if (selection of text window 1 as string) is not "" then
		display dialog "行頭・行末のタブ削除を含みますか?" buttons {"キャンセル", "スペースだけ削除", "タブも含んで削除"} default button 3 with icon note returning {button returned:theVarb}
		if theVarb = "スペースだけ削除" then
			replace "[  ]+$" using "" searching in selection of text window 1 options {search mode:grep}
			replace "^[  ]+" using "" searching in selection of text window 1 options {search mode:grep}
		else if theVarb = "タブも含んで削除" then
			replace "[ \\s]+$" using "" searching in selection of text window 1 options {search mode:grep}
			replace "^[ \\s]+" using "" searching in selection of text window 1 options {search mode:grep}
		end if
	else
		display notification "文字列を選択してから実行しましょう。" with title "Notification" subtitle ""
	end if
end tell

エクセルからのコピーペースト文を対象とした場合に、行頭・行末のタブが邪魔な時には便利です。

●追補-ver.12.1.4で、日本語入力(Japanese InputMethod)が誤動作します

図のように日本語入力(Japanese InputMethod)で変換候補を次々にスクロールしていくと、その変換候補が挿入ポイントのカーソルの右に次々と表示され、それが消えてくれません。
ver.12.1.3まではこんな変な症状は出ませんでしたから、ver.12.1.4固有の問題だと思いたいところです(次のバージョンでは修正されていることを願うばかりです…)。
私は、ダウンロードしておいたver.12.0.2に戻して問題を回避しましたが、旧バージョンをダウンロードしていなくて、オートアップデートで最新版に対応している方は、ver.11をBarebone.comのサイトからダウンロードしてダウングレードするしかないかも知れません。
日本語入力がメインの作業の時は、ソフトラップ時の日本語の折り返し表示に難があるので、CotEditor.appなどを主に使っているので、ver.12.1.4で日本語入力(Japanese InputMethod)が誤動作することに気がつくのが遅れました。
ダウングレードを試している際に、ver.12.1.2ではソフトラップ時の折り返しがウィンドウ幅を超えるという現象にも遭遇しました。日本語環境でBBEdit.appを使い続けるという点で、なかなかハンディが大きいなという思いが湧いてきますが、Grepを使った検索/置換機能の強力さ・式表現の素直さを考えるとそう簡単に手放せないのも現実です。

WindowsからのZipファイルを文字化けしないで解凍するには?

WindowsへMacから文字化けしないZipファイルを手渡すためにはいくつかの方法があることを以下のエントリに書きましたが、逆に、Windowsから手渡されたZipファイルをMacで文字化けしないで解凍するためには、Mac標準のアーカイブユーティリティ.appではダメです。

WindowsマシンへZipファイルを渡すには
WindowsマシンへZipファイルを渡すには – 2
WindowsマシンへZipファイルを渡すには – 3

「20180111171620」という日付を名前にしたZipファイルが宅ふぁいる便経由で送られてきたのですが、Mac標準のアーカイブユーティリティ.appで解凍すると、上の図のように文字化けして開いて見るまで内容がわかりませんし、ファイル名は開いたところで不明のままです。

SHIT_JIS(CP932)でエンコードされたファイル名をUTF-8にデコードして解凍するツールを見つけないといけない訳です。

アーカイブされたファイル/フォルダのエンコーディングを自動判別して解凍してくれるツールがあっても良さそうなものですが、私が知る限りでは、紹介する“The Unarchiver.app”<https://theunarchiver.com>一択のようです(他にもあるはずなのですが…、あってもいいはずなのですが…)。

 

使い方

ダブルクリックで起動した場合、図のようにPreferencesウィンドウが開くので、慣れないとどうやって使うのか分からないかもしれません。図の一番上の項目の「zip」ファイルもチェックして、zipファイルの解凍も“The Unarchiver.app”に指定してしまうのも手でしょう。そして、任意のzipファイルを選択して、“情報を見る”からデフォルトのアプリケーションとして指定すれば、ダブルクリックでの起動で解凍アプリケーションとして“The Unarchiver.app”が使われるようになります。これが一番シンプルで面倒がないです。
個別に判断して、標準のアーカイブユーティリティ.appとThe Unarchiver.appを使い分けるのであれば、The Unarchiver.appのアイコンの上にアーカイブファイルをドロップするか、アプリケーションを指定して開くというのが一般的な使い方となります。

UTF-8以外のエンコーディングのzipファイルを解凍する際には、図のようなダイアログが出て、エンコーディングを確認してくるので、‘Japanese Shift JIS’を選択すれば文字化けしないで解凍できます。解凍後の表示サンプルが表示されますので、確認できる点も分かりやすいです。

ワークフロー、あるいはサービスを使ってThe Unarchiver.appを開く

Maczip4Win.appのワークフローと全く同じ手順で、ワークフローをAutomator.appを使って作成し、Finder上でアーカイブファイルを選択した状態でワークフローをメニューエクストラのスクリプトメニューから起動するといった方法が、私の場合は慣れで一番やりやすい方法です。
設定時のスクリーンショットを置いておきます。

WindowsマシンへZipファイルを渡すには – 3 – windowszipというPHPファイル

「WindowsマシンへZipファイルを渡すには」というエントリで、MacZip4Win.appを紹介しましたが、この度、新たなツールを見つけました。「mac-zip-windowsのwindowszip」です。
分かりにくいですね。githubのmac-zip-windowsサイトで公開されている「windowszip」という名前のPHPファイルが、mac標準のzipに変わって「ウィンドウズに渡しても文字化けしないで解凍できる」zipファイルを作成してくれるというものです。
使い方などの詳細は作者のブログ「MacBookを快適に!快適なマックライフを~」にありますので、そちらを参照すれば分かると思います。
実行ファイル「windowszip」のダウンロードもgithub経由でなくてもブログから直接ダウンロードできるようになっています。

「mac-zip-windowsのwindowszip」の特徴

特徴は、以下の通りです。

・ __MACOSXフォルダを作りません
・ .DS_storeファイルは圧縮対象外
・ 日本語ファイル、日本語フォルダはそのまま日本語で文字化けしません(UTF-8-MACからShiftJIS(CP932)に変換されます)
・ .txt拡張子は自動でWindows改行(CRLF)に変換して圧縮します
・ 圧縮対象のフォルダ・ファイルにWindowsの禁止文字が含まれていたら圧縮を中止して知らせます
・ フォルダ・ファイルでShiftJISに変換できない箇所を表示し圧縮を中止します

インストール

ダウンロードした「mac-zip-windows-master.zip」ファイルを解凍し、その中の‘windowszip’ファイルを任意の場所に置けばいいのですが、私は‘/usr/local/bin/’に置くことにしました。この時、‘windowszip’ファイルに実行権を付与しておくことを忘れないでください(ターミナルから’chmod +x /usr/local/bin/windowszip’のようにするのもいいでしょう。私は、カラムファイルブラウザでやりますが…)。

コマンドの構文

$ /usr/local/bin/windowszip ‘圧縮したいフォルダやファイル名’

引数としてファイル/フォルダ名を渡せばOKです。

automator.appを使ってワークフローを作る

作者のブログでは、mac標準機能の“サービス”を使ってFinder上で‘windowszip’を利用する方法が記載されていますが、私は“ワークフロー”にして、メニューエクストラのスクリプトメニューから実行することの方が好みです。従って、“ワークフロー”を作成することにしました。

作者のブログにある“サービス”と異なるのは先頭のステップで、Finder上の選択項目をシェルスクリプトの実行ステップへ引き渡すステップだけです。
“サービス”と“ワークフロー”の、Finder上の選択項目をシェルスクリプトの実行ステップへ引き渡す方法の違いは、こちらでも記載していますので参考にしてください。

使ってみての印象

処理が速いのでいいです。
Windowsの禁止文字やShiftJISに変換できない文字が含まれていると処理を中止するというのも、慣れればOKです。
MacZip4Win.appのように強制的にzipに入れてしまうというのもケースによってはありだと思っていますが、これはケースによって使い分けることにします。
未だHigh Sierra 10.13でもMacZip4Win.appは動いてくれますが、いつか動作しなくなることがあるかもしれません。その場合でも、この‘windowszip’は基本的にPHPのクラスファイルなので“動作しない”というようなことにはならないでしょう。OSレベルのエンコーディングの扱いが変更になるなどの大きな仕様変更がない限り、長期的に使っていけるだろうと思います。
perl、php、JavaScriptなどで誰か作ってくれないかと思っていましたので、本当に作者に感謝です。

Script4HotKeyUtilsの内容更新と追加

Script4HotKeyUtilsの内容更新と追加

Script4HotKeyUtilsのエントリーで公開しているスクリプトを現在の環境(Sierra、High Sierra)に合わせて更新しました。
私の環境では、Spark用に書いたものですが、メニューエクストラのスクリプトメニューに入れれば、ショートカットは定義できませんが、プルダウンメニューからのそれなりの使い勝手にはなるでしょう。
スクリプトはそれぞれ編集可能となっていますので、環境に合わせて改変することができます。
自由に加工してください。

追加したものは以下の4つのスクリプトです。

  • mount volume.scpt

    ネットワークボリュームをマウントするためのスクリプトです。
    ‘smb’を使っていますが、‘afp’に置き換えても可です。
    環境に合わせて書き換えてください。

  • Safari clear history.scpt

    UIElementsを使って、Safariの”履歴を消去…”を実行します。

  • Safari->FireFox.scpt

    Safariで開いているページ(URI)を、FireFoxで開きます。

  • Type_テキスト.scpt

    設定した任意のテキスト(定型分)をカーソルのあるポイントへ挿入します。
    文字列の長さの制限はありません。


  • 2ndwindow.scpt

    前面のアプリケーションの2番目のウィンドウを選択状態(最前面)にします。

  • close button.scpt

    最前面のウィンドウのクローズボタンをクリックします。

  • Closeallbackground_windows.scpt

    前面にあるアプリケーションの最前面のウィンドウだけを残して、背後のウィンドウを全て閉じます。

  • Finder_Restart.scpt

    Finderを再起動するスクリプトです。

  • lastwindow.scpt

    前面のアプリケーション上で複数開いているウィンドウの最背面のウィンドウを選択状態(最前面)にします。

  • minimize button.scpt

    最前面のウィンドウの黄色い(最適化)ボタンをクリックします。

  • move selections to desktop.scpt

    Finder上で選択したアイテムをデスクトップに移動するためのスクリプトです。別ボリュームのアイテムはコピーになります。

  • open Favorites.scpt

    ‘~/Library/Preferences/Favorites/’フォルダを開くスクリプトです。

  • open Library folder.scpt

    ‘~/Library/’フォルダを開くスクリプトです。

  • open Preferences Folde.scpt

    ‘~/Library/Preferences/’フォルダを開くスクリプトです。

  • open selection using.scpt

    Finderで選択されたアイテムを指定されたアプリケーションで開くためのスクリプトです。

  • open System Preferences.scpt

    「システム環境設定」を開くスクリプトです。

  • quitall.scpt

    現在開いているアプリケーションを一括終了するためのスクリプトです。

  • ResetWindowSize*0.8.scpt

    前面のアプリケーションのウィンドウサイズを画面の横幅の80%に、縦はフルサイズにセットします。

  • side-by-side.scpt

    前面のアプリケーションの1番目と2番目のウィンドウを、画面2分割のサイズで左右に並べます。

  • switch to Finder and hide all.scpt

    Finderにスイッチして他のアプリケーションを隠します。

  • switch to next app.scpt

    順番にアプリケーションを切り換えるためのスクリプトです。
    現在開いているアプリケーションをリストアップして、次のアプリケーションに切り換えます。

  • switch to previous app.scpt

    順番にアプリケーションを切り換えるためのスクリプトです。
    現在開いているアプリケーションをリストアップして、一つ前のアプリケーションに切り換えます。

  • typeshortdate.scpt

    01.01.01の形式の日付データを最前面のアプリケーションにタイプします。

  • zoom button.scpt

    最前面のウィンドウの緑の(ズーム)ボタンをクリックします。

環境

macOS 10.12、13
System UIElementsを使っていますので、macOS 10.12、13では「システム環境設定」->「セキュリティーとプライバシー」->「プライバシー」タブで「SystemUIServer.app」にチェックを入れてください。

ダウンロード

http://amstudio.sytes.net/amweb/Script4HotKeyUtils2017.iso.zip

※Script4HotKeyUtilsの著作権は放棄いたしませんが、対価は不要です。自己責任で、自由にお使いください。
インターネット上のリンクは、作者への事前/事後の承諾は不要ですので、自由にリンクして下さい。

基本的に、再配布・転載は認めません。

保証

動作に関する保証はいたしません。また、使用によって生じたと思われるいかなる損害に対しても、作者は一切責任を負い ません。使用は御自身の責任において行なってください。

 

macOS High Sierraでのメモ

Backuplist+が漸くHigh Sierra対応しました

High Sierraにアップデートした途端に動かなくなってしまったBackuplist+ 8.5.7ですが、8.5.8がついに出ました<http://robdutoitsoftware.com>。
アップデート内容は、以下の通りです。

Updated for OS High Sierra 10.13
Fixed several bugs in High Sierra.
Changed some cloning behaviors for the new apfs file system introduced in High Sierra.
Fixed bug preventing remounting of encrypted sparse images.
New feature: You can now set up multiple backup tasks to run with one click or on schedule.
New feature: You can select multiple backup tasks in the task bar to run manually and in sequence.
Latest custom build of rsync 3.1.1 optimized for OS X.

複数のタスクを一括で実行できるようになったようですが、何よりもHigh Sierraで動くことと、APFSファイルシステムに対応してきたことが有難いです。
バインドされている‘rsync’は3.1.1で3.1.2でないことが若干残念ですが、オプションの‘-A’‘-X’がそのまま使えるカスタムビルドになっていることが有難いです。
因みに、自分で差分パッチを当てて3.1.2をビルドしてみたのですが、ACLsパッチでエラーが出てしまうので止む無くBackuplist+ 8.5.7にバインドされているrsync 3.1.1を‘/usr/local/bin/’にコピーして使っています。

Path Finder 7.6でHigh Sierra対応

Backuplist+ 8.5.7と共に、High Sierraにしてから焦ったことの筆頭がPath Finder 7.5が起動出来ないことでしたので、早い対応には感心しました。
Backuplist+ 8.5.7が動かない間、Path Finder 7.6の”File Synch”機能と自作のAppleScriptアプリケーションで同期を賄っていました。

その他

JapaneseIM.appで、「L」キーでラ行が直接入力できない仕様に変更されてしまった(らしい)こと(‘/System/Library/Input Methods/JapaneseIM.app/Contents/PlugIns/JapaneseIM.appex/Contents/Resources/RomajiRule_Default.txt’の書き換えや、‘~/Library/Preferences/com.apple.inputmethod.Kotoeri.plist’のキーの追加などの前バージョンまでの有効な手法が無効化されているようです)などについては、もう少し検証する時間が欲しいので、ある程度の目処が立った頃にまたエントリーしようと思います。

macでFLACも音量調整したい?

MP3やaac(m4a)などはこのエントリで一応の決着はついていたのですが、最近入手するファイルの種類がFLACであることが多くなってきました。代表的なロスレスフォーマットですから、音質的には有り難いのですが、Playerの制約で諦めていたロスレスフォーマットが殆どのPlayerで当たり前に再生できてしまう環境になってきたのですね。
となると、‘aacgain’に該当するような機能のFLAC対応ツールが欲しいところです。

iTunesを使えばいいじゃない?

あっさりと知人にそう言われたのですが、私はiTunesの呪縛から逃れたいからあくせくしているのであって、今更面倒なiTunesを使いたいわけではないのです。
調べてみると、‘aacgain’に該当するような技法として‘ReplayGain’というものがあるようなのですが、macで動作するツールはほぼ全て(?)iTunesのライブラリありきのようで、個別にサウンドファイルをスキャンしてくれるタイプは見つかりませんでした。

‘ReplayGain’について

以下のサイトを参考にしました。

https://plaza.rakuten.co.jp/wizardofstarlite/diary/201405030000/
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1369998718
http://foobar2000.xrea.jp/index.php?Replaygain%20つかいかた

結局、foobar2000に行きつくようですね。

諦めるか?

foobar2000にmac版があればいうことないのですが、まあ、待っていても無駄なような気がします。他に‘ReplayGain’ scanができるツールがないものかとかなり探しましたが、やはりダメかなとあきらめかけたところで、知人から‘beaTunes5.app’を教えられ、2週間のトライアル期間があるようなのでダウンロードしてみました。確かに‘ReplayGain’に対応しているようです。が、しかし、私が求める方向性とは違っているようで、何ら便利に感じられません。半端ない“これじゃない”感満載です。いや、優秀なアプリだろうことは分かるのですが、私が少数派なのも理解しますが、….。

“逃げ道”を思いつきました。

“逃げ道”というか、何というか。

‘ReplayGain’のscanをmac上でやろうと思っていたのですが、何で“mac上で”なのでしょう?別に、macでサウンドファイルを再生(play)するわけではないのです。再生は携帯端末で、iOSは使いたくないな、というのが私の狙っている道筋なわけで、携帯端末上でscanとplayができるツールを探せばいいのでは?ということです。

なんだか勘違いなのでした。

携帯端末上で‘ReplayGain’のscanとplayができるツールを改めて探すことにしました。‘Poweramp’も購入までしてみたのですが、再生時に‘ReplayGain’のメタタグを利用できるようですが、scanには対応していないようです(使い方が分からなかっただけかもしれません…)。
で、結局、foobar2000のモバイル版に行き着くわけです。

http://mobile.foobar2000.com/
http://foobar2000.xrea.jp/index.php?foobar2000%20mobile

一件落着

scanは、携帯のそんなに高くはないハードウェアスペックで遅いのではないかと案じていたのですが、思ったより速く感じました。まあ、それなりにはかかりますが。

携帯端末にデータを移す前に、macで音量調整を先に施すという考え自体が勘違いであったわけで、携帯端末上で音量調整をしてしまえばいいという、何とも締まらないオチでした。
ということで、割と長く使ってきた‘MacMP3Gain.app’の登板機会は失われたようです。

言い訳とお詫び

このエントリに、mac上で‘ReplayGain’のscanとplayができるツールを期待された方には申し訳ないような結論であります。
当面、私の環境ではデジタルメディアサーバーやデジタルメディアレンダラーなどの役割をmacに担わせるつもりはないので、今後の話の展開はないものと思ってください。