diff options
author | sabetts <sabetts> | 2000-12-09 11:34:43 +0000 |
---|---|---|
committer | sabetts <sabetts> | 2000-12-09 11:34:43 +0000 |
commit | 1a8458cd5a3252f9d2141de13ef67a30b215476c (patch) | |
tree | 4d4b0b7c70c141f83c66c2adff651cb5b8c9d49e /src/actions.c | |
parent | 7ee9190d0849e8df707611b63b42e976bbd8d827 (diff) | |
download | ratpoison-1a8458cd5a3252f9d2141de13ef67a30b215476c.zip |
* input.c (cook_keycode): properly handle LockMask
* 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.
Diffstat (limited to 'src/actions.c')
-rw-r--r-- | src/actions.c | 53 |
1 files changed, 51 insertions, 2 deletions
diff --git a/src/actions.c b/src/actions.c index 323f519..095604b 100644 --- a/src/actions.c +++ b/src/actions.c @@ -67,8 +67,15 @@ next_window (void *data) void last_window (void *data) { + rp_window *oldwin = rp_current_window; + rp_current_window = find_last_accessed_window (); set_active_window (rp_current_window); + + if (rp_current_window == oldwin) + { + display_msg_in_bar (&screens[0], "No other window."); + } } @@ -145,7 +152,17 @@ execute_command (void *data) { char cmd[100]; - get_input (rp_current_window->scr, "Command: ", cmd, 100); + if (rp_current_window) + { + get_input (rp_current_window->scr, "Command: ", cmd, 100); + } + else + { + /* FIXME: We can always assume there is 1 screen, but which one + is the active one? Need to test on multi-screen x-servers. */ + get_input (&screens[0], "Command: ", cmd, 100); + } + PRINT_DEBUG ("user entered: %s\n", cmd); spawn (cmd); @@ -163,8 +180,10 @@ spawn(void *data) if (fork() == 0) { putenv(DisplayString(dpy)); execlp(prog, prog, 0); - fprintf (stderr, "exec %s ", prog); + + PRINT_ERROR ("exec %s ", prog); perror(" failed"); + exit(EXIT_FAILURE); } exit(0); @@ -173,6 +192,32 @@ spawn(void *data) PRINT_DEBUG ("spawned %s\n", prog); } +/* Switch to a different Window Manager. Thanks to +"Chr. v. Stuckrad" <stucki@math.fu-berlin.de> for the patch. */ +void +switch_to(void *which) +{ + char *prog=(char *)which; + + PRINT_DEBUG ("Switching to %s\n", prog); + + putenv(DisplayString(dpy)); + execlp(prog, prog, 0); + + PRINT_ERROR ("exec %s ", prog); + perror(" failed"); +} + +/* Quit ratpoison. Thanks to +"Chr. v. Stuckrad" <stucki@math.fu-berlin.de> for the patch. */ +void +bye(void *dummy) +{ + PRINT_DEBUG ("Exiting\n"); + clean_up (); + exit (EXIT_SUCCESS); +} + void goto_window_number (int n) { @@ -180,6 +225,10 @@ goto_window_number (int n) if ((win = find_window_by_number (n)) == NULL) { + /* Display window list to indicate failure. */ + /* FIXME: We can always assume there is 1 screen, but which one + is the active one? Need to test on multi-screen x-servers. */ + show_bar (&screens[0]); return; } |