В OSX я могу использовать системный вызов для передачи команды работающему терминалу в новой вкладке? - PullRequest
3 голосов
/ 29 января 2010

В частности,

В OSX 10.6 из системного вызова я хочу открыть файл для редактирования с помощью VIM в ранее существующем терминале (то есть Terminal.app), открыв новую вкладку.

Конечно, я могу открыть новый экземпляр терминала

/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal -e vim MyFile

И, конечно, я могу определить PID запущенного экземпляра Terminal , но я не знаю, как передать команду в эту запущенную программу. Или, если Terminal поддерживает прием команд и если он откроет новую вкладку.

Если кто-то знает, как это сделать с похожей системой (например, linux и xterm), это может помочь мне разобраться с OSX и терминалом - или есть какой-то другой метод, препятствующий открытию такого количества экземпляров терминала?

РЕДАКТИРОВАТЬ: НЕДОРОГО РЕШЕНИЕ

Я создал скрипт AppleAcript

on run app_arg
    tell application "System Events"
        tell application process "Terminal"
            key code {55, 36}
            set frontmost to true
            key code {55, 17}
            keystroke item 1 of app_arg
            keystroke return
        end tell
    end tell
end run

и запустить его через системный вызов, вот так

/usr/bin/osascript NEWSCRIPT.scpt "args"

Это грязно, но оно выполняет свою работу - спасибо!

Ответы [ 2 ]

2 голосов
/ 29 января 2010

Способ сделать это с помощью appleScript. Вы можете отправить applecript для вещей в OS X с помощью команды osascript. Я не смог быстро найти ничего, что бы прямо показывало, как открыть новую вкладку с запущенной в ней командой, но мне удалось найти пару ссылок на различные способы автоматизации Terminal.app с appleScript, и я думаю, они могут указать вам правильное направление.

И из этой последней ссылки похоже, что единственный способ сделать это - использовать appleScript для отправки нажатия клавиши Command-T на терминал. Это некрасиво, но это сработает. И тогда вы можете отправить команду, которую вы хотите выполнить. : -)

0 голосов
/ 29 января 2010

Есть три способа сделать это:

  • Использование popen
  • Использование system
  • Использование exec семейство
...