Suche eine Art "sticky" ansi sequence...

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Mein Vorgehen (bisher) ist folgendes: Wenn ich die Spalte mit den Termintiteln erstelle, erhalte ich z. B. den Titeltext 'Zahnarzt Wurzelbehandlung' mit der Information, dass nach dem Begriff 'Wurzel' gesucht wurde. Die Schritte dabei:
  • Den Text für die Titelspalte auszeichnen -> '\033[32mZahnarzt Wurzelbehandlung\033[39m'
  • Den gefundenen Begriff als solchen auszeichnen -> '\033[32mZahnarzt \033[;4mWurzel\033[;24mbehandlung\033[39m'
  • Den Text auf den verfügbaren Raum kürzen -> '\033[32mZahnarzt \033[;4mWurz\033[;24m\033[39m'
[/list]

Müsste ich diesen Text erstellen, bräuchte ich dafür ja die "Einzelteile" ('Zahnarzt ', 'Wurzel', 'behandlung'), würde diese auszeichnen und wieder zusammensetzen. Wo dabei das Kürzen stattfindet, weiß ich jetzt noch gar nicht. Also eine API in diesem Sinne...
BlackJack hat geschrieben:Als API stelle ich mir für so etwas eher verschachtelte Funktionsaufrufe vor:

Code: Alles auswählen

text = Text('Text der ', green('grün'), ' und ', bold('fett'), ' oder ', underline(italic('unterstrichen ', bold('und')), 'kursiv'), ' ist.')
... ist doch für mein Vorhaben eher umständlicher, oder hab' ich einfach nur eine falsche Vorstellung davon?
jerch hat geschrieben:Was, wenn im Text die Stelle mehrfach vorkommt, man aber nur eine bestimmte davon dekorieren will?
Dann hätte ich ein Problem... Kommt aber eigentlich nicht vor, da ich nur Textteile auszeichnen möchte, die bei einer vorangegangenen Suche gefunden wurden. Und was gefunden wurde, soll auch ausgezeichnet werden.

Nur, dass ihr mich richtig versteht: Ich versuche nicht krampfhaft, euch zu widersprechen. Ich hab allerdings die Vorteile gegenüber meiner Methode noch nicht wirklich verstanden.

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
BlackJack

@mutetella: Das Vorgehen wäre dann:

* Text für Titel: 'Zahnarzt Wurzelbehandlung'
* Mit einer Funktion das Suchwort auszeichnen. → x = text('Zahnarzt ', bold('Wurzel'), 'behandlung')
* Gesamttext auszeichnen: x = bright(x)
* Gekürzten Text rendern: x.render(13) → '\033[32mZahnarzt \033[;4mWurz\033[;24m\033[39m'

Im zweiten Schritt steht rechts vom ``=`` nicht das was man tatsächlich schreibt sondern ein Ausdruck der das gleiche Ergebnis liefert wie die Funktion die 'Wurzel' sucht und auszeichnet. Ob die Funktionsnamen `bold()` und `bright()` zu den ANSI-Sequenzen passen, die Du angegeben hast, habe ich jetzt auch nicht geprüft. Wahrscheinlich nicht. Oh, und bei der 13 habe ich mich hoffentlich auch nicht verzählt. :-)
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@mutetella:
Ich werd das Gefühl nicht los, dass Du Dich mit der Sache etwas verrennst und etwas zu lösen versuchst, was so nicht lösbar ist und eigentlich ein Neuüberdenken benötigt. Hierzu mal ein paar Überlegungen zur Verkürzung. Das ist imho non trivial, damit da noch etwas sematisch Sinnvolles raus kommt. Beispiel:

Eintrag A:
"muss noch den Garten winterfest machen, Geranien ausgraben, Wurzeln lüften"
Eintrag B:
"Zahnarzt, Wurzelbehandlung"

Wie gehst Du mit dem Suchwort "Wurzel" um für die Einträge, wenn nur, sagen wir, für 10 Zeichen Platz ist?

Möglichkeit 1 wäre, einfach vom Anfang her zu kürzen:
A: "muss noch "
B: "Zahnarzt, "

Möglichkeit 2 wäre, im Umfeld des Suchwortes zu kürzen:
A: ", Wurzeln "
B: ", Wurzelbe"

Beides produziert mehr oder weniger Unsinn. An dieser Stelle musst Du Dich fragen, wie sinnvoll diese Funktion überhaupt ist oder mit welchen Einschränkungen/Erweiterungen dies tatsächlich funktionieren kann. Hierzu fallen mir spontan 3 Möglichkeiten ein:

1. Festlegung auf Kürzung vom Anfang her mit der Maßgabe, dass wichtige Schlüsselwörter vorne stehen müssen
Damit funktionieren alle Einträge ala B gut, A produziert Unsinn.

2. Einführung von expliziten Schlüsselwörtern
Mit der Einführung von expliziten Schlüsselwörtern, z.B. über Hashtags (Twitter machts vor) könnte man das Problem insofern lösen, dass man mit der Verkürzung auf diese Wörter reduziert, Beispiel:
"muss noch den #Garten winterfest machen, #Geranien ausgraben, #Wurzeln lüften"
render(10) --> "Garten ..."
Hier ist dann die Frage zu klären, wie genau mit den Hastags zu verfahren ist.

3. Vergiss den Versuch, das sinnvoll abbilden zu können und erweitere lieber die UI. Z.B. mit Hover-Funktion, welche in einem "Terminal-Popup" oder über kurze Userinteraktionswege in der Lage ist, den kompletten Eintrag anzuzeigen.

Ich würde wahrscheinlich zu 2. oder 3. tendieren und eine der Möglichkeiten weiter ausbauen. Vllt. sind die Überlegungen als Denkanstösse für Dich brauchbar.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@jerch:
Ich denke, man muss zwischen der notwendigen Kürzung von Text und dem optionalen Gimmick einer Hervorhebung von Suchbegriffen unterscheiden. Denkst Du nicht, dass man das ganz pragmatisch sehen kann/muss:
  • Ist eine Hervorhebung von Suchergebnissen erwünscht, werden Suchergebnisse hervorgehoben.
  • Wird eine Kürzung von Text vorgenommen, sieht man weniger vom Text.
jerch hat geschrieben:Möglichkeit 1 wäre, einfach vom Anfang her zu kürzen:
A: "muss noch "
B: "Zahnarzt, "

Möglichkeit 2 wäre, im Umfeld des Suchwortes zu kürzen:
A: ", Wurzeln "
B: ", Wurzelbe"

Beides produziert mehr oder weniger Unsinn.
Möglichkeit 1: So kenne ich das von den allermeisten Programmen. Macht ja auch in den allermeisten Situationen Sinn.
Möglichkeit 2: Manche commandline Tools arbeiten so, halte ich aber nur für sinnvoll, wenn eine solche Ausgabe im Kontext zur Herkunft, z. B. einer Datei, steht.
jerch hat geschrieben:Mit der Einführung von expliziten Schlüsselwörtern, z.B. über Hashtags [...] Hier ist dann die Frage zu klären, wie genau mit den Hastags zu verfahren ist.
Ist ja letztlich durch das Anlegen von Kategorien abgedeckt. Wenn ich also meinen Zahnarzt suche, kann ich ja alle Termine der Kategorie 'Arzttermine' anzeigen. #Hashtags, die innerhalb des eigentlichen #Textes gesetzt werden, halte ich neben der #Einführung von #RedBull für eine der #schlimmsten #Sünden neuerer #Zeit.
jerch hat geschrieben:... und erweitere lieber die UI. Z.B. mit Hover-Funktion, ...
Eine solche Funktion benötigt es in jedem Fall, da ja, wie schon gesagt, Text meistens auf irgendeine Art gekürzt werden muss. Ohne dieser Möglichkeit würden viele Daten nie wieder zur Anzeige gelangen.

mutetella


p.s. Wobei mir jetzt gerade kommt, dass man zwischen einer Suche innerhalb des angezeigten Inhalts und einer Suche innerhalb vorhandener Daten unterscheiden und daraufhin auch das Anzeigetemplate abstimmen muss.
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

mutetella hat geschrieben:@jerch:
Ich denke, man muss zwischen der notwendigen Kürzung von Text und dem optionalen Gimmick einer Hervorhebung von Suchbegriffen unterscheiden. ...
Das ist klar, hab ich auch nur deshalb angesprochen, weil es als Nebenproblemin diesem Thread mehrfach aufgetaucht ist.
mutetella hat geschrieben:... Ist eine Hervorhebung von Suchergebnissen erwünscht, werden Suchergebnisse hervorgehoben. ...
Ok ich frage anders - welchen Sinn hat die Hervorhebung in der Liste von Einträgen Deiner Meinung nach, wenn
a.) der Benutzer weiss, wonach er gesucht hat bzw. man dies zusätzlich anzeigen könnte ("Suche: Wurzel \n Liste mit Einträgen")
b.) Kürzungen die Einträge "verstümmeln" (im Terminal ist sehr viel weniger Platz als in einem GUI-Fenster)

Hervorhebungen machen in meinen Augen nur Sinn, wenn man eine Information in einem größeren Datensatz visuell schneller erfassbar machen möchte. Deine Daten sind ja schon auf Eintragsebene strukturiert.
mutetella hat geschrieben:... Ist ja letztlich durch das Anlegen von Kategorien abgedeckt. Wenn ich also meinen Zahnarzt suche, kann ich ja alle Termine der Kategorie 'Arzttermine' anzeigen. #Hashtags, die innerhalb des eigentlichen #Textes gesetzt werden, halte ich neben der #Einführung von #RedBull für eine der #schlimmsten #Sünden neuerer #Zeit.
Das mit den Kategorien ist ein anderer Zugang zu den Daten. Entweder Du muss dem Nutzer das filterbar einstellen lassen können, oder die Kategorie belegt in der Ausgabe zusätzlich Platz.
Warum findest Du Hashtags so schlimm? Sie sind eine wunderbare Möglichkeit, den Nutzer Gewichtungen vornehmen zu lassen. Man muss sie ja in der Ausgabe nicht unbedingt so anzeigen.

mutetella hat geschrieben:p.s. Wobei mir jetzt gerade kommt, dass man zwischen einer Suche innerhalb des angezeigten Inhalts und einer Suche innerhalb vorhandener Daten unterscheiden und daraufhin auch das Anzeigetemplate abstimmen muss.
Siehe oben zur Sinnhaftigkeit der Hervorhebungen in der Eintragsliste ;)
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

jerch hat geschrieben:Hervorhebungen machen in meinen Augen nur Sinn, wenn man eine Information in einem größeren Datensatz visuell schneller erfassbar machen möchte. Deine Daten sind ja schon auf Eintragsebene strukturiert.
Ich bin soweit: Du hast Recht. In einer 1- oder 2-zeiligen Auflistung von Terminen macht das Hervorheben von Suchbegriffen kaum Sinn. Bei der Ausgabe des `longtext` Attribut evtl. eher...
jerch hat geschrieben:Das mit den Kategorien ist ein anderer Zugang zu den Daten.
Eigentlich nicht. Letztlich auch nur ein Attribut, das ich wie alle anderen bei einer Suche ein- oder ausschließen kann.
jerch hat geschrieben:Entweder Du muss dem Nutzer das filterbar einstellen lassen können, oder die Kategorie belegt in der Ausgabe zusätzlich Platz.
Ob es angezeigt wird, kann man ja über das Template entscheiden.
jerch hat geschrieben:Warum findest Du Hashtags so schlimm?
Hashtags an sich sind 'ne feine Sache, wenn die Handhabung ordentlich gemacht ist. Eine IMHO gute Lösung sieht man auf stackoverflow. Dagegen sind tweats, die ja naturgemäß kurz und knackig formuliert werden müssen, vor lauter #... und @... für mich oft auf's erste überhaupt nicht zu erfassen. Vielleicht liegt's aber auch einfach nur an meinem Alter... :wink:

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Antworten