@@ -79,6 +79,7 @@ pub struct CrosstermBackend<W: Write> {
79
79
capabilities : Capabilities ,
80
80
supports_keyboard_enhancement_protocol : OnceCell < bool > ,
81
81
mouse_capture_enabled : bool ,
82
+ supports_bracketed_paste : bool ,
82
83
}
83
84
84
85
impl < W > CrosstermBackend < W >
91
92
capabilities : Capabilities :: from_env_or_default ( config) ,
92
93
supports_keyboard_enhancement_protocol : OnceCell :: new ( ) ,
93
94
mouse_capture_enabled : false ,
95
+ supports_bracketed_paste : true ,
94
96
}
95
97
}
96
98
@@ -134,9 +136,16 @@ where
134
136
execute ! (
135
137
self . buffer,
136
138
terminal:: EnterAlternateScreen ,
137
- EnableBracketedPaste ,
138
139
EnableFocusChange
139
140
) ?;
141
+ match execute ! ( self . buffer, EnableBracketedPaste , ) {
142
+ Err ( err) if err. kind ( ) == io:: ErrorKind :: Unsupported => {
143
+ log:: warn!( "Bracketed paste is not supported on this terminal." ) ;
144
+ self . supports_bracketed_paste = false ;
145
+ }
146
+ Err ( err) => return Err ( err) ,
147
+ Ok ( _) => ( ) ,
148
+ } ;
140
149
execute ! ( self . buffer, terminal:: Clear ( terminal:: ClearType :: All ) ) ?;
141
150
if config. enable_mouse_capture {
142
151
execute ! ( self . buffer, EnableMouseCapture ) ?;
@@ -177,9 +186,11 @@ where
177
186
if self . supports_keyboard_enhancement_protocol ( ) {
178
187
execute ! ( self . buffer, PopKeyboardEnhancementFlags ) ?;
179
188
}
189
+ if self . supports_bracketed_paste {
190
+ execute ! ( self . buffer, DisableBracketedPaste , ) ?;
191
+ }
180
192
execute ! (
181
193
self . buffer,
182
- DisableBracketedPaste ,
183
194
DisableFocusChange ,
184
195
terminal:: LeaveAlternateScreen
185
196
) ?;
@@ -195,12 +206,8 @@ where
195
206
// disable without calling enable previously
196
207
let _ = execute ! ( stdout, DisableMouseCapture ) ;
197
208
let _ = execute ! ( stdout, PopKeyboardEnhancementFlags ) ;
198
- execute ! (
199
- stdout,
200
- DisableBracketedPaste ,
201
- DisableFocusChange ,
202
- terminal:: LeaveAlternateScreen
203
- ) ?;
209
+ let _ = execute ! ( stdout, DisableBracketedPaste ) ;
210
+ execute ! ( stdout, DisableFocusChange , terminal:: LeaveAlternateScreen ) ?;
204
211
terminal:: disable_raw_mode ( )
205
212
}
206
213
0 commit comments