;;
;; $Id: linux-config.el,v 1.1 1996/02/08 18:11:02 ejb Exp $
;; $Source: /home/ejb/elisp/q/RCS/linux-config.el,v $
;; $Author: ejb $
;;
;; Minor mode that provides simple support for editing linux .config files.
;;

(defvar linux-config-mode nil)
(make-variable-buffer-local 'linux-config-mode)
(defvar linux-config-mode-map (make-sparse-keymap))

(defun linux-config-mode (arg)
  "Toggle on linux-config mode, adding features for editing .config files."
  (interactive "P")
  (if (null arg)
      (setq linux-config-mode (not linux-config-mode))
    (setq linux-config-mode t))
  (if linux-config-mode
      (progn
	(define-key linux-config-mode-map "y" 'linux-config-yes)
	(define-key linux-config-mode-map "n" 'linux-config-no)
	(define-key linux-config-mode-map "m" 'linux-config-module)

	(or (not (boundp 'minor-mode-map-alist))
	    (assq 'linux-config-mode minor-mode-map-alist)
	    (setq minor-mode-map-alist
		  (cons (cons 'linux-config-mode linux-config-mode-map)
			minor-mode-map-alist)
		  )
	    )
	(or (assq 'linux-config-mode minor-mode-alist)
	    (setq minor-mode-alist
		  (append '((linux-config-mode " linux-config"))
			  minor-mode-alist)
		  )
	    )
	)
    ;; else
    )
  (force-mode-line-update)
  )

(defun linux-config-unset ()
  (save-excursion
    (beginning-of-line 1)
    (if (not (looking-at "# "))
	(progn
	  (insert "# ")
	  (search-forward "=")
	  (backward-char 1)
	  (delete-region (point) (save-excursion (end-of-line) (point)))
	  (insert " is not set")
	  )
      )
    )
  )

(defun linux-config-set (str)
  (save-excursion
    (beginning-of-line 1)
    (if (looking-at "# ")
	(progn
	  (delete-region (point) (+ 2 (point)))
	  (search-forward " is not set")
	  (goto-char (match-beginning 0))
	  (delete-region (point) (save-excursion (end-of-line) (point)))
	  (insert "=")
	  (insert str)
	  )
      (search-forward "=")
      (delete-region (point) (save-excursion (end-of-line) (point)))
      (insert str)
      )
    )
  )

(defun linux-config-yes ()
  (interactive)
  (linux-config-set "y")
  (beginning-of-line 2))

(defun linux-config-no ()
  (interactive)
  (linux-config-unset)
  (beginning-of-line 2))

(defun linux-config-module ()
  (interactive)
  (linux-config-set "m")
  (beginning-of-line 2))
