Chapter 8. Emacs configuration

Table of Contents

8.1. shortcut to edit .sgml files
8.2. dot.emacs file

8.1. shortcut to edit .sgml files

With the following dot.emacs file, it's really simple to add Docbook TAGS. You also need to install emacs-psgml.

  • C+c / or Esc Esc c close an open tag

  • C+c p add para

  • C+c c add "xml version='1.0' encoding="ISO-8859-1" tag

  • C+c t add title

  • C+c u add link, you need to specify url

  • C+c s add sect1

  • C+c d add sect2

  • C+c e add emphasis with role=bold

  • C+c g add graphic

  • C+c l add itemizedlist tag

  • C+c i add a listitem in itemizedlist

  • C+c < add < element

  • C+c > add > element

  • F3 backward up element

  • F4 backward down element

8.2. dot.emacs file

(add-to-list 'auto-mode-alist '("\\.pm$" . cperl-mode))
(add-to-list 'auto-mode-alist '("\\.pl$" . cperl-mode))
(add-to-list 'auto-mode-alist '("\\.xml$" . sgml-mode))
(setq auto-mode-alist (append '(("\.sgml$"  . sgml-mode)) auto-mode-alist))

(menu-bar-mode -1)
(tool-bar-mode -1)
(display-time)
(scroll-bar-mode -1)
(auto-compression-mode 1)
(setq inhibit-startup-message t)
(fset 'yes-or-no-p 'y-or-n-p)
(setq display-time-24hr-format t)
(setq column-number-mode t)
(display-time)
(custom-set-faces)

(standard-display-european t)
(iso-accents-mode t)
(require 'iso-insert)
(set-language-environment 'latin-1)
(set-input-mode (car (current-input-mode)) (nth 1 (current-input-mode)) 0)

(global-set-key   "\C-h"        'delete-backward-char)
(global-set-key [backspace]  'delete-backward-char)
(global-set-key [deletechar] 'delete-char)

(autoload 'sgml-mode "psgml" "My Most Major Mode" t)
(autoload 'xml-mode "psgml" "Major Mode for XML" t)
(add-to-list 'load-path "/usr/share/emacs/site-lisp/psgml")

(setq sgml-mode-hook '(lambda () "Defaults for SGML mode." (auto-fill-mode)
			(setq show-trailing-whitespace t)
			(setq fill-column 80)
			(setq sgml-auto-activate-dtd t)
			(setq sgml-indent-data 20)
			(setq sgml-warn-about-undefined-entities nil)
			(setq sgml-warn-about-undefined-elements nil)
			(setq xml-lite-electric-slash t)
			(setq sgml-ignore-undefined-entities nil)))

(setq-default sgml-set-face t)
(make-face 'sgml-comment-face)
(make-face 'sgml-doctype-face)
(make-face 'sgml-end-tag-face)
(make-face 'sgml-entity-face)
(make-face 'sgml-ignored-face)
(make-face 'sgml-ms-end-face)
(make-face 'sgml-ms-start-face)
(make-face 'sgml-pi-face)
(make-face 'sgml-sgml-face)
(make-face 'sgml-short-ref-face)
(make-face 'sgml-start-tag-face)
; doc book fonctions
(defun sgml-adds-para () "Insert para tags and position cursor." (interactive) (sgml-insert-element 'para))
(defun sgml-adds-sect1 () "Insert sect1 tags and position cursor." (interactive) 
  (sgml-insert-element 'sect1)
  (sgml-insert-element 'title))
(defun sgml-adds-sect2 () "Insert sect2 tags and position cursor." (interactive) 
  (sgml-insert-element 'sect2)
  (sgml-insert-element 'title))	
(defun sgml-adds-emphasis () "Insert emphasis tags and position cursor." (interactive) 
  (sgml-insert-element 'emphasis)
  (forward-char -1)
  (insert " role=\"bold\"")
  (forward-char 1))
(defun sgml-adds-itemizedlist () "Insert itemizedlist tags and position cursor." (interactive) 
  (sgml-insert-element 'itemizedlist)
  (sgml-insert-element 'listitem)
  (sgml-insert-element 'para))
(defun sgml-adds-listitem() "Insert listitem tags and position cursor." (interactive) 
  (sgml-insert-element 'listitem)
  (sgml-insert-element 'para))
(defun sgml-adds-ulink () "Insert a URL." (interactive)
  (sgml-insert-element 'ulink)
  (forward-char -1)
  (insert " url=\"\"")
  (forward-char 1))
(defun sgml-adds-graphic () "Insert graphic tags and position cursor." (interactive) 
  (sgml-insert-element 'figure)
  (sgml-insert-element 'title)
  (sgml-next-data-field)
  (insert "<graphic format=\"PNG\" fileref=\"\"/>"))
(defun sgml-adds-lt () "Insert ISO entity reference for less-than." (interactive)
  (insert "&lt;"))
(defun sgml-adds-gt () "Insert ISO entity reference for great-than." (interactive)
  (insert "&gt;"))
(defun sgml-adds-xml () "Insert xml entity reference" (interactive)
  (insert "<?xml version=\"1.0\"  encoding=\"ISO-8859-1\"?>"))
; doc book shortcut
(global-set-key (kbd "<f4>") 'sgml-next-data-field)
(global-set-key (kbd "\e\ec") 'sgml-insert-end-tag)
(global-set-key (kbd "\C-cp") 'sgml-adds-para)
(global-set-key (kbd "\C-cc") 'sgml-adds-xml)
(global-set-key (kbd "\C-ct") 'sgml-adds-title)
(global-set-key (kbd "\C-cu") 'sgml-adds-ulink)
(global-set-key (kbd "\C-cs") 'sgml-adds-sect1)
(global-set-key (kbd "\C-cd") 'sgml-adds-sect2)
(global-set-key (kbd "\C-ce") 'sgml-adds-emphasis)
(global-set-key (kbd "\C-cg") 'sgml-adds-graphic)
(global-set-key (kbd "\C-cl") 'sgml-adds-itemizedlist)
(global-set-key (kbd "\C-ci") 'sgml-adds-listitem)
(global-set-key (kbd "\C-c<") 'sgml-adds-lt)
(global-set-key (kbd "\C-c>") 'sgml-adds-gt)
(global-set-key (kbd "<f3>") 'sgml-backward-up-element)
; doc book color
(set-face-foreground 'sgml-comment-face "dark magenta")
(set-face-foreground 'sgml-doctype-face "red")
(set-face-foreground 'sgml-end-tag-face "yellow")
(set-face-foreground 'sgml-entity-face "magenta")
(set-face-foreground 'sgml-ignored-face "gray40")
(set-face-foreground 'sgml-ms-end-face "green")
(set-face-foreground 'sgml-ms-start-face "deep yellow")
(set-face-foreground 'sgml-pi-face "lime green")
(set-face-foreground 'sgml-sgml-face "brown")
(set-face-foreground 'sgml-short-ref-face "deep sky blue")
(set-face-foreground 'sgml-start-tag-face "green")

(setq-default sgml-markup-faces
'((comment . sgml-comment-face)
 (doctype . sgml-doctype-face)
 (end-tag . sgml-end-tag-face)
 (entity . sgml-entity-face)
 (ignored . sgml-ignored-face)
 (ms-end . sgml-ms-end-face)
 (ms-start . sgml-ms-start-face)
 (pi . sgml-pi-face)
 (sgml . sgml-sgml-face)
 (short-ref . sgml-short-ref-face)
 (start-tag . sgml-start-tag-face)))

(defun docbook-mode ()
  (sgml-mode))