mirror of https://github.com/tmux/tmux.git
Merge branch 'obsd-master'
commit
332aca754b
30
key-string.c
30
key-string.c
|
@ -18,7 +18,9 @@
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <wchar.h>
|
||||||
|
|
||||||
#include "tmux.h"
|
#include "tmux.h"
|
||||||
|
|
||||||
|
@ -163,13 +165,13 @@ key_code
|
||||||
key_string_lookup_string(const char *string)
|
key_string_lookup_string(const char *string)
|
||||||
{
|
{
|
||||||
static const char *other = "!#()+,-.0123456789:;<=>'\r\t";
|
static const char *other = "!#()+,-.0123456789:;<=>'\r\t";
|
||||||
key_code key;
|
key_code key, modifiers;
|
||||||
u_int u;
|
u_int u, i;
|
||||||
key_code modifiers;
|
struct utf8_data ud, *udp;
|
||||||
struct utf8_data ud;
|
|
||||||
u_int i;
|
|
||||||
enum utf8_state more;
|
enum utf8_state more;
|
||||||
utf8_char uc;
|
utf8_char uc;
|
||||||
|
char m[MB_LEN_MAX + 1];
|
||||||
|
int mlen;
|
||||||
|
|
||||||
/* Is this no key or any key? */
|
/* Is this no key or any key? */
|
||||||
if (strcasecmp(string, "None") == 0)
|
if (strcasecmp(string, "None") == 0)
|
||||||
|
@ -181,9 +183,21 @@ key_string_lookup_string(const char *string)
|
||||||
if (string[0] == '0' && string[1] == 'x') {
|
if (string[0] == '0' && string[1] == 'x') {
|
||||||
if (sscanf(string + 2, "%x", &u) != 1)
|
if (sscanf(string + 2, "%x", &u) != 1)
|
||||||
return (KEYC_UNKNOWN);
|
return (KEYC_UNKNOWN);
|
||||||
if (u > 0x1fffff)
|
mlen = wctomb(m, u);
|
||||||
return (KEYC_UNKNOWN);
|
if (mlen <= 0 || mlen > MB_LEN_MAX)
|
||||||
return (u);
|
return (KEYC_UNKNOWN);
|
||||||
|
m[mlen] = '\0';
|
||||||
|
|
||||||
|
udp = utf8_fromcstr(m);
|
||||||
|
if (udp == NULL ||
|
||||||
|
udp[0].size == 0 ||
|
||||||
|
udp[1].size != 0 ||
|
||||||
|
utf8_from_data(&udp[0], &uc) != UTF8_DONE) {
|
||||||
|
free(udp);
|
||||||
|
return (KEYC_UNKNOWN);
|
||||||
|
}
|
||||||
|
free(udp);
|
||||||
|
return (uc);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check for modifiers. */
|
/* Check for modifiers. */
|
||||||
|
|
|
@ -271,13 +271,19 @@ screen_redraw_type_of_cell(struct client *c, u_int px, u_int py,
|
||||||
borders |= 2;
|
borders |= 2;
|
||||||
if (screen_redraw_cell_border(c, px, py + 1, pane_status))
|
if (screen_redraw_cell_border(c, px, py + 1, pane_status))
|
||||||
borders |= 1;
|
borders |= 1;
|
||||||
} else {
|
} else if (pane_status == PANE_STATUS_BOTTOM) {
|
||||||
if (py == 0 ||
|
if (py == 0 ||
|
||||||
screen_redraw_cell_border(c, px, py - 1, pane_status))
|
screen_redraw_cell_border(c, px, py - 1, pane_status))
|
||||||
borders |= 2;
|
borders |= 2;
|
||||||
if (py != sy - 1 &&
|
if (py != sy - 1 &&
|
||||||
screen_redraw_cell_border(c, px, py + 1, pane_status))
|
screen_redraw_cell_border(c, px, py + 1, pane_status))
|
||||||
borders |= 1;
|
borders |= 1;
|
||||||
|
} else {
|
||||||
|
if (py == 0 ||
|
||||||
|
screen_redraw_cell_border(c, px, py - 1, pane_status))
|
||||||
|
borders |= 2;
|
||||||
|
if (screen_redraw_cell_border(c, px, py + 1, pane_status))
|
||||||
|
borders |= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in New Issue