]> git.sur5r.net Git - i3/i3/commitdiff
Initial commit
authorMichael Stapelberg <michael+git@stapelberg.de>
Fri, 6 Feb 2009 03:44:56 +0000 (04:44 +0100)
committerMichael Stapelberg <michael+git@stapelberg.de>
Fri, 6 Feb 2009 03:44:56 +0000 (04:44 +0100)
main.c [new file with mode: 0644]

diff --git a/main.c b/main.c
new file mode 100644 (file)
index 0000000..db0b54e
--- /dev/null
+++ b/main.c
@@ -0,0 +1,161 @@
+#include <termios.h>
+#include <unistd.h>
+#include <stdio.h>
+
+enum { move, snap, select };
+
+struct foo {
+       int width;
+       int height;
+       int x;
+       int y;
+};
+
+
+int main() {
+       int c;
+       int mode;
+       struct termios tbuf, obuf;
+       if (tcgetattr(STDIN_FILENO, &obuf) < 0 ||
+               tcgetattr(STDIN_FILENO, &tbuf) < 0)
+               perror("tcgetattr()");
+       tbuf.c_lflag &= ~ICANON;
+       tbuf.c_cc[VMIN] = 1;
+       tbuf.c_cc[VTIME] = 0;
+       tcsetattr(STDIN_FILENO, TCSANOW, &tbuf);
+
+       int table[10][10];
+       int colspan[10];
+       int rowspan[10];
+       int current_row = 0;
+       int current_col = 0;
+       int current = -1;
+       int created_terms = 0;
+
+       for (c = 0; c < 10; c++) {
+               int i;
+               for (i = 0; i < 10; i++)
+                       table[c][i] = -1;
+               colspan[c] = 1;
+               rowspan[c] = 1;
+       }
+
+       mode = select;
+       while (printf("%s> ", (mode == move ? "move" : (mode == select ? "select" : "snap"))), c = getchar()) {
+
+               printf("char %c, %d\n", c, c);
+               if (c == 'm')
+                       mode = move;
+               else if (c == 's')
+                       mode = snap;
+               else if (c == 'u') {
+                       /* insert new 'terminal' below current one */
+                       int i;
+                       printf("current row = %d\n", current_row);
+                       printf("current col = %d\n", current_col);
+                       for (i = current_row; i < 10; i++) {
+                               if (table[current_col][i] == -1) {
+                                       printf("found empty entry at %d\n", i);
+                                       created_terms++;
+                                       table[current_col][i] = created_terms;
+                                       current_row = i;
+                                       printf("created terminal %d\n", created_terms);
+                                       printf("current_row = %d\n", current_row);
+                                       break;
+                               }
+                       }
+               }
+               else if (c == 'n') {
+                       if (mode == move) {
+                               printf("move window left\n");
+                               table[current_col-1][current_row] = table[current_col][current_row];
+                               table[current_col][current_row] = -1;
+
+                       } else if (mode == snap) {
+                               printf("snap window left\n");
+                       } else if (mode == select) {
+                               printf("go to left window\n");
+                               if (current_col > 0)
+                                       current_col--;
+                               printf("col now: %d\n", current_col);
+                       }
+                       mode = select;
+
+               }
+               else if (c == 'r') {
+                       if (mode == move) {
+                               printf("move window down\n");
+                               table[current_col][current_row+1] = table[current_col][current_row];
+                               table[current_col][current_row] = -1;
+
+                       } else if (mode == snap) {
+                               printf("snap window down\n");
+                       } else if (mode == select) {
+                               printf("go to window below\n");
+                               if (current_row < 9)
+                                       current_row++;
+                               printf("row now: %d\n", current_row);
+                       }
+                       mode = select;
+
+               }
+               else if (c == 't') {
+                       if (mode == move) {
+                               printf("move window up\n");
+                               table[current_col][current_row-1] = table[current_col][current_row];
+                               table[current_col][current_row] = -1;
+                       } else if (mode == snap) {
+                               printf("snap window up\n");
+                       } else if (mode == select) {
+                               printf("go to upper window\n");
+                               if (current_row > 0)
+                                       current_row--;
+                               printf("row now: %d\n", current_row);
+                       }
+                       mode = select;
+
+               }
+               else if (c == 'd') {
+                       if (mode == move) {
+                               printf("move window right\n");
+                               table[current_col+1][current_row] = table[current_col][current_row];
+                               table[current_col][current_row] = -1;
+                               current_col++;
+                       } else if (mode == snap) {
+                               printf("snap window right\n");
+                               colspan[table[current_col][current_row]]++;
+                               printf("colspan now is: %d\n", colspan[table[current_col][current_row]]++);
+
+                       } else if (mode == select) {
+                               printf("go to right window\n");
+                               if (current_col < 9)
+                                       current_col++;
+                               printf("col now: %d\n", current_col);
+                       }
+                       mode = select;
+
+               }
+
+               int  rows, cols;
+               printf("your windows are as following:\n");
+               system("/tmp/killgeom.sh");
+               for (rows = 0; rows < 10; rows++)
+                       for (cols = 0; cols < 10; cols++) {
+                               if (table[cols][rows] != -1) {
+                               printf("client %d, x = %d, y = %d, width = %d, height = %d",
+                                               table[cols][rows], cols * 60, rows * 60, 15 * 1, 15 * 1);
+                               if (cols == current_col && rows == current_row)
+                                       printf("   < ===== YOU ARE HERE\n");
+                               else printf("\n");
+                               char *buffer;
+                               asprintf(&buffer, "/bin/sh -c \"urxvt -geometry %dx%d+%d+%d %s&\"",
+                               15 * colspan[table[cols][rows]], 15, cols * 200, rows * 200, (cols == current_col && rows == current_row ? "-bg white" : "-bg gray"));
+                               printf("executing %s\n", buffer);
+
+                               system(buffer);
+                               free(buffer);
+                               }
+                       }
+               printf("that's all\n");
+       }
+}