MacOS X: comment avoir un raccourci pratique «Ouvrir ce dossier dans iTerm»?


12

Je pense que le titre indique exactement ce que je veux faire. Je veux un raccourci ou même un bouton dans le Finder qui déclenche un nouvel onglet iTerm et change l'emplacement en celui que j'ai ouvert dans le Finder. Une sorte de open .marche arrière. :-)

Merci, Malax

Réponses:



10

Cet applescript fonctionne pour moi:

-- 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
Je pense que cela devrait être la réponse acceptée.
dhilipsiva

8

En utilisant les autres réponses de cette page, j'ai créé une application qui peut être glissée dans la barre des tâches du Finder.

Vous pouvez le télécharger ici: https://github.com/rc1/iTermTo


1
Excellent travail! Marche parfaitement. Cela devrait être la réponse acceptée.
rcd

1
Je suis d'accord - semble fonctionner parfaitement. Téléchargez zip. Faites glisser l'application vers le dossier Applications pour installer. Faites glisser l'application vers la barre d'outils du Finder pour le raccourci pratique.
justingordon

3

Il est intégré à iTerm2 à partir de la version 3.1.0.

Pour utiliser la fonctionnalité:
dans le Finder, cliquez avec le bouton droit sur un dossier -> Services -> Nouvelle fenêtre iTerm2 ici

Remarque: le Servicessous-menu est tout en bas du menu contextuel.

Référence
Sur ce lien, cliquez sur Afficher les versions antérieures , puis sous iTerm2 3.1.0, cliquez sur Afficher le journal des modifications et recherchez les services , vous trouverez ceci:

Ajoutez la prise en charge des services de recherche. Vous pouvez cliquer avec le bouton droit dans le Finder pour lancer iTerm2 à cet emplacement.


2

Jetez un œil au cdtoprojet hébergé sur https://github.com/jbtule/cdto "Application Finder Toolbar pour ouvrir le répertoire actuel dans le terminal (ou iTerm, X11). Cette application est conçue (y compris son icône) pour être placée dans la barre d'outils de la fenêtre du Finder. "


Mais il ouvre deux fenêtres iTerms, ce qui est très ennuyeux après un certain temps.
Mike Lischke

1

Juste pour être complet, avant de trouver cette question, ce qui a fonctionné pour moi était:

  • adapté new_tab.sh (AppleScript publié par bash script) à une solution AppleScript uniquement.
  • puis du Applescript Editor-> File-> Export-> File Format = .app.
  • faites glisser et .appdéposez la barre d'outils du Finder.

Il en résulte un bouton de la barre d'outils du Finder qui ouvre le répertoire actuel dans un nouvel iTerm2onglet. XtraFinder propose un tel bouton, mais il ouvre de nouvelles fenêtres.

Une solution similaire utilisant des services peut être trouvée ici , qui renvoie à des solutions AppleScript encore plus connexes:

Mon AppleScript adapté est:

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

Cette solution a été commentée dans ce fil de discussion relatif aux boutons .

Merci à la réponse iTermTo ci-dessus.


1

Je suppose que c'est parce que les composants internes d'iTerm ont changé, mais aucune des solutions n'a fonctionné pour moi. Quel a été le code suivant:

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

Ou en utilisant Automator comme service de recherche:

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

Avec iTerm:

Dans l'onglet Préférences Iterm et sous Profils, accédez au sous-onglet Général, définissez Répertoire de travail sur «Réutiliser le répertoire de la session précédente».


0

Voici un script simplifié qui ouvre toujours un nouvel onglet (comme le 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 vous souhaitez que le script réutilise les onglets existants, remplacez le tell current terminalbloc par quelque chose comme ceci:

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

Mais cela ne fonctionnera pas si, par exemple, la session en cours est occupée ou exécute un processus less ou vim.

Envelopper le script dans un bloc try le fait échouer silencieusement. reopenouvre une nouvelle fenêtre de terminal s'il n'y a pas de fenêtres visibles ou si seulement par exemple la fenêtre des préférences est ouverte. Le Finder possède également une insertion locationpropriété, qui est généralement target of Finder window 1le bureau. Mais il y a un bogue dans 10.7 et versions ultérieures où il fait souvent référence à une autre fenêtre que la fenêtre la plus en avant.

Quelques problèmes potentiels avec le script de bulljit:

  • Il a un délai d'une seconde. Je ne sais pas si c'est nécessaire pour quelque chose, mais je n'ai pas eu besoin de délais lorsque j'ai testé ce script.
  • Si vous avez configuré iTerm pour ouvrir de nouvelles fenêtres en plein écran et qu'il n'y a pas de fenêtres ouvertes, il ouvre une fenêtre non plein écran.
  • Il indique au Finder d'obtenir le chemin de front window( window 1), qui peut être une fenêtre d'informations ou une fenêtre de préférences. Finder window 1serait toujours une fenêtre de navigateur de fichiers.
  • Il change le répertoire /si la fenêtre du Finder la plus en avant affiche une vue qui n'a pas de chemin (comme la vue Réseau).

Je préfère simplement utiliser une fonction comme celle-ci:

cf () {
  c "$(osascript -e 'tell application "Finder"
    POSIX path of (target of Finder window 1 as alias
  end tell)' 2> /dev/null)"
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.