smart move to beginning of line
authorJoerg Jaspert <joerg@ganneff.de>
Thu, 23 May 2013 13:01:44 +0000 (15:01 +0200)
committerJoerg Jaspert <joerg@ganneff.de>
Thu, 23 May 2013 13:01:44 +0000 (15:01 +0200)
.emacs.d/config/emacs.org

index e2aeb09..9a06e52 100644 (file)
@@ -649,6 +649,38 @@ Duplicate current line
 (global-set-key (kbd "C-c p") 'duplicate-line)
 #+END_SRC
 
+Smarter move to the beginning of the line. That is, it first moves to
+the beginning of the line - and on second keypress it goes to the
+first character on line.
+#+BEGIN_SRC emacs-lisp tangle:yes
+(defun smarter-move-beginning-of-line (arg)
+  "Move point back to indentation of beginning of line.
+
+Move point to the first non-whitespace character on this line.
+If point is already there, move to the beginning of the line.
+Effectively toggle between the first non-whitespace character and
+the beginning of the line.
+
+If ARG is not nil or 1, move forward ARG - 1 lines first.  If
+point reaches the beginning or end of the buffer, stop there."
+  (interactive "^p")
+  (setq arg (or arg 1))
+
+  ;; Move lines first
+  (when (/= arg 1)
+    (let ((line-move-visual nil))
+      (forward-line (1- arg))))
+
+  (let ((orig-point (point)))
+    (back-to-indentation)
+    (when (= orig-point (point))
+      (move-beginning-of-line 1))))
+
+;; remap C-a to `smarter-move-beginning-of-line'
+(global-set-key [remap move-beginning-of-line]
+                'smarter-move-beginning-of-line)
+
+#+END_SRC
 **** ace-jump-mode
 [2013-04-28 So 11:26]
 #+BEGIN_SRC emacs-lisp tangle:yes