emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/evil-nerd-commenter fa40dab8d2 208/235: know the text obje


From: ELPA Syncer
Subject: [nongnu] elpa/evil-nerd-commenter fa40dab8d2 208/235: know the text object before operate on it
Date: Thu, 6 Jan 2022 02:59:48 -0500 (EST)

branch: elpa/evil-nerd-commenter
commit fa40dab8d2f010db17e1e62dfd245c1504d0542f
Author: Chen Bin <chenbin.sh@gmail.com>
Commit: Chen Bin <chenbin.sh@gmail.com>

    know the text object before operate on it
---
 evil-nerd-commenter-operator.el | 61 +++++++++++++++++++++++++++++++++--------
 evil-nerd-commenter-sdk.el      |  4 +--
 evil-nerd-commenter-tests.el    |  4 +--
 evil-nerd-commenter.el          |  6 ++--
 pkg.sh                          |  2 +-
 5 files changed, 58 insertions(+), 19 deletions(-)

diff --git a/evil-nerd-commenter-operator.el b/evil-nerd-commenter-operator.el
index c3c9f145ef..19117f5adf 100644
--- a/evil-nerd-commenter-operator.el
+++ b/evil-nerd-commenter-operator.el
@@ -47,6 +47,14 @@
     web-mode)
   "Major modes using C comment syntax.")
 
+(defvar evilnc-current-text-object nil
+  "Internal variable to detect current object working on.")
+
+(defvar evilnc-whole-line-text-objects
+  '(evil-forward-paragraph
+    evil-backward-paragraph)
+  "Comment operator operates on wholes when dealing with these text objects.")
+
 (defvar evilnc-temporary-goal-column 0
   "Value of`temporary-goal-column' specifying right edge of rectangle yank.")
 
@@ -76,41 +84,72 @@
     (setq last-command tmp-command)
     (setq evilnc-temporary-goal-column 0)))
 
-(defun evilnc-extend-to-whole-comment-or-line (beg end)
-  "Extend the comment region defined by BEG and END so all comment is included.
-Or extend the region to contain whole lines if the region is not a comment."
+(defun evilnc-expand-to-whole-comment-or-line (beg end)
+  "Expand the comment region defined by BEG and END so all comment is included.
+Or expand the region to contain whole lines if it's not comment and certain 
conditions met."
+
   (cond
    ((evilnc-is-pure-comment beg)
     (save-excursion
       (let* ((newbeg beg)
              (newend end))
 
-        ;; extend the beginning
+        ;; expand the beginning
         (goto-char newbeg)
         (while (and (>= (1- newbeg) (line-beginning-position)) 
(evilnc-is-pure-comment (1- newbeg)))
           (setq newbeg (1- newbeg)))
 
-        ;; extend the end
+        ;; expand the end
         (goto-char newend)
         (while (and (<= newend (line-end-position)) (evilnc-is-pure-comment 
newend))
           (setq newend (1+ newend)))
 
         (cons newbeg newend))))
-   ((not (evilnc-sdk-inside-one-line-p beg end))
-    (evilnc-sdk-extend-to-contain-whole-lines beg end))
+
+   ;; try to expand region to contain whole line if,
+   ;; - currently more than one line text in the region,
+   ;; - a specific text object is touched just before the operator
+   ((and (not (evilnc-sdk-inside-one-line-p beg end))
+         evilnc-current-text-object
+         (member (car evilnc-current-text-object) 
evilnc-whole-line-text-objects)
+         ;; 0.5 second
+         (< (- (float-time (current-time)) (cdr evilnc-current-text-object)) 
0.5))
+    (evilnc-sdk-expand-to-contain-whole-lines beg end))
    (t
     (cons beg end))))
 
+;; {{ know text object type to operate on
+(defun evilnc-set-current-text-object (text-object)
+  "Set current TEXT-OBJECT."
+  (setq evilnc-current-text-object
+        (cons text-object (float-time (current-time)))))
+
+(defadvice evil-select-an-object (before evilnc-evil-select-an-object-hack 
activate)
+  "Figure out text object type."
+  (let* ((thing (car (ad-get-args 0))))
+    ;; record the thing and timestamp `evil-select-an-object' is called
+    (evilnc-set-current-text-object thing)))
+
+(defadvice evil-backward-paragraph (before evilnc-evil-backward-paragraph-hack 
activate)
+  "Record current text object."
+  (evilnc-set-current-text-object 'evil-backward-paragraph))
+
+(defadvice evil-forward-paragraph (before evilnc-evil-forward-paragraph-hack 
activate)
+  "Record current text object."
+  (evilnc-set-current-text-object 'evil-forward-paragraph))
+;; }}
+
 (evil-define-operator evilnc-comment-operator (beg end type)
   "Comments text from BEG to END with TYPE."
   (interactive "<R>")
   (cond
    ((eq type 'block)
-    (let* ((newpos (evilnc-extend-to-whole-comment-or-line beg end) ))
+    (let* ((newpos (evilnc-expand-to-whole-comment-or-line beg end) ))
       (evil-apply-on-block #'evilnc--comment-or-uncomment-region
                            (car newpos)
                            (cdr newpos)
                            nil)))
+
    ((and (eq type 'line)
          (= end (point-max))
          (or (= beg end)
@@ -128,7 +167,7 @@ Or extend the region to contain whole lines if the region 
is not a comment."
 
    (t
     (when (and beg end)
-      (let* ((newpos (evilnc-extend-to-whole-comment-or-line beg end)))
+      (let* ((newpos (evilnc-expand-to-whole-comment-or-line beg end)))
         (evilnc--comment-or-uncomment-region (car newpos) (cdr newpos))))))
 
   ;; place cursor on beginning of line
@@ -169,11 +208,11 @@ Or extend the region to contain whole lines if the region 
is not a comment."
          (e (point))
          (col 0)
          rlt)
-    ;; extend begin
+    ;; decrease begin
     (while (evilnc-is-comment (- b 1))
       (setq b (- b 1)))
 
-    ;; extend end
+    ;; increase end
     (while (evilnc-is-comment (+ e 1))
       (setq e (+ e 1)))
 
diff --git a/evil-nerd-commenter-sdk.el b/evil-nerd-commenter-sdk.el
index 3c245448fb..f7836ca232 100644
--- a/evil-nerd-commenter-sdk.el
+++ b/evil-nerd-commenter-sdk.el
@@ -94,8 +94,8 @@ or else we can't select multiple lines comment."
   (and (<= (line-beginning-position) beg)
        (<= end (line-end-position))))
 
-(defun evilnc-sdk-extend-to-contain-whole-lines (beg end)
-  "Extend region between BEG and END so the region contain whole lines.
+(defun evilnc-sdk-expand-to-contain-whole-lines (beg end)
+  "Expand region between BEG and END so the region contain whole lines.
 Return new range like '(region_begin . region_end)."
   (save-excursion
     ;; Another work around for evil-visual-line bug:
diff --git a/evil-nerd-commenter-tests.el b/evil-nerd-commenter-tests.el
index c911804f11..9af5b8f4db 100644
--- a/evil-nerd-commenter-tests.el
+++ b/evil-nerd-commenter-tests.el
@@ -216,7 +216,7 @@
       (should (eq 49 (nth 1 info)))
       (should (string= "python" (nth 2 info))))))
 
-(ert-deftest evilnc-test-extend-whole ()
+(ert-deftest evilnc-test-expand-whole ()
   (let* (info)
     (with-temp-buffer
       (insert "console.log('hello world');\n"
@@ -235,7 +235,7 @@
         (search-forward "hello world") ; middle of third line
         (setq e (point))
         (should (not (evilnc-sdk-inside-one-line-p b e)))
-        (setq range (evilnc-sdk-extend-to-contain-whole-lines b e))
+        (setq range (evilnc-sdk-expand-to-contain-whole-lines b e))
         (should (eq (car range) (save-excursion (goto-char b) 
(line-beginning-position))))
         (should (eq (cdr range) (save-excursion (goto-char e) 
(line-end-position))))))))
 
diff --git a/evil-nerd-commenter.el b/evil-nerd-commenter.el
index fbd992d6cf..ecbada54cb 100644
--- a/evil-nerd-commenter.el
+++ b/evil-nerd-commenter.el
@@ -3,7 +3,7 @@
 ;; Author: Chen Bin <chenbin DOT sh AT gmail.com>
 
 ;; URL: http://github.com/redguardtoo/evil-nerd-commenter
-;; Version: 3.5.0
+;; Version: 3.5.1
 ;; Package-Requires: ((emacs "24.4"))
 ;; Keywords: convenience evil
 ;;
@@ -309,7 +309,7 @@ See 
http://lists.gnu.org/archive/html/bug-gnu-emacs/2013-03/msg00891.html.";
    ;; Select more than one line
    (t
     ;; selected region spans MORE than one line
-    (let* ((range (evilnc-sdk-extend-to-contain-whole-lines (region-beginning)
+    (let* ((range (evilnc-sdk-expand-to-contain-whole-lines (region-beginning)
                                                             (region-end)))
            (b (car range))
            (e (cdr range)))
@@ -738,7 +738,7 @@ Then we operate the expanded region.  NUM is ignored."
 (defun evilnc-version ()
   "The version number."
   (interactive)
-  (message "3.5.0"))
+  (message "3.5.1"))
 
 (defvar evil-normal-state-map)
 (defvar evil-visual-state-map)
diff --git a/pkg.sh b/pkg.sh
index e3c14ade5c..028799e1b2 100755
--- a/pkg.sh
+++ b/pkg.sh
@@ -1,6 +1,6 @@
 #!/bin/bash
 name=evil-nerd-commenter
-version=3.5.0
+version=3.5.1
 pkg=$name-$version
 mkdir $pkg
 cp *.el $pkg



reply via email to

[Prev in Thread] Current Thread [Next in Thread]