PowerPackですが、アプリケーションに現代のAppleScriptのパワーを足すとヤバいことがいろいろできるという実例になっています。「アプリケーション内蔵メニューから呼び出す」Scriptにはセキュリティ上の制約やアプリケーション側のポリシーによる制約が大きく、いろいろボツにしたものがあります。Libraryを入れて呼ぶようなことはできません。そのため、Windowの回転Scriptなどはライブラリの三角関数を呼び出していたため、その部分だけ切り出してScript内からサブルーチンとして呼び出せるようにしておきました。locationライブラリを用いていたものを、ライブラリ化しないでScript内に展開(内容をコピペ)しました。Frameworkとしてビルドした外部Frameworkをバンドル内に入れて呼び出すことができません。LibraryのようにFrameworkをバンドル内に含むライブラリも呼べません。そのため、BridgePlusに依存している処理をAppleScriptのみで処理できるルーチンに差し替えたりしました(2次元配列のソートなど)。Menuからは呼べません。Safari上の表オブジェクトをCSV化してCotEditor上に展開するScriptなどはたいへん実用性もあり、いいと思うものの、HTMLReader.frameworkなしには実現できないので、ボツになりました(個人的には使っています)。Menu側からは呼べるので、別途そういうものを企画してみてもよいのかもしれません。APIを呼び出すようなものは収録を見送りました。APIは呼び出し用のキーが必要なわけですが、それをどーやって各ユーザーに取得してもらって、かつプログラムの中に記入してもらうかなど、説明し切れない(もうちょっとスマートに利用できないと説明がつらい)と判断して割愛しました。文字コード関連のものはボツ文字コードがらみのものは難しいものがあります。1つは、選択中の文字列の16進ダンプScript。UnicodeのNormalizeの方式の違いにより株式会社などの文字のデータの持ちかたが変わってくるので、個人的にはたまに使っていますが、CotEditorの文字コードまわりの命令が動いていないので(GUI側からは機能している)そのあたりをつつきたくなかったということはあります。あと、闇が深そうですし。仕様を決めにくいものはボツ「こういうのがあったらデモとしても面白い」と、思ったものはいくつかありましたが、技術的に可能であっても、仕様を決めにくいものや公開しにくいものについてはボツにしました。選択中の文字を画像化してAirDropで近隣のマシンに転送するScriptを企画してみたのですが、文字数に応じてフォントサイズを可変とするなど、いろいろ実現のためのアイデアは持っていました。いえ、実際に作ろうとすると「ちょっとしたデモ」の範疇を超えるぐらいの手間がかかるため、ボツにしました。opensslで選択中のテキストを暗号化するScriptも、かなり昔から使っているものがあるので、実用性で考えるとあったほうがいいものです。Softwareのアプリケーション内部で利用しているものなので、そのものを単体で配布することはためらわれたため、ボツにしました。ChromeとかPowerPointとか)をコントロールするものも割愛しました。v9.1で表オブジェクトの作成に問題があるバグとか、日常的に使っていないと見つかりません)。NaganoyaCotEditorの環境設定値(plist)から表示用フォント名を取得するAppleScriptです。本来であれば、CotEditorのwindowオブジェクト自体に属性値として表示用フォント名がついているのが(GUI側からWindowごとに表示フォントを指定できるので)理想的ですが、そういう機能は実装されていないので、無理やりplistから読み取ってみました。CotEditorの表示用フォントは、環境設定で指定したものがデフォルトで用いられ、個別のウィンドウごとに任意のフォントを指定できるようになっています。本Scriptで取得できるのは、個別のウィンドウの設定値ではなく、環境設定値のほうです。defaultsコマンドでplistを読むのはあまりおすすめできない方法ですが、できないよりはマシというところです。まっさらな(macOSをインストールしたての)環境にCotEditorをインストールして一度も環境設定でフォントを指定していない環境だとエラーになる(項目が存在しない)ので、その場合に備えてエラートラップを仕掛けています。さんのコメントから、defaultsコマンドのオプション追加でずいぶんと簡潔に書けるようで、書き直しておきました。v1.2の配布を開始しました。無償、無保証、サポートなしで提供しています。10.14/10.15にて検証を行っています。Pack」、強力なユーティリティScriptの「PowerPack」から構成され、今回アップデートしたのはPowerPackです。戦力となる強力なScript群:PowerPackCotEditorのスクリプトメニューにインストールして使うためのScript群です。アップデートしたものをご紹介いたします。W3」を指定していたScriptを「ヒラギノ角ゴシック」に変更しました。「指定範囲から電話番号を検出してiPhoneで電話をかける」「選択範囲をメモ(Notes.app)経由で転送」を収録しています。電話発信時の「発信」ボタンはご自分でクリックしてください(AppleScriptから無理やりクリックできないこともないですが.........)。・Spotlight検索CotEditorのテキストで選択中の文字をキーにしてSpotlight検索を実行、結果はFinderで表示します。・Safari(Webブラウザ)から読み込み「HTMLソースを読み込み」「本文テキストを読み込み」を追加しました。Safariでオープン中の最前面のウィンドウの内容を取得します。インデントを反映させて現在のKeynote書類にスライド追加」を追加しました。CotEditor上のテキストをもとにKeynoteのプレゼンテーションを作成します。・PDFから情報読み込み指定のPDFから各種情報を読み込んで、CotEditorの新規ドキュメント上に情報を展開します。Contents)読み込み」を追加しました。Softwareのおしらせ的なメニューを入れておきました。v1.0の配布を開始しました。無償、無保証、サポートなしで提供しています。Page即戦力となる強力なScript群:PowerPackCotEditorのスクリプトメニューにインストールして使うためのScript群です。Softwareが「こういう機能がテキストエディタに標準装備されていてほしい」と思ったものを、自分でAppleScriptで実装したものです。毎日実際に使っているものです。・カウントレポートテキストエディタ上で日本語の文章を書くときに重要な、漢字、ひらがな、カタカナ、特殊記号、英字などの文字種別ごとの使用比率の集計を行います。読みやすい文章を心がける人には、これらのバランスはたいへん重要な情報です。ここで表示している原稿用紙換算の枚数計算は単純な目安であり、実際に原稿用紙に文字を記入して改行や禁則処理を考慮した詳細なシミュレーションは行っていません。厳密に計算する場合には同梱の「原稿用紙枚数シミュレーション」のScriptを使用してください。・AppleScriptとして解釈さまざまなテキストエディタが擬似的な書式色分けの機能を提供していますが、実際に構文確認を行ったり、結果を取得するような機能を提供しているものはありません。これらのScriptはほぼスクリプトエディタと同様の構文確認(短縮表記の展開、エラー検出)、実行時の結果取得などの機能を提供します。Cocoaの機能を利用するAppleScriptObjCのプログラムも実行できます。Objectは結果出力に出してもスクリプトエディタ同様に読めません)▲ウィンドウを生成してユーザーの操作を受け付けることもできます。選択範囲に対してさまざまな処理を行います。コメント/アンコメント(コメント解除)は、あらかじめ書類のシンタックスカラーリングをプログラミング言語のものにしておく必要があります(コメント記号が言語ごとに違うので)。・音声読み上げシミュレーションCotEditor上のテキストを実際に読み上げた場合の読み上げ時間の計算を行います。読み上げた場合と、速く読み上げた場合の時間をCotEditorコンソールに出力したりします。選択中のテキストの先頭の1文字から花文字テキストを作成します。Selection選択中の英単語から花文字テキストを作成します(Courierなどの等幅フォントで表示してください)。・原稿用紙枚数シミュレーションテキストの400字詰め原稿用紙換算の枚数シミュレーションを行います。・Window回転CotEditorのウィンドウを10回3回まわします。意味はありません(新しいMacを買ったときに自己満足で回してみるとか?)。書き換えできるので心ゆくまで回してみてください。テキストを処理するサンプルです。数百Kバイト級の比較的大きなテキストをAppleScriptで高速処理するサンプルです。特定の文字だけ抽出したり削除したりするAppleScriptのサンプルです。PackCotEditorの基礎的なScriptingの参考となるサンプルScriptです。40本以上のScriiptをジャンルごとに区分けして、難易度順に番号を振ってあります。NaganoyaCotEditorで編集中の最前面の書類の本文中から指定桁の数値を抽出して登場回数で度数分布の集計を行うAppleScriptです。初版では、集計対象の数値を桁数で指定するという(使うのに)無茶な仕様になっていたので、この頭の悪い仕様に作った本人もめまいがしていました。AppleScriptを使うのは、他のどの環境でも追いつけない高度な処理を行うことに意義があると思っています。そこで、(1)数字部分をあらかじめ抽出して事前に集計(分布および最小値、最大値を計算)(2)事前集計結果をグラフ表示(3)集計対象の数字の範囲を最小値〜最大値までの間で指定できるように(4)パラメータの入力、および事前集計結果の表示を自前で作成したアラートダイアログで表示といった変更を加えてみました。このぐらい行えば、安心して見られる感じでしょうか。setに「.」(小数点)および「,」(桁数区切り)を追加してみました。想定していた部分はうまくクリアしたものの、「REV.」の部分の「.」も認識して「0.411」のような数値として認識したようです。このあたりに課題を残しつつも、全体として見ると当初からノイズとして除去する対象として考えていた箇所でもあったため、そんなもんだろうかと。アラートダイアログに表示するテスト集計結果の文字が小さかったので、少し大きくしてみました。W1」(PostScript名は「HiraginoSans-W1」)を指定しています。このあたりは好みに応じて変更してみるとよいでしょう。巨大なテキスト(青空文庫の小説1作文まるごととか)を対象に処理していないので(画面キャプチャ掲載している程度のサイズ)そういう配慮は行っていません。仕事だと考慮しないでもないですが、必要と思われた処理をとりあえず組んでみた程度なので、そういうものだとお考えください。NaganoyaCotEditorで編集中の最前面の書類の本文中から指定桁の数値を抽出して登場回数で度数分布の集計を行うAppleScriptです。テキストで集計していた情報のうち、数値部分の度数分布を計算したいと考え、ありもののルーチンを組み合わせて作ったものです。実行すると、集計対象の数値の桁数を聞いてくるため、適当なものを選択してださい。CotEditorのScriptingの要注意点で、オブジェクト階層を素直に書いて、当該階層のオブジェクトの属性値を取りたいような場合に、そのまま属性を書いても取得できないケースが見られます。it」を書いています。Xcodeが同じような挙動を行うため、注意が必要です。本Scriptについていえば、正規表現でテキストから情報を抽出したりと、一応最低限のレベルはクリアしているものの、いまひとつ満足できません。数字が連続して登場している箇所を抽出し、どれを集計対象にするのかといった分析を冒頭で行ってユーザーに問い合わせしたいところです。現段階では、「桁数を聞く」という頭の悪い実装になっていますが、そのうちどうにかしたいと考えるところです。NaganoyaCotEditorで編集中のMarkdown書類を、MacDownでPDF書き出しして、Skimでオープンして表示するAppleScriptです。CotEditorにMarkdownのプレビュー機能がついたらいいと思っている人は多いようですが、MarkdownはMarkdownで、方言は多いし標準がないし、1枚もののMarkdown書類だけ編集できればいいのか、本などのプロジェクト単位で編集とか、目次が作成できないとダメとか、リンクした画像の扱いをどうするのかとか、対応しようとすると「ほぼ別のソフトを作るのと同じ」ぐらい手間がかかりそうです(メンテナー様ご本人談)。そこで、AppleScript経由で他のソフトを連携させてPDFプレビューさせてみました。これなら、誰にも迷惑をかけずに、今日この時点からすぐにMarkdownのプレビューが行えます(当然、HTML書き出ししてSafariでプレビューするバージョンははるかかなた昔に作ってあります)。Scriptingの実行が許可されない)。OS側のスクリプトメニューに登録して実行する必要があります。Scriptingを利用してメニュー操作を行なっているため、システム環境設定で許可しておく必要があります。Scirptingを用いてCommand-Dで指定して一律に場所指定が行えるデスクトップフォルダ)に同名のPDFが存在しないかどうかチェックし、存在すれば削除するといった処理が必要ですが、面倒だったのであらかじめMarkdown書類をUUIDにリネームしておくことで、書き出されたPDFも同じくUUIDのファイル名になるため、論理上はファイル名の衝突を回避できるため、削除処理を省略しています。"編集中のファイルはMarkdown書類ではないようです。Scriptingを使用。Naganoya英語版の花文字テキストを作成してテキストエディタ(CotEditor)に出力するAppleScriptです。描画用の英単語と、塗りつぶし用の英単語を別々に指定できます。invertFをtrueに設定すると、白黒反転出力を行います。おおもとの元ネタは、大型計算機を大勢のユーザーで共有していた時代(ぱそこん登場前)、計算結果を高速プリンタの帳票に出力するようになっていたころにさかのぼります。どのユーザーの計算結果かを大量のプリンタの出力結果の中から仕分けるため、印刷出力の1ページ目をユーザー名などの情報を印字した「バナー」として使用。そのさい、ドットインパクトプリンターだったので、決められた固定ドット数の文字しか印字できないため、英数字を組み合わせて擬似的に大きな文字でバナーを印刷していたことに端を発します。その時代の「残り香」ともいえるバナーがパソコンの電子メールやBBSの時代にお遊びの「花文字」として引き継がれ、原始的なアスキーアートの一種として楽しまれてきました。commandの「banner」コマンドにその末裔を見ることができます。nativeのデモ時に「祝」という花文字を「呪」の文字で出力するという、定番の持ちネタを披露したところ、たいへんウケておりました。これを海外のScripter向けにそのままデモしても受けません。この、花文字テキストを出力するプログラムの英語版としては、love.scptといういにしえのデータをそのまま使いまわしたものがありますが、描画パターンを数値データで保持しているため、異なるパターンを表示させることはできません。そこで、日本語版の花文字テキスト出力プログラムに若干手をくわえ、英単語の出力が行えるようにしてみました。テキストの出力はCotEditorに対して行なっていますが、新規書類を指定文字で作成する程度なので、AppleScriptに対応しているテキストエディタならどれでも作り変えられます。表示を等幅フォントにしておく必要があります(あとから指定してもOK)。Naganoya青空文庫のテキストのルビタグをすべて削除するAppleScriptです。CotEditorでオープン中の青空文庫のテキストからルビタグを削除し、元のドキュメントに置換結果を反映させます。テストに使用したのは、夏目漱石の「こころ」のテキストです。上記ページの「テキストファイル(ルビあり)」をダウンロードして、Zipアーカイブを展開して使用しました。囲われたエリアをすべて削除するという、AppleScriptにはあからさまに不得意そうな処理で、最初に書いたAppleScriptでは1分半以上かかっていました。内容は、おおよそ常識的なサブルーチンを組み合わせてループで回しただけです。遅くなるように組んだりはしていません。これを、(1)CotEditorからの文章テキストの取得(2)置換当該箇所のリストアップ(3)文字置換(4)CotEditorへの文章テキストの転送の4つのステージに分け、それぞれ処理時間を計測。すると、(1)、(2)、(4)については1秒かかるかかからないかぐらいの速度で実行していることが判明。圧倒的に(3)文字置換の処理に時間がかかっていました。delimitersを用いるサブルーチンを使用していました。これ以上、この方向に頑張っても速く処理することはできません。delimitersを作成し一括処理できないか試してみたものの、さすがに処理系のキャパシティを超過しているようで処理が戻ってきません(迷走状態)。delimitersによる処理をやめ、メモリ管理効率がよくないAppleScriptのstring型のデータで保持することをやめ、置換のたびにAppleScriptのstring型に変換(cast)することをやめ、置換中は最初から最後までNSMutableStringで管理するようにしました。このように大幅に書き換えたところ、トータルで3.58秒で処理終了するようになりました。すべての置換が終了したあとにNSMutableStringをAppleScriptのstringに変換し、CotEditorの最前面のドキュメントに結果を転送しています。v3.5で機能に変更があり、「CotEditorでウィンドウの透明度を連続的に変更する」のようなScriptが実行できなくなりました。opacity」が廃止されました。予約語が廃止されたときにどういう状態になるのか、という事例として掲載しておきます。保存ずみの同Scriptをオープンすると、のような表示になりました。この状態でコンパイル(構文確認)を行うと、のようにエラーになります。opacityが削除されていることが確認できます。アプリケーションの機能としてウィンドウの透明度設定は行えるので、エディタとしての使い勝手は(あまり)変わりません。AppleScriptから透明度をコントロールできないと困ることがあるかと考えると、とくに困ることはありません。NaganoyaCotEditorの最前面のテキスト中で、空行で区切ったブロックを逆順にならべかえるAppleScriptです。いう(↑)状態のテキストを、こういう(↑)状態にならべかえます。ここでは、わかりやすく空行でブロックを区切っていますが、別のもので区切りを検出してみたり、テキスト全体から自動的にブロック検出をテキストエディタ自体がやってくれるといいのになー、と思っています。NaganoyaCotEditorでオープン中の最前面の書類中のテキストの、日付フォーマットを変換するAppleScriptです。▲スクリーンショットは作成中のものですBlogのアーカイブ本のオマケとして(記事だけだとウンザリする仕上がりだったので)、冒頭にその年に何があったかをAppleのニュースリリースから抽出して掲載してみたのですが、日付の形式が独特だったので、手で打ち直していました。繰り返して行うと面倒だったので、NSDataDetectorで自然言語テキスト(CotEditorの本文テキスト)から日付を自動検出して書き換えを試みたのですが、NSDataDetectorではこのサンプルのようなほんのちょっとだけ手の加わった日付テキストでは検出してくれませんでした。一応、フォーマット自体は固定だったので、フォーマッターだけ指定すれば日付テキストとして認識し、常識的なYYYY/MM/DDの日付フォーマットに書き換えるようにしてみました。▲日付フォーマット置換したテキスト(処理は一瞬)ただし、日付フォーマットテキストが行で独立しているもの(添付スクリーンショットのように)を処理対象にしているので、あまり汎用性はなさそうです。一般的には正規表現で指定することになるんでしょうけれど、その正規表現というかもともとの日付フォーマットを元のテキストから自動検出してくれることがベストだと思います。CotEditorに依存した処理はひとつもないので、JeditΩでもmiでもテキストエディットでもTextWranglerでもBBEditでも、対象にして処理することはかんたんです。クリップボードの内容に対して処理したほうがいいのかもしれません。Menuに入れて、現在オープン中の(連番つき)テキストファイルと同一フォルダに入っているテキストファイルのうち、番号が「前」に該当するファイルのXattr(拡張属性)を操作して、CotEditorの縦書き属性を追加し、CotEditorのファイルオープン時にデフォルトで縦書き表示を行うAppleScriptです。Menuから呼び出すことしかできませんでした。本バージョンでは、CotEditor内蔵メニューから呼び出せます。Menuから呼べると、ファイル名に指定の特殊文字を入れておくことで、キーボードショートカットから呼び出せるようになります。Software–v3:Xattrに追記してCotEditorでデフォルト縦書き表示を行わせた。Menuに入れて、現在オープン中の(連番つき)テキストファイルと同一フォルダに入っているテキストファイルのうち、番号が「次」に該当するファイルのXattr(拡張属性)を操作して、CotEditorの縦書き属性を追加し、CotEditorのファイルオープン時にデフォルトで縦書き表示を行うAppleScriptです。Menuから呼び出すことしかできませんでした。本バージョンでは、CotEditor内蔵メニューから呼び出せます。Software–v3:Xattrに追記してCotEditorでデフォルト縦書き表示を行わせた。Naganoya指定テキストファイルのXattr(拡張属性)を操作して、CotEditorの縦書き属性を追加し、CotEditorのファイルオープン時にデフォルトで縦書き表示を行うAppleScriptです。meet-upの席上でCotEditorメンテナーの1024jpさんに「(CotEditorに)デフォルトでプレーンテキストの縦書き表示を行わせる機能ってないんでしょうか?」と聞いてみたら、本Xattrの存在を教えてもらえました。Menuからでも縦書きで表示させるファイルを切り替えるようなScriptを呼び出せました。NaganoyaCotEditorでオープン中の書類の「前」のファイルを縦書きでオープンするAppleScriptです。CotEditorでオープン中の書類のパスを取得して、同一フォルダ内にあるファイル名一覧からオープン中の書類の「前」に該当する書類をオープンします。Scriptingで強制的に操作して縦書きに設定します。v3.3.2のメニューにバグがあって、横書きのメニュー項目にも縦書きのメニュー項目にも「縦書き」と書いてあり、メニュー項目を名称で指定するとうまく動きません。No.で指定しています。このメニュー項目の不具合については、近い将来のアップデートで修正される見込みです。