mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 09:26:05 +00:00 
			
		
		
		
	Merge branch 'obsd-master'
This commit is contained in:
		
							
								
								
									
										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;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user