diff --git a/core/autoload/editor.el b/core/autoload/editor.el index 54c7e9fae..48193518d 100644 --- a/core/autoload/editor.el +++ b/core/autoload/editor.el @@ -16,8 +16,8 @@ lines, above and below, with only whitespace in between." (when (and (> pt beg) (< pt end)) (when-let* ((cl (plist-get pair :cl)) (op (plist-get pair :op))) - (and (not (string-empty-p op)) - (not (string-empty-p cl)) + (and (not (string= op "")) + (not (string= cl "")) (let ((nbeg (+ (length op) beg)) (nend (- end (length cl)))) (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'. + Resorts to `delete-char' if n > 1" (interactive "p\nP") - (unless (integerp n) - (signal 'wrong-type-argument (list 'integerp n))) + (or (integerp n) + (signal 'wrong-type-argument (list 'integerp n))) (cond ((and (use-region-p) delete-active-region (= n 1)) @@ -185,26 +185,30 @@ possible, or just one char if that's not possible." (save-excursion (insert-char ?\s (- ocol (current-column)) nil)))) ;; - ((and (= n 1) (not (minibufferp))) - ;; TODO Refactor; abstract with doom-surrounded-p more - (let* ((pair (sp-get-thing)) - (op (plist-get pair :op)) - (cl (plist-get pair :cl)) - (beg (plist-get pair :beg)) - (end (plist-get pair :end))) - (cond ((and end beg (= end (+ beg (length op) (length cl)))) - (sp-backward-delete-char 1)) - ((doom-surrounded-p pair :inline :balanced) - (delete-char -1 killflag) - (delete-char 1) - (when (= (point) (+ (length cl) beg)) - (sp-backward-delete-char 1) - (sp-insert-pair op))) - ((and (bolp) (doom-surrounded-p pair nil :balanced)) - (delete-region beg end) - (sp-insert-pair op)) - (t - (doom/backward-delete-whitespace-to-column))))) + ((and (= n 1) + (not (minibufferp))) + (cond ((and (memq (char-before) (list ?\ ?\t)) + (save-excursion + (and (> (- (skip-chars-backward " \t" (line-beginning-position))) 0) + (bolp)))) + (doom/backward-delete-whitespace-to-column)) + ((let* ((pair (sp-get-thing)) + (op (plist-get pair :op)) + (cl (plist-get pair :cl)) + (beg (plist-get pair :beg)) + (end (plist-get pair :end))) + (cond ((and end beg (= end (+ beg (length op) (length cl)))) + (sp-backward-delete-char 1)) + ((doom-surrounded-p pair 'inline 'balanced) + (delete-char -1 killflag) + (delete-char 1) + (when (= (point) (+ (length cl) beg)) + (sp-backward-delete-char 1) + (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. (t (delete-char (- n) killflag))))