Open andreyorst opened 4 years ago
Sorry for the delay, gmail decided to put my github notifications into spam 🤷♀️.
This is mostly linked to parinfer-rust because it can reposition the cursor. I also verified that this behavior is part of the parinfer spec. With this demo set to smart mode it exhibits the same behavior as you've described.
However, I have checked out atom-parinfer and it does follow the behavior you've described.
I think this could be a worthy enhancement
I guess this function, when bound to "<backspace>"
solves this just fine:
(defun backspace-or-delete-indentation ()
(interactive)
(let ((old (point))
(new (save-excursion
(back-to-indentation)
(point))))
(if (eq old new)
(delete-indentation)
(delete-backward-char 1))))
Do you think if your plugin should bind it by default?
EDIT: Ugh, after thinking a bit more, it will not allow to move blocks to top level, so
Hmm from looking at other packages like parinfer for vscode, it seems they set an argument, force-balance
, to true when calling into parinfer-rust. One that I never implemented when I was working on the interface for the rust plugin. This is something I plan to work on over my Christmas holiday.
Thanks for continuing to think about this problem and I am sorry I haven't been able to put more time into fixing it.
Thanks for continuing to think about this problem and I am sorry I haven't been able to put more time into fixing it.
No worries! I'm currently not using Parinfer as of this moment, mostly because of https://github.com/eraserhd/parinfer-rust/issues/92 -- at work it generates a lot of noise in merge requests or requires me to do a lot of cleanup before pushing, but I'm planning to come back when behavior would be more transparent or when I'll make sure that every project I work on is correctly formatted all the time :)
This is a minor inconvenience. Here's an example.
Imagine you've written the let block, and you've just finished writing the expression:
(
|
represents the point)Now you want to add second binding. You press enter, and Emacs sets the indentation for you:
Oops. You've forgot to escape the binding list, and Emacs thinks that you want to add another form to first binding list. So naturally you simply delete the whitespace with backspace:
Uh oh. Parinfer smart mode prevents me from escaping the block. Deleting with backspace doesn't work anymore.
Now I have to press left arrow or C-b:
And now you finally can type
(
:Other parinfer implementations allow deleting and escaping current block. Im not sure if this is a Parinfer rust thing or in your Elisp code.
Again this is not a serious issue, but rather a minor inconvenience.