Changeset 1079
- Timestamp:
- Jun 1, 2008 11:30:36 PM (5 years ago)
- Location:
- trunk/xdotool
- Files:
-
- 10 edited
- 3 copied
-
CHANGELIST (modified) (1 diff)
-
COPYRIGHT (copied) (copied from branches/upstream/xdotool/current/COPYRIGHT)
-
Makefile (modified) (3 diffs)
-
README (modified) (1 diff)
-
debian/changelog (modified) (1 diff)
-
examples/ffsp.sh (modified) (1 diff)
-
t/no_crashes_please.sh (modified) (1 diff)
-
xdo.c (modified) (17 diffs)
-
xdo.h (modified) (5 diffs)
-
xdo_util.h (modified) (1 diff)
-
xdotool.1 (copied) (copied from branches/upstream/xdotool/current/xdotool.1)
-
xdotool.c (modified) (28 diffs)
-
xdotool.pod (copied) (copied from branches/upstream/xdotool/current/xdotool.pod)
Legend:
- Unmodified
- Added
- Removed
-
trunk/xdotool/CHANGELIST
r1062 r1079 1 20071230: 2 * Manpage contribution by Daniel Kahn Gillmor 3 * Add COPYRIGHT from svn to the distributed package. 1 20080601: 2 * Add new commands: 3 - windowactivate: Activate a window. If the window is on another desktop, we 4 will switch to that desktop and then activate the window. 5 - set_num_desktops number: Changes the number of desktops or workspaces. 6 - get_num_desktops: Output the current number of desktops. 7 - set_desktop desktop_number: Change the current view to the specified 8 desktop. 9 - get_desktop: Output the current desktop in view. 10 - set_desktop_for_window window_id desktop_number: Move a window to a 11 different desktop. 12 - get_desktop_for_window window_id: Output the desktop currently containing 13 the given window. 14 15 windowactivate tested and confirmed working in: ion-3 and Gnome2 (metacity) 16 The rest of the new commands have only been tested in Gnome2. They do not 17 work in ion-3 due to lacking support for EWMH in ion. 18 * Rewrote the man page in perlpod format. 19 20 20080521: 21 * Import patches from keynav's xdotool branch (From Lukas Mai) which make 22 xdotool compile happily when building with -Wall and -pedantic (and others) 23 * Finally convert to using Window type for (hopefully) everything instead of 24 incorrectly typecasting Window to int sometimes. 25 * Confirmed that the one (but mostly useless) test passes. 4 26 5 27 20070903: -
trunk/xdotool/Makefile
r1070 r1079 1 CFLAGS+=-Wall 1 PREFIX=/usr/local 2 INSTALLBIN=/usr/local/bin 3 INSTALLMAN=/usr/local/man 4 5 WARNFLAGS+=-pedantic -Wall -W -Wno-missing-field-initializers -Wundef \ 6 -Wendif-labels -Wshadow -Wpointer-arith -Wbad-function-cast \ 7 -Wcast-align -Wwrite-strings -Wstrict-prototypes \ 8 -Wmissing-prototypes -Wnested-externs -Winline \ 9 -Wdisabled-optimization 10 11 CFLAGS=-pipe -std=c99 $(WARNFLAGS) 2 12 3 13 DEFAULT_LIBS=-L/usr/X11R6/lib -L/usr/local/lib -lX11 -lXtst … … 10 20 LDFLAGS+=$(LIBS) 11 21 12 all: xdotool 22 all: xdotool xdotool.1 23 24 install: installprog installman 25 26 installprog: xdotool 27 install -m 755 xdotool $(INSTALLBIN)/ 28 29 installman: xdotool.1 30 [ -d $(INSTALLMAN) ] || mkdir $(INSTALLMAN) 31 [ -d $(INSTALLMAN)/man1 ] || mkdir $(INSTALLMAN)/man1 32 install -m 644 xdotool.1 $(INSTALLMAN)/man1/ 33 34 deinstall: uninstall 35 uninstall: 36 rm -f $(INSTALLBIN)/xdotool 37 rm -f $(INSTALLMAN)/man1/xdotool.1 38 13 39 14 40 clean: … … 27 53 gcc $(CFLAGS) $(LDFLAGS) xdotool.o xdo.o -o $@ 28 54 55 xdotool.1: xdotool.pod 56 pod2man -c "" -r "" xdotool.pod > $@ 57 29 58 package: test-package-build create-package 30 59 31 create-package: 60 create-package: xdotool.1 32 61 @NAME=xdotool-`date +%Y%m%d`; \ 33 62 echo "Creating package: $$NAME"; \ 34 63 mkdir $${NAME}; \ 35 rsync --exclude .svn -a `ls -d *. c *.1 *.h examples t COPYRIGHTCHANGELIST README Makefile* 2> /dev/null` $${NAME}/; \64 rsync --exclude .svn -a `ls -d *.1 *.pod COPYRIGHT *.c *.h examples t CHANGELIST README Makefile* 2> /dev/null` $${NAME}/; \ 36 65 tar -zcf $${NAME}.tar.gz $${NAME}/; \ 37 66 rm -rf $${NAME}/ -
trunk/xdotool/README
r1062 r1079 31 31 See 'xwininfo' output for what each of these are/mean. 32 32 33 $Id: README 15 15 2007-08-12 23:22:01Z psionic $33 $Id: README 1520 2007-08-12 23:51:17Z psionic $ -
trunk/xdotool/debian/changelog
r1068 r1079 1 xdotool (20080601-1) UNRELEASED; urgency=low 2 3 * (NOT RELEASED YET) New upstream release 4 5 -- Daniel Kahn Gillmor <dkg-debian.org@fifthhorseman.net> Sun, 01 Jun 2008 23:23:27 -0400 6 1 7 xdotool (20071230-3) UNRELEASED; urgency=low 2 8 -
trunk/xdotool/examples/ffsp.sh
r1062 r1079 1 1 #!/bin/sh 2 # On my workstation, this switches to desktop 2, clears the search bar, pastes 3 # into the search bar, and presses enter. Hence searching for whatever lies in 4 # my X clipboard. 2 # Activate firefox and paste the clipboard contents into the url bar. 5 3 6 xdotool key "alt+2" 4 wid=`xdotool search --title "Mozilla Firefox"` 5 xdotool windowactivate $wid 6 sleep 0.2 7 7 xdotool key "ctrl+j" 8 8 xdotool key "BackSpace" 9 xdotool mousemove 600 35 10 xdotool click 2 9 xdotool key "ctrl+v" 11 10 xdotool key "Return" -
trunk/xdotool/t/no_crashes_please.sh
r1062 r1079 43 43 try $xdotool key "ctrl+w" 44 44 45 try $xdotool windowactivate $wid 46 47 try $xdotool get_num_desktops $wid 48 desktops=`$xdotool get_num_desktops $wid` 49 try $xdotool set_num_desktops $desktops 50 51 cur_desktop=`$xdotool get_desktop` 52 try $xdotool set_desktop $cur_desktop 53 54 desktop=`$xdotool get_desktop_for_window $wid` 55 try $xdotool set_desktop_for_window $wid $desktop 56 45 57 #pkill -f xdotool_test_window 46 58 kill $xterm_pid -
trunk/xdotool/xdo.c
r1069 r1079 1 1 /* xdo library 2 2 * 3 * $Id: xdo.c 1 538 2007-09-04 06:00:24Z psionic$3 * $Id: xdo.c 1878 2008-06-01 00:31:53Z jordansissel $ 4 4 * 5 5 * - getwindowfocus contributed by Lee Pumphret … … 8 8 */ 9 9 10 #define _XOPEN_SOURCE 500 10 11 #include <sys/select.h> 11 12 #include <stdlib.h> 12 13 #include <stdio.h> 13 14 #include <string.h> 15 #include <strings.h> 14 16 #include <unistd.h> 15 17 #include <regex.h> … … 38 40 static int _xdo_regex_match_window(xdo_t *xdo, Window window, int flags, regex_t *re); 39 41 static int _xdo_is_window_visible(xdo_t *xdo, Window wid); 42 static unsigned char * _xdo_getwinprop(xdo_t *xdo, Window window, Atom atom, 43 long *nitems, Atom *type, int *size); 44 static int _xdo_ewmh_is_supported(xdo_t *xdo, const char *feature); 40 45 41 46 static int _is_success(const char *funcname, int code); … … 55 60 } 56 61 57 xdo_t* xdo_new_with_opened_display(Display *xdpy, const char *display, 62 xdo_t* xdo_new_with_opened_display(Display *xdpy, const char *display, 58 63 int close_display_when_freed) { 59 64 xdo_t *xdo = NULL; … … 120 125 121 126 int ret, i; 127 int i; 122 128 123 129 ret = regcomp(&re, regex, REG_EXTENDED | REG_ICASE); … … 133 139 fprintf(stderr, "No text fields specified for regex search. \nDefaulting to" 134 140 " window title, class, and name searching\n"); 135 flags = SEARCH_TITLE | SEARCH_CLASS | SEARCH_NAME;141 flags |= SEARCH_TITLE | SEARCH_CLASS | SEARCH_NAME; 136 142 } 137 143 … … 139 145 *windowlist = malloc(matched_window_list_size * sizeof(Window)); 140 146 141 _xdo_get_child_windows(xdo, XDefaultRootWindow(xdo->xdpy),147 _xdo_get_child_windows(xdo, RootWindow(xdo->xdpy, 0), 142 148 &total_window_list, &ntotal_windows, 143 149 &window_list_size); … … 146 152 if (flags & SEARCH_VISIBLEONLY && !_xdo_is_window_visible(xdo, wid)) 147 153 continue; 148 149 154 if (!_xdo_regex_match_window(xdo, wid, flags, &re)) 150 155 continue; … … 217 222 } 218 223 224 int xdo_window_activate(xdo_t *xdo, Window wid) { 225 int ret; 226 long desktop = 0; 227 XEvent xev; 228 XWindowAttributes wattr; 229 230 /* If this window is on another desktop, let's go to that desktop first */ 231 232 if (_xdo_ewmh_is_supported(xdo, "_NET_WM_DESKTOP") == True 233 && _xdo_ewmh_is_supported(xdo, "_NET_CURRENT_DESKTOP") == True) { 234 xdo_get_desktop_for_window(xdo, wid, &desktop); 235 xdo_set_current_desktop(xdo, desktop); 236 } 237 238 memset(&xev, 0, sizeof(xev)); 239 xev.type = ClientMessage; 240 xev.xclient.display = xdo->xdpy; 241 xev.xclient.window = wid; 242 xev.xclient.message_type = XInternAtom(xdo->xdpy, "_NET_ACTIVE_WINDOW", False); 243 xev.xclient.format = 32; 244 xev.xclient.data.l[0] = 2L; /* 2 == Message from a window pager */ 245 xev.xclient.data.l[1] = CurrentTime; 246 247 XGetWindowAttributes(xdo->xdpy, wid, &wattr); 248 ret = XSendEvent(xdo->xdpy, wattr.screen->root, False, 249 SubstructureNotifyMask | SubstructureRedirectMask, 250 &xev); 251 252 /* XXX: XSendEvent returns 0 on conversion failure, nonzero otherwise. 253 * Manpage says it will only generate BadWindow or BadValue errors */ 254 return _is_success("XSendEvent[EWMH:_NET_ACTIVE_WINDOW]", ret); 255 } 256 257 int xdo_set_number_of_desktops(xdo_t *xdo, long ndesktops) { 258 /* XXX: This should support passing a screen number */ 259 XEvent xev; 260 Window root; 261 int ret; 262 263 root = RootWindow(xdo->xdpy, 0); 264 265 memset(&xev, 0, sizeof(xev)); 266 xev.type = ClientMessage; 267 xev.xclient.display = xdo->xdpy; 268 xev.xclient.window = root; 269 xev.xclient.message_type = XInternAtom(xdo->xdpy, "_NET_NUMBER_OF_DESKTOPS", 270 False); 271 xev.xclient.format = 32; 272 xev.xclient.data.l[0] = ndesktops; 273 274 ret = XSendEvent(xdo->xdpy, root, False, 275 SubstructureNotifyMask | SubstructureRedirectMask, 276 &xev); 277 278 return _is_success("XSendEvent[EWMH:_NET_NUMBER_OF_DESKTOPS]", ret); 279 } 280 281 int xdo_get_number_of_desktops(xdo_t *xdo, long *ndesktops) { 282 Atom type; 283 int size; 284 long nitems; 285 unsigned char *data; 286 Window root; 287 288 Atom request; 289 290 request = XInternAtom(xdo->xdpy, "_NET_NUMBER_OF_DESKTOPS", False); 291 root = XDefaultRootWindow(xdo->xdpy); 292 293 data = _xdo_getwinprop(xdo, root, request, &nitems, &type, &size); 294 295 if (nitems > 0) 296 *ndesktops = *((long*)data); 297 else 298 *ndesktops = 0; 299 300 return _is_success("XGetWindowProperty[_NET_NUMBER_OF_DESKTOPS]", 301 *ndesktops == 0); 302 303 } 304 305 int xdo_set_current_desktop(xdo_t *xdo, long desktop) { 306 /* XXX: This should support passing a screen number */ 307 XEvent xev; 308 Window root; 309 int ret; 310 311 root = RootWindow(xdo->xdpy, 0); 312 313 memset(&xev, 0, sizeof(xev)); 314 xev.type = ClientMessage; 315 xev.xclient.display = xdo->xdpy; 316 xev.xclient.window = root; 317 xev.xclient.message_type = XInternAtom(xdo->xdpy, "_NET_CURRENT_DESKTOP", 318 False); 319 xev.xclient.format = 32; 320 xev.xclient.data.l[0] = desktop; 321 xev.xclient.data.l[1] = CurrentTime; 322 323 ret = XSendEvent(xdo->xdpy, root, False, 324 SubstructureNotifyMask | SubstructureRedirectMask, 325 &xev); 326 327 return _is_success("XSendEvent[EWMH:_NET_CURRENT_DESKTOP]", ret); 328 } 329 330 int xdo_get_current_desktop(xdo_t *xdo, long *desktop) { 331 Atom type; 332 int size; 333 long nitems; 334 unsigned char *data; 335 Window root; 336 337 Atom request; 338 339 request = XInternAtom(xdo->xdpy, "_NET_CURRENT_DESKTOP", False); 340 root = XDefaultRootWindow(xdo->xdpy); 341 342 data = _xdo_getwinprop(xdo, root, request, &nitems, &type, &size); 343 344 if (nitems > 0) 345 *desktop = *((long*)data); 346 else 347 *desktop = -1; 348 349 return _is_success("XGetWindowProperty[_NET_CURRENT_DESKTOP]", 350 *desktop == -1); 351 } 352 353 int xdo_set_desktop_for_window(xdo_t *xdo, Window wid, long desktop) { 354 XEvent xev; 355 int ret; 356 XWindowAttributes wattr; 357 XGetWindowAttributes(xdo->xdpy, wid, &wattr); 358 359 memset(&xev, 0, sizeof(xev)); 360 xev.type = ClientMessage; 361 xev.xclient.display = xdo->xdpy; 362 xev.xclient.window = wid; 363 xev.xclient.message_type = XInternAtom(xdo->xdpy, "_NET_WM_DESKTOP", 364 False); 365 xev.xclient.format = 32; 366 xev.xclient.data.l[0] = desktop; 367 xev.xclient.data.l[1] = 2; /* indicate we are messaging from a pager */ 368 369 ret = XSendEvent(xdo->xdpy, wattr.screen->root, False, 370 SubstructureNotifyMask | SubstructureRedirectMask, 371 &xev); 372 373 return _is_success("XSendEvent[EWMH:_NET_WM_DESKTOP]", ret); 374 } 375 376 int xdo_get_desktop_for_window(xdo_t *xdo, Window wid, long *desktop) { 377 Atom type; 378 int size; 379 long nitems; 380 unsigned char *data; 381 382 Atom request; 383 384 request = XInternAtom(xdo->xdpy, "_NET_WM_DESKTOP", False); 385 386 data = _xdo_getwinprop(xdo, wid, request, &nitems, &type, &size); 387 388 if (nitems > 0) 389 *desktop = *((long*)data); 390 else 391 *desktop = -1; 392 393 return _is_success("XGetWindowProperty[_NET_WM_DESKTOP]", 394 *desktop == -1); 395 } 396 219 397 /* XRaiseWindow is ignored in ion3 and Gnome2. Is it even useful? */ 220 398 int xdo_window_raise(xdo_t *xdo, Window wid) { … … 295 473 uint nkeys; 296 474 uint i; 475 int i; 297 476 298 477 if (_xdo_keysequence_to_keycode_list(xdo, keyseq, &keys, &nkeys) == False) { … … 325 504 } 326 505 327 328 506 /* Add by Lee Pumphret 2007-07-28 329 507 * Modified slightly by Jordan Sissel */ … … 334 512 return _is_success("XGetInputFocus", ret); 335 513 } 336 337 514 338 515 /* Helper functions */ … … 391 568 * hence this little loop. */ 392 569 for (j = 0; j <= 1; j++) { 393 int i x = (i - xdo->keycode_low) * 2 + j;570 int idx = (i - xdo->keycode_low) * 2 + j; 394 571 keybuf = XKeysymToString(XKeycodeToKeysym(xdo->xdpy, i, j)); 395 572 396 xdo->charcodes[i x].key = _keysym_to_char(keybuf);397 xdo->charcodes[i x].code = i;398 xdo->charcodes[i x].shift = j ? shift_keycode : 0;573 xdo->charcodes[idx].key = _keysym_to_char(keybuf); 574 xdo->charcodes[idx].code = i; 575 xdo->charcodes[idx].shift = j ? shift_keycode : 0; 399 576 } 400 577 } … … 427 604 int *window_list_size) { 428 605 Window dummy; 606 <<<<<<< .working 429 607 uint i; 608 ======= 609 >>>>>>> .merge-right.r1078 430 610 Window *children; 431 unsigned int nchildren;611 unsigned int i, nchildren; 432 612 433 613 if (*window_list_size == 0) { … … 566 746 fprintf(stderr, "%s failed: got bad window\n", funcname); 567 747 return False; 748 } else if (code != 1) { 749 fprintf(stderr, "%s failed (code=%d)\n", funcname, code); 750 return False; 568 751 } 569 752 … … 581 764 } 582 765 583 /* main test */ 584 #ifdef BUILDMAIN 585 int main(int argc, char **argv) { 586 char *display_name; 587 xdo_t *xdo; 588 589 char *yay; 590 591 if ( (display_name = getenv("DISPLAY")) == (void *)NULL) { 592 fprintf(stderr, "Error: DISPLAY environment variable not set\n"); 593 exit(1); 594 } 595 766 /* Arbitrary window property retrieval 767 * slightly modified version from xprop.c from Xorg */ 768 unsigned char * _xdo_getwinprop(xdo_t *xdo, Window window, Atom atom, 769 long *nitems, Atom *type, int *size) { 770 Atom actual_type; 771 int actual_format; 772 unsigned long _nitems; 773 unsigned long nbytes; 774 unsigned long bytes_after; /* unused */ 775 unsigned char *prop; 776 int status; 777 778 status = XGetWindowProperty(xdo->xdpy, window, atom, 0, (~0L), 779 False, AnyPropertyType, &actual_type, 780 &actual_format, &_nitems, &bytes_after, 781 &prop); 782 if (status == BadWindow) { 783 fprintf(stderr, "window id # 0x%lx does not exists!", window); 784 return NULL; 785 } if (status != Success) { 786 fprintf(stderr, "XGetWindowProperty failed!"); 787 return NULL; 788 } 789 790 <<<<<<< .working 596 791 /* yay = strdup("ctrl+l"); */ 597 792 ======= 793 if (actual_format == 32) 794 nbytes = sizeof(long); 795 else if (actual_format == 16) 796 nbytes = sizeof(short); 797 else if (actual_format == 8) 798 nbytes = 1; 799 else if (actual_format == 0) 800 nbytes = 0; 801 >>>>>>> .merge-right.r1078 802 803 <<<<<<< .working 598 804 xdo = xdo_new(display_name); 599 805 /* xdo_mousemove(xdo, 100, 100); */ … … 602 808 /* xdo_type(xdo, strdup("ls")); */ 603 809 /* xdo_keysequence(xdo, strdup("Return")); */ 604 810 ======= 811 *nitems = _nitems; 812 *type = actual_type; 813 *size = actual_format; 814 return prop; 815 } 816 >>>>>>> .merge-right.r1078 817 818 int _xdo_ewmh_is_supported(xdo_t *xdo, const char *feature) { 819 Atom type = 0; 820 long nitems = 0L; 821 int size = 0; 822 Atom *results = NULL; 823 long i = 0; 824 825 Window root; 826 Atom request; 827 Atom feature_atom; 605 828 606 Window *list; 607 int nwindows; 608 char *query = "xterm"; 609 int i; 610 if (argc > 1) 611 query = argv[1]; 612 613 xdo_window_list_by_regex(xdo, query, &list, &nwindows); 614 for (i = 0; i < nwindows; i++) { 615 printf("%d\n", list[i]); 616 } 617 xdo_free(xdo); 618 619 return 0; 620 } 621 #endif 622 829 request = XInternAtom(xdo->xdpy, "_NET_SUPPORTED", False); 830 feature_atom = XInternAtom(xdo->xdpy, feature, False); 831 root = RootWindow(xdo->xdpy, 0); 832 833 results = (Atom *) _xdo_getwinprop(xdo, root, request, &nitems, &type, &size); 834 for (i = 0L; i < nitems; i++) { 835 if (results[i] == feature_atom) 836 return True; 837 } 838 839 return False; 840 } -
trunk/xdotool/xdo.h
r1069 r1079 3 3 * - include this if you have code that uses xdo 4 4 * 5 * $Id: xdo.h 1 538 2007-09-04 06:00:24Z psionic$5 * $Id: xdo.h 1876 2008-05-31 10:54:25Z jordansissel $ 6 6 */ 7 7 … … 13 13 #define SEARCH_NAME (1L << 3) 14 14 15 #define SEARCH_IGNORE_TRANSIENTS (1L << 4) 16 #define SEARCH_IGNORE_WINDOW_INPUTONLY (1L << 5) 17 15 18 #define SIZE_USEHINTS (1L << 0) 16 19 … … 18 21 typedef struct keysymcharmap { 19 22 const char *keysym; 20 c onst char key;23 char key; 21 24 } keysymcharmap_t; 22 25 … … 37 40 int close_display_when_freed; 38 41 } xdo_t; 39 40 42 41 43 xdo_t* xdo_new(char *display); … … 61 63 int xdo_window_raise(xdo_t *xdo, Window wid); 62 64 int xdo_window_get_focus(xdo_t *xdo, Window *window_ret); 65 int xdo_window_activate(xdo_t *xdo, Window wid); 63 66 64 67 int xdo_window_map(xdo_t *xdo, Window wid); 65 68 int xdo_window_unmap(xdo_t *xdo, Window wid); 66 69 70 /* pager-like behaviors */ 71 int xdo_set_number_of_desktops(xdo_t *xdo, long ndesktops); 72 int xdo_get_number_of_desktops(xdo_t *xdo, long *ndesktops); 73 int xdo_set_current_desktop(xdo_t *xdo, long desktop); 74 int xdo_get_current_desktop(xdo_t *xdo, long *desktop); 75 int xdo_set_desktop_for_window(xdo_t *xdo, Window wid, long desktop); 76 int xdo_get_desktop_for_window(xdo_t *xdo, Window wid, long *desktop); 77 67 78 /* Returns: windowlist and nwindows */ 68 79 void xdo_window_list_by_regex(xdo_t *xdo, char *regex, int flags, -
trunk/xdotool/xdo_util.h
r1068 r1079 1 1 /* xdo utility pieces 2 2 * 3 * $Id: xdo_util.h 1 487 2007-07-22 08:37:07Z psionic$3 * $Id: xdo_util.h 1854 2008-05-21 07:23:29Z jordansissel $ 4 4 */ 5 5 -
trunk/xdotool/xdotool.c
r1068 r1079 3 3 * command line interface to the xdo library 4 4 * 5 * $Id: xdotool.c 1 538 2007-09-04 06:00:24Z psionic$5 * $Id: xdotool.c 1880 2008-06-01 07:23:14Z jordansissel $ 6 6 * 7 7 * getwindowfocus contributed by Lee Pumphret … … 15 15 #include <getopt.h> 16 16 #include <string.h> 17 #include <strings.h> 18 17 19 18 20 #include "xdo.h" … … 28 30 void cmd_search(int argc, char **args); 29 31 void cmd_type(int argc, char **args); 32 void cmd_windowactivate(int argc, char **args); 30 33 void cmd_windowfocus(int argc, char **args); 31 void cmd_windowmap(int argc, char **args);32 34 void cmd_windowmap(int argc, char **args); 33 35 void cmd_windowmove(int argc, char **args); … … 35 37 void cmd_windowsize(int argc, char **args); 36 38 void cmd_windowunmap(int argc, char **args); 37 void cmd_windowunmap(int argc, char **args); 39 40 /* pager-like commands */ 41 void cmd_set_num_desktops(int argc, char **args); 42 void cmd_get_num_desktops(int argc, char **args); 43 void cmd_set_desktop(int argc, char **args); 44 void cmd_get_desktop(int argc, char **args); 45 void cmd_set_desktop_for_window(int argc, char **args); 46 void cmd_get_desktop_for_window(int argc, char **args); 38 47 39 48 xdo_t *xdo; 49 void window_print(Window wid); 40 50 41 51 struct dispatch { … … 47 57 { "search", cmd_search, }, 48 58 59 /* Help me! */ 49 60 { "help", cmd_help, }, 50 61 { "-h", cmd_help, }, … … 60 71 { "mouseup", cmd_mouseup, }, 61 72 { "type", cmd_type, }, 73 { "windowactivate", cmd_windowactivate, }, 62 74 { "windowfocus", cmd_windowfocus, }, 63 75 { "windowmap", cmd_windowmap, }, … … 66 78 { "windowsize", cmd_windowsize, }, 67 79 { "windowunmap", cmd_windowunmap, }, 80 81 { "set_num_desktops", cmd_set_num_desktops, }, 82 { "get_num_desktops", cmd_get_num_desktops, }, 83 { "set_desktop", cmd_set_desktop, }, 84 { "get_desktop", cmd_get_desktop, }, 85 { "set_desktop_for_window", cmd_set_desktop_for_window, }, 86 { "get_desktop_for_window", cmd_get_desktop_for_window, }, 68 87 { NULL, NULL, }, 69 88 }; … … 97 116 xdo_free(xdo); 98 117 return 0; 118 } 119 120 void window_print(Window wid) { 121 /* Window is XID is 'unsigned long' or CARD32 */ 122 printf("%ld\n", wid); 99 123 } 100 124 … … 114 138 void cmd_mousemove(int argc, char **args) { 115 139 int x, y; 116 char *cmd = *args; 117 argc -= 1; 118 args++; 140 char *cmd = *args; argc--; args++; 119 141 120 142 if (argc != 2) { … … 134 156 void cmd_mousemove_relative(int argc, char **args) { 135 157 int x, y; 136 char *cmd = *args; 137 argc -= 1; 138 args++; 158 char *cmd = *args; argc--; args++; 139 159 140 160 if (argc != 2) { … … 154 174 void cmd_mousedown(int argc, char **args) { 155 175 uint button; 156 char *cmd = *args; 157 argc -= 1; 158 args++; 176 char *cmd = *args; argc--; args++; 159 177 160 178 if (argc != 1) { … … 173 191 void cmd_mouseup(int argc, char **args) { 174 192 uint button; 175 char *cmd = *args; 176 argc -= 1; 177 args++; 193 char *cmd = *args; argc--; args++; 178 194 179 195 if (argc != 1) { … … 197 213 void cmd_type(int argc, char **args) { 198 214 int i; 199 char *cmd = *args; 200 argc -= 1; 201 args++; 215 char *cmd = *args; argc--; args++; 202 216 203 217 if (argc == 0) { … … 216 230 void cmd_key(int argc, char **args) { 217 231 int i; 218 char *cmd = *args; 219 int (*func)(xdo_t *, char *) = NULL; 220 221 argc -= 1; 222 args++; 232 char *cmd = *args; argc--; args++; 223 233 224 234 if (argc == 0) { … … 248 258 int x, y; 249 259 Window wid; 250 char *cmd = *args; 251 argc -= 1; 252 args++; 260 char *cmd = *args; argc--; args++; 253 261 254 262 if (argc != 3) { … … 257 265 } 258 266 259 wid = ( int)strtol(args[0], NULL, 0);267 wid = (Window)strtol(args[0], NULL, 0); 260 268 x = (int)strtol(args[1], NULL, 0); 261 269 y = (int)strtol(args[2], NULL, 0); … … 266 274 } 267 275 276 void cmd_windowactivate(int argc, char **args) { 277 Window wid; 278 char *cmd = *args; argc--; args++; 279 280 if (argc != 1) { 281 printf("usage: %s wid\n", cmd); 282 return; 283 } 284 285 wid = (Window)strtol(args[0], NULL, 0); 286 if (!xdo_window_activate(xdo, wid)) { 287 fprintf(stderr, "xdo_window_activate reported an error\n"); 288 return; 289 } 290 291 } 292 268 293 void cmd_windowfocus(int argc, char **args) { 269 294 Window wid; 270 char *cmd = *args; 271 argc -= 1; 272 args++; 295 char *cmd = *args; argc--; args++; 273 296 274 297 if (argc != 1) { … … 277 300 } 278 301 279 wid = ( int)strtol(args[0], NULL, 0);302 wid = (Window)strtol(args[0], NULL, 0); 280 303 if (!xdo_window_focus(xdo, wid)) { 281 304 fprintf(stderr, "xdo_window_focus reported an error\n"); … … 285 308 void cmd_windowraise(int argc, char **args) { 286 309 Window wid; 287 char *cmd = *args; 288 argc -= 1; 289 args++; 310 char *cmd = *args; argc--; args++; 290 311 291 312 if (argc != 1) { … … 294 315 } 295 316 296 wid = ( int)strtol(args[0], NULL, 0);317 wid = (Window)strtol(args[0], NULL, 0); 297 318 if (!xdo_window_raise(xdo, wid)) { 298 319 fprintf(stderr, "xdo_window_raise reported an error\n"); … … 334 355 } 335 356 336 wid = ( int)strtol(args[0], NULL, 0);357 wid = (Window)strtol(args[0], NULL, 0); 337 358 width = (int)strtol(args[1], NULL, 0); 338 359 height = (int)strtol(args[2], NULL, 0); … … 402 423 403 424 xdo_window_list_by_regex(xdo, *args, search_flags, &list, &nwindows); 404 /* XXX: We shouldn't assume 'Window' == 'int' here... */405 425 for (i = 0; i < nwindows; i++) 406 printf("%d\n", (int)list[i]);426 window_print(list[i]); 407 427 408 428 /* Free list as it's malloc'd by xdo_window_list_by_regex */ … … 412 432 /* Added 2007-07-28 - Lee Pumphret */ 413 433 void cmd_getwindowfocus(int argc, char **args) { 414 Window window = (Window)(-1); 415 char *cmd = *args; 416 argc -= 1; 417 args++; 434 Window wid = 0; 435 char *cmd = *args; argc--; args++; 418 436 419 437 if (argc != 0) { … … 422 440 } 423 441 424 if (!xdo_window_get_focus(xdo, &wi ndow)) {442 if (!xdo_window_get_focus(xdo, &wid)) { 425 443 fprintf(stderr, "xdo_window_focus reported an error\n"); 426 444 } else { 427 printf("%d\n", (int)window);445 window_print(wid); 428 446 } 429 447 } … … 431 449 void cmd_windowmap(int argc, char **args) { 432 450 Window wid; 433 char *cmd = *args; 434 argc -= 1; 435 args++; 451 char *cmd = *args; argc--; args++; 436 452 437 453 if (argc != 1) { … … 440 456 } 441 457 442 wid = ( int)strtol(args[0], NULL, 0);458 wid = (Window)strtol(args[0], NULL, 0); 443 459 if (!xdo_window_map(xdo, wid)) { 444 460 fprintf(stderr, "xdo_window_map reported an error\n"); … … 448 464 void cmd_windowunmap(int argc, char **args) { 449 465 Window wid; 450 char *cmd = *args; 451 argc -= 1; 452 args++; 466 char *cmd = *args; argc--; args++; 453 467 454 468 if (argc != 1) { … … 457 471 } 458 472 459 wid = ( int)strtol(args[0], NULL, 0);473 wid = (Window)strtol(args[0], NULL, 0); 460 474 if (!xdo_window_unmap(xdo, wid)) { 461 475 fprintf(stderr, "xdo_window_unmap reported an error\n"); 462 476 } 463 477 } 478 479 void cmd_set_num_desktops(int argc, char **args) { 480 char *cmd = *args; argc--; args++; 481 long ndesktops; 482 483 if (argc != 1) { 484 printf("usage: %s num_desktops\n", cmd); 485 return; 486 } 487 488 ndesktops = strtol(args[0], NULL, 0); 489 490 xdo_set_number_of_desktops(xdo, ndesktops); 491 } 492 493 void cmd_get_num_desktops(int argc, char **args) { 494 char *cmd = *args; argc--; args++; 495 long ndesktops = 0; 496 497 if (argc != 0) { 498 printf("usage: %s\n", cmd); 499 return; 500 } 501 502 xdo_get_number_of_desktops(xdo, &ndesktops); 503 504 printf("%ld\n", ndesktops); 505 } 506 507 void cmd_set_desktop(int argc, char **args) { 508 char *cmd = *args; argc--; args++; 509 long desktop; 510 511 if (argc != 1) { 512 printf("usage: %s desktop\n", cmd); 513 return; 514 } 515 516 desktop = strtol(args[0], NULL, 0); 517 518 xdo_set_current_desktop(xdo, desktop); 519 } 520 521 void cmd_get_desktop(int argc, char **args) { 522 char *cmd = *args; argc--; args++; 523 long desktop = 0; 524 525 if (argc != 0) { 526 printf("usage: %s\n", cmd); 527 return; 528 } 529 530 xdo_get_current_desktop(xdo, &desktop); 531 532 printf("%ld\n", desktop); 533 } 534 535 void cmd_set_desktop_for_window(int argc, char **args) { 536 char *cmd = *args; argc--; args++; 537 long desktop = 0; 538 Window window = 0; 539 540 if (argc != 2) { 541 printf("usage: %s <window> <desktop>\n", cmd); 542 return; 543 } 544 545 window = (Window)strtol(args[0], NULL, 0); 546 desktop = strtol(args[1], NULL, 0); 547 548 xdo_set_desktop_for_window(xdo, window, desktop); 549 } 550 551 void cmd_get_desktop_for_window(int argc, char **args) { 552 char *cmd = *args; argc--; args++; 553 long desktop = 0; 554 Window window = 0; 555 556 if (argc != 1) { 557 printf("usage: %s <window>\n", cmd); 558 return; 559 } 560 561 window = (Window)strtol(args[0], NULL, 0); 562 563 xdo_get_desktop_for_window(xdo, window, &desktop); 564 printf("%ld\n", desktop); 565 }
Note: See TracChangeset
for help on using the changeset viewer.

