Вот упрощенный скрипт, который всегда открывает новую вкладку (как скрипт bulljit):
try
tell application "Finder"
if number of Finder windows is 0 then
set p to POSIX path of (desktop as alias)
else
set p to POSIX path of (target of Finder window 1 as alias)
end if
end tell
tell application "iTerm"
reopen
tell current terminal
tell (launch session "Default Session")
write text "cd " & quoted form of p
end tell
end tell
activate
end tell
end try
Если вы хотите, чтобы скрипт повторно использовал существующие вкладки, замените блок tell current terminal
на что-то вроде этого:
tell current session of current terminal
write text "cd " & quoted form of p
end tell
Но это не сработает, если, например, текущий сеанс занят или выполняется процесс less или vim.
Оборачивание скрипта в блок try делает его молча неудачным. reopen
открывает новое окно терминала, если нет видимых окон или если, например, открыто окно настроек. У Finder также есть свойство insertion location
, которое обычно является target of Finder window 1
или рабочего стола. Но есть ошибка в 10.7 и позже, когда она часто ссылается на какое-то другое окно, а не на переднее окно.
Некоторые потенциальные проблемы со скриптом bulljit:
- У него задержка в одну секунду. Я не знаю, нужно ли это для чего-то, но мне не нужно было задержек при тестировании этого скрипта.
- Если вы настроили iTerm на открытие новых окон в полноэкранном режиме, а открытых окон нет, открывается не полноэкранное окно.
- Он сообщает Finder, чтобы получить путь к
front window
(window 1
), которое может быть информационным окном или окном настроек. Finder window 1
всегда будет окном файлового браузера.
- Он меняет каталог на
/
если переднее окно Finder отображает представление, у которого нет пути (например, представление сети).
Я предпочитаю просто использовать такую функцию:
cf () {
c "$(osascript -e 'tell application "Finder"
POSIX path of (target of Finder window 1 as alias
end tell)' 2> /dev/null)"
}