(require 'psgml-startup) (setq auto-mode-alist (cons '("\\.docbook$" . sgml-mode) auto-mode-alist)) (setq sgml-catalog-files (list "CATALOG" "/usr/local/share/sgml/catalog" "/home/phil/cvs-kde/share/apps/ksgmltools2/customization/catalog" "/usr/local/share/xml/catalog")) (defun sgml-para () "Insert para tags and position cursor." (interactive) (sgml-insert-element 'para)) (defun sgml-comment () "Insert SGML comment and position cursor." (interactive) (insert "") (backward-char 4)) (defun sgml-kill-to-eoelement () "Kill to end of element." (interactive) (let ((start (point))) (sgml-end-of-element) (kill-region start (point)))) (defun sgml-fold-all-chapters () "Fold all elements in buffer" (interactive) (save-excursion (goto-char (point-min)) (while (search-forward " %s %s \n" menu-name item-name)) (forward-line -2) (forward-char 16) )) (defun sgml-kde-insert-varlistentry () "Insert the necessary markup for a , placing the cursor inside the element" (interactive) (insert (format " " )) (forward-line -3) (forward-char 6) ) (defun sgml-kde-action-on-gt () "Close other windows and insert a >. See comment in source for problems" (interactive) ;This is inherently unsafe if you're using multiple frames for something ;else, because it will close those frames as well, but... (delete-other-windows) ; ...ideally, we'd do something like this: ;(delete-buffer-window (get-buffer-window "*Completions*" nil)) ;but the *Completions* buffer is just a temp buffer, which doesn't ;appear on the buffer list, so can't be deleted with the normal fns (insert ">")) (defun sgml-kde-to-attr (s) "Lowercase a string and replace spaces with hyphens, thereby making it suitable to be an attribute" (with-temp-buffer (insert (downcase s)) (goto-char (point-min)) (perform-replace " " "-" nil nil nil nil nil) (buffer-string))) (defun sgml-kde-insert-sectioning () "Insert a section-type command with title" (interactive) (let ((secttype (read-string "Section type (c,1,2,3): " nil)) (title (read-string "Title: " nil))) (if (string= secttype "c") (setq secttag "chapter") (setq secttag (concat "sect" secttype))) (insert (format "<%s id=\"%s\"> %s " secttag (sgml-kde-to-attr title) title secttag )) (forward-line -1) (forward-char 6) )) (defun sgml-kde-insert-sys-entity () "Insert a SYSTEM entity declaration" (interactive) (let ((filename (read-string "Filename: " nil nil))) (insert (format "" filename filename)))) (setq psgml-mode-hook '(lambda () (define-key psgml-mode-map "\C-cp" 'sgml-para) (define-key psgml-mode-map [(tab)] 'sgml-complete) (define-key psgml-mode-map "\C-ck" 'sgml-kill-to-eoelement) (define-key psgml-mode-map "\C-co" 'sgml-comment) (define-key psgml-mode-map [?\C-c (home)] 'sgml-beginning-of-element) (define-key psgml-mode-map [?\C-c (end)] 'sgml-end-of-element) (define-key psgml-mode-map "\C-c\C-f\C-c" 'sgml-fold-all-chapters) (define-key psgml-mode-map "\C-c\C-f\C-m" 'sgml-kde-insert-menudescitem) (define-key psgml-mode-map "\C-cs" 'sgml-kde-insert-sectioning) (define-key psgml-mode-map ">" 'sgml-kde-action-on-gt) (setq indent-tabs-mode nil next-line-add-newlines nil standard-indent 2 sgml-validate-command "checkXML %s %s") (auto-fill-mode t))) (setq-default sgml-set-face t) ;; ;; Faces. ;; (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) (set-face-foreground 'sgml-comment-face "light slate gray") (set-face-foreground 'sgml-doctype-face "maroon") (set-face-foreground 'sgml-end-tag-face "DarkOrchid1") (set-face-foreground 'sgml-entity-face "red2") (set-face-foreground 'sgml-ignored-face "maroon") (set-face-background 'sgml-ignored-face "gray90") (set-face-foreground 'sgml-ms-end-face "maroon") (set-face-foreground 'sgml-ms-start-face "maroon") (set-face-foreground 'sgml-pi-face "maroon") (set-face-foreground 'sgml-sgml-face "maroon") (set-face-foreground 'sgml-short-ref-face "goldenrod") (set-face-foreground 'sgml-start-tag-face "blue2") (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)))