;;; miniswedish.el ;;; Minor mode for insertion of Swedish characters ;;; ;;; ;;; Copyright (C) 1992 Lysator Academic Computer Club, ;;; Linköping University, Sweden ;;; ;;; Everyone is granted permission to copy, modify and redistribute ;;; this code, provided the people they give it to can. ;;; ;;; ;;; Author: Thomas Bellman ;;; Lysator Academic Computer Club ;;; Linköping University ;;; Sweden ;;; ;;; email: Bellman@Lysator.LiU.SE ;;; ;;; ;;; Any opinions expressed in this code are the author's PERSONAL opinions, ;;; and does NOT, repeat NOT, represent any official standpoint of Lysator, ;;; even if so stated. (require 'interlist) (defvar miniswedish-mode nil "Tells if 'miniswedish' mode is active in buffer, and which variant. Can take the values nil (not active), iso (insert ISO 8859-1 characters), TeX (insert \\TeX commands) or ascii (insert SIS D47 characters).") (defvar miniswedish-saved-keymap nil "The normal bindings of keys in the buffer.") (make-variable-buffer-local 'miniswedish-mode) (make-variable-buffer-local 'miniswedish-saved-keymap) (make-variable-buffer-local 'miniswedish-name) (if (not (assq 'miniswedish-mode minor-mode-alist)) ;; The string will be changed by the 'miniswedish-mode' function (attach '(miniswedish-mode miniswedish-name) minor-mode-alist)) (defvar miniswedish-bindings '(("}" (iso "å") (TeX "\\aa{}") (ascii "}")) ("{" (iso "ä") (TeX "\\\"a") (ascii "{")) ("|" (iso "ö") (TeX "\\\"o") (ascii "|")) ("]" (iso "Å") (TeX "\\AA{}") (ascii "]")) ("[" (iso "Ä") (TeX "\\\"A") (ascii "[")) ("\\" (iso "Ö") (TeX "\\\"O") (ascii "\\")))) (defun miniswiso-mode (&optional arg) "Toggle miniswedish ISO mode. Makes some keys insert Swedish characters from the ISO 8859-1 character set." (interactive "P") (miniswedish-mode arg 'iso "SwISO")) (defun miniswTeX-mode (&optional arg) "Toggle miniswedish TeX mode. Makes some keys insert TeX macros to generate Swedish characters." (interactive "P") (miniswedish-mode arg 'TeX "SwTeX")) (defun miniswascii-mode (&optional arg) "Toggle miniswedish ASCII mode. Makes some keys insert Swedish character from the SIS D47 character set." (interactive "P") (miniswedish-mode arg 'ascii "SwASCII")) (defun miniswedish-mode (arg mode name) "Toggle the variants of the miniswedish minor mode." (let (new-miniswedish-mode-value) (setq new-miniswedish-mode-value (if arg ;; Explicit on or off (if (or (symbolp arg) (> (prefix-numeric-value arg) 0)) mode (if (eq miniswedish-mode mode) nil miniswedish-mode)) ;; Toggle (if (eq miniswedish-mode mode) nil mode))) ;; Save bindings of (if (and new-miniswedish-mode-value (not miniswedish-mode)) (progn (if (not (current-local-map)) (setq miniswedish-saved-keymap nil) (setq miniswedish-saved-keymap (current-local-map)) (use-local-map (copy-keymap (or (current-local-map) (make-sparse-keymap))))))) (if new-miniswedish-mode-value (progn (mapcar (function (lambda (def) (local-set-key (car def) (` (lambda () (interactive) (insert (, (cadr (assq mode (cdr def)))))))))) miniswedish-bindings)) ;; Turn off miniswedish mode (if miniswedish-mode (use-local-map miniswedish-saved-keymap))) (setq miniswedish-mode new-miniswedish-mode-value miniswedish-name (concat " " name)) (set-buffer-modified-p (buffer-modified-p)) ; Update mode line ;; (message "Swedish: %s" miniswedish-mode) )) (define-key global-map "\C-zi" 'miniswiso-mode) (define-key global-map "\C-zt" 'miniswTeX-mode) (define-key global-map "\C-za" 'miniswascii-mode)