@@ -394,6 +394,8 @@ def toast(message: str, duration: float = 5.0) -> None:
394394 _toast_queue .put_nowait ((message , duration ))
395395
396396
397+ # Matches both image and text placeholders:
398+ # [image:id,640x480] or [text:id,60 lines]
397399_ATTACHMENT_PLACEHOLDER_RE = re .compile (
398400 r"\[(?P<type>image|text):(?P<id>[a-zA-Z0-9_\-\.]+)"
399401 r"(?:,(?P<width>\d+)x(?P<height>\d+)|,(?P<line_count>\d+) lines)?\]"
@@ -474,10 +476,7 @@ def _delete_placeholder_at_cursor(buff, is_backspace: bool) -> bool:
474476
475477 # Backspace: delete if cursor is inside OR right after placeholder
476478 # Delete: delete if cursor is inside OR right before placeholder
477- if is_backspace :
478- should_delete = start < cursor <= end
479- else :
480- should_delete = start <= cursor < end
479+ should_delete = start < cursor <= end if is_backspace else start <= cursor < end
481480
482481 if should_delete :
483482 attachment_id = match .group ("id" )
@@ -490,14 +489,14 @@ def _delete_placeholder_at_cursor(buff, is_backspace: bool) -> bool:
490489
491490 @_kb .add ("backspace" , eager = True )
492491 def _smart_backspace (event : KeyPressEvent ) -> None :
493- """Delete entire placeholder if cursor is within/after one, otherwise backspace normally."""
492+ """Delete entire placeholder if cursor is within/after one, else backspace normally."""
494493 if not _delete_placeholder_at_cursor (event .current_buffer , is_backspace = True ):
495494 event .current_buffer .delete_before_cursor (1 )
496495 self ._last_buffer_text = event .current_buffer .text
497496
498497 @_kb .add ("delete" , eager = True )
499498 def _smart_delete (event : KeyPressEvent ) -> None :
500- """Delete entire placeholder if cursor is within/before one, otherwise delete normally."""
499+ """Delete entire placeholder if cursor is within/before one, else delete normally."""
501500 if not _delete_placeholder_at_cursor (event .current_buffer , is_backspace = False ):
502501 event .current_buffer .delete (1 )
503502 self ._last_buffer_text = event .current_buffer .text
@@ -663,8 +662,8 @@ def _check_and_replace_large_paste(self, buffer) -> None:
663662 if not current_text .startswith (previous_text ):
664663 return
665664
666- inserted_text = current_text [len (previous_text ):]
667- inserted_line_count = inserted_text .count (' \n ' ) + 1
665+ inserted_text = current_text [len (previous_text ) :]
666+ inserted_line_count = inserted_text .count (" \n " ) + 1
668667
669668 if inserted_line_count <= LARGE_PASTE_LINE_THRESHOLD :
670669 return
0 commit comments