Refactor + slight optimization for backspace #452

This commit is contained in:
Henrik Lissner 2018-03-05 23:12:20 -05:00
parent 88d339f65d
commit 4c535b2643
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395

View file

@ -16,8 +16,8 @@ lines, above and below, with only whitespace in between."
(when (and (> pt beg) (< pt end)) (when (and (> pt beg) (< pt end))
(when-let* ((cl (plist-get pair :cl)) (when-let* ((cl (plist-get pair :cl))
(op (plist-get pair :op))) (op (plist-get pair :op)))
(and (not (string-empty-p op)) (and (not (string= op ""))
(not (string-empty-p cl)) (not (string= cl ""))
(let ((nbeg (+ (length op) beg)) (let ((nbeg (+ (length op) beg))
(nend (- end (length cl)))) (nend (- end (length cl))))
(let ((content (buffer-substring-no-properties nbeg nend))) (let ((content (buffer-substring-no-properties nbeg nend)))
@ -165,8 +165,8 @@ possible, or just one char if that's not possible."
+ Otherwise, resort to `doom/backward-delete-whitespace-to-column'. + Otherwise, resort to `doom/backward-delete-whitespace-to-column'.
+ Resorts to `delete-char' if n > 1" + Resorts to `delete-char' if n > 1"
(interactive "p\nP") (interactive "p\nP")
(unless (integerp n) (or (integerp n)
(signal 'wrong-type-argument (list 'integerp n))) (signal 'wrong-type-argument (list 'integerp n)))
(cond ((and (use-region-p) (cond ((and (use-region-p)
delete-active-region delete-active-region
(= n 1)) (= n 1))
@ -185,26 +185,30 @@ possible, or just one char if that's not possible."
(save-excursion (save-excursion
(insert-char ?\s (- ocol (current-column)) nil)))) (insert-char ?\s (- ocol (current-column)) nil))))
;; ;;
((and (= n 1) (not (minibufferp))) ((and (= n 1)
;; TODO Refactor; abstract with doom-surrounded-p more (not (minibufferp)))
(let* ((pair (sp-get-thing)) (cond ((and (memq (char-before) (list ?\ ?\t))
(op (plist-get pair :op)) (save-excursion
(cl (plist-get pair :cl)) (and (> (- (skip-chars-backward " \t" (line-beginning-position))) 0)
(beg (plist-get pair :beg)) (bolp))))
(end (plist-get pair :end))) (doom/backward-delete-whitespace-to-column))
(cond ((and end beg (= end (+ beg (length op) (length cl)))) ((let* ((pair (sp-get-thing))
(sp-backward-delete-char 1)) (op (plist-get pair :op))
((doom-surrounded-p pair :inline :balanced) (cl (plist-get pair :cl))
(delete-char -1 killflag) (beg (plist-get pair :beg))
(delete-char 1) (end (plist-get pair :end)))
(when (= (point) (+ (length cl) beg)) (cond ((and end beg (= end (+ beg (length op) (length cl))))
(sp-backward-delete-char 1) (sp-backward-delete-char 1))
(sp-insert-pair op))) ((doom-surrounded-p pair 'inline 'balanced)
((and (bolp) (doom-surrounded-p pair nil :balanced)) (delete-char -1 killflag)
(delete-region beg end) (delete-char 1)
(sp-insert-pair op)) (when (= (point) (+ (length cl) beg))
(t (sp-backward-delete-char 1)
(doom/backward-delete-whitespace-to-column))))) (sp-insert-pair op)))
((and (bolp) (doom-surrounded-p pair nil 'balanced))
(delete-region beg end)
(sp-insert-pair op))
((doom/backward-delete-whitespace-to-column)))))))
;; Otherwise, do simple deletion. ;; Otherwise, do simple deletion.
(t (delete-char (- n) killflag)))) (t (delete-char (- n) killflag))))