diff options
author | sabetts <sabetts> | 2002-10-18 08:39:17 +0000 |
---|---|---|
committer | sabetts <sabetts> | 2002-10-18 08:39:17 +0000 |
commit | 306424d93d5a1a379a751394acbc696415b4281b (patch) | |
tree | 9af6849d515046d8414f7e6ac7db6cc6104fbbd1 /src/actions.c | |
parent | cb9b0e5ee455fd615338baf828fd3ea8a541b395 (diff) | |
download | ratpoison-306424d93d5a1a379a751394acbc696415b4281b.zip |
* src/split.c (VERTICALLY): new define
(VERTICALLY): likewise
(split_frame): new argument 'pixels'. The current frame is split
and resized to 'pixels' pixels.
(v_split_frame): new argument 'pixels'. prototype updated.
(h_split_frame): likewise
* src/actions.c (user_commands): hsplit, vsplit, and split take a
string argument.
(read_split): new function
(cmd_h_split): takes a ratio or number to determine how big the
frame split will be.
(cmd_v_split): likewise
Diffstat (limited to 'src/actions.c')
-rw-r--r-- | src/actions.c | 55 |
1 files changed, 50 insertions, 5 deletions
diff --git a/src/actions.c b/src/actions.c index 4fcd0e4..87ad310 100644 --- a/src/actions.c +++ b/src/actions.c @@ -52,7 +52,7 @@ static user_command user_commands[] = {"meta", cmd_meta, arg_STRING}, {"license", cmd_license, arg_VOID}, {"help", cmd_help, arg_VOID}, - {"hsplit", cmd_h_split, arg_VOID}, + {"hsplit", cmd_h_split, arg_STRING}, {"kill", cmd_kill, arg_VOID}, {"redisplay", cmd_redisplay, arg_VOID}, {"newwm", cmd_newwm, arg_STRING}, @@ -67,11 +67,11 @@ static user_command user_commands[] = {"rudeness", cmd_rudeness, arg_STRING}, {"select", cmd_select, arg_STRING}, {"source", cmd_source, arg_STRING}, - {"split", cmd_h_split, arg_VOID}, + {"split", cmd_h_split, arg_STRING}, {"title", cmd_rename, arg_STRING}, {"unbind", cmd_unbind, arg_STRING}, {"version", cmd_version, arg_VOID}, - {"vsplit", cmd_v_split, arg_VOID}, + {"vsplit", cmd_v_split, arg_STRING}, {"windows", cmd_windows, arg_VOID}, {"setenv", cmd_setenv, arg_STRING}, {"getenv", cmd_getenv, arg_STRING}, @@ -1263,17 +1263,62 @@ cmd_echo (int interactive, void *data) return NULL; } +static int +read_split (const char *str, int max) +{ + int a, b, p; + + if (sscanf(str, "%d/%d", &a, &b) == 2) + { + p = (int)(max * (float)(a) / (float)(b)); + } + else if (sscanf(str, "%d", &p) == 1) + { + } + else + { + /* Failed to read input. */ + p = -1; + } + + /* Input out of range. */ + if (p <= 0 || p >= max) + return -1; + + return p; +} + char * cmd_h_split (int interactive, void *data) { - h_split_frame (current_screen()->rp_current_frame); + int pixels; + + /* Default to dividing the frame in half. */ + if (data == NULL) + pixels = current_screen()->rp_current_frame->height / 2; + else + pixels = read_split (data, current_screen()->rp_current_frame->height); + + if (pixels > 0) + h_split_frame (current_screen()->rp_current_frame, pixels); + return NULL; } char * cmd_v_split (int interactive, void *data) { - v_split_frame (current_screen()->rp_current_frame); + int pixels; + + /* Default to dividing the frame in half. */ + if (data == NULL) + pixels = current_screen()->rp_current_frame->width / 2; + else + pixels = read_split (data, current_screen()->rp_current_frame->width); + + if (pixels > 0) + v_split_frame (current_screen()->rp_current_frame, pixels); + return NULL; } |