Создание AppleScript для поиска в заданном документе - PullRequest
0 голосов
/ 11 января 2010

Я хочу создать aAppleScript, который при запуске будет:

  1. Поиск документа по заданной строке
  2. Заменить эту строку другой данной строкой

Строки всегда будут одинаковыми

Поиск

Это будет использоваться в textmate - Я пытался сделать это в textmate

Я знаю, что могу использовать функцию поиска и замены для textmate - я просто пытаюсь немного автоматизировать.

Изменения должны вноситься только на текущей странице.

Возможно ли это?

UPDATE : Итак, я нашел какой-то код, который помог мне начать ...

tell application "TextMate" to activate
tell application "System Events"
    keystroke "f" using {command down}
        tell process "TextMate"
            keystroke "<?"
            keystroke tab
            keystroke "<?php"
            click button "Replace All"
        end tell
    keystroke "esc"
end tell

но я получаю следующую ошибку:

error "System Events got an error: Can’t get button \"Replace All\" of process \"TextMate\"." number -1728 from button "Replace All" of process "TextMate"

В диалоговом окне поиска и замены Textmate кнопка помечена "Заменить все". Я что-то здесь упускаю?

Ответы [ 4 ]

1 голос
/ 12 января 2010

Вам нужно отправить нажатие клавиши в соответствующее окно. Что-то вроде tell window "find dialog" (или что-то еще). Вы должны быть совершенно конкретны, поэтому это может быть

tell tab 1 of pane 1 of window "find and replace" of app textmate... 

Сценарии интерфейса пользователя настолько хакерские, что вы должны делать это только в крайнем случае.

Похоже, вам нужно sed .

в командной строке или с помощью do shell script:

cat /path/to/your/file.php|sed "s_<?_<?php_g">/path/to/your/newfile.php

или для всей папки

cd /path/to/your/folder
for file in *.php; do  cat "$file"|sed "s_<?_<?php_g">"${file/.php/-new.php}"; done
1 голос
/ 16 ноября 2011

Очень хорошо отправлять людей для поиска / замены в строках AppleScript или отправлять их в базовые инструменты Unix для Mac OS X, такие как sed и Perl, но они часто не являются реальной заменой для поиска / замены текста непосредственно в целевом объекте. применение.

У меня была точно такая же проблема, хотя в Dragon Dicate, а не в TextMade. Google привел меня сюда, где я был встревожен, чтобы не найти прямого решения. Итак, позвольте мне поделиться тем, что я придумал:

set find to "the"
set replace to "THE"
tell application "Dragon Dictate"
    activate
    tell application "System Events"
        tell process "Dragon Dictate"
            keystroke "f" using {command down}
            keystroke find
            keystroke tab
            keystroke replace
            tell window "Find"
                click button "Replace All"
            end tell
        end tell
    end tell
end tell

Ключевым отличием является обращение к окну «Найти», которое знает о кнопке «Заменить все». Вам также, конечно, придется изменить целевое приложение «Dragon Dicate» на «TextMate». (Кажется, AppleScript требует точно знать, из какого приложения запускается скрипт, если только вы не захотите вернуться к какой-то действительно ужасной низкоуровневой отправке сообщений. При работе с AppleScript это только 337-й вздох дня!)

1 голос
/ 11 января 2010

Вам лучше смотреть на MacScripter; Есть много примеров и решений для поиска и замены с помощью текстового редактора или без него с помощью разделителей Applescripts: MacScripter / Search results , например:

on replaceText(find, replace, someText)
   set prevTIDs to text item delimiters of AppleScript
   set text item delimiters of AppleScript to find
   set someText to text items of someText
   set text item delimiters of AppleScript to replace
   set someText to "" & someText
   set text item delimiters of AppleScript to prevTIDs
   return someText
end replaceText
0 голосов
/ 23 января 2016

Если вы хотите написать AppleScript для управления текстом, нет ничего лучше, чем использовать текстовый редактор AppleScriptable. Это правильный инструмент для работы. Затем вы можете написать всего несколько строк кода и выполнить работу.

Например, в TextMate выберите «Правка»> «Выбрать все» и «Правка»> «Копировать», чтобы скопировать содержимое документа в буфер обмена. Затем запустите этот AppleScript:

tell application "TextWrangler"
    activate
    set theSearchString to the clipboard
    set theResultString to replace "old term" using "new term" searchingString theSearchString
    set the clipboard to theResultString
end tell

Затем вернитесь в TextMate и выберите «Правка»> «Вставить».

TextWrangler доступен бесплатно в Mac App Store.

Возможно, вы сможете расширить этот скрипт так, чтобы работа TextMate была автоматизирована с помощью сценариев с графическим интерфейсом, но поскольку он просто выбирает все, копирует и вставляет, это довольно маленькая задача.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...