commit 8fdcf79

chld  ·  2026-07-14 17:11:45 +0000 UTC
parent 5e62df2
wrapping!!!
2 files changed,  +32, -8
M xtr
M xtr.c
M xtr
+0, -0
M xtr.c
+32, -8
 1@@ -100,10 +100,13 @@ int main(int ac, char **av) {
 2     font = XLoadQueryFont(d, "fixed");
 3   XSetFont(d, gc, font->fid);
 4 
 5-  char cmd[1024];
 6+  bool end = false;
 7+  bool Nend = false;
 8+  int cmd_end = 0;
 9+  char cmd[512];
10   size_t idx = 0;
11   for (int c = 0; c < 1023; c++) {
12-    cmd[c] = 0;
13+    cmd[c] = '\0';
14   }
15 
16   struct xkb_context *ctx;
17@@ -128,9 +131,13 @@ int main(int ac, char **av) {
18 
19       int direction, as, des;
20       XCharStruct ov;
21-
22       XTextExtents(font, cmd, strlen(cmd), &direction, &as, &des, &ov);
23 
24+      int Ndirection, Nas, Ndes;
25+      XCharStruct Nov;
26+      XTextExtents(font, cmd + cmd_end, strlen(cmd + cmd_end), &Ndirection,
27+                   &Nas, &Ndes, &Nov);
28+
29       XSetForeground(d, gc, col[1].pixel);
30       XFillRectangle(d, w, gc, 0, 0, wi, hi);
31       XSetForeground(d, gc, col[2].pixel);
32@@ -139,13 +146,25 @@ int main(int ac, char **av) {
33       XSetForeground(d, gc, col[1].pixel);
34       XFillRectangle(d, w, gc, 10 + 1, 30 + 1, wi - 20 - (1 * 2),
35                      hi - 30 - 10 - (1 * 2));
36-
37       XSetForeground(d, gc, col[0].pixel);
38-      XDrawString(d, w, gc, 15 - 2, 30 + (as + des) + 2, cmd, strlen(cmd));
39 
40-      /* will handle some time */
41-      if (ov.width - 15 > (wi - 30 - 10)) {
42-        goto q;
43+      char cmd_str[512 + 1];
44+      strncpy(cmd_str, cmd, end ? cmd_end : strlen(cmd));
45+      cmd_str[512] = '\0';
46+      XDrawString(d, w, gc, 15 - 2, 30 + (as + des) + 2, cmd, strlen(cmd_str));
47+
48+      if (end) {
49+        XDrawString(d, w, gc, 15 - 2, 30 + ((as + des) * 2), cmd + cmd_end,
50+                    strlen(cmd + cmd_end));
51+      }
52+
53+      if (ov.width - 15 > (wi - 30 - 20) && !end) {
54+        cmd_end = strlen(cmd);
55+        printf("%d\n", cmd_end);
56+        end = true;
57+      }
58+      if (Nov.width - 15 > (wi - 30 - 20) && end) {
59+        Nend = true;
60       }
61 
62       break;
63@@ -176,6 +195,11 @@ int main(int ac, char **av) {
64         break;
65       }
66 
67+      if (Nend) {
68+        xkb_state_update_key(state, xkb, XKB_KEY_UP);
69+        break;
70+      }
71+
72       char buf[32];
73 
74       int l = xkb_state_key_get_utf8(state, xkb, buf, sizeof(buf));