From: Ed L Cashin <ecashin@uga.edu>
Subject: .emacs tricks for indenting TeX code
Date: 17 Feb 2002 23:11:32 -0500 [thread overview]
Message-ID: <86y9hr77kb.fsf@cs.uga.edu> (raw)
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/
next reply other threads:[~2002-02-18 4:11 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-02-18 4:11 Ed L Cashin [this message]
2002-02-18 4:56 ` Ed L Cashin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=86y9hr77kb.fsf@cs.uga.edu \
--to=ecashin@uga.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).