5 votos

¿Cómo escribir un texto en Terminal usando AppleScript?

¿Cómo puedo insertar un texto en la Terminal.aplicación usando AppleScript? No me refiero a ejecutarlo (pulse Enter). Sólo para insertarlo. Mi script actual casi funciona:

tell application "Terminal"
    activate
    tell application "System Events" to keystroke "TextToInsert" using {}
end tell

El problema es cuando esto se ejecuta mediante un atajo de teclado, por ejemplo, CMD-T y, a continuación, la presiona CMD interfiere con las pulsaciones de teclas y cambios en el comportamiento deseado.

Necesito decir el keystroke comando para ignorar cualquier teclas modificadoras o utilizar otro comando para escribir el texto. Creo write debería hacerlo, pero no tengo idea de cómo.

4voto

wch1zpink Puntos 11

Puede intentar algo como, primero copiando el texto en su portapapeles, que desea insertar en la Terminal, luego haga que el código AppleScript pegue el portapapeles en la Terminal.

 tell application "Terminal"
    activate
    tell application "System Events"
        tell application process "Terminal"
            set frontmost to true
            repeat while not frontmost
                delay 0.1
            end repeat
        end tell
        keystroke "v" using {command down}
    end tell
end tell
 

Si tiene todas sus ventanas de Terminal configuradas para abrirse en pestañas en lugar de ventanas separadas, este siguiente código AppleScript debería tener en cuenta cualquiera de las situaciones mencionadas por @ user3439894 en su comentario a su publicación.

 tell application "Terminal"
    activate
    repeat until frontmost
        delay 0.5
    end repeat
    set windowCount to count of window
    if windowCount is not 0 then
        tell its front window
            set isMinimized to miniaturized
        end tell
    end if

    if windowCount is 0 then
        tell application "System Events" to tell application process "Terminal"
            set frontmost to true
            repeat while not frontmost
                delay 0.1
            end repeat
            keystroke "n" using {command down}
            delay 1
            keystroke "v" using {command down}
        end tell
    else
        activate
        repeat until frontmost
            delay 0.5
        end repeat
        delay 0.1
        if ((processes of selected tab of front window) is {} or isMinimized) then
            tell application "System Events" to tell application process "Terminal"
                set frontmost to true
                repeat while not frontmost
                    delay 0.1
                end repeat
                keystroke "n" using {command down}
                delay 1
                keystroke "v" using {command down}
            end tell
        else
            tell application "System Events" to tell application process "Terminal"
                set frontmost to true
                repeat while not frontmost
                    delay 0.1
                end repeat
                delay 0.5
                keystroke "v" using {command down}
            end tell
        end if
    end if
end tell
 

1voto

He marcado la anterior respuesta como correcta, aunque no resuelve mi problema, porque hay un montón de otros útiles de código.

A mi sin resolver cuestiones: 1. teclas modificadoras todavía están interfiriendo incluso con CMD-c truco 2. Portapapeles truco altera el portapapeles. Yo podría volver al valor original, sino que cambia la historia.

Mi solución: No ejecutar la secuencia de comandos hasta se pulsan teclas de modificación. Es también una especie de truco, pero se soluciona la causa root.

Aquí está mi código:

- (void) cmd_panel_curItem_sendPathToTerminal;
{
    if (self.noKeyModifiersTimer != nil) {
        return;
    }
    self.noKeyModifiersTimer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(_cmd_panel_curItem_sendPathToTerminal) userInfo:nil repeats:YES];
}

- (void) _cmd_panel_curItem_sendPathToTerminal;
{
    NSUInteger modifiers = ([NSEvent modifierFlags] & NSEventModifierFlagDeviceIndependentFlagsMask);

    if ((modifiers & NSEventModifierFlagOption) == 0 && (modifiers & NSEventModifierFlagShift) == 0 && (modifiers & NSEventModifierFlagCommand) == 0 && (modifiers & NSEventModifierFlagControl) == 0) {
        [self.noKeyModifiersTimer invalidate];
        self.noKeyModifiersTimer = nil;
        [self impl_panel_curItem_sendPathToTerminal];
    }
}

- (void) impl_panel_curItem_sendPathToTerminal;
{
    // orig code
}

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X