Coder Social home page Coder Social logo

Comments (10)

blaenk avatar blaenk commented on September 27, 2024

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.

expez avatar expez commented on September 27, 2024

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.

blaenk avatar blaenk commented on September 27, 2024

No worries, it's not that big of a deal and can easily be worked around.

from evil-smartparens.

expez avatar expez commented on September 27, 2024

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.

blaenk avatar blaenk commented on September 27, 2024

I'll check it out!

from evil-smartparens.

blaenk avatar blaenk commented on September 27, 2024

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.

expez avatar expez commented on September 27, 2024

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.

expez avatar expez commented on September 27, 2024

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.

blaenk avatar blaenk commented on September 27, 2024

That's fine, was just letting you know in case it wasn't expected. Nice work!

from evil-smartparens.

expez avatar expez commented on September 27, 2024

Thanks for giving this a spin!

from evil-smartparens.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.