Así que, como he aprendido, hay solo 3 formas de manipular la selección en Terminal ingresando / usando un valor de longitud (o mediante una serie de pulsaciones de teclado).
-
Accessibility Inspector muestra que debería ser posible manipular mediante programación la longitud de la selección, ya que puede editar una longitud de selección existente utilizando el campo len en el "Rango de texto seleccionado" en la sección "Avanzado" haciendo clic en editar e ingresando un nuevo número, como se ve en la captura de pantalla: enlace
La propiedad / atributo "Rango de texto seleccionado" (?) no parece ser accesible en AppleScript, aunque si estuviera disponible, estarí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. Sin embargo, AppleScript, incluso si pudiera acceder a la variable, probablemente no tendría la capacidad de alterarla.
Una característica útil para ver lo que Applecript puede manipular o tiene acceso 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
-
Este método, a partir de OS X 10.8 ya no funciona, pero hacer una selección en Terminal usando el teclado que solía ser posible, como se describe aquí . Todo lo que tenía que hacer era presionar Comando-Opción-Retorno, navegar a la región que desea seleccionar con las teclas de flecha, presionar retorno, seleccionar desde la posición del cursor usando las teclas de flecha y presionar retorno. Busqué la capacidad de volver a habilitar esta función, pero surgió en seco.
-
Hay una forma de seleccionar texto en la Terminal usando el teclado, pero es muy limitado. Puede seleccionar texto entre "marcas" usando Comando-Shift-A (sin incluir las líneas en las que están las marcas). Las marcas se agregan de forma predeterminada en cada línea de línea de comandos. Sin embargo, puede agregar marcas haciendo clic con el botón derecho en una selección y escribiendo Command-U
. Las marcas son solo por línea, sin embargo, no son específicas del inicio / parada de selección en una línea. Si hace clic con el botón derecho en cualquier texto no seleccionado que esté envuelto en software (es decir, una cadena de varias líneas) y agrega una marca, se agrega una marca separada para cada línea envuelta en software. No puede seleccionar texto entre varias marcas, ni es posible agregar marcas a través de applecript, por lo que no es posible usar esto para ajustar la longitud de una selección mediante programación. Puede encontrar más información sobre las marcas en aquí .
También exploré lo que se supone que deben hacer las teclas de flecha, ya que shift- {left, right} -arrow para mí ingresa las cadenas "; 2C" y "; 2D" con un pitido en la línea de comando para mi. Así que eliminé esas entradas de la tabla en Terminal - > Preferencias - > Perfiles - > Teclado para evitar eso. Esperaba que me permitiera seleccionar texto (al menos en la línea actual) usando la flecha de desplazamiento, pero todo lo que hizo fue mover el cursor sin seleccionar.
Sin embargo, dado el objetivo de este esfuerzo (para ver dónde está una coordenada en una cadena seleccionada), puede lograr esto a través de un cuadro de diálogo del servicio Automator usando un Applescript. Todo lo que tiene que hacer es presentar la selección en un cuadro de diálogo y, si la longitud del objetivo es más larga que la selección, debe completar los caracteres restantes con un carácter ficticio ('N' para el ADN).
Puede realizar esta estrategia de forma condicional, solo cuando Terminal es la aplicación más avanzada. Tenga en cuenta que este no es el script completo, solo un fragmento, pero puede ver el script completo aquí , que contiene muchas campanas y amp; silbatos no relacionados con 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
Eso logrará efectivamente el objetivo final. Desafortunadamente, la posición debe estar marcada con un marcador de texto en una cara de tipo de ancho variable ya que los cuadros de diálogo no permiten el formateo o la selección automática de texto.