Hi
These need to be two octets so you can send special keys too.
But how about just allowing hex values to be used anywhere? Something
like this:
Index: key-string.c
===================================================================
RCS file: /cvs/src/usr.bin/tmux/key-string.c,v
retrieving revision 1.22
diff -u -p -r1.22 key-string.c
--- key-string.c 21 Jan 2012 08:40:09 -0000 1.22
+++ key-string.c 4 Mar 2012 07:19:19 -0000
@@ -136,7 +136,17 @@ key_string_get_modifiers(const char **st
int
key_string_lookup_string(const char *string)
{
+ size_t size;
int key, modifiers;
+ u_short u;
+
+ /* Is this a hexadecimal value? */
+ size = strlen(string);
+ if (string[0] == '0' && string[1] == 'x' && size == 6) {
+ if (sscanf(string + 2, "%04hx", &u) != 1)
+ return (KEYC_NONE);
+ return (u);
+ }
/* Check for modifiers. */
modifiers = 0;
On Sat, Mar 03, 2012 at 07:34:19PM -0800, George Nachman wrote:
> This patch adds a -h argument to send-keys. It is intended for control
> mode to avoid any running into problems with transmitting certain bytes
> over a transport with inband signaling (e.g., telnet) or for sending
> special keys that the terminal driver might affect (like newlines).
> Example usage to send ^]:
> send-keys -h 1d
> Index: cmd-send-keys.c
> ===================================================================
> --- cmd-send-keys.c (revision 2710)
> +++ cmd-send-keys.c (working copy)
> @@ -31,14 +31,32 @@
> *
> *const struct cmd_entry cmd_send_keys_entry = {
> * "send-keys", "send",
> - "lRt:", 0, -1,
> - "[-lR] [-t target-pane] key ...",
> + "hlRt:", 0, -1,
> + "[-hlR] [-t target-pane] key ...",
> * 0,
> * NULL,
> * NULL,
> * cmd_send_keys_exec
> *};
> *
> +static int
> +hex_char_to_int(char hex)
> +{
> + if (hex >= '0' && hex <= '9')
> + return hex - '0';
> + if (hex >= 'a' && hex <= 'f')
> + return hex - 'a' + 10;
> + if (hex >= 'A' && hex <= 'F')
> + return hex - 'A' + 10;
> + return 0;
> +}
> +
> +static int
> +decode_hex_octet(char *hex)
> +{
> + return hex_char_to_int(hex[0]) * 16 + hex_char_to_int(hex[1]);
> +}
> +
> *int
> *cmd_send_keys_exec(struct cmd *self, struct cmd_ctx *ctx)
> *{
> @@ -71,8 +89,14 @@
> * for (i = 0; i < args->argc; i++) {
> * str = args->argv[i];
> *
> - if (!args_has(args, 'l') &&
> - * *(key = key_string_lookup_string(str)) != KEYC_NONE) {
> + if (args_has(args, 'h')) {
> + int arglen = strlen(args->argv[i]);
> + for (int j = 0; j < arglen - 1; j += 2) {
> + window_pane_key(
> + * *wp, s, decode_hex_octet(args->argv[i]
> + j));
> + }
> + } else if (!args_has(args, 'l') &&
> + * (key = key_string_lookup_string(str)) !=
> KEYC_NONE) {
> * * *window_pane_key(wp, s, key);
> * } else {
> * for (; *str != '\0'; str++)
> Index: tmux.1
> ===================================================================
> --- tmux.1 (revision 2710)
> +++ tmux.1 (working copy)
> @@ -1672,7 +1672,7 @@
> *or
> *.Em emacs-copy .
> *.It Xo Ic send-keys
> -.Op Fl lR
> +.Op Fl lhR
> *.Op Fl t Ar target-pane
> *.Ar key Ar ...
> *.Xc
> @@ -1690,6 +1690,15 @@
> *.Fl l
> *flag disables key name lookup and sends the keys literally.
> *All arguments are sent sequentially from first to last.
> +.Pp
> +If
> +.Fl h
> +is present, the
> +.Ar key
> +arguments should each be formatted as a string of two-digit
> +hexadecimal values. They must encode a valid sequence of bytes for the
> character
> +encoding used by
> +.Ar target-pane .
> *The
> *.Fl R
> *flag causes the terminal state to be reset.
------------------------------------------------------------------------------
Virtualization & Cloud Management Using Capacity Planning
Cloud computing makes use of virtualization - but cloud computing
also focuses on allowing computing to be delivered as a service.
http://www.accelacomm.com/jaw/sfnl/114/51521223/
_______________________________________________
tmux-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tmux-users