Archive for the 'Dock' Category

2015/09/08 Dockアイコンをバウンドさせる

Cocoaの機能を用いて、DockのアイコンをバウンドさせるAppleScriptです。

実行中のアプリケーション(Script EditorやAppletを前提)が最前面に来ていない場合にDockのアイコンをバウンドさせます。

Finderを最前面に出しているのは動作確認のためで(最前面にScript EditorがいるとDockアイコンがバウンドしない)、それ以上でもそれ以下でもありません。

AppleScript名:ASOCでDockアイコンをバウンドさせる
– Created 2015-09-08 by Takaaki Naganoya
– 2015 Piyomaru Software
use AppleScript version “2.4″
use scripting additions
use framework “Foundation”
use framework “AppKit”

tell application “Finder” to activate –Script Editor/ASObjC Explorer 4を背面に

set anApp to current application’s NSApplication’s sharedApplication()
anApp’s requestUserAttention:(current application’s NSCriticalRequest)

★Click Here to Open This Script 

2009/10/19 Dockに登録されている情報を取得する Snow Leopard

Dockに登録されている項目をGUI Scripting経由で取得するAppleScriptのSnow Leopard対応版です。

どういうことをやって確認したかといえば、PreFab SoftwarePreFab UI Browserを起動し、監視対象のアプリケーションとして「Dock」を選択して、値を確認し直しただけです。

しかし、属性値がどんどんローカライズされていくのは、方針として正しいのか間違っているのか……書きやすさという意味ではローカライズされていた方がいいでしょうけれど、結局PreFab UI Browserがないと手も足も出ません。

最終的には、AppleはPreFab UI Browserなしで記述できるレベルに記述環境を整備したいのかもしれませんが、OSのメジャーアップデート時にしかアップデートされないので、いまひとつピンと来ません。

uib1.jpg

uib2.jpg

スクリプト名:Dockに登録されている情報を取得する Snow Leopard
set dockRes to retDockPrefs() of me
–> {apps:{”Finder”, “ML Ranking”, “アクティビティモニタ“, “辞書“, “DragThing”, “グラブ“, “Okaeri”, “Mail”, “Safari”, “Diary++X”, “MacJournal”, “AppleScript エディタ“, “UI Browser”}, docs:{}, wins:{”[mixi]”, “Diary++X - 20091019日月曜日“, “Podcasting”}}

–Dockに登録されている情報を取得する
on retDockPrefs()
  tell application “System Events”
    tell application process “Dock”
      tell list 1
        アプリケーション
        
set apList to title of every UI element whose description is equal toアプリケーション Dock 項目
        
登録された書類
        
set docList to title of every UI element whose description is equal to書類 Dock 項目
        
最小化されたウィンドウ
        
set winList to title of every UI element whose description is equal toしまわれたウインドウ Dock 項目
      end tell
    end tell
  end tell
  
return {apps:apList, docs:docList, wins:winList}
end retDockPrefs

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2008/06/22 Dockに登録されている情報を取得する(アプリ、書類、ウィンドウ)

MLでDockの情報を取得する話題が出ており、defaults readコマンドで設定を読み取る方法が紹介されていましたが、それでは日本語環境では完全に取得できないようです(Mac OS X 10.4.11)。

Dockの登録情報を取得するには、plistを読み取る以外にもGUI Scripting経由で行う方法もあり、単に情報を取得するだけならplistファイルからdefaults readコマンドで内容を読み取るよりも十分な内容を取得できるようです。

DockのScripting対応機能については、Mac OS Xの初期から貧弱このうえなく、Appleとしてはアプリケーションのインストーラによって操作する以外に操作してほしくない、ということなのか……それとも、単にDockまわりを担当しているチームがAppleScriptに関する知識を持ち合わせていないのか……はたまた、AppleのAppleScriptチームがAppleScriptのコンセプト(あるいは対応の必然性)を社内の他のチームに十分説明できていないために万事中途半端になっているのか…………いずれにしても、社内の開発チーム間の連絡がうまく行っていないことを強く感じるものです。

Automatorの話もUNIX系のチームから出てきたものをAppleScriptチームが聞きつけて参加したとの話が紹介されていますが、その後の議論が不十分でありコンセプトが右往左往している様子が見て取れます。

スクリプト名:Dockに登録されている情報を取得する
set dockRes to retDockPrefs() of me
> {apps:{”Finder”, “アクティビティモニタ”, “Okaeri”, “DragThing”, “Mail”, “Safari”, “FileMaker Pro”, “プレビュー”, “スクリプトエディタ”, “ターミナル”, “UI Browser”}, docs:{”指定フォルダ内の指定ファイルを削除”}, wins:{”Apple Home Page powered by Excite”, “受信”, “AppleScript Users ― この Mac 内 (メッセージ 1218 件、未開封 186 件)”}}

Dockに登録されている情報を取得する
on retDockPrefs()
  tell applicationSystem Events
    tell application processDock
      tell list 1
        –アプリケーション
        
set apList to title of every UI element whose description is equal toapplication dock item
        –
登録された書類
        
set docList to title of every UI element whose description is equal todocument dock item
        –
最小化されたウィンドウ
        
set winList to title of every UI element whose description is equal tominimized window dock item
      end tell
    end tell
  end tell
  
return {apps:apList, docs:docList, wins:winList}
end retDockPrefs

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2008/04/29 エイリアスをDockに追加する

Dockにエイリアスを追加するサブルーチンです。よくありがちな処理なので、このぐらいは命令を標準装備していてほしいものです。Mac OS X 10.5上では動作確認を行ってありませんが、多分動くでしょう。

スクリプト名:エイリアスをDockに追加する
set addApp to choose file with promptPlease choose an app to Dockdefault location path to applications folder
addAliasToDock(addApp) of me

エイリアスをDockに追加する
on addAliasToDock(anAlias)
  set addAppPath to (POSIX path of anAlias) as Unicode text
  
do shell scriptdefaults write com.apple.dock persistent-apps -array-add ‘tile-datafile-data_CFURLString” & addAppPath & “_CFURLStringType0
  
do shell scriptsh -c \”killall Dock\”
end addAliasToDock

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2008/04/10 Dockの制御

Dockの制御方法です。defaultコマンドで設定値をplistに書き込んで、おもむろにDockをkillするという乱暴な方法がなにげによく使われています。昔のMac OS X(10.0ぐらい?)ではDockをkillすると消えっぱなしでしたが、その後の変更によりkillすると起動するようになりました。その仕組みを利用しています。

10.5にDock操作用の機能がSystem Eventsあたりにあったような記憶があります。ただ、現時点ではとても常用できるような出来では……(汗)

スクリプト名:ドックの制御

set command to “defaults write com.apple.dock tilesize -int 32″
set command todefaults write com.apple.dock orientation -string right

do shell script command
tell applicationDockto quit

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2008/04/05 すべてのScriptをDockから取り出す

Script Menuに入れて使うタイプのScriptです。AppleScriptでプログラムを書き始めると、気がつけば大量のウィンドウを開いて作業をしていることがよくあります(汗) 邪魔なので途中のものをDockにしまっておいたりするわけですが、そのウィンドウをすべてDockから取り出すのは割と面倒です。で、面倒な作業をワンアクションで実行できるようにScriptを書いた次第です。

スクリプトエディタのウィンドウがDockに大量に入っている状態

スクリプト名:すべてのScriptをDockから取り出す
tell applicationScript Editor
  tell (every window whose name is not equal to “”)
    set visible to true
  end tell
  
tell windowイベントログの履歴to set visible to false
  
tell window結果の履歴to set visible to false
end tell

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に