summaryrefslogtreecommitdiff
path: root/src/actions.c
diff options
context:
space:
mode:
authorsabetts <sabetts>2002-10-18 08:39:17 +0000
committersabetts <sabetts>2002-10-18 08:39:17 +0000
commit306424d93d5a1a379a751394acbc696415b4281b (patch)
tree9af6849d515046d8414f7e6ac7db6cc6104fbbd1 /src/actions.c
parentcb9b0e5ee455fd615338baf828fd3ea8a541b395 (diff)
downloadratpoison-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.c55
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;
}