| 243 | } |
| 244 | |
| 245 | pub fn delete_char_backward(&mut self) { |
| 246 | if self.delete_selection() { |
| 247 | return; |
| 248 | } |
| 249 | let end = self.cursor_char_idx(); |
| 250 | if end == 0 { |
| 251 | return; |
| 252 | } |
| 253 | let cursor_before = self.cursor; |
| 254 | let start = self.document.previous_grapheme_boundary(end); |
| 255 | let deleted = self.document.slice_text(start, end); |
| 256 | self.document.remove_char_range(start, end); |
| 257 | let (line, column) = self.document.char_to_position(start); |
| 258 | self.cursor = self.cursor.set(line, column, &self.document); |
| 259 | self.push_undo(UndoRecord { |
| 260 | start, |
| 261 | inserted: String::new(), |
| 262 | deleted, |
| 263 | cursor_before, |
| 264 | }); |
| 265 | } |
| 266 | |
| 267 | pub fn delete_current_line(&mut self) { |
| 268 | self.delete_line(self.cursor.line); |