MacOS X: как получить удобный ярлык «Открыть эту папку в iTerm»?


12

Я думаю, что в заголовке указано именно то, что я хочу сделать. Мне нужен ярлык или даже кнопка в Finder, которая запускает новую вкладку iTerm и изменяет местоположение на местоположение, открытое в Finder. Как-то open .наоборот. :-)

Спасибо малакс

Ответы:



10

Этот яблочный скрипт работает для меня:

-- script was opened by click in toolbar
on run
tell application "Finder"
    try
        set currFolder to (folder of the front window as string)
    on error
        set currFolder to (path to desktop folder as string)
    end try
end tell
CD_to(currFolder, false)
end run

-- script run by draging file/folder to icon
on open (theList)
set newWindow to false
repeat with thePath in theList
    set thePath to thePath as string
    if not (thePath ends with ":") then
        set x to the offset of ":" in (the reverse of every character of thePath) as string
        set thePath to (characters 1 thru -(x) of thePath) as string
    end if
    CD_to(thePath, newWindow)
    set newWindow to true -- create window for any other files/folders
end repeat
return
end open

-- cd to the desired directory in iterm
on CD_to(theDir, newWindow)
set theDir to quoted form of POSIX path of theDir as string
tell application "iTerm"
    activate
    delay 1
    -- talk to the first terminal 
    try
        set myterm to the first terminal
    on error
        set myterm to (make new terminal)
    end try

    tell myterm
        try
            -- launch a default shell in a new tab in the same terminal 
            launch session "Default Session"
        on error
            display dialog "There was an error creating a new tab in iTerm." buttons {"OK"}
        end try
        tell the last session
            try
                -- cd to the finder window
                write text "cd " & theDir
            on error
                display dialog "There was an error cding to the finder window." buttons {"OK"}
            end try
        end tell
    end tell
end tell
end CD_to

1
Я думаю, что это должен быть принятый ответ.
Дхилипсива

8

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

Вы можете скачать его здесь: https://github.com/rc1/iTermTo


1
Отличная работа! Работает отлично. Это должен быть принятый ответ.
RCD

1
Я согласен - кажется, работает отлично. Скачать почтовый индекс. Перетащите приложение в папку «Приложения» для установки. Перетащите приложение на панель инструментов поиска для удобного ярлыка.
Джастингордон

3

Это встроено в iTerm2 начиная с версии 3.1.0.

Чтобы использовать функциональность:
в Finder щелкните правой кнопкой мыши папку -> Службы -> Новое окно iTerm2 Здесь

Примечание: Servicesподменю находится в самом низу контекстного меню.

Ссылка
По этой ссылке нажмите Показать старые версии , затем в iTerm2 3.1.0 нажмите Показать список изменений и найдите службы , вы найдете это:

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


2

Взгляните на cdtoпроект, размещенный на https://github.com/jbtule/cdto "Приложение панели инструментов Finder, чтобы открыть текущий каталог в Терминале (или iTerm, X11). Это приложение разработано (включая его значок) для размещения в панель инструментов окна поиска. "


Но он открывает два окна iTerms, что очень раздражает через некоторое время.
Майк Лишке

1

Просто для полноты, прежде чем найти этот вопрос, у меня сработало:

  • адаптировал new_tab.sh (AppleScript, выпущенный bash script) к решению только для AppleScript.
  • затем из Applescript Editor-> File-> Export-> File Format = .app.
  • перетащите .appна панель инструментов Finder.

Это приводит к появлению кнопки на панели инструментов Finder, которая открывает текущий каталог в новой iTerm2вкладке. XtraFinder предлагает такую ​​кнопку, но она открывает новые окна.

Подобное решение с использованием сервисов можно найти здесь , которое ссылается на еще более похожие решения AppleScript:

Мой адаптированный AppleScript это:

try
    tell application "iTerm2"
        tell the last terminal
            launch session "Default Session"
            tell the last session
                tell i term application "Finder"
                    set cur_dir to (the target of the front Finder window) as string
                end tell
                set cur_dir to POSIX path of cur_dir
                write text "cd " & cur_dir
            end tell
        end tell
     end tell
end try

Это решение было прокомментировано в этой теме, связанной с кнопками .

Благодаря ответу iTermTo выше.


1

Я предполагаю, что это потому, что внутренности iTerm изменились, но ни одно из решений не сработало для меня. Что сделал следующий код:

tell application "Finder"
    set cur_dir to POSIX path of ((the target of the front Finder window) as string)
end tell
tell application "iTerm"
    tell (create window with default profile)
        write current session text "cd " & quoted form of cur_dir
    end tell
end tell

Или используя Automator в качестве службы поиска:

on run {input, parameters}
    tell application "Finder"
        set cur_dir to POSIX path of (input as string)
    end tell
    tell application "iTerm"
        tell (create window with default profile)
            write current session text "cd " & quoted form of cur_dir
        end tell
    end tell
end run

0

С iTerm:

Iterm Preferences и вкладка Under Profiles, перейдите в подвкладку General и установите для Working Directory значение «Повторное использование каталога предыдущего сеанса».


0

Вот упрощенный скрипт, который всегда открывает новую вкладку (как скрипт 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)"
}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.