Mac Automator: сценарий оболочки получает только одну строку

У меня есть скрипт Automator для сервиса, который выглядит так:

Receives as text in any application. Input is entire selection, does not replace selected text.
-> Run Shell Script (/bin/bash) "expand -t 4" pass input to stdin
-> Copy to Clipboard

Другие параметры не установлены. Идея состоит в том, что я могу выбрать некоторый код и поместить в буфер обмена версию без табуляции без необходимости вставлять код в BBEdit для удаления табуляции.

Сервис выдает только первую строку выделенного текста. Удаление действия сценария оболочки помещает весь выделенный текст в буфер обмена. Бег

expand -t 4 < /path/to/tabbed.file > result.file

дает преобразованное содержимое всего входного файла. Замена команды на «wc» показывает разумное количество строк, слов и символов.

Таким образом, проблема, по-видимому, заключается в передаче выбора более чем одной строки в expand (1) стандартным вводом из ввода службы Automator. Я не вижу ничего подходящего на справочной странице expand(1).

Что я делаю неправильно?


person Fritz Anderson    schedule 05.02.2013    source источник


Ответы (1)


Попробуйте этот AppleScript:

on run {input}
    set the clipboard to (do shell script "expand -t 4 <<< " & quoted form of (input as text))
end run
person adayzdone    schedule 05.02.2013
comment
1. Как мне сделать это службой OS X, которая будет принимать выделенный текст без необходимости копирования? 2. Мой AS ржавый, но он, похоже, заменяет вкладку шириной 4 пробела на один пробел. 3. Даже если я ошибаюсь, и он преобразует табуляцию в пробелы, как он выравнивает позиции табуляции? Вся цель состоит в том, чтобы взять исходный код с вкладками из моей IDE и иметь возможность вставить его в электронное письмо (или stackoverflow), чтобы он выглядел одинаково, а не просто слепо уничтожать символы табуляции. - person Fritz Anderson; 06.02.2013
comment
Это работает! Спасибо. Интересно, почему плитка сценария оболочки не удалась. - person Fritz Anderson; 07.02.2013