Listando todos os documentos abertos em todas as aplicações visíveis abertas no AppleScript

Eu me depairei com algo como:

Código :

tell application "Preview" set p to {} set p to documents end tell 

Saída :

 {document "1st.pdf" of application "Preview", document "2nd.pdf" of application "Preview"} 

Mas isso é altamente específico do aplicativo – fazendo isso no MS Word, por exemplo, rendeu paths e alguns aplicativos como o CodeRunner não entende a palavra-key de documents .

Dado esses documentos abertos:

 Current open documents from all open visible apps +– Microsoft Word.app | +– 1.docx | +– 2.docx +– CodeRunner.app | +– 1.sh | +– 2.py | +– 3.pl +– Preview.app +– 1.pdf +– 2.png . . . 

Eu quero uma saída de algo como isto:

 {"~/Documents/1.docx", "~/Downloads/2.docx", "~/Dropbox/folder/1.sh", "~/Dropbox/others/2.py", "~/Downloads/folder/folder/3.pl", "~/Documents/special/1.pdf", "~/Dropbox/special/2.png", ...} 

Como é possível listr todos os documentos abertos em todas as aplicações abertas?

Eu tentei fazer isso sozinho. Concluí que não existe uma maneira padrão e gairantida de obter os documentos abertos de uma aplicação em execução.

O que você tentou é o melhor método. Paira aplicativos que usam a architecture do documento Cocoa (a maioria), há suporte automático paira AppleScript paira obter todos os objects NSDocument abertos e consultair certas properties desses objects. O mapeamento entre as properties AppleScript e as properties Objective-C é mostrado abaixo.

Propriedade AppleScript => Objective-C getter:

  • path => fileName
  • modified => isDocumentEdited
  • name => lastComponentOfFileName

O que você quer é o path propriedade. Como tell application "Preview" to set documentsList to path of documents .

Infelizmente, este suporte automático AppleScript só está disponível paira aplicativos que usam a architecture do documento Cocoa e possuem o AppleScript ativado (através da key NSAppleScriptEnabled NSAppleScriptEnabled). Portanto, esse método não funcionairá em alguns aplicativos. Por exemplo, o CodeRunner não possui o AppleScript ativado. E o TextMate não usa a architecture do documento Cocoa.