diff options
-rw-r--r-- | ChangeLog | 851 | ||||
-rw-r--r-- | NEWS | 4 | ||||
-rw-r--r-- | doc/Makefile.am | 2 | ||||
-rw-r--r-- | doc/ipaq.ratpoisonrc | 33 | ||||
-rw-r--r-- | doc/ratpoison.texi | 4 | ||||
-rw-r--r-- | doc/sample.ratpoisonrc | 22 | ||||
-rw-r--r-- | src/ChangeLog | 766 | ||||
-rw-r--r-- | src/actions.c | 33 | ||||
-rw-r--r-- | src/data.h | 12 | ||||
-rw-r--r-- | src/events.c | 27 | ||||
-rw-r--r-- | src/events.h | 2 | ||||
-rw-r--r-- | src/input.c | 231 | ||||
-rw-r--r-- | src/input.h | 5 | ||||
-rw-r--r-- | src/main.c | 12 |
14 files changed, 1157 insertions, 847 deletions
@@ -1,3 +1,106 @@ +2001-03-07 shawn <sabetts@diggin.lamenet.tmp> + + * doc/Makefile.am (EXTRA_DIST): Added sample.ratpoisonrc and + ipaq.ratpoisonrc + +2001-03-07 Ryan Yeske <rcyeske@cut.hotdog.tmp> + + * doc/ipaq.ratpoisonrc: New file. + +2001-03-07 Ryan Yeske <rcyeske@cut.hotdog.tmp> + + * actions.c (string_to_keysym): New function. + (parse_keydesc): Call string_to_keysym. + + * main.c (read_startup_files): Use PRINT_DEBUG to report failure + to load rc files. + + * main.c (read_rc_file): Check for comment character '#' in first + column. + (read_rc_file): Fix typo that was resulting in exhausting virtual + memory when parsing rc files. + +2001-03-06 shawn <sabetts@diggin.lamenet.tmp> + + * input.c (init_modifier_map): rp_modifier_info masks are or'd + with existing value. + (init_modifier_map): Resolves alt-meta conficts just like emacs. + (cook_keycode): returns a KeySym string. Updated Dependant code. + (read_key): likewise + (get_more_input): copies the KeySym string passed back from + read_key into the input buffer. + + * data.h (struct modifier_info): commented out + mode_switch_mask. Dependant code commented out. + + * actions.c (cmd_select): the search is not carried out on empty + strings. + + * events.c (configure_request): Handles restacking requests. + + * main.c: removed rp_mode_switch and rp_numlock. Added + rp_modifier_info global. + (main): calls init_modifier_map. + (init_screen): windows no longer select on KeyRelease and + KeymapState events. + + * input.h (init_modifier_map): new prototype + + * input.c (init_modifier_map): new function + (cook_keycode): uses rp_modifier_info to get Mode_switch modifier + mask. + (read_key): only listens for key presses. + + * events.c (keymap_state): removed function + (key_release): likewise + (delegate_event): removed case for KeymapNotify. + + * data.h (struct modifier_info): added mode_switch_mask, removed + shift_lock_mask. removed rp_mode_switch, and + rp_numlock. dependant code updated. + +2001-03-05 shawn <sabetts@diggin.lamenet.tmp> + + * configure.in: bumped version to 0.1.1-cvs + +2001-03-05 Ryan Yeske <rcyeske@cut.hotdog.tmp> + + * actions.c: remove silly C,M,A,S,H #defines and propagate + changes. + + * bar.c (update_window_names): Print a '+' for the last accessed + window. + +2001-03-05 shawn <sabetts@diggin.lamenet.tmp> + + * events.c (key_press): set rp_mode_switch to 0 before processing + the key. + + * main.c: new globals rp_mode_switch, rp_numlock. + (init_screen): selects on KeyRelease events for the root window, + input_window, and key_window. + (init_screen): selects on KeymapState events for input_window and + key_window. + + * input.c (cook_keycode): Handles Mode_switch (aka AltGr). + (read_key): listens for KeyRelease and KeymapState events. + (read_key): updates rp_mode_switch status + + * events.h (keymap_state): new prototype + + * events.c (keymap_state): new function + (key_release): new function + (key_press): uses cook_keycode to get the event's keysym. + (key_press): updates rp_mode_switch status + (delegate_event): handles KeymapNotify events. + + * data.h (struct modifier_info): new struct + new globals rp_mode_switch and rp_numlock. + +2001-03-04 shawn <sabetts@diggin.lamenet.tmp> + + * configure.in: bumbped version number to 0.1.0 + 2001-03-04 Gergely Nagy <8@free.bsd.hu> * debian/changelog: bumped version number to 0.1.0 @@ -8,6 +111,17 @@ * doc/ratpoison.1: some indentitation fixes, removed the note that upstream doesn't have a manpage, because it has +2001-03-03 Ryan Yeske <rcyeske@cut.hotdog.tmp> + + * actions.c (cmd_bind): Do not pollute the message bar with + chatter about the keybinding. + +2001-03-03 shawn <sabetts@livingston> + + * manage.c (maximize_normal): windows with resize increments + resize properly when their original size is > the screen size. + (maximize_transient): likewise + 2001-03-02 shawn <sabetts@diggin.lamenet.tmp> * configure.in: adds -g to CFLAGS when debugging is turned on. @@ -25,33 +139,346 @@ * man/ratpoison.1: added changes from texinfo docs. +2001-03-02 shawn <sabetts@diggin.lamenet.tmp> + + * main.c (print_version): updated copyright notice. + + * actions.c (initialize_default_keybindings): removed emacs + binding. + 2001-03-01 shawn <sabetts@diggin.lamenet.tmp> * doc/ratpoison.texi (Commands): filled in remaining commands and keys. +2001-03-01 Ryan Yeske <rcyeske@cut.hotdog.tmp> + + * ratpoison.h (xmalloc, xrealloc, fatal): Prototype. + + * main.c (xmalloc): Move here from sbuf.c. + (xrealloc): Likewise. + (fatal): Likewise. + + * number.c (find_empty_cell): Use xrealloc, remove error check. + (init_numbers): Likewise. + + * manage.c (get_window_name): Likewise. + + * main.c (main): Likewise. + + * list.c (add_to_window_list): Likewise. + (add_to_window_list): Likewise. + + * events.c (handle_key): Likewise. + + * input.c (keysym_to_string): Likewise. + (get_more_input): Use xrealloc, remove error check. + + * actions.c (cmd_source): Open the file. Error report as + appropriate. + (cmd_windows): Call current_screen() to find the current screen. + (cmd_clock): Show the clock even if no windows are open. + (cmd_clock): Use xmalloc, remove error check. + (initialize_default_keybindings): Use xmalloc. + (cmd_bind): Use xmalloc. + (cmd_rename): Use xmalloc, remove error check. + (add_keybinding): Use xrealloc. + (replace_keybinding): Use xrealloc. + + * main.c (read_rc_file): Take a file pointer rather than a + filename. + (read_startup_files): If ~/.ratpoisonrc is not readable try + /etc/ratpoisonrc. + + * actions.c: Use PRINT_DEBUG instead of fprintf. Put useful error + text in calls to message(). + (cmd_select): Show the window list if there is no such window + number. + +2001-02-28 shawn <sabetts@badbox.secure.basis.org> + + * manage.c (map_window): calls update_window_information. + + * manage.h (map_window): new prototype. + + * events.c (new_window): calls update_window_information on new windows. + (map_request): calls map_window on managed unmapped windows. + (configure_request): removed commented out old crusty + code. Updates window's structure based on what bits are set in the + event's value_mask. Doesn't honour resize request. Windows are + always maximized. + (property_notify): doesn't call maximize when WM_NORMAL_HINTS are + updated. + + * manage.c (manage): no longer maps the window, this code is in + map_window. + (map_window): new function + (maximize): no longer sends a synthetic configure event. + (scanwins): calls map_window on viewable windows. + (update_window_information): renamed from manage. dependant code + updated. + 2001-02-27 shawn <sabetts@diggin.lamenet.tmp> * doc/ratpoison.texi (Commands): added escape command +2001-02-27 shawn <sabetts@diggin.lamenet.tmp> + + * actions.c (cmd_escape): updates the "other" command keybinding + + * manage.h (ungrab_prefix_key): new prototype + (grab_prefix_key): likewise + + * manage.c (ungrab_prefix_key): new function + + * main.c (main): calls initialize_default_keybindings after + init_window_list. + + * data.h (struct rp_action): key is of type KeySym. state is + unsigned int. + + * conf.h (KEY_PREFIX): set to XK_t + + * actions.h (cmd_escape): new prototype + + * actions.c (cmd_escape): new function + + * data.h (struct key): move from actions.h + (struct rp_key): rename from struct key. dependant code updated. + (prefix_key): new global variable. code dependant on KEY_PREFIX + and MODIFIER_PREFIX updated to use this. + + * actions.c: "maximize" user command calls cmd_maximize + (initialize_default_keybindings): initializes prefix_key. + Added "escape" command. + + * manage.c (force_maximize): moved from actions.c + (maximize): likewise + (maximize_normal): likewise + (maximize_transient): likewise + + * actions.c (cmd_maximize): New function + + * main.c (handler): Prepends error message with "ERROR: ". + Displays error in message bar. Returns 0. + + * events.c (destroy_window): sets rp_current_window to NULL when + there are no more mapped windows. + (destroy_window): calls set_current_window and find_window_other + directly instead of cmd_other. + +2001-02-26 shawn <sabetts@diggin.lamenet.tmp> + + * list.c (save_mouse_position): stores the mouse position relative + to the root window. + (set_active_window): warps the mouse relative to the root window. + + * actions.h: prototype for force_maximize added + + * actions.c: the user command "maximize" calls force_maximize + (force_maximize): New function + 2001-02-25 shawn <sabetts@diggin.lamenet.tmp> * configure.in (AC_OUTPUT): added man/Makefile * Makefile.am (SUBDIRS): added man dir +2001-02-25 Ryan Yeske <rcyeske@cut.hotdog.tmp> + + * main.c (read_rc_file): rename from load_rc_file. Remove static + keyword. + (read_startup_files): rename from read_initialization_files. + + * actions.c (cmd_prev): Handle situation when there is no other + window. + (cmd_next): Likewise. + (cmd_other): Likewise. + (cmd_source): New function. + +2001-02-24 Ryan Yeske <rcyeske@cut.hotdog.tmp> + + * main.c (load_rc_file): new function + (read_initialization_files): new function + (main): read the initialization files + + * conf.h: remove themes support + + * themes.h: remove file + + * actions.c (replace_keybinding): add function + (cmd_bind): handle binding of previously bound key + +2001-02-23 shawn <sabetts@diggin.lamenet.tmp> + + * main.c (main): passes return value of find_window_other() to + set_active_window(). + + * list.h (remove_from_window_list): removed prototype + (find_window_in_list): new prototype + (append_to_list): likewise + (insert_into_list): likewise + (remove_from_list): likewise + + * list.c: propogated use of rp_unmapped_window_sentinel and + rp_mapped_window_sentinel. + (find_window_in_list): new function + (find_window): calls find_window_in_list to search mapped and + unmapped window lists. + (remove_from_window_list): removed function + (init_window_list): initialized sentinels + (find_window_prev): searches only the mapped window list. + (find_window_next): likewise + (find_window_other): likewise + (append_to_list): new function + (insert_into_list): new function + (remove_from_list): new function + + * events.c (unmap_notify): Searches only the mapped window + list. moves the window from the unmapped window list to the mapped + window list. + + * data.h: removed rp_window_head and rp_window_tail, updated + dependant files. Added rp_mapped_window_sentinel and + rp_unmapped_window_sentinel globals. + + * bar.c (update_window_names): loops only through mapped window + list. + 2001-02-21 Ryan Yeske <rcyeske@cut.hotdog.tmp> * configure.in: change version to 0.0.6-cvs +2001-02-21 Ryan Yeske <rcyeske@cut.hotdog.tmp> + + * manage.c (manage): comment out broken sort_window_list_by_number + call + + * actions.h (key): new structure + + * actions.c (find_keybinding): return an rp_action*, not a char* + (user_commands): add bind command + (parse_keydesc): new function + (cmd_bind): new function + + * actions.h: update find_keybinding prototype + + * events.c (handle_key): handle new return value of + find_keybinding + + * actions.c (cmd_generate): Send the modifier prefix state as well + as the keycode. + (find_keybinding): Do not strdup the key action data. + (add_keybinding): Strdup the key action data. + 2001-02-19 Ryan Yeske <rcyeske@cut.hotdog.tmp> * autogen.sh: Run aclocal before autoheader. +2001-02-19 Ryan Yeske <rcyeske@cut.hotdog.tmp> + + * events.c (handle_key): Call find_keybinding() instead of looping + through keytable here. + + * main.c (main): Call initialize_default_keybindings. + + * actions.c (find_keybinding): Added. + (add_keybinding): Added. + (initialize_default_keybindings): Added. Do not use static table + of keybindings. Instead call add_keybinding() for each key. + + * Makefile.am (ratpoison_SOURCES): add themes.h + + * main.c (FONT_NAME): Rename to FONT + (BAR_BG_COLOR): Rename to BACKGROUND + (BAR_FG_COLOR): Rename to FOREGROUND + + * list.c (find_window_by_number): Rename to find_window_number. + (find_window_by_name): Rename to find_window_name. + (goto_window_name): Remove. + (find_window_prev): Clean up. + (find_window_next): Clean up. + + * list.h: Update prototypes. + + * conf.h: Include "themes.h". + + * actions.c (cmd_generate): Fix typo. + (prev_window): Remove. + (next_window): Remove. + (last_window): Remove. + (cmd_prev): Add. + (cmd_next): Add. + (cmd_other): Add. + (string_to_window_number): Add. + (cmd_select): Add. + (cmd_rename): Add. + (delete_window): Remove. + (cmd_delete): Add. + (cmd_delete): Remove. + (cmd_kill): Add. + (show_version): Remove. + (cmd_version): Add. + (command): Remove. + (command): Remove. + (cmd_colon): Deal with partial input. + (cmd_exec): Add. + (cmd_newwm): Remove. + (cmd_newwm): Add. + (cmd_clock): Remove. + (cmd_clock): Add. + (cmd_clock): Remove. + (cmd_windows): Add. + (goto_window_number): Remove. + (abort_keypress): Remove. + (cmd_abort): Add. + + * actions.c: Make :select command handle numbers. + (cmd_unimplemented): new function. + + Commands are all cmd_ prefixed. Major changes within this file. + * input.c (get_more_input): New function. Used to collect input + on top of some existing input. + (get_input): Calls get_more_input to do work. + + * conf.h (THEME): added themes support. + + * bar.h (message): New macro. Calls marked_message with (0, 0) + highlight parameters. + + * bar.c (marked_message): New function + + * actions.h: Update prototypes. + +2001-02-19 shawn <sabetts@diggin.lamenet.tmp> + + * manage.c (manage): calls sort_window_list_by_number + + * list.h (sort_window_list_by_number): Added prototype + + * list.c (swap_list_elements): Added + (sort_window_list_by_number): Added + + * input.c (update_input_window): Added + (get_input): calls update_input_window in place of xlib calls. + (get_input): exits if realloc fails + + * conf.h: Added INPUT_WINDOW_SIZE + + * bar.c (update_window_names): loops through window list from head + to tail. + 2001-02-18 Gergely Nagy <8@free.bsd.hu> * NEWS: mention that ALL of the fixed size buffers are fixed. +2001-02-18 shawn <sabetts@diggin.lamenet.tmp> + + * conf.h: restructured comments. Added #define for AUTO_CLOSE. + + * manage.c (unmanage): kills ratpoison when there are no more + windows. + 2001-02-17 Ryan Yeske <rcyeske@cut.hotdog.tmp> * Makefile.am (SUBDIRS): Source dir before documentation dirs. @@ -64,6 +491,28 @@ * doc/ratpoison.texi: removed reference to :center and :resize +2001-02-17 Ryan Yeske <rcyeske@cut.hotdog.tmp> + + * actions.c (generate_key_event): Send KEY_PREFIX. + +2001-02-17 Ryan Yeske <rcyeske@cut.hotdog.tmp> + + * manage.c (current_screen): Rename get_screen() and move to this + file. + + * input.c (get_input): Remove screen_info as paramater. Call + current_screen() to get screen_info. + + * actions.c (get_screen): Remove. + +2001-02-17 Gergely Nagy <8@free.bsd.hu> + + * actions.c (goto_window_by_name, rename_current_window, command) + (shell_command, switch_to, xterm_command): changed static char[100]s + to dynamic char *s, as get_input() now supports this + * input.h: reflect get_input change + * input.c (get_input): use dynamically allocated strings + 2001-02-15 Gergely Nagy <8@free.bsd.hu> * autogen.sh: added autoheader call @@ -88,12 +537,414 @@ * configure.in: fixed --enable-debug, added --with-emacs, added man/Makefile to AC_OUTPUT +2001-02-15 Gergely Nagy <8@free.bsd.hu> + + * getopt.c: fixed a warning + + * events.c (handle_key): use dynamically allocated strings + + * bar.c (display_msg_in_bar), + * sbuf.c (xrealloc): changed an fprintf to PRINT_DEBUG + +2001-02-15 Ryan Yeske <rcyeske@cut.hotdog.tmp> + + * list.c (save_mouse_position): changed declaration of mask to + unsigned int + (get_mouse_root_position): changed declaration of mask to unsigned + int + + * actions.c (xterm_command): added new function. Thanks to Ben + Leslie <benno@sesgroup.net> + (user_commands): added "xterm" + (key_actions): added C-t C-! binding for "xterm" + + * messages.h (MESSAGE_PROMPT_XTERM_COMMAND): new message + +2001-02-14 Ryan Yeske <rcyeske@cut.hotdog.tmp> + + * actions.h (generate_key_event): added prototype + + * actions.c (key_actions): added additional keybindings to include + C- versions for all keys. + (generate_key_event): added command + +2001-02-13 Ryan Yeske <rcyeske@cut.hotdog.tmp> + + * bar.c (update_window_names): get indexes around current window + text to pass to display_msg_in_bar + (display_msg_in_bar): xor a rectangle around the text represented + by mark_start and mark_end arguments + + * conf.h (BAR_FG_COLOR): changed to black + (BAR_BG_COLOR): changed to white + (FONT_NAME): changed to 9x15bold + (BAR_Y_PADDING): changed to zero + (BAR_X_PADDING): changed to zero + + * data.h (struct screen_info): removed bold_gc + + * events.c (handle_key): can no longer over modify keystrokes + (handle_key): updated call to display_msg_in_bar to take extra + highlighting parameters. + + * main.c (init_screen): removed bold_color + (XGCValues gv): made global + + * actions.h (user_command): new struct + (argtype): new enumeration + + * actions.h: many updated prototypes + + * actions.c (key_actions): every command is now executed by + calling command() with a string version of the command, rewrote + this table to reflect that. + (user_commands): new symbol table added, a mapping between strings + and functions and arguments. + (spawn): now handles commands with arguments by calling them + through "/bin/sh -c" + (get_screen): new function. + + * actions.c: all calls to display_msg_in_bar updated to call with + 2 additional highlight parameters. + + * actions.c (goto_win_by_name, rename_current_window, ...): most + all user functions that need arguments will prompt the user for + them, unless they are supplied. Allows the same function to be + used interactively or internally. + + * bar.h (display_msg_in_bar): updated prototype + + * bar.c (display_msg_in_bar): takes two additional int arguments + which are offsets into the string describing which part of the + text to draw highlighted. + (update_window_names): highlight current window + +2001-02-12 Ryan Yeske <rcyeske@cut.hotdog.tmp> + + * actions.c (spawn): will now execute commands with arguments by + execl'ing through /bin/sh -c + 2001-02-11 Ryan Yeske <rcyeske@cut.hotdog.tmp> * autogen.sh: added to repository +2001-02-11 Ryan Yeske <rcyeske@cut.hotdog.tmp> + + * ratpoison.h: #include "sbuf.h" + removed duplicate #include "messages.h" + + * Makefile.am (ratpoison_SOURCES): added sbuf.c sbuf.h + + * bar.c (calc_bar_width): removed function + (update_window_names): now builds up the entire window list string + in dynamic storage before printing the window list. No longer + displays the current window in a different colour. + +2001-02-11 shawn <sabetts@diggin.lamenet.tmp> + + * main.c (set_sig_handler): Added + (main): Uses set_sig_handler() instead of signal() + + * manage.h (set_state): Added prototype + + * manage.c (send_configure): Now sends the window's x,y,width,height + coordinates. + (set_state): Added + + * events.c (map_request): Calls set_state when mapping an unmapped + window. + + * actions.c (maximize_transient): takes an rp_window as the + argument. Removed code to handle void *data. Incremental resizing + only happens if the maximum size isn't set. Removed actual X + maximization code. + (maximize): Moved meat to maximize_normal(). + +2001-02-10 Ryan Yeske <rcyeske@cut.hotdog.tmp> + + * ratpoison.h: #include "messages.h" + + * list.h (goto_window_number): moved prototype to actions.h + + * actions.h (goto_window_number): added prototype + (goto_window): removed prototype + + * Makefile.am (ratpoison_SOURCES): added messages.h + + * actions.c (prev_window): display correct message when there is + no other window or there are no windows at all. + (next_window): display correct message when there is no other + window or there are no windows at all. + (key_actions): all number keys call goto_window_number with an + argument instead of a dedicated function. + (key_actions): XK_exclam now runs execute_command + + * actions.c: replaced all user message strings with #define'd + messages. + + * actions.h (goto_window): removed + (goto_window_0): removed + (goto_window_1): removed + (goto_window_2): removed + (goto_window_3): removed + (goto_window_4): removed + (goto_window_5): removed + (goto_window_6): removed + (goto_window_7): removed + (goto_window_8): removed + +2001-02-10 shawn <sabetts@diggin.lamenet.tmp> + + * communications.c (send_restart, send_kill): Added + + * ratpoison.h: includes communications.h + + * main.c (send_restart, send_kill): Moved to communications.c + + * list.c (get_mouse_root_position): Added + (add_to_window_list): Initialize new rp_window fields + (save_mouse_position): Added + (set_active_window): Added code to save and restore the position + of the mouse + + * events.c (property_notify): Added code to listen for a + WM_TRANSIENT_FOR property change. + + * data.h (struct rp_window): Added transient, transient_for, mouse_x, mouse_y. + + * actions.c (maximize_transient): Added + (maximize): Added code to handle transient windows differently + + * Makefile.am (ratpoison_SOURCES): Added communications.h and communications.c + 2001-02-04 Ryan Yeske <rcyeske@cut.hotdog.tmp> * doc/ratpoison.texi: added keystroke for `Show current time.' * debian/ratpoison.1: added keystroke for `Show current time.' + +2001-01-02 shawn <sabetts@diggin.lamenet.tmp> + + * communications.c (send_restart): moved from main.c + (send_kill): moved from main.c + + * main.c: Removed send_kill, send_restart + + * input.h: Added copyright notice. + + * input.c: Added copyright notice. + + * actions.c: Added copyright notice. + +2001-02-04 Ryan Yeske <rcyeske@cut.hotdog.tmp> + + * actions.c (prev_window): do not set active window when + recursing. + (next_window): do not set active window when recursing. + +2001-01-28 Ryan Yeske <rcyeske@soya.hotdog.tmp> + + * actions.c: changed rename_current_window key to `A', bound `a' + to show_clock + +2001-01-02 shawn <sabetts@diggin.lamenet.tmp> + + * actions.h (show_clock): added prototype + + * actions.c (show_clock): added + +2000-12-15 shawn <sabetts@badbox.secure.basis.org> + + * actions.c (maximize): increment size in hints->width_inc and + hints->height_inc intervals + + * manage.c (manage): set the dimension members of the rp_window struct + +2000-12-15 shawn <sabetts@diggin.lamenet.tmp> + + * manage.c (manage): added ColormapChangeMask and + StructureNotifyMask to events listened for on managed windows. + + * main.c (main): propagated changes to set_active_window usage + + * events.c: propagated changes to set_active_window usage + + * data.h (struct rp_window): Added colormap member + + * list.c (set_active_window): Installs colormap + (set_active_window): sets rp_current_window to window passed in as + parameter + + * actions.c (prev_window): No longer uses rp_current_window to + keep track of state + (next_window): No longer uses rp_current_window to keep track of + state + + * list.c (add_to_window_list): sets member colormap to the + DefaultColormap + + * manage.c (update_window_name): fixed memory leak. Not freeing + the win->name before updating it. + (manage): Gets the colormap now. + + * list.c (add_to_window_list): Added init code for `hints' + + * events.c (property_notify): Added handler for XA_WM_NORMAL_HINTS. + + * data.h (struct rp_window): Added XSizeHints member + + * actions.c (maximize): Adhere to the window's Size Hints + +2000-12-14 shawn <sabetts@diggin.lamenet.tmp> + + * manage.h (update_normal_hints): added prototype + + * manage.c (update_normal_hints): added + + * list.c (add_to_window_list): added comment describing function + +2000-12-13 shawn <sabetts@diggin.lamenet.tmp> + + * actions.c: removed gross tabs from key_actions definition. Add + C-t space to go to next window. + +2000-12-09 shawn <sabetts@diggin.lamenet.tmp> + + * data.h (struct rp_window): added x, y, width, height, border; + + * events.c (configure_request): Now honours request, but then + maximizes it afterwards. + (configure_request): updates the rp_window's geometry fields + + * manage.c (manage): commented out XMoveResizeWindow call + (send_configure): added + + * actions.h (maximize): added prototype + + * actions.c (maximize): added + + * input.c (cook_keycode): properly handle LockMask + (cook_keycode): updated comments + + * input.h: added prototype for keysym_to_string + + * input.c (keysym_to_string): added + + * bar.c (show_bar): update_window_names(s) is called whether the + bar is raised or not. + + * conf.h: Added BAR_Y_PADDING BAR_X_PADDING + + * list.c (goto_window_name): return success or failure + + * list.h: updated prototype for goto_window_name + + * events.c (handle_key): Added a message indicating an unbound + key. + + * bar.c (display_msg_in_bar): added + (update_window_names): uses BAR_X_PADDING instead of `5' + (update_window_names): Updated BAR_PADDING to BAR_Y_PADDING + + * input.c (cook_keycode): mod is now an usigned int + (read_key): Ignores modifier keys. Now returns keysym and + modifiers. + (get_input): Updated BAR_PADDING to BAR_Y_PADDING and + BAR_X_PADDING. + + * events.c (handle_key): uses read_key instead of XMaskEvent to + read a key. + + * actions.c (goto_window_number): window list is displayed on failure. + (bye): added + (switch_to): added + (execute_command): no longer seg faults when no windows exist. + +2000-12-03 shawn <sabetts@diggin.lamenet.tmp> + + * input.h (cook_keycode): added prototype + + * actions.c: key_actions now uses the #define'd keysyms from X11/keysym.h + + * events.c (handle_key): calls cook_keycode() before processing the keysym. + + * input.c (read_key): calls cook_keycode() before returning the keysym + (cook_keycode): added. + +2000-12-01 shawn <sabetts@diggin.lamenet.tmp> + + * list.c (find_window_by_name): added check to make sure the + window's state is not STATE_UNMAPPED. + +2000-11-27 shawn <sabetts@diggin.lamenet.tmp> + + * events.c (handle_key): Code to generate the prefix event has + been moved to generate_prefix(). + + * actions.h (toggle_bar): added prefixes for generate_prefix, and + abort_keypress. + + * actions.c (generate_prefix): added. + (abort_keypress): added. + +2000-11-04 Ryan Yeske <rcyeske@vcn.bc.ca> + + * Makefile.am (ratpoison_SOURCES): added getopt.c, getopt1.c and + getopt.h + +2000-10-30 Ryan Yeske <rcyeske@vcn.bc.ca> + + * actions.h (execute_command): added prototype + + * actions.c (rename_current_window): added test to skip renaming + if user entered an empty string + (execute_command): added command + (key_actions): execute_command is called by pressing ':' + +2000-10-30 shawn <sabetts@badbox.secure.basis.org> + + * conf.h: added HIDE_MOUSE + +2000-10-24 Ryan Yeske <rcyeske@vcn.bc.ca> + + * bar.c (bar_x): rightmost border is no longer off screen + +2000-10-20 shawn <sabetts@badbox.secure.basis.org> + + * events.c (key_press): fixed MODIFIER_PREFIX bug + +2000-10-19 Ryan yeske <rcyeske@van.gobasis.com> + + * manage.c (unmanaged_window): added. + + * conf.h (PADDING_LEFT, PADDING_TOP, PADDING_RIGHT, + PADDING_BOTTOM, UNMANAGED_WINDOW_LIST): added. Windows listed in + UNMANAGED_WINDOW_LIST will not be managed. Space reserved for + unmanaged windows can be defined with PADDING_* + +2000-10-19 shawn <sabetts@badbox.secure.basis.org> + + * manage.c (get_window_name): added + +2000-10-17 shawn <sabetts@vcn.bc.ca> + + * events.c (configure_request): resize windows to the max-1. Call + XConfigureWindow as well as XSendEvent. + + * manage.c (scanwins): Now only maps visible windows + + * conf.h: Removed keystroke related defines + + * actions.c: Moved all key activated functions here. Added + key_actions array. + + * events.c (unmap_notify): now properly unmaps windows + + * data.h: added ignore_badwindow + + * main.c (handler): added ability to ignore BadWindow errors + +2000-10-15 shawn <sabetts@vcn.bc.ca> + + * main.c, data.h, events.c: Added ability to kill and hup running + ratpoison processes. @@ -101,11 +101,7 @@ All fixed length buffer sizes in window names that resulted in curious segfaults have been fixed. ** Themes support -<<<<<<< NEWS There is still no theme support, despite what you might have heard. -======= -There is still no themes support, despite what you might have heard. ->>>>>>> 1.13.2.2 * Changes Singe 0.0.4 diff --git a/doc/Makefile.am b/doc/Makefile.am index fe5f6f6..0b62a77 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -1,3 +1,3 @@ info_TEXINFOS = ratpoison.texi man_MANS = ratpoison.1 -EXTRA_DIST = $(man_MANS) +EXTRA_DIST = $(man_MANS) sample.ratpoisonrc ipaq.ratpoisonrc diff --git a/doc/ipaq.ratpoisonrc b/doc/ipaq.ratpoisonrc new file mode 100644 index 0000000..c57afab --- /dev/null +++ b/doc/ipaq.ratpoisonrc @@ -0,0 +1,33 @@ +# .ratpoisonrc for an iPaq36xx handheld pc running Linux +# +# $Id: ipaq.ratpoisonrc,v 1.2 2001/03/12 01:10:48 sabetts Exp $ + + +# make the "audio record" button the escape key: + +# Note: use XF86AudioRecord instead of the hex value if its available +# on your system +escape 0x1008ff1c + +# the "speaker" buttons +bind Up exec rxvt +bind Down windows +bind Left prev +bind Right next +bind KP_Enter echo + +# the power button should be reserved? +# Note: use XF86PowerDown if its available on your system +bind 0x1008ff21 version + +## the four buttons under the screen: + +# Note: use XF86Calendar if its available on your system +bind 0x1008ff20 exec xcalc + +bind telephone exec contacts + +bind Menu echo + +# Note: use XF86Start if its available on your system +bind 0x1008ff1a clock diff --git a/doc/ratpoison.texi b/doc/ratpoison.texi index 9499484..b3cd6af 100644 --- a/doc/ratpoison.texi +++ b/doc/ratpoison.texi @@ -343,7 +343,7 @@ tries @file{/etc/ratpoisonrc}. This means any command you can bind a key to or run at the command prompt (@kbd{C-t :}) you can execute in this rc file. -It adds 320 bytes to ratpoison on a glibc6-i386 machine. Its a little -steep for a feature and we are attempting to squeeze the fat. +It adds roughly 320 bytes to ratpoison on a glibc6-i386 machine. Its a +little steep for a feature and we are attempting to squeeze the fat. @bye diff --git a/doc/sample.ratpoisonrc b/doc/sample.ratpoisonrc new file mode 100644 index 0000000..875fb24 --- /dev/null +++ b/doc/sample.ratpoisonrc @@ -0,0 +1,22 @@ +# This is a sample .ratpoisonrc file +# +# $Id: sample.ratpoisonrc,v 1.2 2001/03/12 01:10:48 sabetts Exp $ + +# Set the prefix key to that of screen's default +escape ^a + +# Gets rid of that ugly crosshairs default cursor +# and set the background to black +exec xsetroot -solid black -cursor_name left_ptr + +# Emulate screen by starting with a new xterm +exec xterm + +# Bind e to our favorite editor +bind e exec emacs + +# bind s to interactively run a surfraw query on freshmeat +bind s colon exec xterm -e freshmeat + +# bind b (`b' for browse) to interactively ask for an URL to open +bind b colon exec mozilla http://www. diff --git a/src/ChangeLog b/src/ChangeLog deleted file mode 100644 index 7aa3805..0000000 --- a/src/ChangeLog +++ /dev/null @@ -1,766 +0,0 @@ -2001-03-07 Ryan Yeske <rcyeske@cut.hotdog.tmp> - - * main.c (read_rc_file): Fix typo that was resulting in exhausting - all memory parsing the rc file. - - * actions.c (string_to_keysym): New function. - (parse_keydesc): Call string_to_keysym. - - * main.c (read_startup_files): Use PRINT_DEBUG to report failure - to load rc files. - -2001-03-05 Ryan Yeske <rcyeske@cut.hotdog.tmp> - - * actions.c: remove silly C,M,A,S,H #defines and propagate - changes. - - * bar.c (update_window_names): Print a '+' for the last accessed - window. - -2001-03-03 Ryan Yeske <rcyeske@cut.hotdog.tmp> - - * actions.c (cmd_bind): Do not pollute the message bar with - chatter about the keybinding. - -2001-03-03 shawn <sabetts@livingston> - - * manage.c (maximize_normal): windows with resize increments - resize properly when their original size is > the screen size. - (maximize_transient): likewise - -2001-03-02 shawn <sabetts@diggin.lamenet.tmp> - - * main.c (print_version): updated copyright notice. - - * actions.c (initialize_default_keybindings): removed emacs - binding. - -2001-03-01 Ryan Yeske <rcyeske@cut.hotdog.tmp> - - * ratpoison.h (xmalloc, xrealloc, fatal): Prototype. - - * main.c (xmalloc): Move here from sbuf.c. - (xrealloc): Likewise. - (fatal): Likewise. - - * number.c (find_empty_cell): Use xrealloc, remove error check. - (init_numbers): Likewise. - - * manage.c (get_window_name): Likewise. - - * main.c (main): Likewise. - - * list.c (add_to_window_list): Likewise. - (add_to_window_list): Likewise. - - * events.c (handle_key): Likewise. - - * input.c (keysym_to_string): Likewise. - (get_more_input): Use xrealloc, remove error check. - - * actions.c (cmd_source): Open the file. Error report as - appropriate. - (cmd_windows): Call current_screen() to find the current screen. - (cmd_clock): Show the clock even if no windows are open. - (cmd_clock): Use xmalloc, remove error check. - (initialize_default_keybindings): Use xmalloc. - (cmd_bind): Use xmalloc. - (cmd_rename): Use xmalloc, remove error check. - (add_keybinding): Use xrealloc. - (replace_keybinding): Use xrealloc. - - * main.c (read_rc_file): Take a file pointer rather than a - filename. - (read_startup_files): If ~/.ratpoisonrc is not readable try - /etc/ratpoisonrc. - - * actions.c: Use PRINT_DEBUG instead of fprintf. Put useful error - text in calls to message(). - (cmd_select): Show the window list if there is no such window - number. - -2001-02-28 shawn <sabetts@badbox.secure.basis.org> - - * manage.c (map_window): calls update_window_information. - - * manage.h (map_window): new prototype. - - * events.c (new_window): calls update_window_information on new windows. - (map_request): calls map_window on managed unmapped windows. - (configure_request): removed commented out old crusty - code. Updates window's structure based on what bits are set in the - event's value_mask. Doesn't honour resize request. Windows are - always maximized. - (property_notify): doesn't call maximize when WM_NORMAL_HINTS are - updated. - - * manage.c (manage): no longer maps the window, this code is in - map_window. - (map_window): new function - (maximize): no longer sends a synthetic configure event. - (scanwins): calls map_window on viewable windows. - (update_window_information): renamed from manage. dependant code - updated. - -2001-02-27 shawn <sabetts@diggin.lamenet.tmp> - - * actions.c (cmd_escape): updates the "other" command keybinding - - * manage.h (ungrab_prefix_key): new prototype - (grab_prefix_key): likewise - - * manage.c (ungrab_prefix_key): new function - - * main.c (main): calls initialize_default_keybindings after - init_window_list. - - * data.h (struct rp_action): key is of type KeySym. state is - unsigned int. - - * conf.h (KEY_PREFIX): set to XK_t - - * actions.h (cmd_escape): new prototype - - * actions.c (cmd_escape): new function - - * data.h (struct key): move from actions.h - (struct rp_key): rename from struct key. dependant code updated. - (prefix_key): new global variable. code dependant on KEY_PREFIX - and MODIFIER_PREFIX updated to use this. - - * actions.c: "maximize" user command calls cmd_maximize - (initialize_default_keybindings): initializes prefix_key. - Added "escape" command. - - * manage.c (force_maximize): moved from actions.c - (maximize): likewise - (maximize_normal): likewise - (maximize_transient): likewise - - * actions.c (cmd_maximize): New function - - * main.c (handler): Prepends error message with "ERROR: ". - Displays error in message bar. Returns 0. - - * events.c (destroy_window): sets rp_current_window to NULL when - there are no more mapped windows. - (destroy_window): calls set_current_window and find_window_other - directly instead of cmd_other. - -2001-02-26 shawn <sabetts@diggin.lamenet.tmp> - - * list.c (save_mouse_position): stores the mouse position relative - to the root window. - (set_active_window): warps the mouse relative to the root window. - - * actions.h: prototype for force_maximize added - - * actions.c: the user command "maximize" calls force_maximize - (force_maximize): New function - -2001-02-25 Ryan Yeske <rcyeske@cut.hotdog.tmp> - - * main.c (read_rc_file): rename from load_rc_file. Remove static - keyword. - (read_startup_files): rename from read_initialization_files. - - * actions.c (cmd_prev): Handle situation when there is no other - window. - (cmd_next): Likewise. - (cmd_other): Likewise. - (cmd_source): New function. - -2001-02-24 Ryan Yeske <rcyeske@cut.hotdog.tmp> - - * main.c (load_rc_file): new function - (read_initialization_files): new function - (main): read the initialization files - - * conf.h: remove themes support - - * themes.h: remove file - - * actions.c (replace_keybinding): add function - (cmd_bind): handle binding of previously bound key - -2001-02-23 shawn <sabetts@diggin.lamenet.tmp> - - * main.c (main): passes return value of find_window_other() to - set_active_window(). - - * list.h (remove_from_window_list): removed prototype - (find_window_in_list): new prototype - (append_to_list): likewise - (insert_into_list): likewise - (remove_from_list): likewise - - * list.c: propogated use of rp_unmapped_window_sentinel and - rp_mapped_window_sentinel. - (find_window_in_list): new function - (find_window): calls find_window_in_list to search mapped and - unmapped window lists. - (remove_from_window_list): removed function - (init_window_list): initialized sentinels - (find_window_prev): searches only the mapped window list. - (find_window_next): likewise - (find_window_other): likewise - (append_to_list): new function - (insert_into_list): new function - (remove_from_list): new function - - * events.c (unmap_notify): Searches only the mapped window - list. moves the window from the unmapped window list to the mapped - window list. - - * data.h: removed rp_window_head and rp_window_tail, updated - dependant files. Added rp_mapped_window_sentinel and - rp_unmapped_window_sentinel globals. - - * bar.c (update_window_names): loops only through mapped window - list. - -2001-02-21 Ryan Yeske <rcyeske@cut.hotdog.tmp> - - * manage.c (manage): comment out broken sort_window_list_by_number - call - - * actions.h (key): new structure - - * actions.c (find_keybinding): return an rp_action*, not a char* - (user_commands): add bind command - (parse_keydesc): new function - (cmd_bind): new function - - * actions.h: update find_keybinding prototype - - * events.c (handle_key): handle new return value of - find_keybinding - - * actions.c (cmd_generate): Send the modifier prefix state as well - as the keycode. - (find_keybinding): Do not strdup the key action data. - (add_keybinding): Strdup the key action data. - -2001-02-19 Ryan Yeske <rcyeske@cut.hotdog.tmp> - - * events.c (handle_key): Call find_keybinding() instead of looping - through keytable here. - - * main.c (main): Call initialize_default_keybindings. - - * actions.c (find_keybinding): Added. - (add_keybinding): Added. - (initialize_default_keybindings): Added. Do not use static table - of keybindings. Instead call add_keybinding() for each key. - - * Makefile.am (ratpoison_SOURCES): add themes.h - - * main.c (FONT_NAME): Rename to FONT - (BAR_BG_COLOR): Rename to BACKGROUND - (BAR_FG_COLOR): Rename to FOREGROUND - - * list.c (find_window_by_number): Rename to find_window_number. - (find_window_by_name): Rename to find_window_name. - (goto_window_name): Remove. - (find_window_prev): Clean up. - (find_window_next): Clean up. - - * list.h: Update prototypes. - - * conf.h: Include "themes.h". - - * actions.c (cmd_generate): Fix typo. - (prev_window): Remove. - (next_window): Remove. - (last_window): Remove. - (cmd_prev): Add. - (cmd_next): Add. - (cmd_other): Add. - (string_to_window_number): Add. - (cmd_select): Add. - (cmd_rename): Add. - (delete_window): Remove. - (cmd_delete): Add. - (cmd_delete): Remove. - (cmd_kill): Add. - (show_version): Remove. - (cmd_version): Add. - (command): Remove. - (command): Remove. - (cmd_colon): Deal with partial input. - (cmd_exec): Add. - (cmd_newwm): Remove. - (cmd_newwm): Add. - (cmd_clock): Remove. - (cmd_clock): Add. - (cmd_clock): Remove. - (cmd_windows): Add. - (goto_window_number): Remove. - (abort_keypress): Remove. - (cmd_abort): Add. - - * actions.c: Make :select command handle numbers. - (cmd_unimplemented): new function. - - Commands are all cmd_ prefixed. Major changes within this file. - * input.c (get_more_input): New function. Used to collect input - on top of some existing input. - (get_input): Calls get_more_input to do work. - - * conf.h (THEME): added themes support. - - * bar.h (message): New macro. Calls marked_message with (0, 0) - highlight parameters. - - * bar.c (marked_message): New function - - * actions.h: Update prototypes. - -2001-02-19 shawn <sabetts@diggin.lamenet.tmp> - - * manage.c (manage): calls sort_window_list_by_number - - * list.h (sort_window_list_by_number): Added prototype - - * list.c (swap_list_elements): Added - (sort_window_list_by_number): Added - - * input.c (update_input_window): Added - (get_input): calls update_input_window in place of xlib calls. - (get_input): exits if realloc fails - - * conf.h: Added INPUT_WINDOW_SIZE - - * bar.c (update_window_names): loops through window list from head - to tail. - -2001-02-18 shawn <sabetts@diggin.lamenet.tmp> - - * conf.h: restructured comments. Added #define for AUTO_CLOSE. - - * manage.c (unmanage): kills ratpoison when there are no more - windows. - -2001-02-17 Ryan Yeske <rcyeske@cut.hotdog.tmp> - - * actions.c (generate_key_event): Send KEY_PREFIX. - -2001-02-17 Ryan Yeske <rcyeske@cut.hotdog.tmp> - - * manage.c (current_screen): Rename get_screen() and move to this - file. - - * input.c (get_input): Remove screen_info as paramater. Call - current_screen() to get screen_info. - - * actions.c (get_screen): Remove. - -2001-02-17 Gergely Nagy <8@free.bsd.hu> - - * actions.c (goto_window_by_name, rename_current_window, command) - (shell_command, switch_to, xterm_command): changed static char[100]s - to dynamic char *s, as get_input() now supports this - * input.h: reflect get_input change - * input.c (get_input): use dynamically allocated strings - -2001-02-15 Gergely Nagy <8@free.bsd.hu> - - * getopt.c: fixed a warning - - * events.c (handle_key): use dynamically allocated strings - - * bar.c (display_msg_in_bar), - * sbuf.c (xrealloc): changed an fprintf to PRINT_DEBUG - -2001-02-15 Ryan Yeske <rcyeske@cut.hotdog.tmp> - - * list.c (save_mouse_position): changed declaration of mask to - unsigned int - (get_mouse_root_position): changed declaration of mask to unsigned - int - - * actions.c (xterm_command): added new function. Thanks to Ben - Leslie <benno@sesgroup.net> - (user_commands): added "xterm" - (key_actions): added C-t C-! binding for "xterm" - - * messages.h (MESSAGE_PROMPT_XTERM_COMMAND): new message - -2001-02-14 Ryan Yeske <rcyeske@cut.hotdog.tmp> - - * actions.h (generate_key_event): added prototype - - * actions.c (key_actions): added additional keybindings to include - C- versions for all keys. - (generate_key_event): added command - -2001-02-13 Ryan Yeske <rcyeske@cut.hotdog.tmp> - - * bar.c (update_window_names): get indexes around current window - text to pass to display_msg_in_bar - (display_msg_in_bar): xor a rectangle around the text represented - by mark_start and mark_end arguments - - * conf.h (BAR_FG_COLOR): changed to black - (BAR_BG_COLOR): changed to white - (FONT_NAME): changed to 9x15bold - (BAR_Y_PADDING): changed to zero - (BAR_X_PADDING): changed to zero - - * data.h (struct screen_info): removed bold_gc - - * events.c (handle_key): can no longer over modify keystrokes - (handle_key): updated call to display_msg_in_bar to take extra - highlighting parameters. - - * main.c (init_screen): removed bold_color - (XGCValues gv): made global - - * actions.h (user_command): new struct - (argtype): new enumeration - - * actions.h: many updated prototypes - - * actions.c (key_actions): every command is now executed by - calling command() with a string version of the command, rewrote - this table to reflect that. - (user_commands): new symbol table added, a mapping between strings - and functions and arguments. - (spawn): now handles commands with arguments by calling them - through "/bin/sh -c" - (get_screen): new function. - - * actions.c: all calls to display_msg_in_bar updated to call with - 2 additional highlight parameters. - - * actions.c (goto_win_by_name, rename_current_window, ...): most - all user functions that need arguments will prompt the user for - them, unless they are supplied. Allows the same function to be - used interactively or internally. - - * bar.h (display_msg_in_bar): updated prototype - - * bar.c (display_msg_in_bar): takes two additional int arguments - which are offsets into the string describing which part of the - text to draw highlighted. - (update_window_names): highlight current window - -2001-02-12 Ryan Yeske <rcyeske@cut.hotdog.tmp> - - * actions.c (spawn): will now execute commands with arguments by - execl'ing through /bin/sh -c - -2001-02-11 Ryan Yeske <rcyeske@cut.hotdog.tmp> - - * ratpoison.h: #include "sbuf.h" - removed duplicate #include "messages.h" - - * Makefile.am (ratpoison_SOURCES): added sbuf.c sbuf.h - - * bar.c (calc_bar_width): removed function - (update_window_names): now builds up the entire window list string - in dynamic storage before printing the window list. No longer - displays the current window in a different colour. - -2001-02-11 shawn <sabetts@diggin.lamenet.tmp> - - * main.c (set_sig_handler): Added - (main): Uses set_sig_handler() instead of signal() - - * manage.h (set_state): Added prototype - - * manage.c (send_configure): Now sends the window's x,y,width,height - coordinates. - (set_state): Added - - * events.c (map_request): Calls set_state when mapping an unmapped - window. - - * actions.c (maximize_transient): takes an rp_window as the - argument. Removed code to handle void *data. Incremental resizing - only happens if the maximum size isn't set. Removed actual X - maximization code. - (maximize): Moved meat to maximize_normal(). - -2001-02-10 Ryan Yeske <rcyeske@cut.hotdog.tmp> - - * ratpoison.h: #include "messages.h" - - * list.h (goto_window_number): moved prototype to actions.h - - * actions.h (goto_window_number): added prototype - (goto_window): removed prototype - - * Makefile.am (ratpoison_SOURCES): added messages.h - - * actions.c (prev_window): display correct message when there is - no other window or there are no windows at all. - (next_window): display correct message when there is no other - window or there are no windows at all. - (key_actions): all number keys call goto_window_number with an - argument instead of a dedicated function. - (key_actions): XK_exclam now runs execute_command - - * actions.c: replaced all user message strings with #define'd - messages. - - * actions.h (goto_window): removed - (goto_window_0): removed - (goto_window_1): removed - (goto_window_2): removed - (goto_window_3): removed - (goto_window_4): removed - (goto_window_5): removed - (goto_window_6): removed - (goto_window_7): removed - (goto_window_8): removed - -2001-02-10 shawn <sabetts@diggin.lamenet.tmp> - - * communications.c (send_restart, send_kill): Added - - * ratpoison.h: includes communications.h - - * main.c (send_restart, send_kill): Moved to communications.c - - * list.c (get_mouse_root_position): Added - (add_to_window_list): Initialize new rp_window fields - (save_mouse_position): Added - (set_active_window): Added code to save and restore the position - of the mouse - - * events.c (property_notify): Added code to listen for a - WM_TRANSIENT_FOR property change. - - * data.h (struct rp_window): Added transient, transient_for, mouse_x, mouse_y. - - * actions.c (maximize_transient): Added - (maximize): Added code to handle transient windows differently - - * Makefile.am (ratpoison_SOURCES): Added communications.h and communications.c - -2001-01-02 shawn <sabetts@diggin.lamenet.tmp> - - * communications.c (send_restart): moved from main.c - (send_kill): moved from main.c - - * main.c: Removed send_kill, send_restart - - * input.h: Added copyright notice. - - * input.c: Added copyright notice. - - * actions.c: Added copyright notice. - -2001-02-04 Ryan Yeske <rcyeske@cut.hotdog.tmp> - - * actions.c (prev_window): do not set active window when - recursing. - (next_window): do not set active window when recursing. - -2001-01-28 Ryan Yeske <rcyeske@soya.hotdog.tmp> - - * actions.c: changed rename_current_window key to `A', bound `a' - to show_clock - -2001-01-02 shawn <sabetts@diggin.lamenet.tmp> - - * actions.h (show_clock): added prototype - - * actions.c (show_clock): added - -2000-12-15 shawn <sabetts@badbox.secure.basis.org> - - * actions.c (maximize): increment size in hints->width_inc and - hints->height_inc intervals - - * manage.c (manage): set the dimension members of the rp_window struct - -2000-12-15 shawn <sabetts@diggin.lamenet.tmp> - - * manage.c (manage): added ColormapChangeMask and - StructureNotifyMask to events listened for on managed windows. - - * main.c (main): propagated changes to set_active_window usage - - * events.c: propagated changes to set_active_window usage - - * data.h (struct rp_window): Added colormap member - - * list.c (set_active_window): Installs colormap - (set_active_window): sets rp_current_window to window passed in as - parameter - - * actions.c (prev_window): No longer uses rp_current_window to - keep track of state - (next_window): No longer uses rp_current_window to keep track of - state - - * list.c (add_to_window_list): sets member colormap to the - DefaultColormap - - * manage.c (update_window_name): fixed memory leak. Not freeing - the win->name before updating it. - (manage): Gets the colormap now. - - * list.c (add_to_window_list): Added init code for `hints' - - * events.c (property_notify): Added handler for XA_WM_NORMAL_HINTS. - - * data.h (struct rp_window): Added XSizeHints member - - * actions.c (maximize): Adhere to the window's Size Hints - -2000-12-14 shawn <sabetts@diggin.lamenet.tmp> - - * manage.h (update_normal_hints): added prototype - - * manage.c (update_normal_hints): added - - * list.c (add_to_window_list): added comment describing function - -2000-12-13 shawn <sabetts@diggin.lamenet.tmp> - - * actions.c: removed gross tabs from key_actions definition. Add - C-t space to go to next window. - -2000-12-09 shawn <sabetts@diggin.lamenet.tmp> - - * data.h (struct rp_window): added x, y, width, height, border; - - * events.c (configure_request): Now honours request, but then - maximizes it afterwards. - (configure_request): updates the rp_window's geometry fields - - * manage.c (manage): commented out XMoveResizeWindow call - (send_configure): added - - * actions.h (maximize): added prototype - - * actions.c (maximize): added - - * input.c (cook_keycode): properly handle LockMask - (cook_keycode): updated comments - - * input.h: added prototype for keysym_to_string - - * input.c (keysym_to_string): added - - * bar.c (show_bar): update_window_names(s) is called whether the - bar is raised or not. - - * conf.h: Added BAR_Y_PADDING BAR_X_PADDING - - * list.c (goto_window_name): return success or failure - - * list.h: updated prototype for goto_window_name - - * events.c (handle_key): Added a message indicating an unbound - key. - - * bar.c (display_msg_in_bar): added - (update_window_names): uses BAR_X_PADDING instead of `5' - (update_window_names): Updated BAR_PADDING to BAR_Y_PADDING - - * input.c (cook_keycode): mod is now an usigned int - (read_key): Ignores modifier keys. Now returns keysym and - modifiers. - (get_input): Updated BAR_PADDING to BAR_Y_PADDING and - BAR_X_PADDING. - - * events.c (handle_key): uses read_key instead of XMaskEvent to - read a key. - - * actions.c (goto_window_number): window list is displayed on failure. - (bye): added - (switch_to): added - (execute_command): no longer seg faults when no windows exist. - -2000-12-03 shawn <sabetts@diggin.lamenet.tmp> - - * input.h (cook_keycode): added prototype - - * actions.c: key_actions now uses the #define'd keysyms from X11/keysym.h - - * events.c (handle_key): calls cook_keycode() before processing the keysym. - - * input.c (read_key): calls cook_keycode() before returning the keysym - (cook_keycode): added. - -2000-12-01 shawn <sabetts@diggin.lamenet.tmp> - - * list.c (find_window_by_name): added check to make sure the - window's state is not STATE_UNMAPPED. - -2000-11-27 shawn <sabetts@diggin.lamenet.tmp> - - * events.c (handle_key): Code to generate the prefix event has - been moved to generate_prefix(). - - * actions.h (toggle_bar): added prefixes for generate_prefix, and - abort_keypress. - - * actions.c (generate_prefix): added. - (abort_keypress): added. - -2000-11-04 Ryan Yeske <rcyeske@vcn.bc.ca> - - * Makefile.am (ratpoison_SOURCES): added getopt.c, getopt1.c and - getopt.h - -2000-10-30 Ryan Yeske <rcyeske@vcn.bc.ca> - - * actions.h (execute_command): added prototype - - * actions.c (rename_current_window): added test to skip renaming - if user entered an empty string - (execute_command): added command - (key_actions): execute_command is called by pressing ':' - -2000-10-30 shawn <sabetts@badbox.secure.basis.org> - - * conf.h: added HIDE_MOUSE - -2000-10-24 Ryan Yeske <rcyeske@vcn.bc.ca> - - * bar.c (bar_x): rightmost border is no longer off screen - -2000-10-20 shawn <sabetts@badbox.secure.basis.org> - - * events.c (key_press): fixed MODIFIER_PREFIX bug - -2000-10-19 Ryan yeske <rcyeske@van.gobasis.com> - - * manage.c (unmanaged_window): added. - - * conf.h (PADDING_LEFT, PADDING_TOP, PADDING_RIGHT, - PADDING_BOTTOM, UNMANAGED_WINDOW_LIST): added. Windows listed in - UNMANAGED_WINDOW_LIST will not be managed. Space reserved for - unmanaged windows can be defined with PADDING_* - -2000-10-19 shawn <sabetts@badbox.secure.basis.org> - - * manage.c (get_window_name): added - -2000-10-17 shawn <sabetts@vcn.bc.ca> - - * events.c (configure_request): resize windows to the max-1. Call - XConfigureWindow as well as XSendEvent. - - * manage.c (scanwins): Now only maps visible windows - - * conf.h: Removed keystroke related defines - - * actions.c: Moved all key activated functions here. Added - key_actions array. - - * events.c (unmap_notify): now properly unmaps windows - - * data.h: added ignore_badwindow - - * main.c (handler): added ability to ignore BadWindow errors - -2000-10-15 shawn <sabetts@vcn.bc.ca> - - * main.c, data.h, events.c: Added ability to kill and hup running - ratpoison processes. diff --git a/src/actions.c b/src/actions.c index e4480da..debc821 100644 --- a/src/actions.c +++ b/src/actions.c @@ -410,23 +410,30 @@ cmd_select (void *data) else str = strdup ((char *) data); - /* try by number */ - if ((n = string_to_window_number (str)) >= 0) - { - if ((w = find_window_number (n))) - set_active_window (w); - else - /* show the window list as feedback */ - show_bar (current_screen ()); - } - else - /* try by name */ + /* Only search if the string contains something to search for. */ + if (strlen (str) > 0) { if ((w = find_window_name (str))) set_active_window (w); + + /* try by number */ + if ((n = string_to_window_number (str)) >= 0) + { + if ((w = find_window_number (n))) + set_active_window (w); + else + /* show the window list as feedback */ + show_bar (current_screen ()); + } else - /* we need to format a string that includes the str */ - message (" no window by that name "); + /* try by name */ + { + if ((w = find_window_name (str))) + set_active_window (w); + else + /* we need to format a string that includes the str */ + message (" no window by that name "); + } } free (str); @@ -144,4 +144,16 @@ extern int ignore_badwindow; /* Arguments passed to ratpoison. */ extern char **myargv; +struct modifier_info +{ +/* unsigned int mode_switch_mask; */ + unsigned int meta_mod_mask; + unsigned int alt_mod_mask; + unsigned int super_mod_mask; + unsigned int hyper_mod_mask; +}; + +/* Keeps track of which mod mask each modifier is under. */ +extern struct modifier_info rp_modifier_info; + #endif /* _RATPOISON_DATA_H */ diff --git a/src/events.c b/src/events.c index 7e68c14..5043122 100644 --- a/src/events.c +++ b/src/events.c @@ -232,6 +232,20 @@ configure_request (XConfigureRequestEvent *e) PRINT_DEBUG("request CWY %d\n", e->y); } + if (e->value_mask & CWStackMode && win->state == STATE_MAPPED) + { + if (e->detail == Above) + { + set_active_window (win); + } + else if (e->detail == Below) + { + set_active_window (find_window_other ()); + } + + PRINT_DEBUG("request CWStackMode %d\n", e->detail); + } + PRINT_DEBUG ("'%s' new window size: %d %d %d %d %d\n", win->name, win->x, win->y, win->width, win->height, win->border); @@ -308,7 +322,7 @@ handle_key (screen_info *s) XGetInputFocus (dpy, &fwin, &revert); XSetInputFocus (dpy, s->key_window, RevertToPointerRoot, CurrentTime); - read_key (&keysym, &mod); + read_key (&keysym, &mod, NULL, 0); if ((key_action = find_keybinding (keysym, mod))) { @@ -337,8 +351,8 @@ void key_press (XEvent *ev) { screen_info *s; - unsigned int modifier = ev->xkey.state; - int ks = XLookupKeysym((XKeyEvent *) ev, 0); + unsigned int modifier; + KeySym ks; s = find_screen (ev->xkey.root); @@ -348,12 +362,15 @@ key_press (XEvent *ev) if (!s) return; + modifier = ev->xkey.state; + cook_keycode ( &ev->xkey, &ks, &modifier, NULL, 0); + if (ks == prefix_key.sym && (modifier == prefix_key.state)) { handle_key (s); } else - { + { if (rp_current_window) { ignore_badwindow = 1; @@ -486,7 +503,7 @@ delegate_event (XEvent *ev) case KeyRelease: PRINT_DEBUG ("KeyRelease %d %d\n", ev->xkey.keycode, ev->xkey.state); break; - + case UnmapNotify: PRINT_DEBUG ("UnmapNotify\n"); unmap_notify (ev); diff --git a/src/events.h b/src/events.h index 7544aa4..9d86117 100644 --- a/src/events.h +++ b/src/events.h @@ -27,5 +27,5 @@ void delegate_event (XEvent *ev); void key_press (XEvent *ev); void map_request (XEvent *ev); void unmap_notify (XEvent *ev); - +void keymap_state (XKeymapEvent *ev); #endif /* _RATPOISON_EVENTS_H */ diff --git a/src/input.c b/src/input.c index 64725d9..d64135f 100644 --- a/src/input.c +++ b/src/input.c @@ -28,6 +28,89 @@ #include "ratpoison.h" +/* Figure out what keysyms are attached to what modifiers */ +void +init_modifier_map () +{ + unsigned int modmasks[] = + { Mod1Mask, Mod2Mask, Mod3Mask, Mod4Mask, Mod5Mask }; + int row, col; /* The row and column in the modifier table. */ + XModifierKeymap *mods; + +/* rp_modifier_info.mode_switch_mask = 0; */ + rp_modifier_info.meta_mod_mask = 0; + rp_modifier_info.alt_mod_mask = 0; + rp_modifier_info.super_mod_mask = 0; + rp_modifier_info.hyper_mod_mask = 0; + + mods = XGetModifierMapping (dpy); + + for (row=3; row < 8; row++) + for (col=0; col < mods->max_keypermod; col++) + { + KeyCode code = mods->modifiermap[(row * mods->max_keypermod) + col]; + + if (code == 0) continue; + + switch (XKeycodeToKeysym(dpy, code, 0)) + { + case XK_Meta_L: + case XK_Meta_R: + rp_modifier_info.meta_mod_mask |= modmasks[row - 3]; + PRINT_DEBUG ("Found Meta on %d\n", + rp_modifier_info.meta_mod_mask); + break; + + case XK_Alt_L: + case XK_Alt_R: + rp_modifier_info.alt_mod_mask |= modmasks[row - 3]; + PRINT_DEBUG ("Found Alt on %d\n", + rp_modifier_info.alt_mod_mask); + break; + + case XK_Super_L: + case XK_Super_R: + rp_modifier_info.super_mod_mask |= modmasks[row - 3]; + PRINT_DEBUG ("Found Super on %d\n", + rp_modifier_info.super_mod_mask); + break; + + case XK_Hyper_L: + case XK_Hyper_R: + rp_modifier_info.hyper_mod_mask |= modmasks[row - 3]; + PRINT_DEBUG ("Found Hyper on %d\n", + rp_modifier_info.hyper_mod_mask); + break; + +/* case XK_Mode_switch: */ +/* rp_modifier_info.mode_switch_mask |= modmasks[row - 3]; */ +/* PRINT_DEBUG ("Found Mode_switch on %d\n", */ +/* rp_modifier_info.mode_switch_mask); */ +/* break; */ + + default: + break; + } + } + + /* Stolen from Emacs 21.0.90 - xterm.c */ + /* If we couldn't find any meta keys, accept any alt keys as meta keys. */ + if (! rp_modifier_info.meta_mod_mask) + { + rp_modifier_info.meta_mod_mask = rp_modifier_info.alt_mod_mask; + rp_modifier_info.alt_mod_mask = 0; + } + + /* If some keys are both alt and meta, + make them just meta, not alt. */ + if (rp_modifier_info.alt_mod_mask & rp_modifier_info.meta_mod_mask) + { + rp_modifier_info.alt_mod_mask &= ~rp_modifier_info.meta_mod_mask; + } + + XFreeModifiermap (mods); +} + /* Return the name of the keysym. caller must free returned pointer */ char * keysym_to_string (KeySym keysym, unsigned int modifier) @@ -63,63 +146,107 @@ keysym_to_string (KeySym keysym, unsigned int modifier) /* Cooks a keycode + modifier into a keysym + modifier. This should be used anytime meaningful key information is to be extracted from a - KeyPress or KeyRelease event. */ -void -cook_keycode (KeyCode keycode, KeySym *keysym, unsigned int *mod) + KeyPress or KeyRelease event. + + returns the number of bytes in keysym_name. If you are not + interested in the keysym name pass in NULL for keysym_name and 0 + for len. */ +int +cook_keycode (XKeyEvent *ev, KeySym *keysym, unsigned int *mod, char *keysym_name, int len) { - KeySym normal, shifted; +int nbytes; - normal = XKeycodeToKeysym(dpy, keycode, 0); - shifted = XKeycodeToKeysym(dpy, keycode, 1); + nbytes = XLookupString (ev, keysym_name, len, keysym, NULL); - /* FIXME: eew, this looks gross. */ - if (*mod & (ShiftMask | LockMask)) - { - /* if the shifted code is not defined, then we use the normal - keysym and keep the shift mask */ - if (shifted == NoSymbol) - { - *keysym = normal; - } - /* But if the shifted code is defined, we use it and remove the - shift mask */ - else if (*mod & ShiftMask) - { - *keysym = shifted; - *mod &= ~(ShiftMask | LockMask); - } - /* If caps lock is on, use shifted for alpha keys */ - else if (normal >= XK_a - && normal <= XK_z - && *mod & LockMask) - { - *keysym = shifted; - } - else - { - *keysym = normal; - } - } - else - { - *keysym = normal; - } + *mod = ev->state; + *mod &= (rp_modifier_info.meta_mod_mask + | rp_modifier_info.alt_mod_mask + | rp_modifier_info.hyper_mod_mask + | rp_modifier_info.super_mod_mask + | ControlMask ); - PRINT_DEBUG ("cooked keysym: %ld '%c' mask: %d\n", - *keysym, (char)*keysym, *mod); + return nbytes; } -void -read_key (KeySym *keysym, unsigned int *modifiers) +/* void */ +/* cook_keycode (KeyCode keycode, KeySym *keysym, unsigned int *mod) */ +/* { */ +/* KeySym normal, shifted; */ + +/* /\* FIXME: Although this should theoretically work, the mod that */ +/* mode_switch is on doesn't seem to get activated. Instead the */ +/* 2<<13 bit gets set! It doesn't seem to matter which mod I put */ +/* Mode_switch on. So if this doesn't work try uncommented the line */ +/* below and commented the current one. *\/ */ + +/* /\* if (*mod & 8192) *\/ */ +/* if (*mod & rp_modifier_info.mode_switch_mask) */ +/* { */ +/* normal = XKeycodeToKeysym(dpy, keycode, 2); */ +/* if (normal == NoSymbol) normal = XKeycodeToKeysym(dpy, keycode, 0); */ +/* shifted = XKeycodeToKeysym(dpy, keycode, 3); */ +/* if (shifted == NoSymbol) shifted = XKeycodeToKeysym(dpy, keycode, 1); */ + +/* /\* Remove the mode switch modifier since we have dealt with it. *\/ */ +/* *mod &= ~rp_modifier_info.mode_switch_mask; */ +/* } */ +/* else */ +/* { */ +/* normal = XKeycodeToKeysym(dpy, keycode, 0); */ +/* shifted = XKeycodeToKeysym(dpy, keycode, 1); */ +/* } */ + +/* /\* FIXME: eew, this looks gross. *\/ */ +/* if (*mod & (ShiftMask | LockMask)) */ +/* { */ +/* /\* if the shifted code is not defined, then we use the normal */ +/* keysym and keep the shift mask *\/ */ +/* if (shifted == NoSymbol) */ +/* { */ +/* *keysym = normal; */ +/* } */ +/* /\* But if the shifted code is defined, we use it and remove the */ +/* shift mask *\/ */ +/* else if (*mod & ShiftMask) */ +/* { */ +/* *keysym = shifted; */ +/* *mod &= ~(ShiftMask | LockMask); */ +/* } */ +/* /\* If caps lock is on, use shifted for alpha keys *\/ */ +/* else if (normal >= XK_a */ +/* && normal <= XK_z */ +/* && *mod & LockMask) */ +/* { */ +/* *keysym = shifted; */ +/* } */ +/* else */ +/* { */ +/* *keysym = normal; */ +/* } */ +/* } */ +/* else */ +/* { */ +/* *keysym = normal; */ +/* } */ + +/* PRINT_DEBUG ("cooked keysym: %ld '%c' mask: %d\n", */ +/* *keysym, (char)*keysym, *mod); */ +/* } */ + +int +read_key (KeySym *keysym, unsigned int *modifiers, char *keysym_name, int len) { XEvent ev; + int nbytes; do { XMaskEvent (dpy, KeyPressMask, &ev); *modifiers = ev.xkey.state; - cook_keycode (ev.xkey.keycode, keysym, modifiers); + nbytes = cook_keycode (&ev.xkey, keysym, modifiers, keysym_name, len); } while (IsModifierKey (*keysym)); + + return nbytes; } static void @@ -162,6 +289,10 @@ get_input (char *prompt) char * get_more_input (char *prompt, char *preinput) { + /* Emacs 21 uses a 513 byte string to store the keysym name. */ + char keysym_buf[513]; + int keysym_bufsize = sizeof (keysym_buf); + int nbytes; screen_info *s = current_screen (); int cur_len = 0; /* Current length of the string. */ int allocated_len=100; /* The amount of memory we allocated for str */ @@ -192,7 +323,7 @@ get_more_input (char *prompt, char *preinput) /* XSync (dpy, False); */ - read_key (&ch, &modifier); + nbytes = read_key (&ch, &modifier, keysym_buf, keysym_bufsize); while (ch != XK_Return) { PRINT_DEBUG ("key %ld\n", ch); @@ -203,18 +334,20 @@ get_more_input (char *prompt, char *preinput) } else { - if (cur_len > allocated_len - 1) + if (cur_len + nbytes > allocated_len - 1) { - allocated_len += 100; + allocated_len += nbytes + 100; str = xrealloc ( str, allocated_len ); } - str[cur_len] = ch; - cur_len++; + + strncpy (&str[cur_len], keysym_buf, nbytes); +/* str[cur_len] = ch; */ + cur_len+=nbytes; update_input_window(s, prompt, str, cur_len); } - read_key (&ch, &modifier); + nbytes = read_key (&ch, &modifier, keysym_buf, keysym_bufsize); } str[cur_len] = 0; diff --git a/src/input.h b/src/input.h index 3a21471..e26f46f 100644 --- a/src/input.h +++ b/src/input.h @@ -23,9 +23,10 @@ #define _RATPOISON_INPUT_H 1 char *keysym_to_string (KeySym keysym, unsigned int modifier); -void cook_keycode (KeyCode keycode, KeySym *keysym, unsigned int *mod); +int cook_keycode (XKeyEvent *ev, KeySym *keysym, unsigned int *mod, char *keysym_name, int len); char *get_input (char *prompt); char *get_more_input (char *prompt, char *preinput); -void read_key (KeySym *keysym, unsigned int *mode); +int read_key (KeySym *keysym, unsigned int *modifiers, char *keysym_name, int len); +void init_modifier_map (); #endif /* ! _RATPOISON_INPUT_H */ @@ -65,6 +65,8 @@ XGCValues gv; struct rp_key prefix_key; +struct modifier_info rp_modifier_info; + /* Command line options */ static struct option ratpoison_longopts[] = { {"help", no_argument, 0, 'h'}, {"version", no_argument, 0, 'v'}, @@ -246,7 +248,8 @@ read_rc_file (FILE *file) PRINT_DEBUG ("rcfile line: %s\n", line); /* do it */ - command (line); + if (*line != '#') + command (line); *line = '\0'; } @@ -376,6 +379,7 @@ main (int argc, char *argv[]) init_numbers (); init_window_list (); initialize_default_keybindings (); + init_modifier_map (); font = XLoadQueryFont (dpy, FONT); if (font == NULL) @@ -451,7 +455,7 @@ init_screen (screen_info *s, int screen_num) XSelectInput(dpy, s->root, PropertyChangeMask | ColormapChangeMask - | SubstructureRedirectMask | KeyPressMask + | SubstructureRedirectMask | KeyPressMask | KeyReleaseMask | SubstructureNotifyMask ); /* Create the program bar window. */ @@ -463,13 +467,13 @@ init_screen (screen_info *s, int screen_num) /* Setup the window that will recieve all keystrokes once the prefix key has been pressed. */ s->key_window = XCreateSimpleWindow (dpy, s->root, 0, 0, 1, 1, 0, WhitePixel (dpy, 0), BlackPixel (dpy, 0)); - XSelectInput (dpy, s->key_window, KeyPressMask); + XSelectInput (dpy, s->key_window, KeyPressMask ); XMapWindow (dpy, s->key_window); /* Create the input window. */ s->input_window = XCreateSimpleWindow (dpy, s->root, 0, 0, 1, 1, 1, fg_color.pixel, bg_color.pixel); - XSelectInput (dpy, s->input_window, KeyPressMask); + XSelectInput (dpy, s->input_window, KeyPressMask ); XSync (dpy, 0); |