Ausgabe der Liste uebersichtlicher formatieren
- unnoetige Teilstrings entfernt
- Spaltenmodus von sprintf() verwendet
- Zeilenkuerzung umgestellt auf sprintf()
Change-Id: Ie2df85210ac6fc96840f1f42ad489e376ffe1915
diff --git a/obj/tools/btool.c b/obj/tools/btool.c
index 4e9d552..93d2d85 100644
--- a/obj/tools/btool.c
+++ b/obj/tools/btool.c
@@ -134,7 +134,7 @@
#define B_TIME 1
#define B_UID 2
-private varargs void print_map(mapping tmp,int cutoff)
+private varargs void print_map(mapping tmp, int cutoff)
{
if (!mappingp(tmp) || !sizeof(tmp))
{
@@ -142,21 +142,32 @@
return;
}
- string ret="";
- int cols = (PL->QueryProp(P_TTY_COLS) || 77);
+ string ret = "";
+ string topic;
+
+ // Kein automatisch ausgehandelter Wert vorhanden? Dann Default setzen.
+ int cols = (PL->QueryProp(P_TTY_COLS) || 78);
+ // War ein Wert gesetzt, aber < 35 (was der Mindestwert bei Auto-
+ // Negotiation ist), dann auf 35 begrenzen.
+ cols = max(cols, 35);
+
+ // Auf die fuers Subject verfuegbare Breite kuerzen: 7 Zeichen fuer die
+ // BTOP-Nummer abziehen und ein bisschen was als Puffer am rechten Rand
+ // des Terminals. Erfahrungsgemaess melden Clients oft mehr Zeichen als
+ // Terminbreite als sie darstellen, so dass wir das hier kompensieren
+ // muessen.
+ cols -= 10;
+
foreach(int i : sort_array(m_indices(tmp),#'>))
{
- string str=sprintf(
- " %4d: %s {%s} (%s)",
- i, tmp[i,B_SUBJECT], tmp[i,B_UID], strftime("%d.%m.%y", tmp[i,B_TIME]));
- if(cutoff)
- {
- ret+=BS(str[0..min(sizeof(str)-1, cols)]);
- }
+ topic = sprintf("%s {%s} (%s)",
+ regreplace(tmp[i,B_SUBJECT], " \\[angenommen\\]", "", 1),
+ tmp[i,B_UID],
+ strftime("%d.%m.%Y", tmp[i,B_TIME]));
+ if (cutoff)
+ ret += sprintf(" %4d: %-.*s\n", i, cols, topic);
else
- {
- ret+=BS(str);
- }
+ ret += sprintf(" %4d: %=-*s\n", i, cols, topic);
}
this_interactive()->More(ret);
}