summary refs log tree commit diff
path: root/emacs/init.el
diff options
context:
space:
mode:
Diffstat (limited to 'emacs/init.el')
-rw-r--r--emacs/init.el21
1 files changed, 20 insertions, 1 deletions
diff --git a/emacs/init.el b/emacs/init.el
index 37cf2f7..8b1d69a 100644
--- a/emacs/init.el
+++ b/emacs/init.el
@@ -592,7 +592,7 @@ targets."
 	;; These are some useful ls switches.  We have to keep -l.  To show dotfiles as well, we use -a.  To sort numbers by number order instead of lumping together ones, twos, and so on, we use -v.  Because we don't have colour, it's nice to have a clear indicator of what is a file and what is a directory, as well as other different things like symlinks which i never remember.  By using -F, a forward slash is appended to every directory.  And to get more easily understandable file sizes, we use -h, which will tell us the file size in kilobytes or megabytes rather than a huge number that means nothing to me.  I won't explain the meaning of the long flag.
 	(dired-listing-switches "-alvFh --group-directories-first"))
 
-;;; indentation: tabs and whitespace settings
+;;; Indentation: tabs and whitespace settings
 
 ;; In general, my rules for inserting tabs are that the tab key should insert tabs.  I personally prefer tabs to spaces, because tabs work reasonably well whatever font or tab width one chooses to set, whereas spaces are the same width for everyone, except when someone uses a proportional font in which case they are narrower than expected.  Furthermore, people tend to use spaces for alignment, which looks bad when you can't rely on every character being the same width.
 
@@ -613,6 +613,25 @@ targets."
     (beginning-of-line 2)
     (insert whitespace)))
 
+;; We will only be trying to indent at the start of a line, and sometimes we will want to insert a standard tab character.  We can also set this option to 'complete, which will run completion at point if the region is already indented.
+(setopt tab-always-indent nil)
+
+;; Usually, we want indentation to be done with tabs.  Some modes make more sense to use spaces to indent.  Lisp is a particular example, and emacs's default behaviour of converting tabs into spaces is frankly horrific.  I've taken the below code from acdw to use spaces in these modes.
+(defvar space-indent-modes '(emacs-lisp-mode
+                             lisp-interaction-mode
+                             lisp-mode
+                             scheme-mode
+                             python-mode)
+  "Modes to indent with spaces, not tabs.")
+(add-hook 'prog-mode-hook
+          (defun indent-tabs-mode-maybe ()
+            (setq indent-tabs-mode
+                  (if (apply #'derived-mode-p space-indent-modes) nil t))))
+
+;; I want to ensure that indentation is always correct.  The builtin electric indent mode works /sometimes/, but the aggressive indent mode package is more reliable.
+(use-package aggressive-indent :ensure t)
+(setopt global-aggressive-indent-mode t)
+
 ;;; Interface
 
 ;; I want to make sure that various bits of the interface are hidden.  but this isn't an "all gui chrome is useless" rampage.  I personally think the scrollbar is useful, i like the visual indication it gives of how far i am through a file.