MacOS X: ¿Cómo tener un acceso directo útil para "Abrir esta carpeta en iTerm"?

12

Creo que el título dice exactamente lo que quiero hacer. Quiero un acceso directo o incluso un botón dentro de Finder que active una nueva pestaña iTerm y cambie la ubicación a la ubicación que he abierto en Finder. Una especie de open .reverso. :-)

Gracias Malax

Malax
fuente

Respuestas:

10

Este applecript funciona para mí:

-- 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
bulljit
fuente
1
Creo que esta debería ser la respuesta aceptada.
dhilipsiva
8

Usando las otras respuestas en esta página, he creado una aplicación que se puede arrastrar a la barra de tareas del buscador.

Puede descargarlo desde aquí: https://github.com/rc1/iTermTo

Ross
fuente
1
¡Excelente trabajo! Funciona perfectamente. Esta debería ser la respuesta aceptada.
rcd
1
Estoy de acuerdo, parece funcionar perfectamente. Descargar zip. Arrastre la aplicación a la carpeta Aplicaciones para instalar. Arrastre la aplicación a la barra de herramientas del buscador para obtener el práctico acceso directo.
justingordon
3

Esto está integrado en iTerm2 a partir de la versión 3.1.0.

Para usar la funcionalidad:
en Finder, haga clic con el botón derecho en una carpeta -> Servicios -> Nueva ventana iTerm2 aquí

Nota: el Servicessubmenú está en la parte inferior del menú del botón derecho.

Referencia
En este enlace, haga clic en Mostrar versiones anteriores , luego, en iTerm2 3.1.0, haga clic en Mostrar registro de cambios y busque servicios , encontrará esto:

Agregue soporte para servicios de buscador. Puede hacer clic derecho en Finder para iniciar iTerm2 en esa ubicación.

Brad Cupit
fuente
2

Eche un vistazo al cdtoproyecto alojado en https://github.com/jbtule/cdto "Finder Toolbar app para abrir el directorio actual en la Terminal (o iTerm, X11). Esta aplicación está diseñada (incluido su icono) para colocarse en la barra de herramientas de la ventana del buscador ".

Lloyd Dewolf
fuente
Pero abre dos ventanas iTerms, lo cual es muy molesto después de un tiempo.
Mike Lischke
1

Solo para completar, antes de encontrar esta pregunta, lo que funcionó para mí fue:

  • adaptado new_tab.sh (AppleScript emitido por bash script) a una solución exclusiva de AppleScript.
  • luego de la Applescript Editor-> File-> Export-> File Format = .app.
  • arrastre y .appsuelte la barra de herramientas del Finder.

Esto da como resultado un botón de la barra de herramientas del Finder que abre el directorio actual en una nueva iTerm2pestaña. XtraFinder ofrece dicho botón, pero abre nuevas ventanas.

Aquí se puede encontrar una solución similar que utiliza servicios , que enlaza con soluciones AppleScript aún más relacionadas:

Mi AppleScript adaptado es:

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

Esta solución se comentó en este hilo relacionado con los botones .

Gracias a la respuesta iTermTo anterior.

Ioannis Filippidis
fuente
1

Supongo que se debe a que el funcionamiento interno de iTerm ha cambiado, pero ninguna de las soluciones funcionó para mí. Lo que hizo fue el siguiente código:

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

O usando Automator como un servicio de búsqueda:

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
fikovnik
fuente
0

Con iTerm:

Preferencias de Iterm y en la pestaña Perfiles, vaya a la subpestaña General, configure el Directorio de trabajo en "Reutilizar el directorio de la sesión anterior".

coto
fuente
0

Aquí hay un script simplificado que siempre abre una nueva pestaña (como el script de 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

Si desea que el script reutilice las pestañas existentes, reemplace el tell current terminalbloque con algo como esto:

tell current session of current terminal
    write text "cd " & quoted form of p
end tell

Pero eso no funcionará si, por ejemplo, la sesión actual está ocupada o ejecuta un proceso menor o menor.

Ajustar el script en un bloque de prueba hace que falle en silencio. reopenabre una nueva ventana de terminal si no hay ventanas visibles o si solo está abierta, por ejemplo, la ventana de preferencias. Finder también tiene una insertion locationpropiedad, que generalmente es target of Finder window 1el escritorio. Pero hay un error en 10.7 y posterior en el que a menudo se refiere a otra ventana que no sea la ventana frontal.

Algunos problemas potenciales con el script de bulljit:

  • Tiene un retraso de un segundo. No sé si es necesario para algo, pero no necesité ningún retraso cuando probé este script.
  • Si ha configurado iTerm para abrir nuevas ventanas en pantalla completa y no hay ventanas abiertas, se abrirá una ventana que no sea de pantalla completa.
  • Le dice a Finder que obtenga la ruta de front window( window 1), que puede ser una ventana de información o una ventana de preferencias. Finder window 1siempre sería una ventana del navegador de archivos.
  • Cambia el directorio a /si la ventana del Finder frontal muestra una vista que no tiene una ruta (como la vista de Red).

Sin embargo, prefiero usar una función como esta:

cf () {
  c "$(osascript -e 'tell application "Finder"
    POSIX path of (target of Finder window 1 as alias
  end tell)' 2> /dev/null)"
}
Lri
fuente