Comments (10)
Hmmm, I see it seems to be because it gets bound to sp-delete-char
here https://github.com/expez/evil-smartparens/blob/master/evil-smartparens.el#L128 That function should probably take a parameter to specify whether to kill/copy the text or not, like delete-char
does, but I guess that's not an issue of this project. It could probably be worked-around though by copying the text before calling that function.
from evil-smartparens.
Making x
and X
work like they do in evil-mode is going to be more work that its worth for me right now. These functions also allow you to select a region to delete, and registers, but that's also not supported atm.
I suppose I'm not a very advanced vim user (coming to it from emacs). I only ever hit x
when I want to delete a single char :/ It actually never occurred to me that I could use the combination xp
to transpose a char--that's awesome!
If you want to take a dive into extending evil, then a pull request would be most welcome.
from evil-smartparens.
No worries, it's not that big of a deal and can easily be worked around.
from evil-smartparens.
Let me know if this does the trick or not! I'd love it if you gave this a try before I tagged a release for melpa-stable.
from evil-smartparens.
I'll check it out!
from evil-smartparens.
It seems to work! not sure if this is normal, but when I try to press 'x' on a closing paren I get this:
Debugger entered--Lisp error: (error "Can't find a safe region to act on!")
signal(error ("Can't find a safe region to act on!"))
error("Can't find a safe region to act on!")
evil-sp--fail()
(progn (evil-sp--fail))
(if (= beg end) (progn (evil-sp--fail)))
(let ((region (string-trim (buffer-substring-no-properties beg end)))) (if (string-blank-p region) nil (cond ((sp-point-in-empty-sexp) (setq end (save-excursion (sp-backward-up-sexp) (point)))) (t (while (not (or (sp-region-ok-p beg end) (= beg end))) (setq beg (1+ beg)))))) (if (= beg end) (progn (evil-sp--fail))))
(if (not shrink) (min beg (if (sp-point-in-empty-sexp) (evil-sp--point-after (quote sp-backward-up-sexp)) (point-max))) (let ((region (string-trim (buffer-substring-no-properties beg end)))) (if (string-blank-p region) nil (cond ((sp-point-in-empty-sexp) (setq end (save-excursion (sp-backward-up-sexp) (point)))) (t (while (not (or ... ...)) (setq beg (1+ beg)))))) (if (= beg end) (progn (evil-sp--fail)))) beg)
evil-sp--new-beginning(17767 17768 :shrink)
(let* ((beg (evil-sp--new-beginning beg end :shrink)) (end (evil-sp--new-ending beg end))) (evil-delete beg end type register yank-handler))
(condition-case nil (let ((new-beg (evil-sp--new-beginning beg end)) (new-end (evil-sp--new-ending beg end))) (if (and (= new-end end) (= new-beg beg)) (evil-delete beg end type register yank-handler) (evil-delete new-beg new-end (quote inclusive) register yank-handler))) (error (let* ((beg (evil-sp--new-beginning beg end :shrink)) (end (evil-sp--new-ending beg end))) (evil-delete beg end type register yank-handler))))
(if (or (evil-sp--override) (= beg end) (and (eq type (quote block)) (evil-sp--block-is-balanced beg end))) (evil-delete beg end type register yank-handler) (condition-case nil (let ((new-beg (evil-sp--new-beginning beg end)) (new-end (evil-sp--new-ending beg end))) (if (and (= new-end end) (= new-beg beg)) (evil-delete beg end type register yank-handler) (evil-delete new-beg new-end (quote inclusive) register yank-handler))) (error (let* ((beg (evil-sp--new-beginning beg end :shrink)) (end (evil-sp--new-ending beg end))) (evil-delete beg end type register yank-handler)))))
(if (and evil-inhibit-operator (called-interactively-p (quote any))) nil (if (or (evil-sp--override) (= beg end) (and (eq type (quote block)) (evil-sp--block-is-balanced beg end))) (evil-delete beg end type register yank-handler) (condition-case nil (let ((new-beg (evil-sp--new-beginning beg end)) (new-end (evil-sp--new-ending beg end))) (if (and (= new-end end) (= new-beg beg)) (evil-delete beg end type register yank-handler) (evil-delete new-beg new-end (quote inclusive) register yank-handler))) (error (let* ((beg (evil-sp--new-beginning beg end :shrink)) (end (evil-sp--new-ending beg end))) (evil-delete beg end type register yank-handler))))) (indent-according-to-mode))
(let ((evil-inhibit-operator evil-inhibit-operator-value)) (if (and evil-inhibit-operator (called-interactively-p (quote any))) nil (if (or (evil-sp--override) (= beg end) (and (eq type (quote block)) (evil-sp--block-is-balanced beg end))) (evil-delete beg end type register yank-handler) (condition-case nil (let ((new-beg (evil-sp--new-beginning beg end)) (new-end (evil-sp--new-ending beg end))) (if (and (= new-end end) (= new-beg beg)) (evil-delete beg end type register yank-handler) (evil-delete new-beg new-end (quote inclusive) register yank-handler))) (error (let* ((beg ...) (end ...)) (evil-delete beg end type register yank-handler))))) (indent-according-to-mode)))
(unwind-protect (let ((evil-inhibit-operator evil-inhibit-operator-value)) (if (and evil-inhibit-operator (called-interactively-p (quote any))) nil (if (or (evil-sp--override) (= beg end) (and (eq type (quote block)) (evil-sp--block-is-balanced beg end))) (evil-delete beg end type register yank-handler) (condition-case nil (let ((new-beg ...) (new-end ...)) (if (and ... ...) (evil-delete beg end type register yank-handler) (evil-delete new-beg new-end ... register yank-handler))) (error (let* (... ...) (evil-delete beg end type register yank-handler))))) (indent-according-to-mode))) (setq evil-inhibit-operator-value nil))
evil-sp-delete(17767 17768 exclusive nil)
(if (save-excursion (forward-char) (sp-point-in-empty-sexp)) (save-excursion (forward-char) (sp-delete-char)) (evil-sp-delete beg end type register))
(if (and evil-inhibit-operator (called-interactively-p (quote any))) nil (if (save-excursion (forward-char) (sp-point-in-empty-sexp)) (save-excursion (forward-char) (sp-delete-char)) (evil-sp-delete beg end type register)))
(let ((evil-inhibit-operator evil-inhibit-operator-value)) (if (and evil-inhibit-operator (called-interactively-p (quote any))) nil (if (save-excursion (forward-char) (sp-point-in-empty-sexp)) (save-excursion (forward-char) (sp-delete-char)) (evil-sp-delete beg end type register))))
(unwind-protect (let ((evil-inhibit-operator evil-inhibit-operator-value)) (if (and evil-inhibit-operator (called-interactively-p (quote any))) nil (if (save-excursion (forward-char) (sp-point-in-empty-sexp)) (save-excursion (forward-char) (sp-delete-char)) (evil-sp-delete beg end type register)))) (setq evil-inhibit-operator-value nil))
evil-sp-delete-char(17767 17768 exclusive nil)
call-interactively(evil-sp-delete-char nil nil)
command-execute(evil-sp-delete-char)
from evil-smartparens.
Yeah, this is expected when deleting the paren would result in an unbalanced buffer. I should probably change the error
to user-error
, though.
from evil-smartparens.
erroring out like that is consistent with how evil-sp works when you try to do something objectionable using the other operators (e.g. visually selecting an unbalanced region and hitting d
). The message is a little inappropriate in this case, though, because you're unlikely to be action on a region.
from evil-smartparens.
That's fine, was just letting you know in case it wasn't expected. Nice work!
from evil-smartparens.
Thanks for giving this a spin!
from evil-smartparens.
Related Issues (20)
- How about move out from multiple-nested parens with different types? HOT 1
- whitespace after daf and dab HOT 2
- Problem with evil-sp-change indent-according-to-mode HOT 11
- "D" key example in README.md incorrect HOT 1
- Is there any way to change the default S binding? HOT 4
- Deleting in strings seems not to work well with smartparens HOT 2
- Safe operators stop before unmatched apostrophe in elisp comments when using smartparens-config HOT 3
- evil-smartparens can't handle multi-character ruby pairs like "def" "end". HOT 4
- Unexpected register behavior with full line commands (dd cc yy) HOT 2
- Actions like dw and di" acting weirdly? HOT 13
- 026d4a3 needs reworking HOT 3
- evil-sp-delete-char should sexp forms if deleting a paren HOT 1
- Evil-smartparens overrides "o" in visual state HOT 2
- Cannot delete lines if quotes are in comments HOT 1
- Emacs hangs on haskell-mode when evil-smartparens is enabled HOT 5
- Emacs hangs completely when using D HOT 2
- That would leave the buffer unbalanced HOT 5
- backspace key just deletes a single character when I mark a string using Ctrl-space in insert state HOT 1
- Rust: comment with single quote causes hang in evil-sp-delete-line HOT 4
- Spacemacs Emacs 29.2 HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from evil-smartparens.