Редактировать содержимое буфера обмена с помощью applescript в os x

Я копирую много исходного кода из разных проектов в другие, и мне всегда приходится менять одни и те же условия. Можно ли использовать яблочный скрипт, который проверяет текстовое содержимое буфера обмена и заменяет несколько ключевых слов? Я новичок в applescript, поэтому я не знаю, насколько мощным может быть applescript...


person TabulaRasa    schedule 24.03.2011    source источник


Ответы (2)


Это возможно с помощью get clipboard, set clipboard и разделителей текстовых элементов.

get the clipboard
set the clipboard to (replacement of "this text" by "that text" for the result)

on replacement of oldDelim by newDelim for sourceString
    set oldTIDs to text item delimiters of AppleScript
    set text item delimiters of AppleScript to oldDelim
    set strtoks to text items of sourceString
    set text item delimiters of AppleScript to newDelim
    set joinedString to strtoks as string
    set text item delimiters of AppleScript to oldTIDs
    joinedString
end replacement

Для более сложных манипуляций с текстом я бы просто вызвал сценарий оболочки. Вышеупомянутое становится:

do shell script "pbpaste | sed 's/this text/that text/g' | pbcopy"
person Michael J. Barber    schedule 24.03.2011
comment
большое спасибо за ваш быстрый ответ! скрипт работает нормально, но у меня есть куча дополнительных проблем: как я могу сохранить формат строк (в настоящее время он возвращается в виде обычного текста, каждый формат удален). Я также не мог заставить скрипт заменить более одной строки и работать непрерывно в фоновом режиме? Я попытался установить код get/set clipboard... между режимом ожидания и концом режима ожидания, но он просто работает в первый раз, когда я запускаю приложение (я сохранил его как приложение и проверил, что он остается открытым) - person TabulaRasa; 24.03.2011

Не уверен, что понял, что вы хотите сделать. Я полагаю, вы хотите заменить несколько строк в содержимом буфера обмена, например: «PS3 стоит 200 долларов в Wallmart» на «XBox стоит 180 долларов в Wallmart». Это достигается следующим кодом:

get the clipboard
set the clipboard to (replacement of "PS3" by "XBox" for the result)
on replacement of oldDelim by newDelim for sourceString
    set oldTIDs to text item delimiters of AppleScript
    set text item delimiters of AppleScript to oldDelim
    set strtoks to text items of sourceString
    set text item delimiters of AppleScript to newDelim
    set joinedString to strtoks as string
    set text item delimiters of AppleScript to oldTIDs
    joinedString
end replacement
get the clipboard
set the clipboard to (replacement of "200" by "180" for the result)

Престижность Майклу Дж. Барберу за исходный код. Я практически ничего не знаю о кодировании. Я только что попробовал эту модификацию, она работала.

person Kalle Kantola    schedule 07.05.2011