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