Ich habe einen Automator-Dienst geschrieben (der für jeden ausgewählten Text in jeder Anwendung verwendet werden soll), der die Länge der Auswahl ändert, wenn eine Zahl/Länge angegeben wird, die der Benutzer angibt. Hier ist ein Ausschnitt aus relevantem Code, der alle anderen Funktionen/Feinheiten des Dienstes ausschließt:
--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
Der Dienst funktioniert in den meisten Anwendungen hervorragend, mit Ausnahme von Terminal.app (da die Pfeiltasten verwendet werden, um den Cursor auf der Befehlszeile zu bewegen und nicht die Größe der derzeit aktiven Auswahl). Im Idealfall würde dies tatsächlich im Terminal funktionieren, da ich diesen Dienst normalerweise dort verwenden muss.
Gibt es also eine Möglichkeit, die Länge des ausgewählten Textes in einer beliebigen Zeile im Verlauf in einem Terminal.app-Fenster (vorausgesetzt, das erste ausgewählte Zeichen ist Position 1) mithilfe eines Automator-Dienstes (und Applescript innerhalb dieses Dienstes) so zu ändern, dass dies der Fall ist Verwenden Sie die Pfeiltasten nicht? ZB wähle ich die Ausgabe eines Befehls aus und führe den Dienst aus, um die Länge der Auswahl an eine von mir angegebene Länge anzupassen.
Hintergrund:
Der Grund, warum ich dies tue, ist, dass meine Arbeit DNA-Manipulation/-Modifikation umfasst und ich als Teil des Debug-Prozesses für diese Skripte manchmal kurz beobachten muss, was an einer bestimmten Position in einer DNA-String-Ausgabe auf der Befehlszeile passiert ist - schnell und schmutzig - nur um zu bestätigen, dass eine beabsichtigte Änderung das beabsichtigte Ergebnis hatte. Dies ist also nur ein schneller Weg, um visuell eine Koordinate in einer langen DNA-Kette zu finden. Ich beabsichtige, diesen Dienst eventuell so zu modifizieren, dass nur bestimmte Zeichen bei der Bestimmung der Länge der Auswahl berücksichtigt werden (z. B. Zahlen, Leerzeichen, Zeilenumbrüche usw. nicht zählen).
Wie ich gelernt habe, gibt / gab es nur drei Möglichkeiten, die Auswahl im Terminal durch Eingabe / Verwendung eines Längenwerts (oder über eine Reihe von Tastaturdrücken) zu manipulieren.
Die Eigenschaft/das Attribut "Ausgewählter Textbereich" (?) scheint in AppleScript nicht zugänglich zu sein, obwohl sie, wenn sie zugänglich wäre, hier wäre: wenn Sie sie in Ihrem Applescript (text area of (scroll area 1 of (splitter group 1 of (front window))))
aktiviert haben . UI elements
Es ist möglicherweise möglich, auf diese Werte zuzugreifen, wie @CJK in den Kommentaren über Objective-C angegeben hat. Applescript hätte jedoch, selbst wenn es auf die Variable zugreifen könnte, wahrscheinlich nicht die Möglichkeit, sie zu ändern.
Eine nützliche Funktion, um zu sehen, was Applescript manipulieren kann oder worauf es Zugriff hat, ist einfach return attributes
oder return properties
. Zum Beispiel:
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
Diese Methode funktioniert ab OS X 10.8 nicht mehr, aber eine Auswahl im Terminal über die Tastatur war früher wie hier beschrieben möglich . Alles, was Sie tun mussten, war Befehl-Option-Return zu drücken, mit den Pfeiltasten zu der Region zu navigieren, die Sie auswählen möchten, Return zu drücken, mit den Pfeiltasten an der Cursorposition auszuwählen und Return zu drücken. Ich suchte nach der Möglichkeit, diese Funktion wieder zu aktivieren, kam aber trocken.
Es gibt eine Möglichkeit, Text im Terminal mit der Tastatur auszuwählen, aber es ist sehr begrenzt. Sie können Text zwischen „Markierungen“ mit Befehlstaste-Umschalttaste-A auswählen (ohne die Zeilen, auf denen sich die Markierungen befinden). Markierungen werden standardmäßig in jeder Eingabeaufforderungszeile hinzugefügt. Sie können jedoch Markierungen hinzufügen, indem Sie mit der rechten Maustaste auf eine Auswahl klicken und eingeben Command-U
. Markierungen gelten jedoch nur pro Zeile, nicht spezifisch für den Start/Stopp der Auswahl in einer Zeile. Wenn Sie mit der rechten Maustaste auf einen nicht ausgewählten Text klicken, der weich umbrochen ist (dh eine mehrzeilige Zeichenfolge) und eine Markierung hinzufügen, wird für jede weich umbrochene Zeile eine separate Markierung hinzugefügt. Sie können keinen Text zwischen mehreren Markierungen auswählen, noch ist es möglich, Markierungen über Applescript hinzuzufügen, daher ist es nicht möglich, dies zu verwenden, um eine Auswahllänge programmgesteuert anzupassen. Weitere Informationen zu Marken finden Sie hier .
Was die Pfeiltasten können, hatte ich auch schon erkundet, da Shift-{Links,Rechts}-Pfeil bei mir die Strings ";2C" und ";2D" mit Piepton auf der Kommandozeile eingibt. Also habe ich diese Einträge aus der Tabelle in Terminal -> Einstellungen -> Profile -> Tastatur entfernt, um das zu verhindern. Ich hatte gehofft, es würde mir erlauben, Text (zumindest in der Eingabeaufforderung der aktuellen Zeile) mit Umschalt-Pfeil auszuwählen, aber alles, was es tat, war, den Cursor zu bewegen, ohne auszuwählen.
Angesichts des Ziels dieses Unterfangens (zu sehen, wo sich eine Koordinate in einer ausgewählten Zeichenfolge befindet) können Sie dies jedoch über ein Dialogfeld des Automator-Dienstes mit einem Applescript erreichen. Sie müssen lediglich die Auswahl in einem Dialogfenster präsentieren und falls die Ziellänge länger als die Auswahl ist, müssen Sie die verbleibenden Zeichen mit einem Dummy-Zeichen ('N' für DNA) auffüllen.
Sie können diese Strategie nur bedingt anwenden, wenn Terminal die vorderste Anwendung ist. Beachten Sie, dass dies nicht das gesamte Skript ist - nur ein Ausschnitt, aber Sie können das gesamte Skript hier sehen , das viele Schnickschnack enthält, die nichts mit dieser Frage zu tun haben.
--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
Das wird das Endziel effektiv erreichen. Leider muss die Position mit einem Textmarker in einer Schriftart mit variabler Breite markiert werden, da Dialogfelder keine Formatierung oder automatische Textauswahl zulassen.
ignoring application responses
damit die Pfeiltasten die Auswahl im Dialog bedienen konnten. Die Verzögerung am Ende verhindert, dass der Dialog sofort verschwindet.
Benutzer3439894
character_count
nichtn
definiert. Selbst wenn der von Ihnen gepostete Code kompiliert wäre, würde er dennoch unverändert fehlschlagen. Das heißt, ich habe Ihre andere Frage gelesen, die Sie vor ungefähr einer Stunde gelöscht haben, und unter dem Strich ist das, was Sie im Terminal erreichen können, nicht möglich.CJK
diff
zum Beispiel)?hepcat72
CJK
hepcat72
hepcat72