2 votos

Cómo modificar el texto de selección en applescript en un servicio de automator

Escribí un Automator (Servicio pensado para su uso en cualquier texto seleccionado en cualquier aplicación) que modifica la longitud de la selección, dado un número/longitud que el usuario especifica. He aquí un fragmento de código que excluye todas las otras características y detalles del servicio:

--Figure out whether the selection must be lengthened or shrunk
set lengthen to false
set mod_length to 0
if character_count is equal to 0 or n is greater than character_count then
    set lengthen to true
    set mod_length to n - character_count
else
    set mod_length to character_count - n
    --This is a trick to make sure arrowing affects the right side of the selection
    key code 124 using {shift down}
    key code 123 using {shift down}
end if

repeat mod_length times
    if lengthen is true then
        --arrow to the right
        key code 124 using {shift down}
    else
        --arrow to the left
        key code 123 using {shift down}
    end if
end repeat

El servicio funciona muy bien en la mayoría de las aplicaciones, a excepción de la Terminal.aplicación (porque usar las teclas de flecha para mover el cursor en la línea de comandos y no el tamaño de activo en el momento de la selección). Idealmente, esto realmente funciona en la Terminal, debido a que generalmente es donde necesito para utilizar este servicio.

Entonces, ¿hay una manera de modificar la longitud del texto seleccionado en cualquier línea en la historia en un Terminal.ventana de la aplicación (suponiendo que el primer carácter seleccionado es la posición 1) el uso de un automator servicio (y applescript dentro de ese servicio) en una forma que no utilice las teclas de flecha? E. g. I seleccione la salida de un comando y ejecutar el servicio para ajustar la longitud de la selección a una longitud que he suministrado.

Antecedentes:

La razón por la que estoy haciendo esto es porque mi trabajo consiste en manipular el ADN y/o modificación, y como parte del proceso de depuración de estas secuencias de comandos, a veces siento necesidad de observar brevemente lo que ha sucedido en una posición específica en un ADN de cadena de salida en la línea de comandos de forma rápida y dirtily - sólo para confirmar una intención de cambio tuvo el resultado deseado. Así que esto es sólo una manera rápida visualmente encontrar una coordenada en una larga cadena de ADN. Finalmente me la intención de modificar este servicio de tal forma que sólo ciertos caracteres se toman en cuenta en la determinación de la longitud de la selección (por ejemplo, no contar números, espacios, saltos de línea, etc).

0voto

hepcat72 Puntos 103

Así como he aprendido, no son/fueron sólo 3 maneras de manipular a la selección en la Terminal de entrada/utilizando un valor de longitud (o a través de una serie de teclado prensas).

  1. Accesibilidad Inspector de la muestra que debe ser posible manipular mediante programación la selección de la longitud, ya que se puede editar una existente, la selección de la longitud usando la len en el campo "Texto Seleccionado Rango" en la sección "Avanzado" haciendo clic en editar y escribir un nuevo número, como se ve en la pantalla de la tapa: https://www.dropbox.com/s/bn2z6ewmdj4mfai/Accessibility_Inspector-selected_text_len.png?dl=0

El "Texto Seleccionado" Rango De Propiedad O Atributo(?) no parece ser accesibles en AppleScript, aunque si era accesible, sería aquí: (text area of (scroll area 1 of (splitter group 1 of (front window)))) si ha habilitado UI elements en su Applescript. Podría ser posible acceder a estos valores, como @CJK se indica en los comentarios a través de Objective-C. Applescript sin embargo, incluso si pudiera acceder a la variable probable que no tenga la capacidad de alterar.

Una característica útil para ver lo que applescript puede manipular o tiene acceso a la es, simplemente, return attributes o return properties. Por ejemplo:

tell application "System Events"
    if UI elements enabled is false then
        set UI elements enabled to true
        if UI elements enabled is false then error "Can't do it"
    end if
    tell application process "Terminal"
        tell window 1
            tell splitter group 1
                tell scroll area 1
                    --return properties
                    return attributes
                end tell
            end tell
        end tell
    end tell
end tell
  1. Este método, como el de OS X 10.8 ya no funciona, pero haciendo una selección en la Terminal usando el teclado se utiliza para ser posible, como se describe aquí. Todo lo que tenía que hacer era pulsa Comando-Opción-Retorno, vaya a la región en la que desea seleccionar con las teclas de flecha, pulse la tecla de retorno, seleccione desde la posición del cursor utilizando las teclas de flecha y pulse la tecla de retorno. He buscado por la capacidad de re-habilitar esta característica, sino que vino seco.

  2. Hay una manera de seleccionar el texto en la Terminal usando el teclado, pero es muy limitado. Usted puede seleccionar texto entre "marcas" usando el Comando-Shift-a (no incluyendo las líneas de marcas). Las marcas se agrega de forma predeterminada en cada línea del símbolo del sistema. Sin embargo, usted puede agregar marcas de clic derecho en la selección y escribir Command-U. Las marcas son sólo por línea, sin embargo, no son específicos para la selección de inicio/parada de una línea. Si usted haga clic en cualquier texto no seleccionado que es ajustado suave (es decir, multi-línea de cadena) y añadir una marca, una marca separada se agrega para cada suave forrado en línea. Usted puede seleccionar texto entre varias marcas, ni es posible añadir marcas a través de applescript, por lo tanto no es posible utilizar este para ajustar una selección de la longitud de programación. Más info sobre las marcas se pueden encontrar aquí.

Yo también había explorado lo que las teclas de flecha se supone que es capaz de hacer, ya shift-{left,right}-flecha para mí entra en las cadenas ";2C" y ";2D" con un sonido en la línea de comandos para mí. Así que me quita las entradas de la tabla en la Terminal -> Preferencias -> Perfiles -> Teclado para evitar que. Yo esperaba que me permita seleccionar el texto (al menos en la corriente de la línea de comandos) usando shift-flecha, pero todo lo que hice fue mover el cursor sin seleccionar.

Sin embargo, dado el objetivo de esta tarea (ver por dónde coordinar está en una cadena seleccionada), usted puede lograr esto a través de un cuadro de diálogo desde el Automator servicio mediante un Applescript. Todo lo que tienes que hacer es presentar la selección en un cuadro de diálogo y, si la longitud de destino es mayor que el de la selección, tienes que rellenar el resto de los personajes con un personaje ficticio ('N' de ADN).

Usted puede hacer esta estrategia de forma condicional, sólo cuando el Terminal es la aplicación situada en primer plano. Nota, esto no es toda la secuencia de comandos - sólo un fragmento, pero se puede ver toda la secuencia de comandos aquí, que contiene un montón de campanas y silbatos ajenos a esta pregunta.

--Check the length of the selected text passed in
set character_count to count characters of ((input as string) as string)

set lengthen to false
set mod_length to character_count - n
--Figure out whether the selection must be lengthened or shrunk
if character_count is equal to 0 or n is greater than character_count then
    set lengthen to true
    set mod_length to n - character_count
end if

--See if we're in Terminal
set isTerminal to ((name of first process where it is frontmost) as string) is equal to "Terminal"

if isTerminal is true then
    if lengthen is true then
        set substr to (input as string)
        repeat mod_length times
            set substr to substr & "N"
        end repeat
    else
        set substr to text 1 thru n of (input as string)
        set substr to substr & (text (n + 1) thru character_count of (input as string))
    end if
    ignoring application responses
        display dialog "Length " & n & " is selected below:" default answer substr buttons {"OK"} default button 1 with title "Selected Character Position"
    end ignoring
end if

--Trick to make sure arrow presses affect the right side of the selection instead of the left
if not (character_count is equal to 0 or n is greater than character_count) then
    key code 124 using {shift down}
    key code 123 using {shift down}
    key code 124 using {shift down}
end if

repeat mod_length times
    if lengthen is true then
        key code 124 using {shift down}
    else
        key code 123 using {shift down}
    end if
end repeat
delay 1

Que efectivamente va a lograr la meta final. Por desgracia, la posición tiene que ser marcado con un texto de marcador en un ancho variable tipo de cara, ya de cuadros de diálogo no permitir que el formato o automática, selección de texto.

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