AppleScript Focus / Rename File (и нажатие в любом месте) - PullRequest
0 голосов
/ 24 мая 2011
on run {input}
    set filepath to POSIX path of input
    do shell script "touch " & quoted form of filepath & "untitled"
    return input
end run

Это то, что у меня есть, и это работает, но есть ли способ затем сфокусироваться на файле и вызвать переименование? Я не хочу, чтобы переименование было автоматическим, просто вызовите событие (например, нажмите «return», когда у вас есть выбранный файл). И я не хочу использовать какие-либо модальные ...

Быстрый ответ : есть ли способ установить это так, чтобы мне не нужно было выбирать папку или файл напрямую, но можно сделать это, скажем, щелкнув пробел в папке пока это в Finder? Прямо сейчас у меня есть "Служба получает выбранный" на "files or folders" в Finder.app.

== ОБНОВЛЕННЫЙ КОД ==

on run {input}
    set filepath to POSIX path of input
    do shell script "touch " & quoted form of filepath & "untitled"
    tell application "Finder"
        activate
        set target of Finder window 1 to POSIX file "/Users/oscargodson/Documents/designs/untitled"
    end tell
    tell application "System Events"
        tell process "Finder"
            keystroke return
        end tell
    end tell
    return input
end run

Если я жестко закодировал путь, он работает! Но как мне получить var, который работает?

Ответы [ 3 ]

3 голосов
/ 25 мая 2011

Вот один из способов.Я думаю, что модальное окно, где вы спрашиваете имя, было бы лучше, но вы можете попробовать это.Обратите внимание, что вы не используете «путь POSIX» в этом коде.Applescript не использует пути POSIX.Также {input}, как указано в скобках, это список элементов.Поэтому вы воздействуете на элементы списка, и в этом случае мы воздействуем на первый элемент.

set filepath to item 1 of input

tell application "Finder"
    activate
    reveal filepath
end tell

tell application "System Events"
    tell process "Finder"
        keystroke return
    end tell
end tell

РЕДАКТИРОВАТЬ: с вашим обновленным кодом, вот рабочий скрипт ...

on run {input}
    if (class of input) is not list then set input to {input}
    set theFolder to (item 1 of input) as text

    try
        alias theFolder
        tell application "Finder"
            if (class of item theFolder) is not folder then error "input is not a folder."
            activate
            set theFile to make new file at folder theFolder with properties {name:"untitled"}
            reveal theFile
        end tell

        delay 0.2

        tell application "System Events"
            tell process "Finder"
                keystroke return
            end tell
        end tell
    on error theError number errorNumber
        tell me
            activate
            display dialog "There was an error: " & (errorNumber as text) & return & return & theError buttons {"OK"} default button 1 with icon stop
            return
        end tell
    end try
    return input
end run
1 голос
/ 26 мая 2011
tell application "Finder"
    activate
    reopen -- in case there are no open windows
    set target of Finder window 1 to POSIX file "/Applications/Safari.app"
end tell

reveal и select всегда открывают новое окно, set target и set selection нет.

Я не знаю почему, но когда set selection оно использовалосьв представлении столбца можно выбирать только элементы из всего содержимого целевого окна.То же самое не происходит в других представлениях, поэтому это похоже на ошибку.


Исправление для кода в отредактированном вопросе:

on go(input)
    set p to POSIX path of (input as text)
    set p2 to p & "untitled"
    do shell script "touch " & p2
    tell application "Finder"
        reopen
        activate
        set target of Finder window 1 to POSIX file p2
    end tell
    delay 0.3 -- time to release modifier keys
    tell application "System Events" to keystroke return
end go

tell application "Finder"
    set fold to folder (path to documents folder)
end tell
go(fold)

(Это on goи последние строки только для тестирования.)

0 голосов
/ 30 апреля 2015

Я создал AppleScript на основе @ regulus6633, но с некоторыми улучшениями.

Примечание: Этот ответ был первоначально опубликован как AskDifferent ответ . Я копирую / вставляю сюда для удобства.


Идея состоит в том, чтобы создать рабочий процесс Automator и назначить ему ярлык, используя следующие шаги:

  • Откройте Automator и создайте Сервис ;
  • Установите для ввода без ввода , а для приложения - Finder.app ;
  • Перетащите Запустите элемент рабочего процесса AppleScript в серое пространство;
  • Поместите содержимое этого AppleScript в текстовое поле;
  • Сохранить рабочий процесс с разумным именем (например, Новый файл );
  • Перейдите в Настройки -> Клавиатура -> Ярлыки -> Службы и назначьте ему ярлык.

Теперь давайте покажем AppleScript:

set file_name to "untitled"
set file_ext to ".txt"
set is_desktop to false

-- get folder path and if we are in desktop (no folder opened)
try
    tell application "Finder"
        set this_folder to (folder of the front Finder window) as alias
    end tell
on error
    -- no open folder windows
    set this_folder to path to desktop folder as alias
    set is_desktop to true
end try

-- get the new file name (do not override an already existing file)
tell application "System Events"
    set file_list to get the name of every disk item of this_folder
end tell
set new_file to file_name & file_ext
set x to 1
repeat
    if new_file is in file_list then
        set new_file to file_name & " " & x & file_ext
        set x to x + 1
    else
        exit repeat
    end if
end repeat

-- create and select the new file
tell application "Finder"

    activate
    set the_file to make new file at folder this_folder with properties {name:new_file}
    if is_desktop is false then
        reveal the_file
    else
        select window of desktop
        set selection to the_file
        delay 0.1
    end if
end tell

-- press enter (rename)
tell application "System Events"
    tell process "Finder"
        keystroke return
    end tell
end tell

Для удобства я помещаю этот AppleScript в этот GitHub Gist .

...