AppleScript: Я скопировал выделение искателя в буфер обмена. Могу ли я получить полный путь к скопированным предметам?

StackOverflow https://stackoverflow.com/questions/3485061

Вопрос

У меня есть один или несколько файлов и / или папок, выбранных в искателе. Я вручную скопирую их в буфер обмена / картона (⌘c.).

Сохранять вещи простыми, скажем, я просто скопировал один обычный файл. Идеальное решение, однако, имеет дело со многими файлами и смешанным выбором с папками, псевдонимами.

Теперь, когда этот файл находится в буфере обмена, я хочу получить полный путь (Предпочтительно путь POSIX).


Чтобы сэкономить ваше время:

  • Я ищу решение AppleScript (или RB-Appscript).
  • Я не хочу получить путь прямо из отбора. Это должно быть из элемента на буфер обмена.
  • Действительно, я знаю, что могу настроить это, скопировав путь (ы) на выбор сначала, затем делаю все, что я с этим.

То, что я знаю так далеко (отметил в RB-Appscript):

  • OSAX.osax.the_clipboard имеет строку имен файлов без пути.
  • Appscript.app('Finder').clipboard.get по-видимому, не реализован (словарь говорит «недоступен»; вызов его возвращается :missing_value.
Это было полезно?

Решение

Следующий AppleScript кажется, что делает трюк:

POSIX path of (the clipboard as «class furl»)

Если в буфер обмена есть несколько элементов, он вернет путь POSIX только первого элемента.

Также см. AppleScript Command Reevent для команды the clipboard.


RB-Appscript версия:

OSAX.osax.the_clipboard(:result_type => :file_url).path

Другие советы

Вот AppleScript, который получит все пути POSIX из буфера обмена, а не только первым ...

set theFiles to paragraphs of (get the clipboard)

set posixPaths to {}
repeat with aFile in theFiles
    try
        tell application "Finder" to set thePath to item aFile as text
        set end of posixPaths to (POSIX path of thePath)
    end try
end repeat
return posixPaths

Просто подумал, что я поделился кодом RB-Appscript, который я написал после ответа Sakra:

#!/usr/bin/arch -i386 /usr/bin/ruby
require "rubygems"
require "osax"
include OSAX


def path_from_clipboard
  osax.clipboard_info.flatten.include? :file_url or raise "clipboard does not contain path data" 
  osax.the_clipboard.count("\r") == 0            or raise "clipboard contains more than one path"
  osax.the_clipboard(:result_type => :file_url).path
end

puts path_from_clipboard

Искатель, являющийся тому, что есть, и AppleScript - это то, что оно есть, это все слишком, не может ойти. Итак, что, черт возьми, я прыгнул в какао.

Любая из этих скриптов вернет список абсолютных путей каждого на новую строку.

Macruby:

#!/usr/bin/env macruby
# encoding: UTF-8
framework 'Cocoa'
puts NSPasteboard.generalPasteboard.pasteboardItems
  .map { |pbi| pbi.stringForType('public.file-url') }.compact
  .map { |url| NSURL.URLWithString(url).path }

Nu:

#!/usr/bin/env nush
(puts ((((((NSPasteboard generalPasteboard) pasteboardItems)
  map:    (do (pbi) (pbi stringForType: "public.file-url")))
  select: (do (url) (url)))
  map:    (do (url) ((NSURL URLWithString: url) path))) componentsJoinedByString: "\n"))

Я искал решение, которое будет копировать путь к файлам, выбранным в Finder. Вот что я придумал:

set ASTID to AppleScript's text item delimiters --——>>
set AppleScript's text item delimiters to return

tell application "Finder" to set sel to the selection as text

set listPaths to {}
repeat with pth in paragraphs of sel
    set end of listPaths to POSIX path of pth
end repeat

set listPathsClipboard to listPaths as text
set AppleScript's text item delimiters to ASTID --——<<

set the clipboard to listPathsClipboard
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top