Created
September 28, 2011 16:14
-
-
Save d11wtq/1248369 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;;; dwim-tab.el --- minor mode to force indentation when TAB would otherwise stall | |
; internal tracking variables | |
(setq dwim-tab-point-before nil) | |
(setq dwim-tab-point-after nil) | |
(defun dwim-tab () | |
"Indents normally once, then switches to tab-to-tab-stop if invoked again. | |
Always performs tab-to-tab-stop if the first TAB press does not cause the | |
point to move." | |
(interactive) | |
(setq dwim-tab-point-before (point)) | |
(if (eq dwim-tab-point-before dwim-tab-point-after) ; pressed TAB again | |
(tab-to-tab-stop) | |
(indent-for-tab-command)) | |
(if (eq (point) dwim-tab-point-before) ; point didn't move | |
(tab-to-tab-stop)) | |
(setq dwim-tab-point-after (point))) | |
(define-minor-mode dwim-tab-mode | |
"Toggle dwim-tab-mode. | |
With a non-nil argument, turns on dwim-tab-mode. With a nil argument, turns it | |
off. | |
When dwim-tab-mode is enabled, pressing the TAB key once will behave as normal, | |
but pressing it subsequent times, will continue to indent, using | |
tab-to-tab-stop. | |
If dwim-tab determines that the first TAB key press resulted in no movement of | |
the point, it will indent according to tab-to-tab-stop instead." | |
:init-value nil | |
:lighter " DWIM" | |
:keymap '(("\t" . dwim-tab)) | |
(make-local-variable 'dwim-tab-point-before) | |
(make-local-variable 'dwim-tab-point-after)) | |
(provide 'dwim-tab) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment