Archive for the 'DragThing' Category

2017/01/31 DragThing上で選択中のSlotのアイコン画像をデスクトップに書き出す

DragThing上で選択中のSlotのアイコン画像をデスクトップに書き出すAppleScriptです。

ランチャーの老舗、James ThomasonのDragThing(バージョン5.9.17)を愛用しています。macOS標準搭載のDockには最小限のアプリケーションのみ登録しておき、基本的にはDragThingから起動。

dt0.png

dt1.png

さまざまなアプリケーションの紹介を行うKeynote書類を作るために、Finder上で選択しておいたアプリケーションのアイコン画像を書き出すAppleScriptは作ってありました。

dt00_resized.png

その一方で、DragThing上の選択中のアプリケーションのアイコンを書き出すようなものはなかったので、DragThing上で選択→Finderに表示→アイコン書き出しScript実行 と操作していたのですが、あまりに不毛なのでDragThing上から直接書き出せるものを作ってみました。

Dockに大量のアプリケーションを登録し、1個1個が豆粒大になっているユーザーを見かけますが、大量のアプリケーションを登録・管理するのであれば、タブでジャンル分けして管理できるDragThingのほうがおすすめです。

また、DragThingはURLも登録しておけます。DragThingをブックマークとして利用することで、Webブラウザの共通ブックマークとして運用できるため、日常的に複数のWebブラウザを利用している人にとってはたいへん便利でしょう。

dt2_resized.png

dt3.png

macOS標準装備のScript Menuに登録して呼び出しています。

dt4_resized.png

AppleScript名:DragThing上で選択中のSlotのアイコンをデスクトップに書き出し v2
– Created 2017-01-31 by Takaaki Naganoya
– 2017 Piyomaru Software
use AppleScript version “2.4″
use scripting additions
use framework “Foundation”
–http://piyocast.com/as/archives/4419

tell application “DragThing”
  –Version 5.9.17で動作確認
  
set aSel to selection
  
if aSel = {} then return
  
  
set bSelected to {}
  
repeat with i in aSel
    set j to contents of i
    
try
      –ここでエラーが出ないということは、Dockに登録したファイルである(URLではない)と仮定
      
set aPath to file location of j
      
      
—選択したSlotの内容がアプリケーションだったらデスクトップにアイコン画像を書き出す
      
set fRes to detectAppFile(aPath) of me
      
if fRes = true then
        writeOutICNS(aPath) of me
      end if
    end try
  end repeat
  
end tell

on detectAppFile(aPath)
  tell application “System Events”
    set fType to file type of aPath
    
return (fType as string = “APPL”)
  end tell
end detectAppFile

–指定ファイルのアイコンをCFBundleIdentifierの名称でtmpにPNGで書き出す
on writeOutICNS(aFile)
  set aPOSIXpath to POSIX path of aFile
  
set anURL to current application’s |NSURL|’s fileURLWithPath:aPOSIXpath
  
  
set myBundle to current application’s NSBundle’s bundleWithURL:anURL
  
set aBundleID to myBundle’s bundleIdentifier() as text
  
set anIconFileName to (myBundle’s objectForInfoDictionaryKey:“CFBundleIconFile”) as string
  
  
–アイコン名には拡張子を省略してもよいので、ない場合には補う
  
if anIconFileName does not end with “.icns” then
    set anIconFileName to anIconFileName & “.icns”
  end if
  
  
set ifonFileFullPath to aPOSIXpath & “Contents/Resources/” & anIconFileName
  
  
set sText to “cp “ & quoted form of ifonFileFullPath & ” ~/Desktop/” & quoted form of (aBundleID & “.icns”)
  
do shell script sText
  
end writeOutICNS

★Click Here to Open This Script 

2008/10/02 DragThingで、最前面のDock上で現在選択されているレイヤーの名称を返す

DragThingで、最前面のDockのうち現在選択されているレイヤーの名称を取得するAppleScriptです。

現在選択中のDockの名称……の部分の記法が一番難しかった部分で、AppleScriptの世界では各アプリケーションの最前面のドキュメントに対する指定方法があったりなかったり(まさに、アプリケーション側の対応次第)するわけで、だいたいは「Window 1」にアクセスしてみると大丈夫な場合が多いのですが、これを明示的にfront windowとかfront documentといったアクセス方法が提供されているケースもあり、なかなか悩まされるポイントです。

アプリケーションによっては、Window 1にアクセスできたとしても、Window 1がどのドキュメント(ファイル名)に該当するものなのか、情報を取得できない場合があったり……また、windowではなくdocumentオブジェクト経由でアクセスしてdocument 1で最前面の書類にアクセスできることもあります(これは例外中の例外であり、だいたいdocumentはオープンした順に番号がつきます)。

結局、このScriptを試作できた結果、「選択中のレイヤーで起動回数ランキングを表示」という大物Scriptを作ることができました。

スクリプト名:DragThingで、最前面のDock上で現在選択されているレイヤーの名称を返す
tell application DragThing
  最前面のDockの名称を取得
  
tell window 1
    set curDock to name
  end tell
  
  
最前面のDock上で現在選択されているレイヤーの名称を返す
  
tell dock curDock
    set curLayer to current layer
    
tell layer curLayer
      set curLayerName to name
    end tell
  end tell
end tell

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

2008/10/02 DragThingの特定のDock中で現在選択中のレイヤーを求める

DragThingの特定のDock中で、現在選択中のレイヤー名を求めるAppleScriptです。DragThing上で現在選択中のDockの中の現在選択中のレイヤーを求めるための試作品です。

スクリプト名:DragThingの特定のDock中で現在選択中のレイヤーを求める
tell application "DragThing"
  tell dock "AppDock" 任意のDock名称。各ユーザーごとに違う
    set curLayer to current layer
    
tell layer curLayer
      set aName to name
    end tell
  end tell
end tell

aName
> "環境設定"

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

2008/10/02 DragThingで表示しているDock名称を取得する

アプリケーションランチャーといえばDragThing、というのが一昔前(1999年ごろ)の定番だったのですが、Mac OS XにDockが標準搭載され、ライトユーザーとかビギナーはこれしか(Dock)しか知らないというのが昨今の状況。しかし、手になじんだDragThingはいまだに手放せないアプリケーションのうちのひとつです。

DragThingは昔から(Classic Mac OSの時代から)AppleScriptに対応していたのですが、DragThingをAppleScriptからコントロールする「意義」については疑問視していました。

それが……起動回数のランキングを表示したり、DragThingのDockの中をキーワード検索したりといったAppleScriptを組んでみたら、これが予想外に便利で……最近ではDragThing向けのAppleScriptも書くようになりました。とりあえず、本Scriptはオープン中のDragThingのDockの名称について取得するものです。name of every dock……でも名称一覧を取得できるような気もしますが、次のプログラムのための試作品としての性格が強いものであり、あえてこう書いています。

スクリプト名:DragThingで表示しているDock名称を取得する
tell application DragThing
  set a to count every dock
  
set nameList to {}
  
repeat with i from 1 to a
    tell dock i
      set the end of nameList to name
    end tell
  end repeat
end tell

nameList
> {”URLどっく”, “AppDock”}

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