From b2cf74bb4a8286c5a191c54e947c0b2c9bb7cf96 Mon Sep 17 00:00:00 2001 From: Johannes Altmanninger Date: Sun, 11 Dec 2022 19:30:02 +0100 Subject: Implement bracketed paste Text pasted into Kakoune's normal mode is interpreted as command sequence, which is probably never what the user wants. Text pasted during insert mode will be inserted fine but may trigger auto-indentation hooks which is likely not what users want. Bracketed paste is pair of escape codes sent by terminals that allow applications to distinguish between pasted text and typed text. Let's use this feature to always insert pasted text verbatim, skipping keymap lookup and the InsertChar hook. In future, we could add a dedicated Paste hook. We need to make a decision on whether to paste before or after the selection. I chose "before" because that's what I'm used to. TerminalUI::set_on_key has EventManager::instance().force_signal(0); I'm not sure if we want the same for TerminalUI::set_on_paste? I assume it doesn't matter because they are always called in tandem. Closes #2465 --- src/input_handler.hh | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/input_handler.hh') diff --git a/src/input_handler.hh b/src/input_handler.hh index 5cb150b5..b7e53aaf 100644 --- a/src/input_handler.hh +++ b/src/input_handler.hh @@ -72,6 +72,8 @@ public: void insert(InsertMode mode, int count); // repeat last insert mode key sequence void repeat_last_insert(); + // insert a string without affecting the mode stack + void paste(StringView content); // enter prompt mode, callback is called on each change, // abort or validation with corresponding PromptEvent value -- cgit v1.2.3