1 ;;; novice.el --- handling of disabled commands ("novice mode") for Emacs.
3 ;; Copyright (C) 1985, 1986, 1987 Free Software Foundation, Inc.
5 ;; This file is part of GNU Emacs.
7 ;; GNU Emacs is free software; you can redistribute it and/or modify
8 ;; it under the terms of the GNU General Public License as published by
9 ;; the Free Software Foundation; either version 1, or (at your option)
12 ;; GNU Emacs is distributed in the hope that it will be useful,
13 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
14 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 ;; GNU General Public License for more details.
17 ;; You should have received a copy of the GNU General Public License
18 ;; along with GNU Emacs; see the file COPYING. If not, write to
19 ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
22 ;; This function is called (by autoloading)
23 ;; to handle any disabled command.
24 ;; The command is found in this-command
25 ;; and the keys are returned by (this-command-keys).
28 (setq disabled-command-hook
'disabled-command-hook
)
31 (defun disabled-command-hook (&rest ignore
)
33 (save-window-excursion
34 (with-output-to-temp-buffer "*Help*"
35 (if (= (aref (this-command-keys) 0) ?\M-x
)
36 (princ "You have invoked the disabled command ")
37 (princ "You have typed ")
38 (princ (key-description (this-command-keys)))
39 (princ ", invoking disabled command "))
42 ;; Print any special message saying why the command is disabled.
43 (if (stringp (get this-command
'disabled
))
44 (princ (get this-command
'disabled
)))
45 (princ (or (condition-case ()
46 (documentation this-command
)
48 "<< not documented >>"))
49 ;; Keep only the first paragraph of the documentation.
52 (goto-char (point-min))
53 (if (search-forward "\n\n" nil t
)
54 (delete-region (1- (point)) (point-max))
55 (goto-char (point-max))))
57 (princ "You can now type
58 Space to try the command just this once,
59 but leave it disabled,
60 Y to try it and enable it (no questions if you use it again),
61 N to do nothing (command remains disabled)."))
62 (message "Type y, n or Space: ")
63 (let ((cursor-in-echo-area t
))
64 (while (not (memq (setq char
(downcase (read-char)))
67 (message "Please type y, n or Space: "))))
69 (if (y-or-n-p "Enable command for future editing sessions also? ")
70 (enable-command this-command
)
71 (put this-command
'disabled nil
)))
73 (call-interactively this-command
))))
76 (defun enable-command (command)
77 "Allow COMMAND to be executed without special confirmation from now on.
78 The user's .emacs file is altered so that this will apply
80 (interactive "CEnable command: ")
81 (put command
'disabled nil
)
83 (set-buffer (find-file-noselect (substitute-in-file-name "~/.emacs")))
84 (goto-char (point-min))
85 (if (search-forward (concat "(put '" (symbol-name command
) " ") nil t
)
87 (progn (beginning-of-line) (point))
88 (progn (forward-line 1) (point)))
89 ;; Must have been disabled by default.
90 (goto-char (point-max))
91 (insert "\n(put '" (symbol-name command
) " 'disabled nil)\n"))
92 (setq foo
(buffer-modified-p))
96 (defun disable-command (command)
97 "Require special confirmation to execute COMMAND from now on.
98 The user's .emacs file is altered so that this will apply
100 (interactive "CDisable command: ")
101 (put command
'disabled t
)
103 (set-buffer (find-file-noselect (substitute-in-file-name "~/.emacs")))
104 (goto-char (point-min))
105 (if (search-forward (concat "(put '" (symbol-name command
) " ") nil t
)
107 (progn (beginning-of-line) (point))
108 (progn (forward-line 1) (point))))
109 (goto-char (point-max))
110 (insert "(put '" (symbol-name command
) " 'disabled t)\n")
113 ;;; novice.el ends here