ライブラリのインストール方法やらスクリプトエディタの使い方やらがわかっていないとcommon elements Libを実際に使って試すことができないので、実際に機能を評価できるよう最低限のGUIをつけてみました。
–> Download GUI App Executable(Zip archive, 57KB)
macOS 10.13,10.14, 10.15上で動作します。実行にはインターネット接続を必要とします。
ライブラリのインストール方法やらスクリプトエディタの使い方やらがわかっていないとcommon elements Libを実際に使って試すことができないので、実際に機能を評価できるよう最低限のGUIをつけてみました。
–> Download GUI App Executable(Zip archive, 57KB)
macOS 10.13,10.14, 10.15上で動作します。実行にはインターネット接続を必要とします。
WikipediaのREST APIを呼び出して、2つの単語の共通項を計算する「common elements Lib」を作って実際にいろいろ評価していますが、ロシア語を指定したときに結果が得られないという現象に直面していました。
ロシア語を記述するキリル文字のエンコーディング指定がよくなかったのか、Wikipediaのロシア語サーバーの問題なのか、どこに問題点があるのかよくわかっていませんでした(そういう問題のあぶり出しのためにリリースしてみた事情があります)。
とりあえず人名をGoogle翻訳でロシア語+キリル文字に翻訳してロシア語Wikipediaに突っ込んでみても結果が得られず首をひねっていましたが、ロシア語の人名表記が、
First name Family name
ではなく、
Family name, First name
のフォーマットであることに気づきました。この語順で人名を突っ込んでみたところ、無事結果が得られることを確認しました。
AppleScript名:sample_russian |
— – Created by: Takaaki Naganoya – Created on: 2020/03/03 — – Copyright © 2020 Piyomaru Software, All Rights Reserved — use comLib : script "common elements Lib" –"Family Name, First Name" in Russian Language –"George Lucas" and "Steven Spielberg" set cRes to list up common elements with {"Лукас, Джордж", "Спилберг, Стивен"} with language "ru" –> {"Награда имени Ирвинга Тальберга", "Индиана Джонс", "Кинофантастика", "Золотой глобус", "Монтажёр", "Industrial Light & Magic", "Форд, Харрисон", "DreamWorks", "Премия «Сатурн» за лучший сценарий", "Сиквел", "Продюсер", "Кинорежиссёр", "Калифорния", "Сценарист", "Премия «Сатурн» за лучшую режиссуру", "Оскар (кинопремия)"} –"Larry Tesler" and "Steve Jobs" set dRes to list up common elements with {"Теслер, Ларри ", "Джобс, Стив"} with language "ru" –> {"Apple Computer", "Xerox PARC", "Smalltalk", "Стэнфордский университет"} |
ウクライナ語の人名は、
First name Family name
となっているので、そのように書けば結果が得られます。登録記事数がそれほど多くないので、かなり検索語句を選ぶ印象ではあります。
AppleScript名:sample_Ukrainian |
–Українська (Ukrainian) use comLib : script "common elements Lib" –"Bill Gates" and "Steve Jobs" set dRes to list up common elements with {"Білл Гейтс", "Стів Джобс"} with language "uk" –> {"США", "IBM", "Долар США", "Майкрософт", "Головний виконавчий директор", "Стенфордський університет", "Персональний комп’ютер"} |
現在作成中のアプリケーションの副産物として生まれた「common elements Lib」AppleScript Libraryです。2つの単語の共通要素を計算して返します。
# v1.1にアップデートしました(ダウンロード先URLはかわらず)。ページ下部のテンプレート部分の余計なリンクを拾わないように改善したため、テンプレート部分のリンクが多い項目に対して大きな効果を発揮します
アーカイブをダウンロードして展開し、~/Library/Script Librariesフォルダに「common elements Lib.scptd」を入れるとAppleScriptから呼び出せるようになります。
macOS 10.10以降で動作するはずですが、開発は10.14上で、動作確認は10.13/10.14/10/15上でのみ行なっています。
この、2つのキーワードの共通要素を求める処理は「マッキー演算」と呼んでおり、男性アイドルグループ「SMAP」と、男性シンガーソングライター「槇原敬之」(マッキー)氏の共通要素を演算で求めることを目的として企画されました。「SMAP」はWikipedia上でも最大級の要素数を持つ項目であり、1,400項目以上のリンク要素を擁しています。
Wikipedia REST APIの仕様ではリンク要素を500項目までしか一度に取得できません。SMAPを処理するためには、複数ページにまたがるリンク取得の処理をこなすことが必要であり、「マッキー演算」は言葉のバカっぽさとは裏腹に、それなりの技術力が要求される、そこそこむずかしい処理なのです。
本ライブラリを用いて、WikipeidaにREST API経由で検索司令を出すわけですが、英語のスペルの単語を受け付けるWikipediaもあれば、日本語やアラビア語Wikipediaなどのようにその言語向けの書き換えを行ったデータで検索するものもあり、割とまちまちであることがわかりました。そのあたりは、sdefに書いておいたサンプルScriptを見ていただくのがよいでしょう。
本ライブラリでは、演算対象とする単語はWikipediaに掲載されているものに限られています。実際に、日本語環境で「スティーブ・ジョブズ」と「ラリー・テスラー」の共通項目を計算すると、
--> {"パロアルト研究所", "Smalltalk", "アメリカ合衆国", "Lisa (コンピュータ)", "アップル・ニュートン", "Macintosh", "アップル (企業)", "Macworld", "スタンフォード大学"}
「スティーブ・ジョブズ」と「ロス・ペロー」の共通項目を計算すると、
--> {"NeXT", "アル・ゴア", "統合典拠ファイル", "実業家", "IBM", "ゼネラルモーターズ", "SNAC", "アメリカ合衆国", "国際標準名称識別子", "孫正義", "ソフトバンク", "国立国会図書館", "フランス国立図書館", "アメリカ議会図書館管理番号", "CiNii", "バーチャル国際典拠ファイル"}
のような結果を返してきます。
冒頭で述べた「SMAP」と「槇原敬之」の共通項目を計算すると、
--> {"スポーツニッポン", "ABO式血液型", "テレビ朝日", "東京都", "社長", "エフエム東京", "ミュージックステーション", "J-POP", "第42回NHK紅白歌合戦", "大阪城ホール", "日本", "We are SMAP!", "ミリオンセラー", "小倉博和", "インターネットアーカイブ", "日本武道館", "ニッポン放送", "リクルートホールディングス", "日刊スポーツ", "第58回NHK紅白歌合戦", "フジテレビジョン", "世界に一つだけの花"}
のようになります。
おおよその主要言語に対応していますが、ロシア語をはじめとするキリル文字の言語を指定すると、なぜか結果が返ってきません。これが、キリル文字のエンコーディングに関する(こちら側の実装がまずい)問題なのか、サーバー側がREST APIをサポートしていないのか(Wikipediaサーバー側の問題)はわかりません。
→ ロシア語のクエリーも処理できることを確認しました
ここでは、だいたいの「いい感じのキーワード」を例として出していますが「George Lucas」と「Steven Spielberg」などの近い単語を指定すると結果が400個以上返ってきます。
→ v1.1における改良により、400個以上のリンクを66個まで減少させました(不要なフッター部分のリンクを拾わないようにした)
膨大な項目から必要な要素を選択するInterfaceをみつくろってテストをしてはいるのですが、iOS上でよさそうに見えてもMac上で動かすといまひとつだったり、なかなか合うものが見つかりません(超多項目選択UI)。
こうした計算結果をもっと減らす方法や、これらの多項目の計算結果からGUI上で項目選択する方法などが自分たちでは見つからなかったので、ライブラリとして公開して広く意見やアイデアを募ろうと考えました。多言語のWikipediaへの問い合わせを行ったり、問題点を洗い出すことも目的の1つです。前述のとおり、ロシア語系のWikipediaに対するアクセスに問題がある点については調査が必要です。
余談ですが、Steve JobsとLarry Teslerの関連項目演算を行おうとしても、Larry Teslerの項目がなかったり、Xerox PARCへのリンクがないために演算結果にこれが含まれない言語のWikipediaがいくつか見られました。コンピュータ史上重要な偉人への敬意をこめ、ぜひ追記していただきたいと考えるものです(という話を日本語で書いても意味がない?)。
AppleScript name:sample.scptd |
— – Created by: Takaaki Naganoya – Created on: 2020/02/28 — – Copyright © 2020 Piyomaru Software, All Rights Reserved — http://www.piyocast.com use comLib : script "common elements Lib" –English set aWord to "Steve Jobs" set bWord to "Larry Tesler" set commonResEN to list up common elements with {aWord, bWord} with language "en" –> {"The New York Times", "Computer History Museum", "Alan Kay", "International Standard Book Number", "California", "Steve Jobs", "Computer mouse", "John Markoff", "Ethernet", "Stanford University", "Counterculture of the 1960s", "Fortune (magazine)", "Tablet computer", "Apple Lisa", "Apple Inc.", "Associated Press", "Graphical user interface", "International Standard Serial Number", "Apple Computer", "Macintosh 128K", "Xerox Alto"} –日本語(Japanese) set aWord to "スティーブ・ジョブズ" –Steve Jobs set bWord to "ラリー・テスラー" –Larry Tesler set commonResJP to list up common elements with {aWord, bWord} with language "jp" –> {"パロアルト研究所", "Smalltalk", "アメリカ合衆国", "Lisa (コンピュータ)", "アップル・ニュートン", "Macintosh", "アップル (企業)", "Macworld", "スタンフォード大学"} –中文(Simplified Chinese) set aWord to "史蒂夫·乔布斯" –Steve Jobs set bWord to "拉里·泰斯勒" –Larry Tesler set commonResZH to list up common elements with {aWord, bWord} with language "zh" –> {"母校", "美國", "帕羅奧多研究中心"} —한국어(Korean) set aWord to "스티브 잡스" –Steve Jobs set bWord to "빌 게이츠" –Bill Gates set commonResKO to list up common elements with {aWord, bWord} with language "ko" —> {"가상 국제 전거 파일", "위키인용집", "게마인자메 노름다타이", "네덜란드 왕립도서관", "국제 표준 도서 번호", "IBM", "SNAC", "CiNii", "개인용 컴퓨터", "BIBSYS", "영어", "국제 표준 명칭 식별자", "오스트레일리아 국립도서관", "LIBRIS", "체코 국립도서관", "미국", "스페인 국립도서관", "뮤직브레인즈", "프랑스 국립도서관", "이스라엘 국립도서관", "일본 국립국회도서관", "미국 의회도서관 제어 번호", "전거 통제", "국립중앙도서관", "WorldCat Identities", "실리콘 밸리의 신화", "프랑스 대학도서관 종합목록", "위키미디어 공용"} –svenska set aWord to "Steve Jobs" set bWord to "Ross Perot" set commonResSV to list up common elements with {aWord, bWord} with language "sv" –> {"USA", "IBM", "Forbes", "Entreprenör", "Libris (bibliotekskatalog)"} –Deutsch set aWord to "Steve Jobs" set bWord to "Larry Tesler" set commonResDE to list up common elements with {aWord, bWord} with language "de" –> {"Objektorientierte Programmierung", "Apple", "Apple Macintosh", "Xerox PARC", "Virtual International Authority File", "The New York Times", "Kalifornien", "Apple Lisa"} –français set aWord to "Steve Jobs" set bWord to "Larry Tesler" set commonResFR to list up common elements with {aWord, bWord} with language "fr" –> {"The New York Times", "Palo Alto Research Center", "Informaticien", "Californie", "Apple", "États-Unis", "Autorité (sciences de l’information)"} –Nederlands set aWord to "Steve Jobs" set bWord to "Larry Tesler" set commonResNL to list up common elements with {aWord, bWord} with language "nl" –> {"Verenigde Staten (hoofdbetekenis)", "Palo Alto Research Center", "Apple Macintosh", "Xerox", "Apple Inc.", "Apple Lisa", "Apple Newton"} –italiano set aWord to "Steve Jobs" set bWord to "Larry Tesler" set commonResIT to list up common elements with {aWord, bWord} with language "it" –>{"Apple", "Stati Uniti d’America", "Xerox Palo Alto Research Center", "Informatico"} –español set aWord to "Steve Jobs" set bWord to "Ross Perot" set commonResES to list up common elements with {aWord, bWord} with language "es" –> {"Emprendedor", "Library of Congress Control Number", "Wikidata", "IBM", "Enciclopedia Británica", "Wikimedia Commons", "Empresario", "CiNii", "National Diet Library", "Estados Unidos", "National Library of the Czech Republic", "Virtual International Authority File", "Bibliothèque nationale de France", "International Standard Name Identifier", "Integrated Authority File", "Système universitaire de documentation", "ISBN"} –polski set aWord to "Steve Jobs" set bWord to "Larry Tesler" set commonResPL to list up common elements with {aWord, bWord} with language "pl" –> {"Apple Inc.", "Virtual International Authority File", "Xerox PARC"} –Tiếng Việt set aWord to "Steve Jobs" set bWord to "Larry Tesler" set commonResVI to list up common elements with {aWord, bWord} with language "vi" –> {"Hoa Kỳ", "Apple Lisa", "California", "Apple Inc."} –Arabic set aWord to "ستيف جوبز" set bWord to "روس بيرو" set commonResAR to list up common elements with {aWord, bWord} with language "ar" –> {"مكتبة البرلمان الوطني", "رقم الضبط في مكتبة الكونغرس", "رائد أعمال", "المكتبة الوطنية لجمهورية التشيك", "ملف استنادي متكامل", "ملف استنادي دولي افتراضي", "المكتبة الوطنية الفرنسية", "سايني", "ديل", "آي بي إم", "لغة إنجليزية", "ضبط استنادي", "حزب سياسي", "مهنة", "مدرسة أم", "واي باك مشين", "الولايات المتحدة", "المحدد المعياري الدولي للأسماء", "دولار أمريكي"} –português set aWord to "Steve Jobs" set bWord to "Larry Tesler" set commonResPT to list up common elements with {aWord, bWord} with language "pt" –> {"Macintosh", "Alan Kay", "Apple Newton", "Povo dos Estados Unidos", "Língua inglesa", "Estados Unidos", "Ciência da computação", "Apple", "Califórnia", "Base Virtual Internacional de Autoridade"} –Català set aWord to "Steve Jobs" set bWord to "Larry Tesler" set commonResCA to list up common elements with {aWord, bWord} with language "ca" –> {"Control d’autoritats", "Virtual International Authority File", "Apple Macintosh", "Apple Inc", "Interfície gràfica d’usuari"} –Bahasa Indonesia set aWord to "Steve Jobs" set bWord to "Larry Tesler" set commonResNO to list up common elements with {aWord, bWord} with language "id" –> {"California", "Biografi", "Amerika Serikat"} –magyar set aWord to "Steve Jobs" set bWord to "Larry Tesler" set commonResHU to list up common elements with {aWord, bWord} with language "hu" –> {"Amerikai Egyesült Államok", "Informatikus", "Wikimédia Commons", "Stanford Egyetem", "Nemzetközi Virtuális Katalógustár"} –euskara set aWord to "Steve Jobs" set bWord to "Larry Tesler" set commonResEU to list up common elements with {aWord, bWord} with language "eu" –> {"Xerox", "Informatikari", "Ingeles", "Apple Inc.", "Ameriketako Estatu Batuak", "Wikidata", "Smalltalk", "Virtual International Authority File", "Stanford Unibertsitatea", "Wikimedia Commons"} –Türkçe set aWord to "Steve Jobs" set bWord to "Larry Tesler" set commonResTR to list up common elements with {aWord, bWord} with language "tr" –> {"The New York Times", "Apple", "Amerika Birleşik Devletleri", "Kaliforniya"} |
AppleScript name:sample2 |
— – Created by: Takaaki Naganoya – Created on: 2020/02/28 — – Copyright © 2020 Piyomaru Software, All Rights Reserved — http://www.piyocast.com use comLib : script "common elements Lib" set sList to supported lang codes –> {"en", "ceb", "sv", "de", "fr", "nl", "ru", "it", "es", "pl", "war", "vi", "jp", "zh", "ar", "pt", "uk", "fa", "ca", "sr", "no", "id", "ko", "fi", "hu", "sh", "cs", "ro", "eu", "tr", "ms", "eo", "hy", "bg", "he", "da", "ce", "zh-min-nan", "sk", "kk", "min", "hr", "et", "lt", "be", "el", "azb", "sl", "gl", "az", "simple", "ur", "nn", "hi", "th", "ka", "uz", "la", "ta", "vo", "arz", "cy", "mk", "tg", "lv", "ast", "mg", "tt", "af", "oc", "bs", "bn", "ky", "sq", "zh-yue", "tl", "new", "te", "be-tarask", "br", "ml", "pms", "nds", "su", "ht", "lb", "jv", "sco", "mr", "sw", "pnb", "ga", "szl", "ba", "is", "my", "fy", "cv", "lmo", "an", "ne", "pa", "yo", "bar", "io", "gu", "wuu", "als", "ku", "scn", "kn", "ckb", "bpy", "ia", "qu", "mn", "bat-smg", "vec", "wa", "si", "or", "cdo", "gd", "yi", "am", "nap", "ilo", "bug", "xmf", "mai", "hsb", "map-bms", "fo", "diq", "mzn", "sd", "li", "eml", "sah", "nv", "os", "sa", "ps", "ace", "mrj", "frr", "zh-classical", "mhr"} –"ru", "uk", "sh", "bg" seems not to work… "ms" or later codes seems not to work (depends on Wikipedia Server spec)…. |
AppleScriptからAirDrop経由で他のMacやiPhone、iPadなどのiOSデバイスとファイル共有するAppleScript Library「AirSharingLib」v1.0です。
–> Download airsharinglib(To ~/Library/Script Libraries/)
もともとの内容はhttp://www.macosautomation.comに掲載されている「Sharing Utilities」ですが、現在のmacOS用に一部書き換えたのと、WiFiの強制パワーオンなどの機能を追加しています。
AirDrop経由のファイル共有については、さまざまな場面で必要になりますし、複数ファイルを指定してAirDrop共有するのはGUI側(Finder側)から行うのはなかなか操作が煩わしいので、AppleScriptから操作できると便利です。
そうしたAirDrop共有のためのAppleScriptライブラリが存在していることは重要なのですが、Sharing Utilityだといまひとつ古くなりすぎているので、さまざまなプログラムで参照するのに問題が出てくるように感じていました。
そのため、あらためてSharing Utilityとは別のライブラリをでっち上げた次第です。
AppleScript名:sample1 |
— – Created by: Takaaki Naganoya – Created on: 2020/01/20 — – Copyright © 2020 Piyomaru Software, All Rights Reserved – http://www.piyocast.com use AppleScript version "2.7" –10.13 or later use framework "Foundation" use scripting additions use airLib : script "AirSharingLib" set fileList to (choose file with prompt "You can select multiple files with folding [SHIFT] key" with multiple selections allowed) share with air fileList |
指定UTIのファイルのFinderからのドラッグ&ドロップを受け付けるAppleScript Libraries「display drop dialog」をリリース、フリー配布いたします。
# 本ライブラリはEdama2さんのScriptに若干の改変を行い、sdefをつけてパラメータのエラー処理を行い、コードサインしてライブラリ化したものです
–> Download display drop dialog Script Library (To ~/Library/Script Libraries/)
本ライブラリは、指定UTIの書類のドラッグ&ドロップを受け付けるダイアログをAppleScriptから手軽に使えるようにするものです。macOS 10.14以降で動作します。
現在のAppleのTim Cook体制は、セキュリティ強化の美名のもとに「動かないコンピュータ」を目指し、各種機能を阻害する方向に進んでいます。
AppleScriptの世界はその中でも自由度が比較的高い状態にありますが、それでもmacOS 10.12以降では、AppleScriptドロップレットにFinderからドラッグ&ドロップしても、Finderの拡張属性(Xattr)がついたファイルは無視されたりと、なかなか困ります。
そこで、Finderからのドラッグ&ドロップ操作を通常の(Applet書き出ししていない)AppleScript、とくにScript Menuから呼び出す形式のAppleScriptで使えるようにすることを目的として本ライブラリを作成しました。
本ライブラリを用いることで、ドロップレットを作らなくても、Script Menuから呼び出した普通のAppleScriptにファイルのドラッグ&ドロップの受信機能を追加できます。セキュリティと機能性(ドラッグ&ドロップ)を両立させるため、すべてのScripterに欠かすことのできないライブラリになるものと期待しています。
本ライブラリのAppleScript用語辞書には実行イメージ(画面キャプチャ)およびサンプルScriptを入れてあり、実行時の様子やサンプルスクリプト(本Blogと同様のワンクリックで内容が転送されるリンクつき)を確認できるようになっています。
AppleScript名:accept AppleScript documents |
use dropLib : script "display drop dialog"
set aMainMes to "Drop AppleScript" set aSubMes to "Drag and Drop AppleScript files here" set aUTI to "com.apple.applescript.script" set execButtonTitle to "Execute" set aRes to (display drop dialog aUTI main message aMainMes sub message aSubMes with initial folder "" OK button title execButtonTitle) –> {alias "Machintosh HD:Users:me:Documents:display drop dialog:accept PNG images.scpt", alias "Machintosh HD:Users: me:Documentsaccept Markdown documents.scpt"} |
AppleScript名:accept Markdown documents |
use dropLib : script "display drop dialog"
set aMainMes to "Drop Markdown Documents" set aSubMes to "Drag and Drop Markdown documents here" set aUTI to "net.daringfireball.markdown" set execButtonTitle to "Execute" set aRes to (display drop dialog aUTI main message aMainMes sub message aSubMes with initial folder "" OK button title execButtonTitle) –> {alias "Machintosh HD:Users:me:Documents::–Book 11 「Blog Archives vol5 2013-2014」:2013:01:201301013.md", alias "Machintosh HD:Users:me:Documents::–Book 11 「Blog Archives vol5 2013-2014」:2013:01:201301012.md"} |
AppleScript名:accept PNG images with initial folder contents |
use scripting additions use dropLib : script "display drop dialog" set aMainMes to "Drop PNG" set aSubMes to "Drag and Drop png images here" set aUTI to "public.png" set execButtonTitle to "Execute" set iFolder to path to pictures folder –At first, PNG files in this folder is displayed set aRes to (display drop dialog aUTI main message aMainMes sub message aSubMes with initial folder iFolder OK button title execButtonTitle) –> {alias "Machintosh HD:Users:me:Pictures:1015sedhelp2.png", alias "Machintosh HD:Users:me:Pictures:574G01.png", alias "Machintosh HD:Users:me:Pictures:macDown1.png", alias "Machintosh HD:Users:me:Pictures: 2017-09-27 19.33.53.png", alias "Machintosh HD:Users:me:Pictures:2018-11-01 10.54.06.png" |
NSPathControlでドラッグ&ドロップにより複数のパス情報を設定するダイアログUIを提供するAppleScriptライブラリ「choose multiple path Script Library」をv2.1にアップデートしました。
–> Download choosePathLib.scptd(~/Library/Script Libraries)
変更点:
・dialog widthでダイアログの表示幅を指定できるようにした
・NSPathControlの配色がDarkModeに合わなかったので、色は無指定にした
・AppleScript用語辞書にサンプルAppleScript(URLリンク入り)と実行結果イメージを入れた(分かりやすさ、使い勝手Up)
さまざまなGUI部品を使ってアラートダイアログ上に箱庭ユーザーインタフェースを作り込んだ場合に、通常のAppleScript書類のままだと、ランタイム環境(とくにScript Debugger)の差異の影響を受けてドラッグ&ドロップを受信できないとか実行時に明示的にメインスレッド実行が必要になるケースが見られます。
AppleScript用語辞書を通じてアクセスすることで、そうした問題を「うやむやにできる」ことがわかってきたので(技術的には説明できないものの、だいたいそんなもんだろうと予想はしていました)、こうした再利用の可能性が高いGUI利用部品は積極的にライブラリにまとめています。
choose from listの複数リスト版。複数のポップアップメニューをダイアログ上で選択するUser Interfaceを提供する、「choose multiple list」AppleScriptライブラリです。macOS 10.13以降対応です。
▲選択リスト数は可変
–> Download chooseMultiList(To ~/Library/Script Libraries)
AppleScript name:sample 1.scptd |
— – Created by: Takaaki Naganoya – Created on: 2019/12/10 — – Copyright © 2019 Piyomaru Software, All Rights Reserved — use AppleScript version "2.7" — High Sierra (10.13) or later use framework "Foundation" use scripting additions use mulList : script "choose multiple list" set selList to {{"Red", "Blue", "Yellow", "Brown", "White", "Cyan", "Grey"}, {"Red", "Blue", "Yellow", "Brown", "White", "Cyan", "Grey"}} set tList to {"1st Segments", "2nd Segments"} set aRes to choose multiple list selList main message "Select Items Demo" sub message "Select each selection. Same selection items *NOT* allowed" with title lists tList height 140 width 400 return type item contents without allow same items –> {"Red", "Yellow"} |
AppleScript name:sample 2.scptd |
— – Created by: Takaaki Naganoya – Created on: 2019/12/10 — – Copyright © 2019 Piyomaru Software, All Rights Reserved — use AppleScript version "2.7" — High Sierra (10.13) or later use framework "Foundation" use scripting additions use mulList : script "choose multiple list" set selList to {{"Red", "Blue", "Yellow", "Brown", "White", "Cyan", "Grey"}, {"Red", "Blue", "Yellow", "Brown", "White", "Cyan", "Grey"}} set tList to {"1st Segments", "2nd Segments"} set aRes to choose multiple list selList main message "Select Items Demo" sub message "Select each selection. Same selection items allowed" with title lists tList height 140 width 400 return type item numbers with allow same items –> {1, 1} |
テキストエディタ上でオープン中のテキストのdiff表示を行う場合のファイル選択のために作成したものです。
▲もっと汎用的に差分表示用の部品として活用するために、AppleScript用語辞書の添付が切実に望まれるApple製アプリケーション第1位のFileMerge
AppleScript名:CotEditor –> FileMergeでDiff表示.scptd |
— – Created by: Takaaki Naganoya – Created on: 2019/12/10 — – Copyright © 2019 Piyomaru Software, All Rights Reserved — use AppleScript version "2.7" — High Sierra (10.13) or later use framework "Foundation" use scripting additions use mulList : script "choose multiple list" tell application "CotEditor" set dCount to count every document if dCount < 2 then display dialog "A few documents…" with title "Error" buttons {"OK"} default button 1 return else if dCount = 2 then –オープン中の書類が2つある場合 set aPath to file of document 1 set bPath to file of document 2 set aPOSIX to POSIX path of aPath set bPOSIX to POSIX path of bPath else –オープン中の書類が2つ以上存在している場合 set dList to {} set adList to file of every document repeat with i in adList set the end of dList to POSIX path of i end repeat set selList to {dList, dList} set tList to {"Document #1", "Document #2"} set aRes to choose multiple list selList main message "Select two files to display diff" sub message "Select each file. Same selection items NOT allowed" with title lists tList height 140 width 700 return type item contents without allow same items copy aRes to {aPOSIX, bPOSIX} end if end tell tell application "FileMerge" to activate do shell script "/usr/bin/opendiff " & quoted form of aPOSIX & " " & quoted form of bPOSIX & " &" |
指定のRTFから書式スタイル名(フォント名、フォントサイズ)を抽出し、そのスタイルをダイアログ上にポップアップメニューで一覧表示し、指定スタイル該当箇所を抽出したプレビュー表示を行いつつ、選択スタイル関連の情報を取得できるAppleScriptライブラリです。動作環境は、macOS 10.13以降です。
–> Download chooseStyleLib(library and sample RTF. Library have to install to ~/Library/Script Libraries)
前バージョンは正常動作するランタイム環境が限定されており、スクリプトエディタ上でCommand-Control-Rで実行する必要がありましたが、このライブラリ版ではScript Debugger上でもScript Menuからでも実行できますし、AppleScript用語辞書(sdef)を書いたので、簡潔かつ手軽に呼び出せるようになりました。
また、AppleScript用語辞書には本Blogと同様の色分け記述で、「★Click Here to Open This Script」をクリックすれば内容がスクリプトエディタに転送されるURLリンク入りのSample Scriptを掲載し、さらに本Blog上の画面キャプチャをリンクしてあるため、実行時の画面イメージも把握できるようになっています。
まんべんなく、すべてのコマンドにSample Scriptを掲載しています。
前バージョンではポップアップメニューにスタイルを適用してWYSIWYGメニューを作成していました。クリックしてメニュー表示を行なっているときにはスタイルが表示されていい感じでしたが、クリックしていない時にはボタンのサイズよりも大きいサイズは欠けて表示されるので、実用性がいまひとつ。そのため、本バージョンではWYSIWYGメニューの機能は省略しました。
ポップアップしていない時にはWYSIWYG表示にならないように機能を両立できるとよかったのですが、、、、
また、前バージョン同様に、「巨大なRTFを指定された場合でも足切りをしない」ようになっているので、あまり巨大なRTFを指定しないようにしてください。
指定のRTFからスタイル{フォント名,フォントサイズ}を抽出し、ダイアログ上のポップアップメニューで選択したスタイル{フォント名,フォントサイズ}を返します。
AppleScript name:sample1 choose style from.scptd |
— – Created by: Takaaki Naganoya – Created on: 2019/12/08 — – Copyright © 2019 Piyomaru Software, All Rights Reserved – http://piyocast.com/as/ use AppleScript version "2.7" — High Sierra (10.13) or later use framework "Foundation" use scripting additions use chooseStyle : script "chooseStyle" set aFile to choose file of type {"public.rtf"} set bRes to choose style from aFile main message "Select Style" sub message "Select style you want to filter" width 400 height 200 –> {"HelveticaNeue-Bold", 16.0} |
指定のRTFからスタイル{フォント名,フォントサイズ}を抽出し、ダイアログ上のポップアップメニューで選択したスタイルの該当箇所のテキストを返します。
AppleScript name:sample2 choose contens by style from.scptd |
— – Created by: Takaaki Naganoya – Created on: 2019/12/08 — – Copyright © 2019 Piyomaru Software, All Rights Reserved – http://piyocast.com/as/ use AppleScript version "2.7" — High Sierra (10.13) or later use framework "Foundation" use scripting additions use chooseStyle : script "chooseStyle" set aFile to choose file of type {"public.rtf"} set fRes to choose contens by style from aFile main message "Select Style" sub message "Select style you want to filter" width 400 height 300 –> "Built-in filters"–text returns |
指定のRTFファイルから指定のスタイル{フォント名,フォントサイズ}で指定した箇所のテキストを返します。本コマンドはダイアログ表示を行わず、ただRTFからテキスト抽出するだけです。
AppleScript name:sample3 filter by style.scptd |
— – Created by: Takaaki Naganoya – Created on: 2019/12/08 — – Copyright © 2019 Piyomaru Software, All Rights Reserved – http://piyocast.com/as/ use AppleScript version "2.7" — High Sierra (10.13) or later use framework "Foundation" use scripting additions use chooseStyle : script "chooseStyle" set aFile to choose file of type {"public.rtf"} set bRes to choose style from aFile main message "Select Style" sub message "Select style you want to filter" width 400 height 200 –> {"HelveticaNeue-Bold", 16.0} copy bRes to {fName, fSize} set aRes to filter by style aFile font name fName font size fSize –>"Built-in filters" |
指定のRTFファイルからすべてのスタイル{フォント名,フォントサイズ}を抽出します。本コマンドもダイアログ表示は行いません。
AppleScript name:sample4 extract styles.scptd |
— – Created by: Takaaki Naganoya – Created on: 2019/12/08 — – Copyright © 2019 Piyomaru Software, All Rights Reserved – http://piyocast.com/as/ use AppleScript version "2.7" — High Sierra (10.13) or later use framework "Foundation" use scripting additions use chooseStyle : script "chooseStyle" set aFile to choose file of type {"public.rtf"} return extract styles aFile –> {{"HelveticaNeue-Bold", 24.0}, {"HelveticaNeue", 16.0}, {"HelveticaNeue-Bold", 20.0}, {"HelveticaNeue-Bold", 16.0}, {"HelveticaNeue-Italic", 16.0}, {"LucidaGrande", 16.0}, {"Menlo-Regular", 13.6}} |
アラートダイアログで指定の1D List(1次元配列)に入れた項目からのユーザー選択を求めるAppleScript Librariesです。
–> Download checkboxLibv2.scptd(To ~/Library/Script Libraries/)
本ライブラリはAppleScript用語辞書に画像とムービーを含んでおり、ジャスト、この記事に掲載のものを参照しています(この記事とかリンク画像やムービーを削除すると、AppleScript用語辞書にも表示されなくなる仕様)。インターネット接続環境下にない場合には、AppleScript用語辞書内の画像やムービーは表示されません。
そのかわりに、辞書サイズが小さくなっているので、良し悪しかと。
前バージョンからの変更点は、アラートダイアログ表示時にあらかじめ項目選択しておく指定(selection items)を追加した点です。
▲サンプルScriptと、実行時の画面キャプチャとひととおおり実行したときのムービーがAppleScript用語辞書に掲載されています
▲サンプルScriptは、本Blogと同様の仕様で、サンプル下部のリンク「★Click Here to Open This Script」をクリックすればスクリプトエディタ/Script Debuggerに内容が転送されます
AppleScript名:sample 1 |
— Created 2019-08-07 by Takaaki Naganoya — 2019 Piyomaru Software use chkLib : script "checkboxLib" set tList to {"Carrot", "Burdock", "Radish", "Potato", "Cabege", "Lettuce", "Komatsuna", "Garlic", "Tomato", "bok choy", "Shiitake Mushroom", "Onion"} set cRes to choose checkbox main message "Main Title" with columns 2 with titles tList checkbox type standard return type item number selection items {true, true, true, true, true, true, true, true, false, false, false, false} –> {1, 2, 3, 4, 5, 6, 7, 8}–Selected Index numbers (starts from 1) |
Shane StanleyからmacOS 10.15上でBridgePlusなど、ShaneのScript Librariesを使えるようにする手順を教えてもらいました。内容を実際に検証しつつ、以下に解説します。
Shane StanleyのAppleScript Libraries「BridgePlus」「Myriad Tables Lib」などは、有用な機能をScripterに提供する、たいへん有用なライブラリです。高機能なライブラリを実現するための肝は、ライブラリに同梱されたFrameworkの存在です。
ところが、macOS 10.14でSIPが強化されてホームディレクトリ下のFrameworkをスクリプトエディタが認識しないようになりました。Script Debugger上では問題なくホームディレクトリ以下のFrameworkを認識してプログラミング&実行を行うことができました。
スクリプトエディタ上でも、これらBridgePlusなどのFrameworkを含むライブラリをuseコマンドで利用指定し、そのまま実行はできないものの、アプレット書き出しすればバンドルしたFrameworkを呼び出して実行することはできていました。
macOS 10.15ではさらにセキュリティの機能が強化されて、デフォルトの状態ではScript Debuggerを用いても、BridgePlusやMyriad Tables Lib内蔵のFrameworkの実行(オープン)自体がOSに阻害されるようになりました(やりすぎじゃないの?)。
結論からいえば、macOS 10.15ではスクリプトエディタを利用しているだけではBridgePlusやMyriad Tables Libを利用できなくなりました。これらのツールを利用したい場合にはScript Debuggerの利用が必須という状況です。
もともと、OS標準装備のスクリプトエディタではCocoaオブジェクトのログ表示などは一切できないので、Cocoa Scriptingを行う=Script Debuggerの利用が必須であるため、無理もない状況です。
どうしてもmacOS 10.15上でOS標準装備のスクリプトエディタでBridgePlusやMyriad Tables Libの機能を利用したいという場合には、お使いのMacのSIPを無効化してください(10.14、10.15上で実際にできることを確認しました)。
以上の状況をふまえたうえで、macOS 10.15のSIPを無効化していない通常の環境で、BridgePlusなどのFramework同梱のAppleScript Librariesを利用できるようにするまでの手順を示します。
step 1. ライブラリをWeb上からダウンロード
step 2. ライブラリをインストール(~/Library/Script Libraries/ にコピー)
step 3. ライブラリを呼び出しているScriptをScript Debuggerでオープン
→ Download sample script calling BridgePlus
step 4. (開発元を検証できないためオープンできない旨、ダイアログ表示される)
step 5. システム環境設定の「セキュリティとプライバシー」>「一般」で「このまま開く」をクリック
step 6. Script DebuggerでBridgePlusのオープンダイアログが表示されるので、「View Dictionary」ボタンをクリック(ここ重要!!)
step 7. Script DebuggerでBridgePlusを呼び出しているScriptをオープン
あとは、BridgePlusを利用しているScriptのScript Debugger上でのコンパイル(構文確認)や実行を問題なく行えます。Myriad Tables Libなども同様です。
Pagesでオープン中の最前面の書類の1ページ目に存在する表オブジェクト中の背景色を置換するAppleScriptです。カラー選択のポップアップメニューUser Interfaceをpickup colorライブラリに分離したため、実行できる環境が増えました(Script Debugger上でも動くようになりました)。
–> Download Code-signed AppleScript applet with sample Pages data
Pages書類の「表オブジェクト」にAppleScriptからアクセスするためには、Pages上で表オブジェクトを選択した状態で、
「オブジェクトの配置」を「移動しない」に事前に設定しておく必要があります。
本AppleScriptを実行可能なランタイム環境は、スクリプトエディタ、アプレットの2つです。スクリプトメニューおよびScript Debuggerでは各GUI部品のクリックイベントを拾えないために、実行しても選択などが行えません。
のように、1ページのみのPages書類に表オブジェクトを入れて、「移動しない」設定にしてある状態で本AppleScriptを実行。
表のセル中の色をすべて取得して、ユニーク化してポップアップメニューから「変更元」の色を選択できます。
選択して、「OK」ボタンをクリック。ここで選択した色が置換されます。
選択した色をどの色に変更(置換)するのかを指定します。
グレーを選択。
AppleScript名:Pages書類の1ページ目の表の背景色を置換 v5 |
— Created 2017-07-15 by Takaaki Naganoya — Modified 2019-10-25 by Takaaki Naganoya — 2019 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" use framework "AppKit" use Bplus : script "BridgePlus" –https://www.macosxautomation.com/applescript/apps/BridgePlus.html use pickLib : script "pickup color" –http://piyocast.com/as/asinyaye –v1:First Version –v2:Pick Up target cells by calculate every background color (35% speed up) –v3:Draw cells by range (x20 speed up) –v3.1:Bug Fix (retRangeFromPosList) –v3.1.1:Bug Fix (retRangeFromPosList) –v4:Two-way Simulation (Horizontal / Vertical scan), Corner-Rounded NSImage, Dynamic Color Naming –v4.1:Correct Vertical Scan simulation (Sort list for vertical range evaluation, at first) –v5: Use "pickup color" library, Auto color name suggestion function was removed property NSArray : a reference to current application’s NSArray property SMSForder : a reference to current application’s SMSForder –初期化 load framework –Pagesの1ページ目にある表の塗り色を取得 tell application "Pages" if (count of (every document)) = 0 then return tell front document if (count of (every table)) = 0 then return tell table 1 set c1List to background color of every cell set aProp to properties set xCount to column count of aProp end tell end tell end tell –色データをユニーク化(重複削除) set bList to uniquifyList(c1List) of me –Convert 1D List to 2D List set c3List to (SMSForder’s subarraysFrom:c1List groupedBy:xCount |error|:(missing value)) as list –missing value(背景色なし)を除外する set c2List to (SMSForder’s arrayByDeletingBlanksIn:(bList)) as list –Popup Menuで置換色選択 set cRes to pickup color c2List main message "Select Target Color" color max max65535 if cRes = 0 then return set fromCol to (contents of item cRes of c2List) –カラーピッカーで置換色選択 set tCol to choose color default color fromCol set d1 to current date –実際に表の背景色を置換する set hitList to findDataFrom2DList(fromCol, c3List) of me –データ上で当該色のセル情報を計算する –Rangeを横スキャンと縦スキャンの2通りで試算(Two way Simulation) set rList1 to retRangeFromPosListHorizontal(hitList) of me –横方向へのrange評価 set rList2 to retRangeFromPosListVertival(hitList) of me –縦方向へのrange評価 –Simulationの結果、要素数の少ない方(=処理時間の短い方=高速な方)を採用する –log {"Simulation", (length of rList1), (length of rList2)} if (length of rList1) < (length of rList2) then copy rList1 to rangeList else copy rList2 to rangeList end if tell application "Pages" activate tell front document tell table 1 repeat with i in rangeList set j to contents of i ignoring application responses –非同期実行モードで高速実行 set background color of range j to tCol end ignoring end repeat end tell end tell end tell set d2 to current date return d2 – d1 on uniquifyList(aList as list) set aArray to NSArray’s arrayWithArray:aList set bArray to aArray’s valueForKeyPath:"@distinctUnionOfObjects.self" return bArray as list end uniquifyList on findDataFrom2DList(anItem, aList as list) script spd property aList : {} property resList : {} end script set (aList of spd) to aList set (resList of spd) to {} set yCount to 1 repeat with i in (aList of spd) set aResList to (Bplus’s indexesOfItem:anItem inList:i inverting:false) as list set tmpList to {} if aResList is not equal to {} then repeat with ii in aResList set jj to contents of ii set the end of tmpList to {jj, yCount} end repeat set (resList of spd) to (resList of spd) & tmpList end if set yCount to yCount + 1 end repeat return (resList of spd) –return {{x, y}…..} item list (1-based) end findDataFrom2DList on retRangeFromPosListVertival(posList as list) script rangeSPD property posList2 : {} end script –縦方向へのrange評価に都合がいいようにソート set (posList2 of rangeSPD) to shellSortListAscending(posList, {1, 2}) of me –先頭データをピックアップ set firstData to first item of (posList2 of rangeSPD) set (posList2 of rangeSPD) to rest of (posList2 of rangeSPD) copy firstData to {curX1, curY1} set tmpRangeStr to aNumToExcelColumn(curX1) of me & (curY1 as string) & ":" set tmpRange to {} set hitF to false set outList to {} repeat with i in (posList2 of rangeSPD) copy i to {tmpX, tmpY} –log {"{curX1, curY1}", {curX1, curY1}} –log {"{tmpX, tmpY}", {tmpX, tmpY}} if (curX1 = tmpX) and (curY1 + 1 = tmpY) then –Y方向への連続値を拾っている最中 if hitF = false then –log "case 1a" –log {"hitF", hitF} set hitF to true else –log "case 1b" –log {"hitF", hitF} –横に連続しているブロックの途中 end if else –直前の値と連続していない if hitF = false then –log "case 2a" –log {"hitF", hitF} set tmpRangeStr to tmpRangeStr & aNumToExcelColumn(curX1) of me & (curY1 as string) set the end of outList to tmpRangeStr set tmpRangeStr to aNumToExcelColumn(tmpX) of me & (tmpY as string) & ":" set hitF to false else –log "case 2b" –log {"hitF", hitF} –連続ブロックの末尾を拾った set tmpRangeStr to tmpRangeStr & aNumToExcelColumn(curX1) of me & (curY1 as string) set the end of outList to tmpRangeStr set tmpRangeStr to aNumToExcelColumn(tmpX) of me & (tmpY as string) & ":" set hitF to false –log {"tmpRangeStr", tmpRangeStr} end if end if copy {tmpX, tmpY} to {curX1, curY1} end repeat –log {tmpRangeStr, hitF} if (hitF = true) or (tmpRangeStr is not equal to "") then set tmpRangeStr to tmpRangeStr & aNumToExcelColumn(curX1) of me & (curY1 as string) set the end of outList to tmpRangeStr end if return outList end retRangeFromPosListVertival on retRangeFromPosListHorizontal(posList as list) script rangeSPD property posList2 : {} end script copy posList to (posList2 of rangeSPD) –先頭データをピックアップ set firstData to first item of (posList2 of rangeSPD) set (posList2 of rangeSPD) to rest of (posList2 of rangeSPD) copy firstData to {curX1, curY1} set tmpRangeStr to aNumToExcelColumn(curX1) of me & (curY1 as string) & ":" set tmpRange to {} set hitF to false set outList to {} repeat with i in (posList2 of rangeSPD) copy i to {tmpX, tmpY} –log {"{curX1, curY1}", {curX1, curY1}} –log {"{tmpX, tmpY}", {tmpX, tmpY}} if (curX1 + 1 = tmpX) and (curY1 = tmpY) then –X方向への連続値を拾っている最中 if hitF = false then –log "case 1a" –log {"hitF", hitF} set hitF to true else –log "case 1b" –log {"hitF", hitF} –横に連続しているブロックの途中 end if else –直前の値と連続していない if hitF = false then –log "case 2a" –log {"hitF", hitF} set tmpRangeStr to tmpRangeStr & aNumToExcelColumn(curX1) of me & (curY1 as string) set the end of outList to tmpRangeStr set tmpRangeStr to aNumToExcelColumn(tmpX) of me & (tmpY as string) & ":" set hitF to false else –log "case 2b" –log {"hitF", hitF} –連続ブロックの末尾を拾った set tmpRangeStr to tmpRangeStr & aNumToExcelColumn(curX1) of me & (curY1 as string) set the end of outList to tmpRangeStr set tmpRangeStr to aNumToExcelColumn(tmpX) of me & (tmpY as string) & ":" set hitF to false –log {"tmpRangeStr", tmpRangeStr} end if end if copy {tmpX, tmpY} to {curX1, curY1} end repeat –log {tmpRangeStr, hitF} if (hitF = true) or (tmpRangeStr is not equal to "") then set tmpRangeStr to tmpRangeStr & aNumToExcelColumn(curX1) of me & (curY1 as string) set the end of outList to tmpRangeStr end if return outList end retRangeFromPosListHorizontal –2008/05/01 By Takaaki Naganoya –10進数数値をExcel 2004/2008的カラム表現にエンコードするサブルーチン を使いまわし –1〜1351までの間であれば正しいエンコーディング結果を返す on aNumToExcelColumn(origNum as integer) if origNum > 1351 then error "エラー:Excel 2004/2008的カラム表現(A1形式)への変換ルーチンにおいて、想定範囲外(1351以上)のパラメータが指定されました" end if set upperDigitEncTable to {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "A"} set lowerDigitEncTable to {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "A"} set oNum to origNum set nTh to 26 set stringLength to 4 –数字が1桁の場合の対応 if origNum < 27 then set aRes to (item origNum of upperDigitEncTable) as string return aRes end if if origNum > 702 then –3桁になる場合 set upupNum to oNum div 676 –整数除算–上の上の桁 set oNum to oNum – (upupNum * 676) set upNum to oNum div 26 –整数除算–上の桁 set lowNum to oNum mod 26 – 1 –余剰計算–下の桁 –超つじつま合わせ処理 if lowNum = -1 then set upNum to upNum – 1 set lowNum to 25 end if set upupChar to (item upupNum of upperDigitEncTable) as string set upChar to (item upNum of upperDigitEncTable) as string set lowChar to (item (lowNum + 1) of lowerDigitEncTable) as string set resText to upupChar & upChar & lowChar else –2桁の場合 set upNum to oNum div 26 –整数除算–上の桁 set lowNum to oNum mod 26 – 1 –余剰計算–下の桁 –超つじつま合わせ処理 if lowNum = -1 then set upNum to upNum – 1 set lowNum to 25 end if set upChar to (item upNum of upperDigitEncTable) as string set lowChar to (item (lowNum + 1) of lowerDigitEncTable) as string set resText to upChar & lowChar end if return resText end aNumToExcelColumn –入れ子のリストを昇順ソート on shellSortListAscending(a, keyItem) return sort2DList(a, keyItem, {true}) of me end shellSortListAscending –入れ子のリストを降順ソート on shellSortListDecending(a, keyItem) return sort2DList(a, keyItem, {false}) of me end shellSortListDecending –2D Listをソート on sort2DList(aList as list, sortIndexes as list, sortOrders as list) –index値をAS流(アイテムが1はじまり)からCocoa流(アイテムが0はじまり)に変換 set newIndex to {} repeat with i in sortIndexes set j to contents of i set j to j – 1 set the end of newIndex to j end repeat –Sort TypeのListを作成(あえて外部から指定する内容でもない) set sortTypes to {} repeat (length of sortIndexes) times set the end of sortTypes to "compare:" end repeat –Sort set resList to (SMSForder’s subarraysIn:(aList) sortedByIndexes:newIndex ascending:sortOrders sortTypes:sortTypes |error|:(missing value)) as list return resList end sort2DList |
ちょっとしたデータをText Fieldの組み合わせでアラートダイアログ上に表示するUser Interfaceを提供するAppleScriptライブラリです。
–> Download displayTextFields_v11.scptd (To ~/Library/Script Libraries/)
本ライブラリは、あまり考えずにデータ内容を表示してユーザーへの確認を行うことが目的でした。実際に使ってみると、フィールド内容を微修正するような用途にも使いたいというニーズがPiyomaru Software内で出てきました。
従来の「display text fields」は単なる表示用(フィールド内容編集不可)、新規追加した「confirm text fields」コマンドではダイアログに表示したデータのユーザーによる編集が可能で、編集したデータ内容をリストで返します(キャンセルボタンのクリック時にはfalseが返る)。データの表示と微修正に便利だと思います。
もちろん、Piyomaru Software製のScript Libraryの共通仕様でAppleScript用語辞書そのものにサンプルAppleScriptを収録しているため、すぐに動かせます。
ただ、コマンドの説明文がグダグダで、いまいち英語の内容として意味が取りにくいような、、、、
AppleScript名:sample script2 |
— – Created by: Takaaki Naganoya – Created on: 2019/10/05 — – Copyright © 2019 Piyomaru Software, All Rights Reserved — use AppleScript version "2.5" use scripting additions use framework "Foundation" use tfLib : script "display text fields" set vRes1 to (confirm text fields main message "Zip archive Result" sub message "Edit this data to proc." key list {"scpt", "scptd", "applescript"} value list {98, 16, 3}) –> {"980", "160", "30"} |
date pickerで日付選択ダイアログを表示するAppleScript Library「choose date Lib」です。
–> Download choose date Lib.scptd (To ~/Library/Script Libraries/)
date pickerで日付選択するScriptは割とありふれていて、難易度も低く、あえてライブラリ化する必要をそれほど感じていなかったのですが、たまに(このような部品として)使いたくなります。ライブラリ化することで、ブラックボックス化されるため大きなプログラムに突っ込んだときのシステム負荷が少ない(Script Debugger上で巨大なプログラムを編集していると応答速度が遅くなってくるので、こういうUI部品系のコードまで構文確認の対象にしたくない)、ということは確実にいえます。
外部フレームワークなしで呼び出せる部品を整備しておくとメリットが大きいため、技術的には何も見るべきものはありませんが、用意しておきました。
デフォルトの表示日時を指定できるあたりが自分的に必要な機能であり、さほどたいしたものでもありません。CotEditorのPowerPack作成時に、
「アプリケーション内蔵のスクリプトメニューから呼び出したときにウィンドウ(ダイアログ)の表示レベルがメインのアプリケーションよりも低くなる(背面に回される)」
という現象を経験していたので(CotEditor側がosascriptコマンドでScriptを呼び出していることが原因?)、Window levelについては強制的に操作しています。
本当はこれを2つ横に並べて、開始日と終了日を取得するライブラリを作りたいのですが、NSDatePickerが意外と難物で、予想外に時間がかかって放り投げてしまいました。
本ライブラリは、こんな感じ(↓)の用途に使っています。
–> Download Code-Signed AppleScript executable Applet with Library in its bundle
AppleScript名:cre & mod date modifier.scptd |
— – Created by: Takaaki Naganoya – Created on: 2019/10/19 — – Copyright © 2019 Piyomaru Software, All Rights Reserved — use AppleScript version "2.4" use framework "Foundation" use scripting additions use cDate : script "choose date Lib" set aFile to choose file tell application "Finder window" set aDate to creation date of aFile end tell set dRes1 to choose date main message "ファイルの作成&修正日変更" sub message "変更したい日付を選択してください。" default date aDate copy dRes1 to {yNum, mNum, dNum} set targDate to date ((yNum as string) & "/" & (mNum as string) & "/" & (dNum as string)) changeFileCreationDate(targDate, aFile) of me changeFileModDate(targDate, aFile) of me –指定パスのファイルの作成日時を変更する on changeFileCreationDate(aDate, aFile) set aDic to current application’s NSMutableDictionary’s dictionaryWithObject:aDate forKey:(current application’s NSFileCreationDate) set aFM to current application’s NSFileManager’s defaultManager()’s setAttributes:aDic ofItemAtPath:(POSIX path of aFile) |error|:(missing value) end changeFileCreationDate –指定パスのファイルの修正日時を変更する on changeFileModDate(aDate, aFile) set aDic to current application’s NSMutableDictionary’s dictionaryWithObject:aDate forKey:(current application’s NSFileModificationDate) set aFM to current application’s NSFileManager’s defaultManager()’s setAttributes:aDic ofItemAtPath:(POSIX path of aFile) |error|:(missing value) end changeFileModDate |
位置情報リストを与え、リスト+地図表示していずれかを選択するUser Interfaceを提供するAppleScriptライブラリです。
–> Download choose location.scptd (To ~/Library/Script Libraries/)
リストに入れた所定のラベルを持つレコードを与えると、地図表示して選択できます。
set aPlaceList to {{title:"Ginza", latitude:"35.67229109", longitude:"139.76575278"}....}
のような名称、緯度、経度のセットを与えます。各位置情報については適宜計算してください(自分はYahoo!の住所ジオコーダーサービスを利用しています)。
地図の表示タイプをGUI上から切り替えられますが、AppleScriptのオプション「initial map type」で初期表示地図タイプを指定できます。
▲初期表示タイプ「map」「satellite」「mixture」(左より)
sdefがいまひとつうまく想定どおりに動いていません。位置情報リストのラベルを予約語として動作させたかったのに、そう動いていませんが、とりあえず現状はこんな感じです(^ー^;; あと、Optional=”Yes”を指定しても省略可能表示になっていないのが謎です。いいのか悪いのか、機能自体に影響がないので現状このままですが、、、
AppleScript名:choose loc sample script |
— Created 2019-09-08 by Takaaki Naganoya — 2019 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" use cLoc : script "choose location" set aPlaceList to {{title:"Ginza", latitude:"35.67229109", longitude:"139.76575278"}, {title:"Shinjuku", latitude:"35.69096528", longitude:"139.70403520"}, {title:"Kyoto", latitude:"35.00394764", longitude:"135.76277689"}, {title:"Shibuya", latitude:"35.66621547", longitude:"139.71090224"}, {title:"Marunouchi", latitude:"35.67982632", longitude:"139.76364660"}, {title:"Omote-sando", latitude:"35.66621547", longitude:"139.71090224"}, {title:"Nagoya-Sakae", latitude:"35.16556738", longitude:"136.90693150"}, {title:"Fukuoka-Tenjin", latitude:"33.58682428", longitude:"130.39764326"}, {title:"Shinsai-bashi", latitude:"34.67225640", longitude:"135.49985757"}} set cRes to (choose location from aPlaceList main message "Select Apple Retail Store in Japan" sub message "These stores are almost same. All products are same. The most of visitors are waiting people to repair their broken products." with size {900, 500} initial map type map) |
2D List(二次元配列)データを気軽に表UIでプレビューするUser Interfaceを提供するdisplay table Script Library+サンプルコードです。
–> Download displayTable.scptd (To ~/Library/Script Libraries/)
表UIを提供する部品としては、Shane StanleyのMyriad Tables Libが存在しており、ひじょうに充実した機能を備えているため、同様でかつ機能が低いものを提供する必要はないはずです。
ですが、同ライブラリはバンドル内にFrameworkを含んでおり、SIPによる機能制限でそのままではmacOS 10.14以降の環境ではこのライブラリを(スクリプトエディタでは)呼べないなどの問題があります。ホームディレクトリ以下のFrameworkのバイナリを呼べないわけです。Script Debuggerを使ったり、アプレットとして書き出せばクリアできるものの、利用シーンが限定されるきらいがありました(このあたり、GUIなしのsdefつきアプリケーションとして仕立ててライブラリのバンドル内に入れれば回避できるのではないかと思っていますが、どうなりますやら)。
そこで、2D List(二次元配列)データのプレビューなど、最低限の機能をそなえたライブラリを(主に自分用に)作ってみたものです。もともと、NSTableViewで表示するためには2D List(2次元配列)ではなくRecord in List(行ごとに各フィールドが属性ラベルの付いたRecord)になっている必要があります。この、2D List → Record in Listの変換処理が面倒なので、その部分を中心に、汎用部品として使えるように機能をまとめてみました。
NSTableViewの各セルのタイトルをRecord in Listの各ラベル値に設定しており、上記のデータは、
(NSArray) { { ダッシュ時間:"2.2cnt", ダッシュ距離:"?m", タックルダメージ:"20", ダッシュ速度:"208km/h", ジャンプ速度:"167km/h", 硬直時間:"38f", セッティング名:"旋(旋回) ", アーマー値:"284", 歩行速度:"100km/h", 旋回速度:"10.9rpm", 備考:"" }, ........... { ダッシュ時間:"2.1cnt", ダッシュ距離:"?m", タックルダメージ:"20", ダッシュ速度:"180km/h", ジャンプ速度:"144km/h", 硬直時間:"38f", セッティング名:"装(装甲) ", アーマー値:"343", 歩行速度:"100km/h", 旋回速度:" 9.7rpm", 備考:"" } }
という、日本語の属性ラベルのついたRecord(Dictionary)に変換・表示しています。
dialog上のアイコン表示部品を画像のプレビュー用に使ってみたりと、例によって好き放題やっていますが、アイコン関連のファイルパス/URLを指定しなければ通常の動作を行います。
AppleScript名:display table by list sample |
— – Created by: Takaaki Naganoya – Created on: 2019/08/25 — – Copyright © 2019 jp.piyomarusoft, All Rights Reserved — use AppleScript version "2.5" — El Capitan (10.11) or later use framework "Foundation" use scripting additions use easyTable : script "display table by list" set msURL to "http://web.gundam-kizuna.jp/sp/image/index/img/p/QBP89Z-T_2o62sJWBQC7BSsw08wZuZ28keecHZs9Io4" set aList to {{"旋(旋回) ", "284", "208km/h", "2.2cnt", "?m", "167km/h", "10.9rpm", "38f", "20", "100km/h", ""}, {"硬(硬直減) ", "286", "206km/h", "2.1cnt", "?m", "165km/h", "10.3rpm", "34f", "20", "100km/h", ""}, {"歩(歩行) ", "293", "206km/h", "2.2cnt", "?m", "165km/h", "10.3rpm", "38f", "20", "111km/h", ""}, {"跳(ジャンプ)", "263", "202km/h", "2.1cnt", "?m", "183km/h", "10.3rpm", "39f", "20", "100km/h", ""}, {"走(ダッシュ)", "248", "224km/h", "2.3cnt", "?m", "161km/h", "10.3rpm", "40f", "20", "100km/h", ""}, {"機(機動) ", "243", "216km/h", "2.2cnt", "?m", "177km/h", "10.6rpm", "39f", "20", "100km/h", ""}, {"推(ブースト)", "296", "196km/h", "2.4cnt", "?m", "157km/h", "10.0rpm", "38f", "20", "100km/h", ""}, {"突(タックル)", "298", "190km/h", "2.1cnt", "?m", "152km/h", " 9.7rpm", "38f", "30", "100km/h", ""}, {"装(装甲) ", "343", "180km/h", "2.1cnt", "?m", "144km/h", " 9.7rpm", "38f", "20", "100km/h", ""}} set fLabels to {"セッティング名", "アーマー値", "ダッシュ速度", "ダッシュ時間", "ダッシュ距離", "ジャンプ速度", "旋回速度", "硬直時間", "タックルダメージ", "歩行速度", "備考"} set aRes to (display table by list aList main message "項目の選択" sub message "適切なものを以下からえらんでください" size {1200, 400} labels fLabels icon msURL timed out 5) |
一発芸、出落ちと呼ばれた「display youtube」Script libraryをアップデート(v2.0)しました。
Download display youtube_v2.scptd (To ~/Library/Script Libraries/)
アップデート内容:
・AppleScript用語辞書内にサンプルScript(すぐに使えるScriptリンク内蔵)を掲載した
・start fromオプションを新設。再生開始位置を秒数で指定できるようにした
・エラーメッセージ内容をより親切にした
利用条件:
・YouTubeのムービーを視聴可能な程度のインターネット接続回線に接続していること
・macOS 10.11以降。実際の確認はmacOS 10.12以降。未確認ながら10.10上でも動作するはず
display youtubeライブラリの用語辞書を読むには、スクリプトエディタ上で、
▲「ウィンドウ」から「ライブラリ」を実行
▲「ライブラリ」パレットに「display youtube」ライブラリファイルをドラッグ&ドロップ。このライブラリパレット上のdisplay youtubeをダブルクリックすると用語辞書が表示されます
▲starts from無指定時(冒頭から再生)
▲starts from 24(冒頭から24秒の箇所から再生)
▲starts from 290(冒頭から290秒の箇所から再生)
YouTube上のオンラインゲームのリプレイムービーを視聴するような場合には、ムービー内容のうちスキップしたい場所とか「ここだけ見たい」という箇所は固定で決まっています(プログラムから書き出してYouTubeにアップロードするため)。そこで、再生開始ポジションを明示的に指定できると便利かと思われました。
ほかにも、いろいろと追加すると便利そうな機能はあります(未実装)。
いくつかボタンをダイアログ上に追加表示して、指定の秒数の箇所に頭出しするとか、表示内容のキャプチャーを撮るとかです(WkWebViewの表示内容を画像としてキャプチャする方法がぜんぜん不明。ウィンドウごとPDFとしてキャプチャしても撮れないし)。
コンピュータにスマホの機能で満足してしまうユーザーが多い昨今、ダイアログという箱庭的なUser Interface上にちょっとした便利機能を表示して使えるようにすると、それなりに満足できるユーザーが多いのではないかという仮説のもとに作成してみましたが、どんなもんでしょうか。
ちなみに、このリプレイムービーで自分はジオンの2番機でザクキャノンに搭乗。拠点を叩きつつ僚機にチャットで指示を送って、チームワークの力で勝利しました。
AppleScript名:display youtube sample |
— – Created by: Takaaki Naganoya – Created on: 2019/08/25 — – Copyright © 2019 jp.piyomarusoft, All Rights Reserved — use AppleScript version "2.5" — El Capitan (10.11) or later use framework "Foundation" use scripting additions use utbLib : script "display youtube" set aURL to "https://www.youtube.com/watch?v=GP_tVXTYdmY" display youtube main message "Replay Movie" sub message "My Senjo No Kizuna replay movie on YouTube" with URL aURL with size {900, 600} starts from 24 |
指定した複数の色からどれかを選ぶコマンドを提供するAppleScriptライブラリ+呼び出しサンプルScriptです。
–> Download pickup color.scptd(To ~/Library/Script Libraries)
使い道があるんだかないんだか微妙ですが、本来であれば何らかの画像を入力して、画像内の色をポスタライズして色数を減らし、その上で本ライブラリのようなインタフェースを用いて色選択。元画像のうち選択色の占めるエリアをダイアログ上で点滅表示……という処理が行いたいところです。
アラートダイアログのアイコン表示部分は、本来なら実行をリクエストしたアプリケーションのアイコンが表示されますが、選択色のプレビュー領域に使ってみました。このアイコン表示は最前面のアプリケーションのアイコンが入るべきという「ルール」があるわけですが、最前面のアプリケーションが何であるかは分かりきっています。
別の運用方法でもっと便利になるのであれば、そういうことを試してみてもいいでしょう。
▲本来は、指定画像中の色を検出して、選択した色が表示されているエリアのみ点滅表示させたい。Xcode上で作ればできそう、、、、
また、Frameworkを呼び出してNSImageから色名をダイナミックに生成するという処理も、ライブラリとして運用するために取り外していますが、これも取り外したくはない部品です。
本来やりたい処理のすべてができているわけではないので、本ライブラリはまだまだ試作品レベルです。
色データを8ビットの整数値で与えるか、16ビットの整数値で与えるかをEnum「max255」「max65535」で表現していますが、もう少しスマートに表現したいところです。
AppleScript名:pickup color sample |
— – Created by: Takaaki Naganoya – Created on: 2019/08/31 — – Copyright © 2019 jp.piyomarusoft, All Rights Reserved — use AppleScript version "2.4" use scripting additions use framework "Foundation" use colPic : script "pickup color" set ap1List to {{65535, 0, 65535}, {0, 32896, 16448}, {65535, 65531, 2689}, {0, 32896, 65535}, {8608, 65514, 1548}, {46003, 46003, 46003}, {19702, 31223, 40505}} set cRes to pickup color ap1List main message "Color Dialog" sub message "Choose a color from popup button" color max max65535 |