2 votes

Alfred Terminal / Shell Command ne fonctionne pas

Dans Alfred, si je tape > ls, iTerm2 doit s'ouvrir avec cette commande. Eh bien, ça ne fonctionne pas pour moi.

Dans l'application, si je sélectionne Terminal au lieu de iTerm2, ça fonctionne.

Description de l'image

Si je sélectionne Application personnalisée, cela montre le code AppleScript que vous pouvez voir ci-dessous et ça fonctionne.

Description de l'image

Si je sélectionne Application personnalisée et que je modifie la ligne tell application en remplaçant Terminal par iTerm, cela ne fonctionne pas.

Description de l'image

Si j'ouvre l'éditeur de script et que je tape le code AppleScript suivant, cela ne fonctionne pas :

tell application "iTerm"
    activate
    do script "ls"
end tell

Si je supprime la ligne do script, iTerm s'ouvrira.

Des idées sur pourquoi la ligne do script ne fonctionne pas avec iTerm?

1voto

f01 Points 1334

Il s'agit d'un exemple fonctionnel que j'ai dérivé de l'exemple dans https://code.google.com/p/iterm2/wiki/AppleScript

Consultez le commentaire de stefan.v...@gmail.com

tell application "iTerm"
    activate

    try
        set _session to current session of current terminal
    on error
        set _term to (make new terminal)
        tell _term
            launch session "Default"
            set _session to current session
        end tell
    end try

    tell _session
        write text "ls"
    end tell

1voto

Ben Points 11

De l'article du blog Alfred : "Vous pouvez trouver d'excellents AppleScripts d'intégration iTerm pour les versions plus anciennes et plus récentes d'iTerm sur la page Github Custom iTerm Applescripts for Alfred de l'utilisateur Stuart C Ryan."

Script pour iTerm 2.1.1 :

-- Il s'agit de la version 0.3 du script personnalisé pour AlfredApp pour iTerm 2.1.1
-- Veuillez consulter https://github.com/stuartcryan/custom-iterm-applescripts-for-alfred/
-- pour les derniers changements.

on is_running(nom_app)
    tell application "System Events" to (name of processes) contains nom_app
end is_running

-- Veuillez noter que si vous stockez l'exécutable iTerm dans un autre emplacement que le dossier Applications
-- veuillez vous assurer de mettre à jour les deux emplacements ci-dessous (sous la forme de : plutôt que / pour les séparateurs de dossiers)
-- cela contourne les problèmes avec AppleScript ne manipulant pas bien les choses si vous avez deux exécutables iTerm sur votre système... ce qui peut arriver :D

on alfred_script(q)
    if is_running("iTerm") then
        run script "
            on run {q}
                tell application \":Applications:iTerm.app\"
                    activate
                    try
                        set myterm to the first terminal
                    on error
                        set myterm to (make new terminal)
                    end try
                    tell myterm
                        set mysession to (launch session \"Session par défaut\")
                        tell mysession to write text q
                    end tell
                end tell
            end run
        " with parameters {q}
    else
        run script "
            on run {q}
                tell application \":Applications:iTerm.app\"
                    activate
                    tell the first terminal
                        tell the last session to write text q
                    end tell
                end tell
            end run
        " with parameters {q}
    end if
end alfred_script

0voto

jherran Points 12554

Je suis sûr qu'il existe une meilleure façon de le faire, mais, pour l'instant, c'est la seule méthode qui fonctionne pour moi :

tell application "iTerm"
    activate
    set the clipboard to q
    delay 0.5
    tell application "System Events" to tell (name of application processes whose frontmost is true) to keystroke "v" using command down
    tell application "System Events" to tell (name of application processes whose frontmost is true) to keystroke return
end tell

0voto

undefined Points 383

À partir d'Alfred v3.7 et iTerm2 v3.2.0 et MacOS v10.13.6, cette solution fonctionne :

on alfred_script(q)

    tell application "iTerm"
        activate

        set _profile to "Default"

        -- s'il n'y a pas de fenêtres de terminal...
        if (current window is missing value) then
            set _window to (create window with profile _profile)

        -- sinon obtenir la fenêtre actuelle et ouvrir un nouvel onglet
        else
            set _window to current window
            tell _window
                create tab with profile _profile
            end tell
        end if

        -- exécuter la commande
        tell current session of _window
            write text q
        end tell

    end tell

end alfred_script

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X