diff --git a/input.cpp b/input.cpp index 7e910d00b..a01a8f133 100644 --- a/input.cpp +++ b/input.cpp @@ -434,8 +434,8 @@ static wint_t input_exec_binding( const input_mapping_t &m, const wcstring &seq */ static wint_t input_try_mapping( const input_mapping_t &m) { - int j, k; wint_t c=0; + int j; /* Check if the actual function code of this mapping is on the stack @@ -448,15 +448,22 @@ static wint_t input_try_mapping( const input_mapping_t &m) input_unreadch( c ); const wchar_t *str = m.seq.c_str(); - for( j=0; str[j] != L'\0' && str[j] == (c=input_common_readch( j>0 )); j++ ) - ; + for (j=0; str[j] != L'\0'; j++) + { + bool timed = (j > 0); + c = input_common_readch(timed); + if (str[j] != c) + break; + } if( str[j] == L'\0' ) { + /* We matched the entire sequence */ return input_exec_binding( m, m.seq ); } else { + int k; /* Return the read characters */ diff --git a/reader.cpp b/reader.cpp index 2ec488043..bc6b51239 100644 --- a/reader.cpp +++ b/reader.cpp @@ -672,6 +672,13 @@ void reader_init() shell_modes.c_cc[VMIN]=1; shell_modes.c_cc[VTIME]=0; + // PCA disable VDSUSP (typically control-Y), which is a funny job control + // function available only on OS X and BSD systems + // This lets us use control-Y for yank instead + #ifdef VDSUSP + shell_modes.c_cc[VDSUSP] = _POSIX_VDISABLE; + #endif + /* Repaint if necessary before each byte is read. This lets us react immediately to universal variable color changes. */ input_common_set_poll_callback(reader_repaint_if_needed); }