David Arnold wrote:
What can people tell me about setting up Emacs to work with Context?
I'd like to gather all information I can.
Hello David, I run fptex using Emacs 21.3 as an editor on a win2k box. The customizations I describe below, have been hoarded from various sources over some period (which of course has generated spaghetti code). Regularly, I promise myself, that I'll clean the code up, but unfortunately my emacs has now become so electric, and the code so opaque, that for me, it would be a major effort. The ASCII figure below, shows how I've grouped my customizations into different files. I'd like to say that each file customizes a specific behaviour in emacs, but I can't; the split up is not that logical. default.el | -------------------------- | | mmm-site.el text-mode-site.el | context-site.el Starting from the top: default.el contains the look and feel. My preferences being to: 1) keep the Emacs display fairly small (80 character wide, and 30 lines deep); 2) have syntax highlighting wound up to the maximum The only external lisp code, in default.el is for parenthesis highlighting. The package is called mic-paren.el. ;; default.el ------------------------------------------------------- ;; set a default font for W3 (setq w32-enable-italics t) ; This must be done before font settings! ;Set the default color, font and frame size for the initial frame. (setq default-frame-alist '(;(menu-bar-lines) (vertical-scroll-bars) (top . 30) (left . 30) (width . 80) (height . 30) (cursor-color . "Red") (cursor-type . bar) (foreground-color . "black") (background-color . "IVORY") (font . "-*-Courier New-normal-r-*-*-11-82-96-96-c-*-iso8859-1"))) (set-face-background 'modeline "navy") (set-face-foreground 'modeline "gold") (set-face-font 'italic "-*-Courier New-normal-i-*-*-11-82-96-96-c-*-iso8859-1") (set-face-font 'bold "-*-Courier New-bold-r-*-*-11-82-96-96-c-*-iso8859-1") (set-face-font 'bold-italic "-*-Courier New-bold-i-*-*-11-82-96-96-c-*-iso8859-1") ;; display ISO-Latin-1 characters with accents ;; required for gnus summary display (standard-display-european t) ;; switch to ISO-Latin-1 (emacs > 20.3) (set-language-environment "Latin-1") ;; Set the default coding system to be foo-unix, instead of the foo-dos (setq default-buffer-file-coding-system 'latin-1-unix) ;; allow multiple major modes (require 'mmm-site) ;; completion-ignored-extensions (setq completion-ignored-extensions (append completion-ignored-extensions (list ".ilg" ".ind" ".pdf" ".tui" ".tuo" ".ted" ".tmp" ".orig" ".ps" ".mp" ".mpo" "mpd" ".1" ".2" ".3" ".4" ".5" ".6" ".7" ".8" ".9"))) ;; fontification font-lock.el ;; Must be defined before font lock is loaded. (setq font-lock-maximum-decoration t) (global-font-lock-mode t) ;; lazy-lock-mode on by default (setq font-lock-support-mode 'lazy-lock-mode lazy-lock-defer-on-scrolling t) ;; mic-paren.el display highlighting on parenthesis ;; http://www.docs.uu.se/~mic/emacs.html (require 'mic-paren) (paren-activate) ;; text mode (require 'text-mode-site) ;; end of default.el----------------------------------------------------- mmm-site Because ConTeXt has now become so intertwined with metapost, I now run two major modes within a single buffer. I've embedded the metapost inside the ConTeXt, using the external mode, MMM Mode. This package also doesn't come with Emacs. ;; mmm-site.el -------------------------------------------------- ;; load just enough of mmm mode so that it turns itself on (require 'mmm-auto) (setq mmm-global-mode 'maybe) ;; for context/metapost (mmm-add-group 'context-metapost '((context-MPgraphic :submode metapost-mode :face mmm-code-submode-face :front "\\\\startuseMPgraphic" :back "\\\\stopuseMPgraphic") (context-MPcode :submode metapost-mode :face mmm-code-submode-face :front "\\\\startMPcode" :back "\\\\stopMPcode") )) (add-to-list 'mmm-mode-ext-classes-alist '(nil "\\.ctx\\'" context-metapost)) (provide 'mmm-site) ;; ---------------------------------------------------------------------- text-mode-site.el text-mode-site provide a couple of electric features, that are common to all text files (XML files, emails, etc.). I'm a very slow typist, and word expansion speeds up my typing. (After my space-bar, I think ctrl-<TAB> is my most used key.) Bracket completion is also very useful. ;;; text-mode-site.el --------------------------------------------------- ;;;;;;;;;;;;;;;;;;;;;Ralf Stubner (from comp.text.tex newsgroup) (require 'tempo) (setq transient-mark-mode t) ; `tempo-define-template' returns an interactive function, which is ; then bound to the appropriate key. The `r' simply stands for ; `region'. There are many more possibilities here. (defun my-text-mode-hook () (local-set-key "{" (tempo-define-template "TeX-schweif" '("{" r "}"))) (local-set-key "(" (tempo-define-template "TeX-rundekl" '("(" r ")"))) (local-set-key "[" (tempo-define-template "TeX-eckigek" '("[" r "]"))) ;; (local-set-key ;; "^" (tempo-define-template "TeX-exponen" '("^{" r "}"))) ;; (local-set-key ;; "_" (tempo-define-template "TeX-subscri" '("_{" r "}"))) ;; (local-set-key ;; "$" (tempo-define-template "TeX-dollarm" '("$" r "$"))) (local-set-key "<" (tempo-define-template "XML-tag" '("<" r ">"))) (turn-on-filladapt-mode) (ispell-minor-mode 1) (abbrev-mode 1)) (add-hook 'text-mode-hook 'my-text-mode-hook) ;;;;;;;;;;;;;;;;;;;;; ;; Klaus Berndl ;; we want to complete and expand as much as possible in all buffers. ;; order of try-functions is significant! ;; includes the whole dabbrev-stuff! (require 'hippie-exp) (setq hippie-expand-try-functions-list '(;; try-complete-tempo-tag try-expand-dabbrev try-expand-dabbrev-all-buffers try-expand-dabbrev-from-kill try-complete-file-name-partially try-complete-file-name ;; try-expand-list try-complete-lisp-symbol-partially try-complete-lisp-symbol try-expand-whole-kill)) ;; the expand-function. Called with a positive prefix <P> it jumpes direct ;; to the <P>-th try-function. (defun my-hippie-expand (arg) (interactive "P") ;; hippie-expand does not have a customization-feature (like ;; dabbrev-expand) to search case-sensitive for completions. ;; So we must set 'case-fold-search' temp. to nil! (let ((old-case-fold-search case-fold-search)) (setq case-fold-search nil) (hippie-expand arg) (setq case-fold-search old-case-fold-search) ) ) ;; all expansion is done by 'my-hippie-expand bound to C-TAB! (global-set-key (quote [C-tab]) (quote my-hippie-expand)) ;; (require 'context-site) (provide 'text-mode-site) ;; end of text-mode-site ------------------------------------------- context-site.el The other major mode is ConTeXt, it requires the external package, context.el, which is available from the third-party packages on Hans Hagen's pragma-ade web site. ;; context-site.el ----------------------------------------------------- (require 'context) (setq auto-mode-alist (cons '("\\.ctx$" . tex-mode) auto-mode-alist)) (provide 'context-site) ;; end of context-site.el---------------------------------------------- As you can see it is very spartan. Indeed the file isn't really needed since I call conTeXt files by using Local variables hooks in my ConTeXt source code. That is, I append, the following tags to the end of every ConTeXt file: %%% Local Variables: %%% mode:context %%% indent-tabs-mode:nil %%% End: Invoking ConTeXt: I don't use Emacs to invoke ConTeXt. I invoke it from a separate command shell, using the fptex executable texexec, and a view the resultant pdf file using the fptex executable pdfopen, and afterwards close it using pdfclose.