Trefferliste von Manpages uebersichtlicher
Bei der Suche nach Manpages mit Platzhaltern wird die
Trefferliste jetzt case-insensitive sortiert und mit dem
Spaltenmodus von printf() uebersichtlicher dargestellt.
Fuer Magier mit P_NO_ASCII_ART (grafik aus) wird eine Variante
der bisherigen Ausgabe verwendet, weil fuer diese Magier
eine zeilenweise Auflistung in der Regel guenstiger ist als
spaltenweise.
Change-Id: I784c36928c526feab6f7e1579f6d1fb8bf6b345a
diff --git a/std/shells/magier/fileview.c b/std/shells/magier/fileview.c
index ca0aa20..a1c0ff4 100644
--- a/std/shells/magier/fileview.c
+++ b/std/shells/magier/fileview.c
@@ -473,14 +473,47 @@
oldman_result=m_allocate(i,2);
while(i)
{
- tmp2[(i-1)]=sprintf("%d: ",i)+tmp[(i<<1)-2];
+ tmp2[(i-1)]=tmp[(i<<1)-2];
oldman_result[i,0]=tmp[(i<<1)-2];
oldman_result[i,1]=tmp[(i<<1)-1];
i--;
}
- printf("Es wurden folgende potentiell passenden Seiten gefunden:\n"
- "%'-'78.78s\n%s%'-'78.78s\n","",
- break_string(implode(tmp2," "),78),"");
+
+ // Sortierung case-insensitive, ggf. vorhandene Pfade dabei ignorieren
+ tmp2 = sort_array(tmp2, function int (string t1, string t2) {
+ t1 = explode(t1, "/")[<1];
+ t2 = explode(t2, "/")[<1];
+ return lower_case(t1) > lower_case(t2);
+ });
+
+ // Numerierung ergaenzen
+ foreach(int j : sizeof(tmp2)) {
+ tmp2[j] = sprintf("%d: %s", j+1, tmp2[j]);
+ }
+
+ int tty_cols = QueryProp(P_TTY_COLS)-2;
+ string list = "Es wurden die folgenden, potentiell passenden Seiten "
+ "gefunden:\n";
+
+ // Wer keine Grafik sehen will, bekommt eine andere Anzeige.
+ if (QueryProp(P_NO_ASCII_ART)) {
+ // @ als geschuetztes Leerzeichen verwenden, um einen Umbruch
+ // nach den Nummern zu verhindern.
+ tmp2 = map(tmp2, #'regreplace, ": ", ":@", 1);
+ list += break_string(implode(tmp2, " "), tty_cols);
+ list = regreplace(list, ":@", ": ", 1);
+ }
+ else {
+ // Anzahl Spalten ausrechnen: Terminalbreite / Laenge des laengsten
+ // Elements in <tmp2>. Kann der Spaltenmodus von sprintf() an sich
+ // selbst, das liefert aber nicht immer so guenstige Ergebnisse.
+ int maxwidth = max(map(tmp2, #'sizeof));
+ int tablecols = tty_cols/maxwidth;
+ list += "-"*tty_cols+"\n"+
+ sprintf("%#-*.*s", tty_cols, tablecols, implode(tmp2,"\n"))+
+ "-"*tty_cols+"\n";
+ }
+ printf(list);
break;
}
return 1;