Quindi, come ho imparato, ci sono / c'erano solo 3 modi per manipolare la selezione in Terminale inserendo / usando un valore di lunghezza (o tramite una serie di tasti per la tastiera).
-
Controllo accessibilità mostra che dovrebbe essere possibile manipolare la lunghezza della selezione in modo programmatico, perché puoi modificare una lunghezza di selezione esistente utilizzando il campo len in "Intervallo testo selezionato" nella sezione "Avanzate" facendo clic su modifica e inserendo un nuovo numero, come mostrato nella schermata: link
La proprietà / attributo "Intervallo di testo selezionato" (?) non sembra accessibile in AppleScript, ma se fosse accessibile, sarebbe qui: (text area of (scroll area 1 of (splitter group 1 of (front window))))
se hai abilitato UI elements
in Applescript. Potrebbe essere possibile accedere a questi valori, come @CJK indicato nei commenti tramite Objective-C. Tuttavia, anche se Applescript potesse accedere alla variabile, probabilmente non avrebbe la possibilità di modificarlo.
Una funzione utile per vedere che cosa può manipolare o accedere a può è semplice return attributes
o return properties
. Ad esempio:
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
-
Questo metodo, a partire da OS X 10.8 non funziona più, ma facendo una selezione in Terminale usando la tastiera utilizzata, come descritto here . Tutto quello che dovevi fare era premere Comando-Opzione-Ritorna, navigare nella regione che vuoi selezionare con i tasti freccia, premere Invio, selezionare dalla posizione del cursore usando i tasti freccia e premere Invio. Ho cercato la possibilità di riattivare questa funzione, ma sono venuto a mancare.
-
C'è un modo per selezionare il testo nel terminale usando la tastiera, ma è molto limitato. Puoi selezionare il testo tra "segni" usando Comando-Maiuscole-A (senza includere le linee su cui sono posizionati i segni). I segni vengono aggiunti per impostazione predefinita su ogni riga del prompt dei comandi. Tuttavia, puoi aggiungere contrassegni facendo clic con il pulsante destro del mouse su una selezione e digitando Command-U
. I segni sono solo per linea, tuttavia, non specifici per la selezione inizio / fine su una linea. Se si fa clic con il pulsante destro del mouse su un testo non selezionato che è avvolto in modo morbido (cioè una stringa multi-linea) e si aggiunge un segno, viene aggiunto un segno separato per ogni linea con avvolgimento morbido. Non è possibile selezionare il testo tra più segni, né è possibile aggiungere contrassegni tramite applescript, quindi non è possibile utilizzarlo per regolare a livello di selezione una lunghezza di selezione. Puoi trovare maggiori informazioni sui marchi qui .
Avevo anche esplorato ciò che i tasti freccia dovevano essere in grado di fare, poiché shift- {left, right} -arrow for me entra nelle stringhe "; 2C" e "; 2D" con un bip sulla riga di comando per me. Quindi ho rimosso quelle voci dalla tabella in Terminal - > Preferenze - > Profili - > Tastiera per impedirlo. Speravo che mi avrebbe permesso di selezionare il testo (almeno sul prompt della riga corrente) usando la freccia Maiuscola, ma tutto ciò che ha fatto è stato spostare il cursore senza selezionare.
Tuttavia, dato l'obiettivo di questo sforzo (per vedere dove una coordinata si trova in una stringa selezionata), è possibile farlo tramite una finestra di dialogo dal servizio Automator usando un oggetto Applescript. Tutto quello che devi fare è presentare la selezione in una finestra di dialogo e se la lunghezza della destinazione è più lunga della selezione, devi riempire i caratteri rimanenti con un carattere fittizio ('N' per DNA).
È possibile eseguire questa strategia in modo condizionale, solo quando Terminal è l'applicazione in primo piano. Nota, questo non è l'intero script - solo un frammento, ma puoi vedere l'intero script qui , che contiene molte campane e amp; fischietti non correlati a questa domanda.
--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
Ciò realizzerà efficacemente l'obiettivo finale. Sfortunatamente, la posizione deve essere contrassegnata con un indicatore di testo in una faccia di tipo a larghezza variabile poiché le finestre di dialogo non consentono la formattazione o la selezione automatica del testo.