puni-backward-delete-char should splice when the list around point is empty
daanturo opened this issue · 3 comments
Instead of not doing anything, puni-backward-delete-char
should splice the sexp around point when the delimiters are next to each other.
(|)
;; calls `puni-backward-delete-char`
;; Observed:
|()
;; Expected:
|
Currently, puni-mode-map
doesn't provide any key bindings to delete the pair, the shortest I have found (without additional bindings) is backspace delete delete
: 3 key presses.
Ah, I think electric-pair-mode
is doing the job for me (I've been using it from day 1), so I haven't noticed that Puni didn't implement this.
I've seen your PR (thanks!). It's great but I'm mainly worried about multi-char delimiters. For example, in HTML (with your patch):
<p>|</p>
;; Call `puni-backward-delete-char
(nothing left)
To me this is actually reasonable but I think some people may just want this:
<p|></p>
This may because in Lisp, they are used to press DEL
to go backward in opening parentheses. I sometimes do that myself.
I'm thinking if this can happens to keyword delimiters, and I found in sh-mode
:
if|fi
# Call `puni-backward-delete-char`
(nothing left)
This is a surprise, though it's a corner case.
So, to me it's better to limit this behavior to single-char delimiters. What do you think?
Yes, I think that the behavior for multi-char delimiters is debatable and hard to define correctly, too. So let's limit it for now.
I've modified it a bit and it now it deals with the multi-char delimiter case. This is because I do like it, and by switching the order of conditional branches, the if|fi
problem is gone.