-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
when trying to wipe through my windows via cmdline (because some stupid game
stole my mouse or whatever) i get annoyed when trying to type out window
ids ... sometimes i incorrectly count the # of 0's or the simple factor of
trying to type a hex number at lightning speed gets the better of me ...
either way, when i screw up, it makes me angry because i have to retype the
damned thing ;)
so i made a patch to enable a cheap search/match ... just type 'p' and then
the first few bits of the window id ... p stands for partial ...
for example:
<eesh example>
[EMAIL PROTECTED] 0 root # eesh
wl
1800045 : [EMAIL PROTECTED]:~
120153c : patch to make eesh even more obscure - KMail
40027e : 0
1600002 : X-Chat [2.0.6]: SpanKY @ lepton.oftc.net / #gentoo (+stncl 69)
wop p16 move 0 0
</eesh example>
here we did a partial match against the window id 1600002.
the matching does a string comparison starting with the first few
characters ... why you ask ? because we english speakers read right to left
and the first few chars are usually pretty nicely distributed ...
at any rate, the algorithm just looks until it gets a match ... so if in the
previous case i typed 'p1' it would have matched '1800045' instead of
something else ...
yes i know the order changes as you focus other windows or do whatever, but in
the space of typing 'eesh' and then 'wop p###' i doubt the order will
change ... and if it does, well you should have typed out the window id :P
i also added a few shortcuts for the move, raise, and lower window operations
(m, r, and l respectively of course)
- -mike
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.3 (GNU/Linux)
iQIVAwUBP8+/b0FjO5/oN/WBAQIGqg//XK5EHHUoo3CElSMsyp+Sd9HLEghYsH9b
KgfoAn7a/Jnyni68OgRduC2MhjmXK6H+UeIe0+3P9sIX46TIUI+Lr3mRRHp3KxGw
gnWp6uWsPlt2SrZAtG29Tv9q+DNFC3hWoi5y3vaqiCfwAbQO2Ca/D9vhz5ExhjoW
cibzfuJlUYKU5GcNS8VAHXnL0R6LRxgkGMpp54dRtgxxqIuojvB1KN0SFaaAKq7E
3XtuGHPrbTG6xg3rrqJFYwGAh2Zkl6p2ApgzBXPW6sCGZ6QO87kcuqJTaJ0cVQyc
fguXSFUS4CIyJxfeWyESD7ENtRjqrHVUej00C1RIYPYLpnb9DOPaY67Ij57IlzXD
q2sR9iPUP/FJnRnTE/rqzMYqyVOdwT9k2CA7XiLmMk1fqNB3lnX6VRH7i+UOkr/V
VzvXxtmkG4SwwNFYIBYEpyTiawjndsGJODaV/BsUEhvoZk8fB/MhMUToyCs4iCdb
3yXZO9QJNcbukbFO0ziOTbYI/n9IH50fjW5efwLSHFu1MGI4w5ED8Q4Wlp3QVAcD
UKIYiyTFvQcT4UtQT3QjbG0IajK1Jlqmn6V0BEuoX4hcEiUutKSPi0XjLvwOy44K
iap7yLTB51Er+immRxkvCUBTEB54zMF2Q2AUWu2O2F9iMverCZZChxAvFOzHUM8Y
vq2IDFaFBjE=
=eQx4
-----END PGP SIGNATURE-----
diff -ur /usr/local/src/e17/e16/e/src/E.h src/E.h
--- /usr/local/src/e17/e16/e/src/E.h 2003-11-30 10:35:43.000000000 -0500
+++ src/E.h 2003-12-04 17:52:05.728326944 -0500
@@ -2150,6 +2150,7 @@
EWin *FindEwinByBase(Window win);
EWin *FindEwinByChildren(Window win);
+EWin *FindEwinByPartial(char *win);
EWin *FindEwinByDecoration(Window win);
Button *FindButton(Window win);
ActionClass *FindActionClass(Window win);
diff -ur /usr/local/src/e17/e16/e/src/finders.c src/finders.c
--- /usr/local/src/e17/e16/e/src/finders.c 2003-11-09 15:28:24.000000000 -0500
+++ src/finders.c 2003-12-04 17:56:23.968068536 -0500
@@ -80,6 +80,33 @@
}
EWin *
+FindEwinByPartial(char *win)
+{
+ EWin *ewin;
+ EWin **ewins;
+ int i, j, num, inlen;
+ char ewinid[FILEPATH_LEN_MAX];
+
+ EDBUG(6, "FindEwinByPartial");
+
+ inlen = strlen(win);
+ ewins = (EWin **) ListItemType(&num, LIST_TYPE_EWIN);
+ for (i = 0; i < num; i++)
+ {
+ sprintf(ewinid, "%x", ewins[i]->client.win);
+ if (!strncmp(win, ewinid, inlen))
+ {
+ ewin = ewins[i];
+ Efree(ewins);
+ EDBUG_RETURN(ewin);
+ }
+ }
+ if (ewins)
+ Efree(ewins);
+ EDBUG_RETURN(NULL);
+}
+
+EWin *
FindEwinByDecoration(Window win)
{
EWin *ewin;
diff -ur /usr/local/src/e17/e16/e/src/ipc.c src/ipc.c
--- /usr/local/src/e17/e16/e/src/ipc.c 2003-11-21 19:15:40.000000000 -0500
+++ src/ipc.c 2003-12-04 17:58:47.269283440 -0500
@@ -3744,10 +3744,12 @@
char operation[FILEPATH_LEN_MAX];
char param1[FILEPATH_LEN_MAX];
unsigned int win;
+ unsigned int findwindow;
windowid[0] = 0;
operation[0] = 0;
param1[0] = 0;
+ findwindow = 0;
word(params, 1, windowid);
if (!strcmp(windowid, "current"))
{
@@ -3763,6 +3765,11 @@
return;
}
}
+ else if (!strncmp(windowid, "p", 1))
+ {
+ findwindow = 1;
+ sscanf(windowid+1, "%x", &win);
+ }
else
{
sscanf(windowid, "%x", &win);
@@ -3776,7 +3783,10 @@
{
EWin *ewin;
- ewin = FindEwinByChildren(win);
+ if (!findwindow)
+ ewin = FindEwinByChildren(win);
+ else
+ ewin = FindEwinByPartial(windowid+1);
if (!ewin)
{
Esnprintf(buf, sizeof(buf), "Error: no such window: %8x",
@@ -4096,15 +4106,15 @@
"Error: no area supplied");
}
}
- else if (!strcmp(operation, "raise"))
+ else if (!strcmp(operation, "raise") || !strcmp(operation, "r"))
{
RaiseEwin(ewin);
}
- else if (!strcmp(operation, "lower"))
+ else if (!strcmp(operation, "lower") || !strcmp(operation, "l"))
{
LowerEwin(ewin);
}
- else if (!strcmp(operation, "move"))
+ else if (!strcmp(operation, "move") || !strcmp(operation, "m"))
{
int a, b;