add keyboard enhancements to support shift_return (#1743)
For terminal that supports [keyboard enhancements](https://docs.rs/libcrossterm/latest/crossterm/enum.KeyboardEnhancementFlags.html), adds the enhancements (enabling [kitty keyboard protocol](https://sw.kovidgoyal.net/kitty/keyboard-protocol/)) to support shift+enter listener. Those users (users with terminals listed on [KPP](https://sw.kovidgoyal.net/kitty/keyboard-protocol/)) should be able to press shift+return for new line --------- Co-authored-by: easong-openai <easong@openai.com>
This commit is contained in:
@@ -469,6 +469,20 @@ impl ChatComposer<'_> {
|
|||||||
self.textarea.insert_newline();
|
self.textarea.insert_newline();
|
||||||
(InputResult::None, true)
|
(InputResult::None, true)
|
||||||
}
|
}
|
||||||
|
Input {
|
||||||
|
key: Key::Char('d'),
|
||||||
|
ctrl: true,
|
||||||
|
alt: false,
|
||||||
|
shift: false,
|
||||||
|
} => {
|
||||||
|
self.textarea.input(Input {
|
||||||
|
key: Key::Delete,
|
||||||
|
ctrl: false,
|
||||||
|
alt: false,
|
||||||
|
shift: false,
|
||||||
|
});
|
||||||
|
(InputResult::None, true)
|
||||||
|
}
|
||||||
input => self.handle_input_basic(input),
|
input => self.handle_input_basic(input),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,9 @@ use std::io::stdout;
|
|||||||
use codex_core::config::Config;
|
use codex_core::config::Config;
|
||||||
use crossterm::event::DisableBracketedPaste;
|
use crossterm::event::DisableBracketedPaste;
|
||||||
use crossterm::event::EnableBracketedPaste;
|
use crossterm::event::EnableBracketedPaste;
|
||||||
|
use crossterm::event::KeyboardEnhancementFlags;
|
||||||
|
use crossterm::event::PopKeyboardEnhancementFlags;
|
||||||
|
use crossterm::event::PushKeyboardEnhancementFlags;
|
||||||
use ratatui::backend::CrosstermBackend;
|
use ratatui::backend::CrosstermBackend;
|
||||||
use ratatui::crossterm::execute;
|
use ratatui::crossterm::execute;
|
||||||
use ratatui::crossterm::terminal::disable_raw_mode;
|
use ratatui::crossterm::terminal::disable_raw_mode;
|
||||||
@@ -20,6 +23,17 @@ pub fn init(_config: &Config) -> Result<Tui> {
|
|||||||
execute!(stdout(), EnableBracketedPaste)?;
|
execute!(stdout(), EnableBracketedPaste)?;
|
||||||
|
|
||||||
enable_raw_mode()?;
|
enable_raw_mode()?;
|
||||||
|
// Enable keyboard enhancement flags so modifiers for keys like Enter are disambiguated.
|
||||||
|
// chat_composer.rs is using a keyboard event listener to enter for any modified keys
|
||||||
|
// to create a new line that require this.
|
||||||
|
execute!(
|
||||||
|
stdout(),
|
||||||
|
PushKeyboardEnhancementFlags(
|
||||||
|
KeyboardEnhancementFlags::DISAMBIGUATE_ESCAPE_CODES
|
||||||
|
| KeyboardEnhancementFlags::REPORT_EVENT_TYPES
|
||||||
|
| KeyboardEnhancementFlags::REPORT_ALTERNATE_KEYS
|
||||||
|
)
|
||||||
|
)?;
|
||||||
set_panic_hook();
|
set_panic_hook();
|
||||||
|
|
||||||
let backend = CrosstermBackend::new(stdout());
|
let backend = CrosstermBackend::new(stdout());
|
||||||
@@ -37,6 +51,7 @@ fn set_panic_hook() {
|
|||||||
|
|
||||||
/// Restore the terminal to its original state
|
/// Restore the terminal to its original state
|
||||||
pub fn restore() -> Result<()> {
|
pub fn restore() -> Result<()> {
|
||||||
|
execute!(stdout(), PopKeyboardEnhancementFlags)?;
|
||||||
execute!(stdout(), DisableBracketedPaste)?;
|
execute!(stdout(), DisableBracketedPaste)?;
|
||||||
disable_raw_mode()?;
|
disable_raw_mode()?;
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|||||||
Reference in New Issue
Block a user