Initial commit
This commit is contained in:
commit
a05b03e150
|
@ -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");
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue