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

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

[elpa] externals/objed 630d2de 028/216: Improve/add indentation commands


From: Stefan Monnier
Subject: [elpa] externals/objed 630d2de 028/216: Improve/add indentation commands
Date: Tue, 8 Jan 2019 12:29:05 -0500 (EST)

branch: externals/objed
commit 630d2dee00b7703b072b250cdc1722535814ddda
Author: Clemera <address@hidden>
Commit: Clemera <address@hidden>

    Improve/add indentation commands
---
 README.asc | 17 +++++++++++++---
 objed.el   | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 2 files changed, 81 insertions(+), 5 deletions(-)

diff --git a/README.asc b/README.asc
index 086d06c..8c834ce 100644
--- a/README.asc
+++ b/README.asc
@@ -162,9 +162,6 @@ Basic movement commands (switch the object type on 
movement):
 |kbd:[s/r]
 |Move forward/backward one word and activate the word object (***).
 
-|kbd:[S/R]
-|Move forward/backward one symbol and activate the symbol object. Skips 
strings and comments.
-
 |kbd:[n/p]
 |Move to the next/previous line and activate the line object.
 |===
@@ -181,6 +178,20 @@ Basic movement commands (switch the object type on 
movement):
        kbd:[s/r].  You can still access kbd:[M-s/r] regular bindings
        by using Meta-shift (kbd:[M-S/R]).
 
+Shifted movement keys:
+
+[`objed-map`]
+|===
+|Shortcut |Purpose
+
+|kbd:[F/B]
+|Indent all lines in object right/leftward.
+
+|kbd:[S/R]
+|Move forward/backward one symbol and activate the symbol object. Skips 
strings and comments.
+|===
+
+
 Commands for block objects (objects built out of lines of text):
 
 [`objed-map`]
diff --git a/objed.el b/objed.el
index aadb13d..29ebac6 100644
--- a/objed.el
+++ b/objed.el
@@ -645,6 +645,9 @@ object as an argument."
     (define-key map "b" (objed--call-and-switch backward-char char))
     (define-key map "f" (objed--call-and-switch forward-char char))
 
+    (define-key map "B" 'objed-indent-left)
+    (define-key map "F" 'objed-indent-right)
+
     (define-key map "s" (objed--call-and-switch forward-word word))
     (define-key map "r" (objed--call-and-switch backward-word word))
 
@@ -687,7 +690,8 @@ object as an argument."
     (define-key map "d" 'objed-delete)
     (define-key map "y" 'objed-yank)
     (define-key map (kbd "TAB")
-      (objed-define-op nil objed-indent))
+      ;; dont exit
+      (objed-define-op nil objed-indent ignore))
 
 
     (define-key map ";"
@@ -2036,12 +2040,73 @@ ARG is passed to `yank'. On repreat `yank-pop'."
     (indent-according-to-mode)
     (objed--update-current-object)))
 
+(defvar objed--indent-map
+  (let ((map (make-sparse-keymap)))
+    (define-key map (kbd "F") 'objed-indent-right)
+    (define-key map (kbd "B") 'objed-indent-left)
+    (define-key map (kbd "<left>") 'objed-indent-left)
+    (define-key map (kbd "<right>") 'objed-indent-right)
+    (define-key map (kbd "TAB") 'objed-indent)
+    (define-key map (kbd "f") 'objed-indent-right)
+    (define-key map (kbd "b") 'objed-indent-left)
+    map)
+  "Map used for indentation.")
+
+(defvar objed--indent-map-message
+  (concat "Indent object further with "
+         "\\<objed--indent-map>\\[objed-indent-right], "
+         "\\[objed-indent-left], \\[objed-indent]."))
+
 (defun objed-indent (beg end)
   "Indent region between BEG and END.
 
 Moves point over any whitespace afterwards."
+  (interactive "r")
   (indent-region beg end)
-  (indent-according-to-mode))
+  (objed--switch-to 'region))
+
+(defun objed-indent-left (arg)
+  "Indent all lines in object leftward by ARG space."
+  (interactive "p")
+  ;; init
+  (unless (memq last-command
+               '(objed-indent objed-indent-left objed-indent-right))
+    (goto-char (objed--beg))
+    (push-mark (objed--end) t))
+  (indent-rigidly (point) (region-end)
+                 (- arg))
+  (objed--switch-to 'region)
+  (message
+   (substitute-command-keys objed--indent-map-message))
+  (set-transient-map objed--indent-map t))
+
+(defun objed-indent-right (arg)
+  "Indent all lines in object rightward by ARG space."
+  (interactive "p")
+  ;; init
+  (unless (memq last-command
+               '(objed-indent objed-indent-left objed-indent-right))
+    (goto-char (objed--beg))
+    (push-mark (objed--end) t))
+  (indent-rigidly (point) (region-end)
+                 arg)
+  (objed--switch-to 'region)
+  (message
+   (substitute-command-keys objed--indent-map-message))
+  (set-transient-map objed--indent-map t))
+
+(defun objed-indent-rigidly (arg)
+  "Similar to `indent-rigidly' but work on current object lines."
+  (interactive "P")
+  (goto-char (objed--beg))
+  (push-mark (objed--end) t)
+  (when arg
+    (indent-rigidly (point) (region-end)
+                   (prefix-numeric-value arg))
+    (setq deactivate-mark nil))
+  (message
+   (substitute-command-keys objed--indent-map-message))
+  (set-transient-map objed--indent-map t))
 
 (defun objed-narrow (&optional arg)
   "Narrow to object.



reply via email to

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