about summary refs log tree commit diff stats
path: root/apps/assort
Commit message (Expand)AuthorAgeFilesLines
* 6946 - print floats somewhat intuitively in hexKartik Agaram2020-10-041-0/+0
* 6908 - compiling all floating-point operationsKartik Agaram2020-09-301-0/+0
* 6783Kartik Agaram2020-09-161-0/+0
* 6781 - new app: RPN (postfix) calculatorKartik Agaram2020-09-151-0/+0
* 6733 - read utf-8 'grapheme' from byte streamKartik Agaram2020-08-281-0/+0
* 6719 - error-checking for 'index' instructionsKartik Agaram2020-08-211-0/+0
* 6622 - new syscalls: time and ntimeKartik Agaram2020-07-081-0/+0
* 6604 - new appKartik Agaram2020-07-011-0/+0
* 6597Kartik Agaram2020-06-291-0/+0
* 6596Kartik Agaram2020-06-291-0/+0
* 6595Kartik Agaram2020-06-291-0/+0
* 6594 - start standardizing the meaning of 'print'Kartik Agaram2020-06-291-0/+0
* 6528Kartik Agaram2020-06-151-0/+0
* 6520 - new app: parse-intKartik Agaram2020-06-141-0/+0
* 6508 - support null exit-descriptorKartik Agaram2020-06-101-0/+0
* 6507 - use syscall names everywhereKartik Agaram2020-06-101-0/+0
* 6409 - primitives for text-mode UIsKartik Agaram2020-05-271-0/+0
* 6406 - primitive 'copy-handle'Kartik Agaram2020-05-251-0/+0
* 6382 - re-enable mu.subx in CIKartik Agaram2020-05-221-0/+0
* update binariesKartik Agaram2020-05-221-0/+0
* handle nulls in lookupKartik Agaram2020-05-181-0/+0
* support 'fake' handles allocated staticallyKartik Agaram2020-05-181-0/+0
* support 'fake' handles allocated staticallyKartik Agaram2020-05-181-0/+0
* Rebuild phases of self-hosted SubX translatorKartik Agaram2020-05-181-0/+0
* 6208Kartik Agaram2020-04-221-0/+0
* 6182 - start of support for safe handlesKartik Agaram2020-04-031-0/+0
* 6181Kartik Agaram2020-04-031-0/+0
* 6153 - switch 'main' to use Mu stringsKartik Agaram2020-03-151-0/+0
* 6094 - new 'compute-offset' instructionKartik Agaram2020-03-071-0/+0
* 6085Kartik Agaram2020-03-061-0/+0
* 6083Kartik Agaram2020-03-061-0/+0
* 6070Kartik Agaram2020-02-291-0/+0
* 6064Kartik Agaram2020-02-271-0/+0
* 6000 - clean up after no-local branchesKartik Agaram2020-02-091-0/+0
* 5999Kartik Agaram2020-02-091-0/+0
* 5948 - branching to named blocksKartik Agaram2020-01-291-0/+0
* 5933Kartik Agaram2020-01-271-0/+0
* 5898 - strengthen slice-empty? checkKartik Agaram2020-01-191-0/+0
* 5887 - reorganize libraryKartik Agaram2020-01-141-0/+0
* 5847 - literal inputsKartik Agaram2019-12-311-0/+0
* 5804Kartik Agaram2019-12-081-0/+0
* 5803Kartik Agaram2019-12-071-0/+0
* 5792Kartik Agaram2019-12-051-0/+0
* 5782 - fix a widespread bug with Heap-sizeKartik Agaram2019-11-301-0/+0
* 5778Kartik Agaram2019-11-291-0/+0
* 5769 - support uppercase hex in SubXKartik Agaram2019-11-281-0/+0
* 5765Kartik Agaram2019-11-261-0/+0
* 5753Kartik Agaram2019-11-181-0/+0
* 5752Kartik Agaram2019-11-181-0/+0
* 5714Kartik Agaram2019-10-251-0/+0
ass="o">= clients; c; c = c->next) if(c->weight < min->weight) min = c; return min; } static Client * nexttiled(Client *c) { for(c = getnext(c); c && c->isfloat; c = getnext(c->next)); return c; } static void reorder(void) { Client *c, *newclients, *tail; newclients = tail = NULL; while((c = minclient())) { detach(c); if(tail) { c->prev = tail; tail->next = c; tail = c; } else tail = newclients = c; } clients = newclients; } static void togglemax(Client *c) { XEvent ev; if((c->ismax = !c->ismax)) { c->rx = c->x; c->x = sx; c->ry = c->y; c->y = bh; c->rw = c->w; c->w = sw; c->rh = c->h; c->h = sh - bh - 2; } else { c->x = c->rx; c->y = c->ry; c->w = c->rw; c->h = c->rh; } resize(c, True, TopLeft); while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); } /* extern */ void (*arrange)(Arg *) = DEFMODE; void detach(Client *c) { if(c->prev) c->prev->next = c->next; if(c->next) c->next->prev = c->prev; if(c == clients) clients = c->next; c->next = c->prev = NULL; } void dofloat(Arg *arg) { Client *c; for(c = clients; c; c = c->next) { if(isvisible(c)) { resize(c, True, TopLeft); } else ban(c); } if(!sel || !isvisible(sel)) { for(c = stack; c && !isvisible(c); c = c->snext); focus(c); } restack(); } void dotile(Arg *arg) { int h, i, n, w; Client *c; w = sw - mw; for(n = 0, c = clients; c; c = c->next) if(isvisible(c) && !c->isfloat) n++; if(n > 1) h = (sh - bh) / (n - 1); else h = sh - bh; for(i = 0, c = clients; c; c = c->next) { if(isvisible(c)) { if(c->isfloat) { resize(c, True, TopLeft); continue; } if(c->ismax) togglemax(c); if(n == 1) { c->x = sx; c->y = sy + bh; c->w = sw - 2; c->h = sh - 2 - bh; } else if(i == 0) { c->x = sx; c->y = sy + bh; c->w = mw - 2; c->h = sh - 2 - bh; } else if(h > bh) { c->x = sx + mw; c->y = sy + (i - 1) * h + bh; c->w = w - 2; if(i + 1 == n) c->h = sh - c->y - 2; else c->h = h - 2; } else { /* fallback if h < bh */ c->x = sx + mw; c->y = sy + bh; c->w = w - 2; c->h = sh - 2 - bh; } resize(c, False, TopLeft); i++; } else ban(c); } if(!sel || !isvisible(sel)) { for(c = stack; c && !isvisible(c); c = c->snext); focus(c); } restack(); } void focusnext(Arg *arg) { Client *c; if(!sel) return; if(!(c = getnext(sel->next))) c = getnext(clients); if(c) { focus(c); restack(); } } void focusprev(Arg *arg) { Client *c; if(!sel) return; if(!(c = getprev(sel->prev))) { for(c = clients; c && c->next; c = c->next); c = getprev(c); } if(c) { focus(c); restack(); } } Bool isvisible(Client *c) { unsigned int i; for(i = 0; i < ntags; i++) if(c->tags[i] && seltag[i]) return True; return False; } void resizecol(Arg *arg) { unsigned int n; Client *c; for(n = 0, c = clients; c; c = c->next) if(isvisible(c) && !c->isfloat) n++; if(!sel || sel->isfloat || n < 2 || (arrange == dofloat)) return; if(sel == getnext(clients)) { if(mw + arg->i > sw - 100 || mw + arg->i < 100) return; mw += arg->i; } else { if(mw - arg->i > sw - 100 || mw - arg->i < 100) return; mw -= arg->i; } arrange(NULL); } void restack(void) { Client *c; XEvent ev; if(!sel) { drawstatus(); return; } if(sel->isfloat || arrange == dofloat) { XRaiseWindow(dpy, sel->win); XRaiseWindow(dpy, sel->twin); } if(arrange != dofloat) for(c = nexttiled(clients); c; c = nexttiled(c->next)) { XLowerWindow(dpy, c->twin); XLowerWindow(dpy, c->win); } drawall(); XSync(dpy, False); while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); } void togglemode(Arg *arg) { arrange = (arrange == dofloat) ? dotile : dofloat; if(sel) arrange(NULL); else drawstatus(); } void toggleview(Arg *arg) { unsigned int i; seltag[arg->i] = !seltag[arg->i]; for(i = 0; i < ntags && !seltag[i]; i++); if(i == ntags) seltag[arg->i] = True; /* cannot toggle last view */ reorder(); arrange(NULL); } void view(Arg *arg) { unsigned int i; for(i = 0; i < ntags; i++) seltag[i] = False; seltag[arg->i] = True; reorder(); arrange(NULL); } void viewall(Arg *arg) { unsigned int i; for(i = 0; i < ntags; i++) seltag[i] = True; reorder(); arrange(NULL); } void zoom(Arg *arg) { unsigned int n; Client *c; if(!sel) return; if(sel->isfloat || (arrange == dofloat)) { togglemax(sel); return; } for(n = 0, c = clients; c; c = c->next) if(isvisible(c) && !c->isfloat) n++; if(n < 2 || (arrange == dofloat)) return; if((c = sel) == nexttiled(clients)) if(!(c = nexttiled(c->next))) return; detach(c); if(clients) clients->prev = c; c->next = clients; clients = c; focus(c); arrange(NULL); }