reedline/terminal_extensions/
bracketed_paste.rs

1use crossterm::{event, execute};
2
3/// Helper managing proper setup and teardown of bracketed paste mode
4///
5/// <https://en.wikipedia.org/wiki/Bracketed-paste>
6#[derive(Default)]
7pub(crate) struct BracketedPasteGuard {
8    enabled: bool,
9    active: bool,
10}
11
12impl BracketedPasteGuard {
13    pub fn set(&mut self, enable: bool) {
14        self.enabled = enable;
15    }
16    pub fn enter(&mut self) {
17        if self.enabled && !self.active {
18            let _ = execute!(std::io::stdout(), event::EnableBracketedPaste);
19            self.active = true;
20        }
21    }
22    pub fn exit(&mut self) {
23        if self.active {
24            let _ = execute!(std::io::stdout(), event::DisableBracketedPaste);
25            self.active = false;
26        }
27    }
28}
29
30impl Drop for BracketedPasteGuard {
31    fn drop(&mut self) {
32        if self.active {
33            let _ = execute!(std::io::stdout(), event::DisableBracketedPaste);
34        }
35    }
36}