
Ich muss die Auswahl (Hervorhebung) von Text simulieren, der sich im Terminalpuffer befindet. Er liegt schon lange hinter stdout, daher ist das ganze grep/awk/sed/Umleitungszeug meines Wissens nach nicht relevant. Außerdem möchte ich nicht, dass er während der Formatierung von stdout hervorgehoben wird. Ich muss ihn unhervorgehoben in stdout verschieben und dann hervorheben. Auswahl simulieren.
Hier ist das Szenario ...
Ein Bash-Skript ruft „ls -1“ auf und gibt Folgendes an stdout und dann an den Terminalpuffer aus?
$ ls -1
a.txt
b.txt
c.txt
Jetzt brauche ich einen Befehl, den ich in ein Bash-Skript einfügen kann, das „b.txt“ findet und hervorhebt.
Wie:
$ termsearch b.txt
a.txt
[b.txt]
c.txt
Wobei „termsearch“ ein erfundener Befehl ist, den ich glaube ich brauche, und er konvertiert b.txt in schwarzen Text mit weißem Hintergrund (hervorgehoben) und der Rest des Textes ist weiß auf schwarzem Hintergrund. Ich glaube, das Problem ist, dass man den Puffer nicht wirklich bearbeiten und den Textstil auf diese Weise ändern kann.
Ich kann screen interaktiv verwenden, um „b.txt“ zu finden, aber es hebt es nicht hervor (das Hauptziel) und ich weiß nicht, ob es überhaupt möglich ist, screen-Befehle zu skripten. Also habe ich screen aufgegeben. Der Skriptbefehl gibt stdout einfach in eine Datei aus, aber ich möchte keine Datei durchsuchen. Ich muss den Terminalpuffer durchsuchen und die Ergebnisse auf dem Bildschirm hervorheben, ohne mehr stdout. Was ich will, ist bereits da, es muss nur hervorgehoben werden.
Ich denke, Ncurses ist die richtige Lösung, aber ich habe noch nie damit programmiert und es sieht kompliziert aus. Bevor ich also loslege, frage ich, ob irgendjemand eine andere Möglichkeit dafür findet und bestätigen kann, dass Ncurses überhaupt das kann, was ich will.
Antwort1
kurz: nein, das kannst du nicht
länger: Der Grund, warum Sie das nicht tun können, ist, dass Terminals es Programmen in der Regel nicht erlauben, Text zu kopierenausihren Bildschirm. Es ist möglich, mit einem Umweg eine GUI-Anwendung dazu zu bringen, Text vom Bildschirm eines Terminals auszuwählen, und wenn Sie dann wissen, was der TextIst, UndWoes ist so, Sie könnten dann im Prinzip Befehle im Terminal eingeben, um es anzuweisen, diesen Abschnitt des Bildschirms mit beliebigen Farben neu zu zeichnen. Aber das ist nur hypothetisch (es sei denn, jemand hat kürzlich ein Programm geschrieben, das dies tut).
Übrigens: Sobald der Text vom sichtbaren Bildschirm gescrollt ist, wird dies von den Terminals auch nicht mehr geändert.
Antwort2
Ich würde ... benutzen vim
.
Für Ihren speziellen Fall würde ich
vim .
Dann vim
wird mir ein Fenster mit allen Dateien im Verzeichnis angezeigt. Ich kann mit suchen /
und eine Datei durch Drücken von öffnen Enter
.
Stellen Sie einfach sicher, dass die Suchhervorhebung aktiviert ist mit
:set hlsearch
Für andere Befehle reicht vielleicht Folgendes:
echo "one\ntwo\nthree" | vim -