Changeset 1079


Ignore:
Timestamp:
Jun 1, 2008 11:30:36 PM (5 years ago)
Author:
dkg
Message:

xdotool: committing local changes after upstream update to 20080601

Location:
trunk/xdotool
Files:
10 edited
3 copied

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. 
     120080601: 
     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 
     2020080521: 
     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. 
    426 
    52720070903: 
  • trunk/xdotool/Makefile

    r1070 r1079  
    1 CFLAGS+=-Wall 
     1PREFIX=/usr/local 
     2INSTALLBIN=/usr/local/bin 
     3INSTALLMAN=/usr/local/man 
     4 
     5WARNFLAGS+=-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 
     11CFLAGS=-pipe -std=c99 $(WARNFLAGS) 
    212 
    313DEFAULT_LIBS=-L/usr/X11R6/lib -L/usr/local/lib -lX11 -lXtst 
     
    1020LDFLAGS+=$(LIBS) 
    1121 
    12 all: xdotool 
     22all: xdotool xdotool.1 
     23 
     24install: installprog installman 
     25 
     26installprog: xdotool 
     27        install -m 755 xdotool $(INSTALLBIN)/ 
     28 
     29installman: xdotool.1 
     30        [ -d $(INSTALLMAN) ] || mkdir $(INSTALLMAN) 
     31        [ -d $(INSTALLMAN)/man1 ] || mkdir $(INSTALLMAN)/man1 
     32        install -m 644 xdotool.1 $(INSTALLMAN)/man1/ 
     33 
     34deinstall: uninstall 
     35uninstall:  
     36        rm -f $(INSTALLBIN)/xdotool 
     37        rm -f $(INSTALLMAN)/man1/xdotool.1 
     38 
    1339 
    1440clean: 
     
    2753        gcc $(CFLAGS) $(LDFLAGS) xdotool.o xdo.o -o $@ 
    2854 
     55xdotool.1: xdotool.pod 
     56        pod2man -c "" -r "" xdotool.pod > $@ 
     57 
    2958package: test-package-build create-package 
    3059 
    31 create-package: 
     60create-package: xdotool.1 
    3261        @NAME=xdotool-`date +%Y%m%d`; \ 
    3362        echo "Creating package: $$NAME"; \ 
    3463        mkdir $${NAME}; \ 
    35         rsync --exclude .svn -a `ls -d *.c *.1 *.h examples t COPYRIGHT CHANGELIST 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}/; \ 
    3665        tar -zcf $${NAME}.tar.gz $${NAME}/; \ 
    3766        rm -rf $${NAME}/ 
  • trunk/xdotool/README

    r1062 r1079  
    3131      See 'xwininfo' output for what each of these are/mean. 
    3232 
    33 $Id: README 1515 2007-08-12 23:22:01Z psionic $  
     33$Id: README 1520 2007-08-12 23:51:17Z psionic $  
  • trunk/xdotool/debian/changelog

    r1068 r1079  
     1xdotool (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 
    17xdotool (20071230-3) UNRELEASED; urgency=low 
    28 
  • trunk/xdotool/examples/ffsp.sh

    r1062 r1079  
    11#!/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. 
    53 
    6 xdotool key "alt+2" 
     4wid=`xdotool search --title "Mozilla Firefox"` 
     5xdotool windowactivate $wid 
     6sleep 0.2 
    77xdotool key "ctrl+j" 
    88xdotool key "BackSpace" 
    9 xdotool mousemove 600 35 
    10 xdotool click 2 
     9xdotool key "ctrl+v" 
    1110xdotool key "Return" 
  • trunk/xdotool/t/no_crashes_please.sh

    r1062 r1079  
    4343try $xdotool key "ctrl+w" 
    4444 
     45try $xdotool windowactivate $wid 
     46 
     47try $xdotool get_num_desktops $wid 
     48desktops=`$xdotool get_num_desktops $wid` 
     49try $xdotool set_num_desktops $desktops 
     50 
     51cur_desktop=`$xdotool get_desktop` 
     52try $xdotool set_desktop $cur_desktop 
     53 
     54desktop=`$xdotool get_desktop_for_window $wid` 
     55try $xdotool set_desktop_for_window $wid $desktop 
     56 
    4557#pkill -f xdotool_test_window 
    4658kill $xterm_pid 
  • trunk/xdotool/xdo.c

    r1069 r1079  
    11/* xdo library 
    22 * 
    3  * $Id: xdo.c 1538 2007-09-04 06:00:24Z psionic $ 
     3 * $Id: xdo.c 1878 2008-06-01 00:31:53Z jordansissel $ 
    44 * 
    55 * - getwindowfocus contributed by Lee Pumphret 
     
    88 */ 
    99 
     10#define _XOPEN_SOURCE 500 
    1011#include <sys/select.h> 
    1112#include <stdlib.h> 
    1213#include <stdio.h> 
    1314#include <string.h> 
     15#include <strings.h> 
    1416#include <unistd.h> 
    1517#include <regex.h> 
     
    3840static int _xdo_regex_match_window(xdo_t *xdo, Window window, int flags, regex_t *re); 
    3941static int _xdo_is_window_visible(xdo_t *xdo, Window wid); 
     42static unsigned char * _xdo_getwinprop(xdo_t *xdo, Window window, Atom atom, 
     43                                       long *nitems, Atom *type, int *size); 
     44static int _xdo_ewmh_is_supported(xdo_t *xdo, const char *feature); 
    4045 
    4146static int _is_success(const char *funcname, int code); 
     
    5560} 
    5661 
    57 xdo_t* xdo_new_with_opened_display(Display *xdpy, const char *display,  
     62xdo_t* xdo_new_with_opened_display(Display *xdpy, const char *display, 
    5863                                   int close_display_when_freed) { 
    5964  xdo_t *xdo = NULL; 
     
    120125 
    121126  int ret, i; 
     127  int i; 
    122128 
    123129  ret = regcomp(&re, regex, REG_EXTENDED | REG_ICASE); 
     
    133139    fprintf(stderr, "No text fields specified for regex search. \nDefaulting to" 
    134140            " window title, class, and name searching\n"); 
    135     flags = SEARCH_TITLE | SEARCH_CLASS | SEARCH_NAME; 
     141    flags |= SEARCH_TITLE | SEARCH_CLASS | SEARCH_NAME; 
    136142  } 
    137143 
     
    139145  *windowlist = malloc(matched_window_list_size * sizeof(Window)); 
    140146 
    141   _xdo_get_child_windows(xdo, XDefaultRootWindow(xdo->xdpy),  
     147  _xdo_get_child_windows(xdo, RootWindow(xdo->xdpy, 0), 
    142148                         &total_window_list, &ntotal_windows, 
    143149                         &window_list_size); 
     
    146152    if (flags & SEARCH_VISIBLEONLY && !_xdo_is_window_visible(xdo, wid)) 
    147153      continue; 
    148  
    149154    if (!_xdo_regex_match_window(xdo, wid, flags, &re)) 
    150155      continue; 
     
    217222} 
    218223 
     224int 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 
     257int 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 
     281int 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 
     305int 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 
     330int 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 
     353int 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 
     376int 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 
    219397/* XRaiseWindow is ignored in ion3 and Gnome2. Is it even useful? */ 
    220398int xdo_window_raise(xdo_t *xdo, Window wid) { 
     
    295473  uint nkeys; 
    296474  uint i; 
     475  int i; 
    297476 
    298477  if (_xdo_keysequence_to_keycode_list(xdo, keyseq, &keys, &nkeys) == False) { 
     
    325504} 
    326505 
    327  
    328506/* Add by Lee Pumphret 2007-07-28 
    329507 * Modified slightly by Jordan Sissel */ 
     
    334512  return _is_success("XGetInputFocus", ret); 
    335513} 
    336  
    337514 
    338515/* Helper functions */ 
     
    391568     * hence this little loop. */ 
    392569    for (j = 0; j <= 1; j++) {  
    393      int ix = (i - xdo->keycode_low) * 2 + j; 
     570     int idx = (i - xdo->keycode_low) * 2 + j; 
    394571     keybuf = XKeysymToString(XKeycodeToKeysym(xdo->xdpy, i, j)); 
    395572 
    396      xdo->charcodes[ix].key = _keysym_to_char(keybuf); 
    397      xdo->charcodes[ix].code = i; 
    398      xdo->charcodes[ix].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; 
    399576    } 
    400577  } 
     
    427604                                   int *window_list_size) { 
    428605  Window dummy; 
     606<<<<<<< .working 
    429607  uint i; 
     608======= 
     609>>>>>>> .merge-right.r1078 
    430610  Window *children; 
    431   unsigned int nchildren; 
     611  unsigned int i, nchildren; 
    432612 
    433613  if (*window_list_size == 0) { 
     
    566746    fprintf(stderr, "%s failed: got bad window\n", funcname); 
    567747    return False; 
     748  } else if (code != 1) { 
     749    fprintf(stderr, "%s failed (code=%d)\n", funcname, code); 
     750    return False; 
    568751  } 
    569752 
     
    581764} 
    582765 
    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 */ 
     768unsigned 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 
    596791  /* 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 
    598804  xdo = xdo_new(display_name); 
    599805/*   xdo_mousemove(xdo, 100, 100); */ 
     
    602808/*   xdo_type(xdo, strdup("ls")); */ 
    603809/*   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 
     818int _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; 
    605828   
    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  
    33 * - include this if you have code that uses xdo 
    44 * 
    5  * $Id: xdo.h 1538 2007-09-04 06:00:24Z psionic $ 
     5 * $Id: xdo.h 1876 2008-05-31 10:54:25Z jordansissel $ 
    66 */ 
    77 
     
    1313#define SEARCH_NAME (1L << 3) 
    1414 
     15#define SEARCH_IGNORE_TRANSIENTS (1L << 4) 
     16#define SEARCH_IGNORE_WINDOW_INPUTONLY (1L << 5) 
     17 
    1518#define SIZE_USEHINTS (1L << 0) 
    1619 
     
    1821typedef struct keysymcharmap { 
    1922  const char *keysym; 
    20   const char key; 
     23  char key; 
    2124} keysymcharmap_t; 
    2225 
     
    3740  int close_display_when_freed; 
    3841} xdo_t; 
    39  
    4042 
    4143xdo_t* xdo_new(char *display); 
     
    6163int xdo_window_raise(xdo_t *xdo, Window wid); 
    6264int xdo_window_get_focus(xdo_t *xdo, Window *window_ret); 
     65int xdo_window_activate(xdo_t *xdo, Window wid); 
    6366 
    6467int xdo_window_map(xdo_t *xdo, Window wid); 
    6568int xdo_window_unmap(xdo_t *xdo, Window wid); 
    6669 
     70/* pager-like behaviors */ 
     71int xdo_set_number_of_desktops(xdo_t *xdo, long ndesktops); 
     72int xdo_get_number_of_desktops(xdo_t *xdo, long *ndesktops); 
     73int xdo_set_current_desktop(xdo_t *xdo, long desktop); 
     74int xdo_get_current_desktop(xdo_t *xdo, long *desktop); 
     75int xdo_set_desktop_for_window(xdo_t *xdo, Window wid, long desktop); 
     76int xdo_get_desktop_for_window(xdo_t *xdo, Window wid, long *desktop); 
     77 
    6778/* Returns: windowlist and nwindows */ 
    6879void xdo_window_list_by_regex(xdo_t *xdo, char *regex, int flags, 
  • trunk/xdotool/xdo_util.h

    r1068 r1079  
    11/* xdo utility pieces  
    22 * 
    3  * $Id: xdo_util.h 1487 2007-07-22 08:37:07Z psionic $ 
     3 * $Id: xdo_util.h 1854 2008-05-21 07:23:29Z jordansissel $ 
    44 */ 
    55 
  • trunk/xdotool/xdotool.c

    r1068 r1079  
    33 * command line interface to the xdo library 
    44 * 
    5  * $Id: xdotool.c 1538 2007-09-04 06:00:24Z psionic $ 
     5 * $Id: xdotool.c 1880 2008-06-01 07:23:14Z jordansissel $ 
    66 * 
    77 * getwindowfocus contributed by Lee Pumphret 
     
    1515#include <getopt.h> 
    1616#include <string.h> 
     17#include <strings.h> 
     18 
    1719 
    1820#include "xdo.h" 
     
    2830void cmd_search(int argc, char **args); 
    2931void cmd_type(int argc, char **args); 
     32void cmd_windowactivate(int argc, char **args); 
    3033void cmd_windowfocus(int argc, char **args); 
    31 void cmd_windowmap(int argc, char **args); 
    3234void cmd_windowmap(int argc, char **args); 
    3335void cmd_windowmove(int argc, char **args); 
     
    3537void cmd_windowsize(int argc, char **args); 
    3638void cmd_windowunmap(int argc, char **args); 
    37 void cmd_windowunmap(int argc, char **args); 
     39 
     40/* pager-like commands */ 
     41void cmd_set_num_desktops(int argc, char **args); 
     42void cmd_get_num_desktops(int argc, char **args); 
     43void cmd_set_desktop(int argc, char **args); 
     44void cmd_get_desktop(int argc, char **args); 
     45void cmd_set_desktop_for_window(int argc, char **args); 
     46void cmd_get_desktop_for_window(int argc, char **args); 
    3847 
    3948xdo_t *xdo; 
     49void window_print(Window wid); 
    4050 
    4151struct dispatch { 
     
    4757  { "search", cmd_search, }, 
    4858 
     59  /* Help me! */ 
    4960  { "help", cmd_help, }, 
    5061  { "-h", cmd_help, }, 
     
    6071  { "mouseup", cmd_mouseup, }, 
    6172  { "type", cmd_type, }, 
     73  { "windowactivate", cmd_windowactivate, }, 
    6274  { "windowfocus", cmd_windowfocus, }, 
    6375  { "windowmap", cmd_windowmap, }, 
     
    6678  { "windowsize", cmd_windowsize, }, 
    6779  { "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, }, 
    6887  { NULL, NULL, }, 
    6988}; 
     
    97116  xdo_free(xdo); 
    98117  return 0; 
     118} 
     119 
     120void window_print(Window wid) { 
     121  /* Window is XID is 'unsigned long' or CARD32 */ 
     122  printf("%ld\n", wid); 
    99123} 
    100124 
     
    114138void cmd_mousemove(int argc, char **args) { 
    115139  int x, y; 
    116   char *cmd = *args; 
    117   argc -= 1; 
    118   args++; 
     140  char *cmd = *args; argc--; args++; 
    119141 
    120142  if (argc != 2) { 
     
    134156void cmd_mousemove_relative(int argc, char **args) { 
    135157  int x, y; 
    136   char *cmd = *args; 
    137   argc -= 1; 
    138   args++; 
     158  char *cmd = *args; argc--; args++; 
    139159 
    140160  if (argc != 2) { 
     
    154174void cmd_mousedown(int argc, char **args) { 
    155175  uint button; 
    156   char *cmd = *args; 
    157   argc -= 1; 
    158   args++; 
     176  char *cmd = *args; argc--; args++; 
    159177 
    160178  if (argc != 1) { 
     
    173191void cmd_mouseup(int argc, char **args) { 
    174192  uint button; 
    175   char *cmd = *args; 
    176   argc -= 1; 
    177   args++; 
     193  char *cmd = *args; argc--; args++; 
    178194 
    179195  if (argc != 1) { 
     
    197213void cmd_type(int argc, char **args) { 
    198214  int i; 
    199   char *cmd = *args; 
    200   argc -= 1; 
    201   args++; 
     215  char *cmd = *args; argc--; args++; 
    202216 
    203217  if (argc == 0) { 
     
    216230void cmd_key(int argc, char **args) { 
    217231  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++; 
    223233 
    224234  if (argc == 0) { 
     
    248258  int x, y; 
    249259  Window wid; 
    250   char *cmd = *args; 
    251   argc -= 1; 
    252   args++; 
     260  char *cmd = *args; argc--; args++; 
    253261 
    254262  if (argc != 3) { 
     
    257265  } 
    258266 
    259   wid = (int)strtol(args[0], NULL, 0); 
     267  wid = (Window)strtol(args[0], NULL, 0); 
    260268  x = (int)strtol(args[1], NULL, 0); 
    261269  y = (int)strtol(args[2], NULL, 0); 
     
    266274} 
    267275 
     276void 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 
    268293void cmd_windowfocus(int argc, char **args) { 
    269294  Window wid; 
    270   char *cmd = *args; 
    271   argc -= 1; 
    272   args++; 
     295  char *cmd = *args; argc--; args++; 
    273296 
    274297  if (argc != 1) { 
     
    277300  } 
    278301 
    279   wid = (int)strtol(args[0], NULL, 0); 
     302  wid = (Window)strtol(args[0], NULL, 0); 
    280303  if (!xdo_window_focus(xdo, wid)) { 
    281304    fprintf(stderr, "xdo_window_focus reported an error\n"); 
     
    285308void cmd_windowraise(int argc, char **args) { 
    286309  Window wid; 
    287   char *cmd = *args; 
    288   argc -= 1; 
    289   args++; 
     310  char *cmd = *args; argc--; args++; 
    290311 
    291312  if (argc != 1) { 
     
    294315  } 
    295316 
    296   wid = (int)strtol(args[0], NULL, 0); 
     317  wid = (Window)strtol(args[0], NULL, 0); 
    297318  if (!xdo_window_raise(xdo, wid)) { 
    298319    fprintf(stderr, "xdo_window_raise reported an error\n"); 
     
    334355  } 
    335356 
    336   wid = (int)strtol(args[0], NULL, 0); 
     357  wid = (Window)strtol(args[0], NULL, 0); 
    337358  width = (int)strtol(args[1], NULL, 0); 
    338359  height = (int)strtol(args[2], NULL, 0); 
     
    402423 
    403424  xdo_window_list_by_regex(xdo, *args, search_flags, &list, &nwindows); 
    404   /* XXX: We shouldn't assume 'Window' == 'int' here... */ 
    405425  for (i = 0; i < nwindows; i++) 
    406     printf("%d\n", (int)list[i]); 
     426    window_print(list[i]); 
    407427 
    408428  /* Free list as it's malloc'd by xdo_window_list_by_regex */ 
     
    412432/* Added 2007-07-28 - Lee Pumphret */ 
    413433void 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++; 
    418436 
    419437  if (argc != 0) { 
     
    422440  } 
    423441 
    424   if (!xdo_window_get_focus(xdo, &window)) { 
     442  if (!xdo_window_get_focus(xdo, &wid)) { 
    425443    fprintf(stderr, "xdo_window_focus reported an error\n"); 
    426444  } else { 
    427     printf("%d\n", (int)window); 
     445    window_print(wid); 
    428446  } 
    429447} 
     
    431449void cmd_windowmap(int argc, char **args) { 
    432450  Window wid; 
    433   char *cmd = *args; 
    434   argc -= 1; 
    435   args++; 
     451  char *cmd = *args; argc--; args++; 
    436452 
    437453  if (argc != 1) { 
     
    440456  } 
    441457 
    442   wid = (int)strtol(args[0], NULL, 0); 
     458  wid = (Window)strtol(args[0], NULL, 0); 
    443459  if (!xdo_window_map(xdo, wid)) { 
    444460    fprintf(stderr, "xdo_window_map reported an error\n"); 
     
    448464void cmd_windowunmap(int argc, char **args) { 
    449465  Window wid; 
    450   char *cmd = *args; 
    451   argc -= 1; 
    452   args++; 
     466  char *cmd = *args; argc--; args++; 
    453467 
    454468  if (argc != 1) { 
     
    457471  } 
    458472 
    459   wid = (int)strtol(args[0], NULL, 0); 
     473  wid = (Window)strtol(args[0], NULL, 0); 
    460474  if (!xdo_window_unmap(xdo, wid)) { 
    461475    fprintf(stderr, "xdo_window_unmap reported an error\n"); 
    462476  } 
    463477} 
     478 
     479void 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 
     493void 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 
     507void 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 
     521void 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 
     535void 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 
     551void 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.