summaryrefslogtreecommitdiffstats
path: root/.emacs.d/site-lisp/shift-indent.el
diff options
context:
space:
mode:
Diffstat (limited to '.emacs.d/site-lisp/shift-indent.el')
-rw-r--r--.emacs.d/site-lisp/shift-indent.el33
1 files changed, 33 insertions, 0 deletions
diff --git a/.emacs.d/site-lisp/shift-indent.el b/.emacs.d/site-lisp/shift-indent.el
new file mode 100644
index 0000000..d6d6e76
--- /dev/null
+++ b/.emacs.d/site-lisp/shift-indent.el
@@ -0,0 +1,33 @@
+(require 'simple)
+
+(defun indent-shift-left (start end &optional count)
+ (interactive
+ (if mark-active
+ (list (region-beginning) (region-end) current-prefix-arg)
+ (list (line-beginning-position) (line-end-position) current-prefix-arg)))
+ (if count
+ (setq count (prefix-numeric-value count))
+ (setq count tab-width))
+ (when (> count 0)
+ (let ((deactivate-mark nil))
+ (save-excursion
+ (goto-char start)
+ (while (< (point) end)
+ (if (and (< (current-indentation) count)
+ (not (looking-at "[ \t]*$")))
+ (error "Can't shift all lines enough"))
+ (forward-line))
+ (indent-rigidly start end (- count))))))
+
+(add-to-list 'debug-ignored-errors "^Can't shift all lines enough")
+
+(defun indent-shift-right (start end &optional count)
+ (interactive
+ (if mark-active
+ (list (region-beginning) (region-end) current-prefix-arg)
+ (list (line-beginning-position) (line-end-position) current-prefix-arg)))
+ (let ((deactivate-mark nil))
+ (if count
+ (setq count (prefix-numeric-value count))
+ (setq count tab-width))
+ (indent-rigidly start end count)))