Почему 2 окна терминала открываются с помощью NSAppleScript? - PullRequest
0 голосов
/ 08 марта 2012

Если приложение терминала не открыто, следующий код открывает два окна терминала.Почему он это делает?Я хочу, чтобы открывалось только одно окно.

Если открыто только одно окно терминала, то следующий код открывает только ОДНО дополнительное окно.

NSAppleScript* terminal = [[NSAppleScript alloc] initWithSource:
                           [NSString stringWithFormat:
                                @"tell application \"Terminal\"\n"
                                @"    activate\n"
                                @"    do script \"echo %@\"\n"
                                @"    tell the front window\n"
                                @"    set title displays shell path to false\n"
                                @"    set title displays custom title to true\n"
                                @"    set custom title to \"My session! %@\"\n"
                                @"    end tell\n"
                                @"end tell", name, name]];

[terminal executeAndReturnError:nil];

Ответы [ 2 ]

1 голос
/ 08 марта 2012

Команда do script, как вы ее написали, всегда будет выполняться в новом окне. Если вы хотите, чтобы он запускался в определенном окне, используйте следующий формат: do script (...) in (window...). Синтаксис терминала in также может обрабатывать запущенные сценарии на вкладках.

Например, если вы хотите запустить скрипт в самом переднем окне, вы можете написать do script "echo Hello, world!" in front window.


Редактировать: Чтобы продолжить, если вы хотите всегда запускать скрипт в окне (создать новый, если ни один не открыт), вы можете использовать следующий AppleScript:

tell application "Terminal"
    activate
    if length of (get every window) is 0 then
        tell application "System Events" to tell process "Terminal" to click menu item "New Window" of menu "File" of menu bar 1
    end if
    do script "echo Hello, world!" in front window
end tell

Конечно, вам нужно правильно избежать этого в NSArray, но я уверен, что вы можете сделать.

0 голосов
/ 08 марта 2012

Вот мое решение для сравнения:

tell application "Terminal"
  if it is running then
      do script "echo %@"
  else
      activate
      do script "echo %@" in front window
  end if
  tell the front window
      set title displays shell path to false
      set title displays custom title to true
      set custom title to "My Terminal!"
  end tell
end tell
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...