diff options
author | David Robillard <d@drobilla.net> | 2014-06-03 23:24:21 -0400 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2014-06-03 23:24:21 -0400 |
commit | 03125a55365efc9a06dc8aad2e2940df8ededccc (patch) | |
tree | 4046a9f9bdeccb44cee7a2609f435fad423fcba5 /emacs.d/site-lisp/smarttabs.el | |
download | dotfiles-03125a55365efc9a06dc8aad2e2940df8ededccc.tar.gz dotfiles-03125a55365efc9a06dc8aad2e2940df8ededccc.tar.bz2 dotfiles-03125a55365efc9a06dc8aad2e2940df8ededccc.zip |
Add emacs configuration.
Diffstat (limited to 'emacs.d/site-lisp/smarttabs.el')
-rw-r--r-- | emacs.d/site-lisp/smarttabs.el | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/emacs.d/site-lisp/smarttabs.el b/emacs.d/site-lisp/smarttabs.el new file mode 100644 index 0000000..facfaf5 --- /dev/null +++ b/emacs.d/site-lisp/smarttabs.el @@ -0,0 +1,58 @@ +;; +;; Emacs smart tabs functionality +;; Intelligently indent with tabs, align with spaces! +;; +;; Note: Indenting only uses tabs when indent-tabs-mode is non-nil, +;; otherwise it uses spaces as usual. +;; +;; To use: save as smarttabs.el in your .emacs.d directory, and add +;; "(require 'smarttabs)" to your .emacs file. +;; +;; Code is GPLv2, derived from http://www.emacswiki.org/emacs/SmartTabs +;; +;; Modifications by John Croisant: +;; * Remembers and re-applies window start, so that indenting doesn't +;; cause the window to visibly scroll. (2009-09-18) +;; + + +(defadvice align (around smart-tabs activate) + (let ((indent-tabs-mode nil)) ad-do-it)) + +(defadvice align-regexp (around smart-tabs activate) + (let ((indent-tabs-mode nil)) ad-do-it)) + +(defadvice indent-relative (around smart-tabs activate) + (let ((indent-tabs-mode nil)) ad-do-it)) + +(defadvice indent-according-to-mode (around smart-tabs activate) + (let ((indent-tabs-mode indent-tabs-mode)) + (if (memq indent-line-function + '(indent-relative + indent-relative-maybe)) + (setq indent-tabs-mode nil)) + ad-do-it)) + +(defmacro smart-tabs-advice (function offset) + (defvaralias offset 'tab-width) + `(defadvice ,function (around smart-tabs activate) + (cond + (indent-tabs-mode + (save-excursion + (beginning-of-line) + (while (looking-at "\t*\\( +\\)\t+") + (replace-match "" nil nil nil 1))) + (setq tab-width tab-width) + (let ((tab-width fill-column) + (,offset fill-column) + (wstart (window-start))) + ad-do-it + (set-window-start (selected-window) wstart))) + (t + ad-do-it)))) + +(smart-tabs-advice c-indent-line c-basic-offset) +(smart-tabs-advice c-indent-region c-basic-offset) + + +(provide 'smarttabs) |