From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.io/gmane.comp.tex.context/6914 Path: main.gmane.org!not-for-mail From: Ed L Cashin Newsgroups: gmane.comp.tex.context Subject: .emacs tricks for indenting TeX code Date: 17 Feb 2002 23:11:32 -0500 Sender: owner-ntg-context@let.uu.nl Message-ID: <86y9hr77kb.fsf@cs.uga.edu> NNTP-Posting-Host: coloc-standby.netfonds.no Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: main.gmane.org 1035397418 14966 80.91.224.250 (23 Oct 2002 18:23:38 GMT) X-Complaints-To: usenet@main.gmane.org NNTP-Posting-Date: Wed, 23 Oct 2002 18:23:38 +0000 (UTC) Original-To: ntg-context@ntg.nl Xref: main.gmane.org gmane.comp.tex.context:6914 X-Report-Spam: http://spam.gmane.org/gmane.comp.tex.context:6914 This is probably only interesting to emacs users who, like me, have never liked the way indentation works in emacs' tex-mode. I want it to work like this: * if I hit tab on a blank line, I want to indent, even if I'm right below a blank line -- that's why I hit the tab key! * if I hit tab under an indented line, I want to indent to the beginning of the previous line. * using four-space tab stops so tex looks good ... and I can always use M-i to indent further that the previous line. Here's some emacs lisp code that does all that (try it on non-essential files first -- I'm no lisp guru). It's based on stuff in indent.el, and I haven't really optimized it for style. ;) (defun indent-tab-stop-or-relative (&optional unindented-ok) "indent even under blank line. indent to beginning of last line if non-blank" (interactive "P") (if (and abbrev-mode (eq (char-syntax (preceding-char)) ?w)) (expand-abbrev)) (let ((start-column (current-column)) (indent nil)) (save-excursion (beginning-of-line) ;; if preceding line is not blank (if (not (re-search-backward "^[ \t]*\n" nil t)) (progn (forward-line -1) (move-to-column start-column) ;; Is start-column inside a tab on this line? (if (> (current-column) start-column) (backward-char 1)) (if (looking-at "[ \t]") (progn (skip-chars-forward " \t") (setq indent (current-column))))))) (let ((opoint (point-marker))) (delete-horizontal-space) (if indent (indent-to indent) (tab-to-tab-stop)) (if (> opoint (point)) (goto-char opoint)) (move-marker opoint nil)))) ; (setq tex-mode-hook nil) (add-hook 'tex-mode-hook '(lambda () "my own tex stuff. enough misery!!!" ; (let ((k (make-sparse-keymap)) (make-local-variable 'tab-stop-list) (setq tab-stop-list ; four-space stops '(4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 104 108 112 116 120 124 128 132 136 140 144 148 152 156 160 164 168 172 176 180 184 188 192 196 200 204 208 212 216 220 224 228 232 236 240)) (make-local-variable 'indent-line-function) (setq indent-line-function 'indent-tab-stop-or-relative) (local-set-key "\C-j" 'newline-and-indent) (local-set-key "\t" 'indent-tab-stop-or-relative))) -- --Ed L Cashin | PGP public key: ecashin@uga.edu | http://noserose.net/e/pgp/