Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
cs24-19fa
git_rec_nano
Commits
fe38b784
Commit
fe38b784
authored
8 years ago
by
Benno Schulenberg
Browse files
Options
Download
Email Patches
Plain Diff
tweaks: adjust indentation after the previous changes
parent
1af1f5c9
master
feature/match-parens
refactor/readbility
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
src/winio.c
+199
-201
src/winio.c
with
199 additions
and
201 deletions
+199
-201
src/winio.c
View file @
fe38b784
...
...
@@ -382,252 +382,250 @@ int parse_kbinput(WINDOW *win)
return
ERR
;
}
switch
(
escapes
)
{
case
0
:
/* One non-escape: normal input mode. */
retval
=
keycode
;
break
;
case
1
:
/* Reset the escape counter. */
escapes
=
0
;
if
((
keycode
!=
'O'
&&
keycode
!=
'o'
&&
keycode
!=
'['
)
||
get_key_buffer_len
()
==
0
||
*
key_buffer
==
0x1B
)
{
/* One escape followed by a single non-escape:
* meta key sequence mode. */
if
(
!
solitary
||
(
keycode
>=
0x20
&&
keycode
<
0x7F
))
meta_key
=
TRUE
;
retval
=
tolower
(
keycode
);
}
else
/* One escape followed by a non-escape, and there
* are more codes waiting: escape sequence mode. */
retval
=
parse_escape_sequence
(
win
,
keycode
);
break
;
case
2
:
if
(
double_esc
)
{
/* An "ESC ESC [ X" sequence from Option+arrow. */
switch
(
keycode
)
{
case
'A'
:
retval
=
KEY_HOME
;
break
;
case
'B'
:
retval
=
KEY_END
;
break
;
switch
(
escapes
)
{
case
0
:
/* One non-escape: normal input mode. */
retval
=
keycode
;
break
;
case
1
:
/* Reset the escape counter. */
escapes
=
0
;
if
((
keycode
!=
'O'
&&
keycode
!=
'o'
&&
keycode
!=
'['
)
||
get_key_buffer_len
()
==
0
||
*
key_buffer
==
0x1B
)
{
/* One escape followed by a single non-escape:
* meta key sequence mode. */
if
(
!
solitary
||
(
keycode
>=
0x20
&&
keycode
<
0x7F
))
meta_key
=
TRUE
;
retval
=
tolower
(
keycode
);
}
else
/* One escape followed by a non-escape, and there
* are more codes waiting: escape sequence mode. */
retval
=
parse_escape_sequence
(
win
,
keycode
);
break
;
case
2
:
if
(
double_esc
)
{
/* An "ESC ESC [ X" sequence from Option+arrow. */
switch
(
keycode
)
{
case
'A'
:
retval
=
KEY_HOME
;
break
;
case
'B'
:
retval
=
KEY_END
;
break
;
#ifndef NANO_TINY
case
'C'
:
retval
=
controlright
;
break
;
case
'D'
:
retval
=
controlleft
;
break
;
case
'C'
:
retval
=
controlright
;
break
;
case
'D'
:
retval
=
controlleft
;
break
;
#endif
}
double_esc
=
FALSE
;
escapes
=
0
;
}
else
if
(
get_key_buffer_len
()
==
0
)
{
if
((
'0'
<=
keycode
&&
keycode
<=
'2'
&&
byte_digits
==
0
)
||
(
'0'
<=
keycode
&&
keycode
<=
'9'
&&
byte_digits
>
0
))
{
/* Two escapes followed by one or more decimal
* digits, and there aren't any other codes
* waiting: byte sequence mode. If the range
* of the byte sequence is limited to 2XX (the
* first digit is between '0' and '2' and the
* others between '0' and '9', interpret it. */
int
byte
;
byte_digits
++
;
byte
=
get_byte_kbinput
(
keycode
);
/* If we've read in a complete byte sequence,
* reset the escape counter and the byte sequence
* counter, and put the obtained byte value back
* into the key buffer. */
if
(
byte
!=
ERR
)
{
char
*
byte_mb
;
int
byte_mb_len
,
*
seq
,
i
;
escapes
=
0
;
byte_digits
=
0
;
/* Put back the multibyte equivalent of
* the byte value. */
byte_mb
=
make_mbchar
((
long
)
byte
,
&
byte_mb_len
);
seq
=
(
int
*
)
nmalloc
(
byte_mb_len
*
sizeof
(
int
));
for
(
i
=
0
;
i
<
byte_mb_len
;
i
++
)
seq
[
i
]
=
(
unsigned
char
)
byte_mb
[
i
];
unget_input
(
seq
,
byte_mb_len
);
free
(
byte_mb
);
free
(
seq
);
}
}
else
{
/* Reset the escape counter. */
escapes
=
0
;
if
(
byte_digits
==
0
)
/* Two escapes followed by a non-decimal
* digit (or a decimal digit that would
* create a byte sequence greater than 2XX)
* and there aren't any other codes waiting:
* control character sequence mode. */
retval
=
get_control_kbinput
(
keycode
);
else
{
/* An invalid digit in the middle of a byte
* sequence: reset the byte sequence counter
* and save the code we got as the result. */
byte_digits
=
0
;
retval
=
keycode
;
}
}
}
else
if
(
keycode
==
'['
&&
key_buffer_len
>
0
&&
'A'
<=
*
key_buffer
&&
*
key_buffer
<=
'D'
)
{
/* This is an iTerm2 sequence: ^[ ^[ [ X. */
double_esc
=
TRUE
;
}
else
{
/* Two escapes followed by a non-escape, and there
* are more codes waiting: combined meta and escape
* sequence mode. */
}
double_esc
=
FALSE
;
escapes
=
0
;
}
else
if
(
get_key_buffer_len
()
==
0
)
{
if
((
'0'
<=
keycode
&&
keycode
<=
'2'
&&
byte_digits
==
0
)
||
(
'0'
<=
keycode
&&
keycode
<=
'9'
&&
byte_digits
>
0
))
{
/* Two escapes followed by one or more decimal
* digits, and there aren't any other codes
* waiting: byte sequence mode. If the range
* of the byte sequence is limited to 2XX (the
* first digit is between '0' and '2' and the
* others between '0' and '9', interpret it. */
int
byte
;
byte_digits
++
;
byte
=
get_byte_kbinput
(
keycode
);
/* If we've read in a complete byte sequence,
* reset the escape counter and the byte sequence
* counter, and put the obtained byte value back
* into the key buffer. */
if
(
byte
!=
ERR
)
{
char
*
byte_mb
;
int
byte_mb_len
,
*
seq
,
i
;
escapes
=
0
;
meta_key
=
TRUE
;
retval
=
parse_escape_sequence
(
win
,
keycode
);
byte_digits
=
0
;
/* Put back the multibyte equivalent of
* the byte value. */
byte_mb
=
make_mbchar
((
long
)
byte
,
&
byte_mb_len
);
seq
=
(
int
*
)
nmalloc
(
byte_mb_len
*
sizeof
(
int
));
for
(
i
=
0
;
i
<
byte_mb_len
;
i
++
)
seq
[
i
]
=
(
unsigned
char
)
byte_mb
[
i
];
unget_input
(
seq
,
byte_mb_len
);
free
(
byte_mb
);
free
(
seq
);
}
break
;
case
3
:
}
else
{
/* Reset the escape counter. */
escapes
=
0
;
if
(
get_key_buffer_len
()
==
0
)
/* Three escapes followed by a non-escape, and no
* other codes are waiting: normal input mode. */
if
(
byte_digits
==
0
)
/* Two escapes followed by a non-decimal
* digit (or a decimal digit that would
* create a byte sequence greater than 2XX)
* and there aren't any other codes waiting:
* control character sequence mode. */
retval
=
get_control_kbinput
(
keycode
);
else
{
/* An invalid digit in the middle of a byte
* sequence: reset the byte sequence counter
* and save the code we got as the result. */
byte_digits
=
0
;
retval
=
keycode
;
else
/* Three escapes followed by a non-escape, and more
* codes are waiting: combined control character and
* escape sequence mode. First interpret the escape
* sequence, then the result as a control sequence. */
retval
=
get_control_kbinput
(
parse_escape_sequence
(
win
,
keycode
));
break
;
}
}
}
else
if
(
keycode
==
'['
&&
key_buffer_len
>
0
&&
'A'
<=
*
key_buffer
&&
*
key_buffer
<=
'D'
)
{
/* This is an iTerm2 sequence: ^[ ^[ [ X. */
double_esc
=
TRUE
;
}
else
{
/* Two escapes followed by a non-escape, and there are more
* codes waiting: combined meta and escape sequence mode. */
escapes
=
0
;
meta_key
=
TRUE
;
retval
=
parse_escape_sequence
(
win
,
keycode
);
}
break
;
case
3
:
/* Reset the escape counter. */
escapes
=
0
;
if
(
get_key_buffer_len
()
==
0
)
/* Three escapes followed by a non-escape, and no
* other codes are waiting: normal input mode. */
retval
=
keycode
;
else
/* Three escapes followed by a non-escape, and more
* codes are waiting: combined control character and
* escape sequence mode. First interpret the escape
* sequence, then the result as a control sequence. */
retval
=
get_control_kbinput
(
parse_escape_sequence
(
win
,
keycode
));
break
;
}
if
(
retval
==
ERR
)
return
ERR
;
switch
(
retval
)
{
switch
(
retval
)
{
#ifdef KEY_SLEFT
/* Slang doesn't support KEY_SLEFT. */
case
KEY_SLEFT
:
/* Slang doesn't support KEY_SLEFT. */
case
KEY_SLEFT
:
#endif
case
KEY_LEFT
:
return
sc_seq_or
(
do_left
,
keycode
);
case
KEY_LEFT
:
return
sc_seq_or
(
do_left
,
keycode
);
#ifdef KEY_SRIGHT
/* Slang doesn't support KEY_SRIGHT. */
case
KEY_SRIGHT
:
/* Slang doesn't support KEY_SRIGHT. */
case
KEY_SRIGHT
:
#endif
case
KEY_RIGHT
:
return
sc_seq_or
(
do_right
,
keycode
);
case
KEY_RIGHT
:
return
sc_seq_or
(
do_right
,
keycode
);
#ifdef KEY_SUP
/* ncurses and Slang don't support KEY_SUP. */
case
KEY_SUP
:
/* ncurses and Slang don't support KEY_SUP. */
case
KEY_SUP
:
#endif
case
KEY_UP
:
return
sc_seq_or
(
do_up_void
,
keycode
);
case
KEY_UP
:
return
sc_seq_or
(
do_up_void
,
keycode
);
#ifdef KEY_SDOWN
/* ncurses and Slang don't support KEY_SDOWN. */
case
KEY_SDOWN
:
/* ncurses and Slang don't support KEY_SDOWN. */
case
KEY_SDOWN
:
#endif
case
KEY_DOWN
:
return
sc_seq_or
(
do_down_void
,
keycode
);
case
KEY_DOWN
:
return
sc_seq_or
(
do_down_void
,
keycode
);
#ifdef KEY_SHOME
/* HP-UX 10-11 and Slang don't support KEY_SHOME. */
case
KEY_SHOME
:
/* HP-UX 10-11 and Slang don't support KEY_SHOME. */
case
KEY_SHOME
:
#endif
#ifdef KEY_HOME
case
KEY_HOME
:
case
KEY_HOME
:
#endif
case
KEY_A1
:
/* Home (7) on keypad with NumLock off. */
return
sc_seq_or
(
do_home
,
keycode
);
case
KEY_A1
:
/* Home (7) on keypad with NumLock off. */
return
sc_seq_or
(
do_home
,
keycode
);
#ifdef KEY_SEND
/* HP-UX 10-11 and Slang don't support KEY_SEND. */
case
KEY_SEND
:
/* HP-UX 10-11 and Slang don't support KEY_SEND. */
case
KEY_SEND
:
#endif
#ifdef KEY_END
case
KEY_END
:
#endif
case
KEY_C1
:
/* End (1) on keypad with NumLock off. */
return
sc_seq_or
(
do_end
,
keycode
);
case
KEY_PPAGE
:
case
KEY_A3
:
/* PageUp (9) on keypad with NumLock off. */
return
sc_seq_or
(
do_page_up
,
keycode
);
case
KEY_NPAGE
:
case
KEY_C3
:
/* PageDown (3) on keypad with NumLock off. */
return
sc_seq_or
(
do_page_down
,
keycode
);
case
KEY_ENTER
:
return
sc_seq_or
(
do_enter
,
keycode
);
case
KEY_BACKSPACE
:
return
sc_seq_or
(
do_backspace
,
keycode
);
case
KEY_END
:
#endif
case
KEY_C1
:
/* End (1) on keypad with NumLock off. */
return
sc_seq_or
(
do_end
,
keycode
);
case
KEY_PPAGE
:
case
KEY_A3
:
/* PageUp (9) on keypad with NumLock off. */
return
sc_seq_or
(
do_page_up
,
keycode
);
case
KEY_NPAGE
:
case
KEY_C3
:
/* PageDown (3) on keypad with NumLock off. */
return
sc_seq_or
(
do_page_down
,
keycode
);
case
KEY_ENTER
:
return
sc_seq_or
(
do_enter
,
keycode
);
case
KEY_BACKSPACE
:
return
sc_seq_or
(
do_backspace
,
keycode
);
#ifdef KEY_SDC
/* Slang doesn't support KEY_SDC. */
case
KEY_SDC
:
#endif
case
NANO_CONTROL_8
:
if
(
ISSET
(
REBIND_DELETE
))
return
sc_seq_or
(
do_delete
,
keycode
);
else
return
sc_seq_or
(
do_backspace
,
keycode
);
/* Slang doesn't support KEY_SDC. */
case
KEY_SDC
:
#endif
case
NANO_CONTROL_8
:
if
(
ISSET
(
REBIND_DELETE
))
return
sc_seq_or
(
do_delete
,
keycode
);
else
return
sc_seq_or
(
do_backspace
,
keycode
);
#ifdef KEY_SIC
/* Slang doesn't support KEY_SIC. */
case
KEY_SIC
:
return
sc_seq_or
(
do_insertfile_void
,
keycode
);
/* Slang doesn't support KEY_SIC. */
case
KEY_SIC
:
return
sc_seq_or
(
do_insertfile_void
,
keycode
);
#endif
#ifdef KEY_SBEG
/* Slang doesn't support KEY_SBEG. */
case
KEY_SBEG
:
/* Slang doesn't support KEY_SBEG. */
case
KEY_SBEG
:
#endif
#ifdef KEY_BEG
/* Slang doesn't support KEY_BEG. */
case
KEY_BEG
:
/* Slang doesn't support KEY_BEG. */
case
KEY_BEG
:
#endif
case
KEY_B2
:
/* Center (5) on keypad with NumLock off. */
return
ERR
;
case
KEY_B2
:
/* Center (5) on keypad with NumLock off. */
return
ERR
;
#ifdef KEY_CANCEL
#ifdef KEY_SCANCEL
/* Slang doesn't support KEY_SCANCEL. */
case
KEY_SCANCEL
:
/* Slang doesn't support KEY_SCANCEL. */
case
KEY_SCANCEL
:
#endif
/* Slang doesn't support KEY_CANCEL. */
case
KEY_CANCEL
:
return
first_sc_for
(
currmenu
,
do_cancel
)
->
keycode
;
/* Slang doesn't support KEY_CANCEL. */
case
KEY_CANCEL
:
return
first_sc_for
(
currmenu
,
do_cancel
)
->
keycode
;
#endif
#ifdef KEY_SUSPEND
#ifdef KEY_SSUSPEND
/* Slang doesn't support KEY_SSUSPEND. */
case
KEY_SSUSPEND
:
/* Slang doesn't support KEY_SSUSPEND. */
case
KEY_SSUSPEND
:
#endif
/* Slang doesn't support KEY_SUSPEND. */
case
KEY_SUSPEND
:
return
sc_seq_or
(
do_suspend_void
,
0
);
/* Slang doesn't support KEY_SUSPEND. */
case
KEY_SUSPEND
:
return
sc_seq_or
(
do_suspend_void
,
0
);
#endif
#ifdef PDCURSES
case
KEY_SHIFT_L
:
case
KEY_SHIFT_R
:
case
KEY_CONTROL_L
:
case
KEY_CONTROL_R
:
case
KEY_ALT_L
:
case
KEY_ALT_R
:
return
ERR
;
case
KEY_SHIFT_L
:
case
KEY_SHIFT_R
:
case
KEY_CONTROL_L
:
case
KEY_CONTROL_R
:
case
KEY_ALT_L
:
case
KEY_ALT_R
:
return
ERR
;
#endif
#if !defined(NANO_TINY) && defined(KEY_RESIZE)
/* Since we don't change the default SIGWINCH handler when
* NANO_TINY is defined, KEY_RESIZE is never generated.
* Also, Slang and SunOS 5.7-5.9 don't support
* KEY_RESIZE. */
case
KEY_RESIZE
:
return
ERR
;
/* Since we don't change the default SIGWINCH handler when
* NANO_TINY is defined, KEY_RESIZE is never generated.
* Also, Slang and SunOS 5.7-5.9 don't support KEY_RESIZE. */
case
KEY_RESIZE
:
return
ERR
;
#endif
}
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment
Menu
Projects
Groups
Snippets
Help