Mercurial > emacs
changeset 106020:dd16af77622d
(disabled-command-function): Add useful args.
Setup the help buffer so that [back] works.
Remove redundant call to help-mode.
(disabled-command-function): Use `case'.
(en/disable-command): New function extracted from enable-command.
(enable-command, disable-command): Use it.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Sun, 15 Nov 2009 05:12:52 +0000 |
parents | 053192c3df59 |
children | 1db0581a94d9 |
files | lisp/ChangeLog lisp/novice.el |
diffstat | 2 files changed, 52 insertions(+), 61 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/ChangeLog Sun Nov 15 01:45:23 2009 +0000 +++ b/lisp/ChangeLog Sun Nov 15 05:12:52 2009 +0000 @@ -1,3 +1,12 @@ +2009-11-15 Stefan Monnier <monnier@iro.umontreal.ca> + + * novice.el (disabled-command-function): Add useful args. + Setup the help buffer so that [back] works. + Remove redundant call to help-mode. + (disabled-command-function): Use `case'. + (en/disable-command): New function extracted from enable-command. + (enable-command, disable-command): Use it. + 2009-11-14 Glenn Morris <rgm@gnu.org> * menu-bar.el (menu-bar-tools-menu): Read and send mail entries are not
--- a/lisp/novice.el Sun Nov 15 01:45:23 2009 +0000 +++ b/lisp/novice.el Sun Nov 15 05:12:52 2009 +0000 @@ -34,6 +34,8 @@ ;; The command is found in this-command ;; and the keys are returned by (this-command-keys). +(eval-when-compile (require 'cl)) + ;;;###autoload (defvar disabled-command-function 'disabled-command-function "Function to call to handle disabled commands. @@ -45,11 +47,13 @@ ;; It is ok here to assume that this-command is a symbol ;; because we won't get called otherwise. ;;;###autoload -(defun disabled-command-function (&rest ignore) +(defun disabled-command-function (&optional cmd keys) + (unless cmd (setq cmd this-command)) + (unless keys (setq keys (this-command-keys))) (let (char) (save-window-excursion - (with-output-to-temp-buffer "*Disabled Command*" - (let ((keys (this-command-keys))) + (help-setup-xref (list 'disabled-command-function cmd keys) nil) + (with-output-to-temp-buffer "*Disabled Command*" ;; (help-buffer) (if (or (eq (aref keys 0) (if (stringp keys) (aref "\M-x" 0) @@ -57,22 +61,21 @@ (and (>= (length keys) 2) (eq (aref keys 0) meta-prefix-char) (eq (aref keys 1) ?x))) - (princ (format "You have invoked the disabled command %s.\n" - (symbol-name this-command))) + (princ (format "You have invoked the disabled command %s.\n" cmd)) (princ (format "You have typed %s, invoking disabled command %s.\n" - (key-description keys) (symbol-name this-command))))) + (key-description keys) cmd))) ;; Print any special message saying why the command is disabled. - (if (stringp (get this-command 'disabled)) - (princ (get this-command 'disabled)) + (if (stringp (get cmd 'disabled)) + (princ (get cmd 'disabled)) (princ "It is disabled because new users often find it confusing.\n") (princ "Here's the first part of its description:\n\n") ;; Keep only the first paragraph of the documentation. - (with-current-buffer "*Disabled Command*" + (with-current-buffer "*Disabled Command*" ;; standard-output (goto-char (point-max)) (let ((start (point))) (save-excursion (princ (or (condition-case () - (documentation this-command) + (documentation cmd) (error nil)) "<< not documented >>"))) (if (search-forward "\n\n" nil t) @@ -85,8 +88,10 @@ n to cancel--don't try the command, and it remains disabled. SPC to try the command just this once, but leave it disabled. ! to try it, and enable all disabled commands for this session only.") - (with-current-buffer standard-output - (help-mode))) + ;; Redundant since with-output-to-temp-buffer will do it anyway. + ;; (with-current-buffer standard-output + ;; (help-mode)) + ) (fit-window-to-buffer (get-buffer-window "*Disabled Command*")) (message "Type y, n, ! or SPC (the space bar): ") (let ((cursor-in-echo-area t)) @@ -97,31 +102,26 @@ (ding) (message "Please type y, n, ! or SPC (the space bar): ")))) (setq char (downcase char)) - (if (= char ?\C-g) - (setq quit-flag t)) - (if (= char ?!) - (setq disabled-command-function nil)) - (if (= char ?y) + (case char + (?\C-g (setq quit-flag t)) + (?! (setq disabled-command-function nil)) + (?y (if (and user-init-file (not (string= "" user-init-file)) (y-or-n-p "Enable command for future editing sessions also? ")) - (enable-command this-command) - (put this-command 'disabled nil))) - (if (/= char ?n) - (call-interactively this-command)))) + (enable-command cmd) + (put cmd 'disabled nil))) + (?n nil) + (t (call-interactively cmd))))) -;;;###autoload -(defun enable-command (command) - "Allow COMMAND to be executed without special confirmation from now on. -COMMAND must be a symbol. -This command alters the user's .emacs file so that this will apply -to future sessions." - (interactive "CEnable command: ") - (put command 'disabled nil) +(defun en/disable-command (command disable) + (unless (commandp command) + (error "Invalid command name `%s'" command)) + (put command 'disabled disable) (let ((init-file user-init-file) (default-init-file (if (eq system-type 'ms-dos) "~/_emacs" "~/.emacs"))) - (when (null init-file) + (unless init-file (if (or (file-exists-p default-init-file) (and (eq system-type 'windows-nt) (file-exists-p "~/_emacs"))) @@ -144,46 +144,28 @@ ;; Explicitly enable, in case this command is disabled by default ;; or in case the code we deleted was actually a comment. (goto-char (point-max)) - (insert "\n(put '" (symbol-name command) " 'disabled nil)\n") + (unless (bolp) (newline)) + (insert "(put '" (symbol-name command) " 'disabled " + (symbol-name disable) ")\n") (save-buffer)))) ;;;###autoload +(defun enable-command (command) + "Allow COMMAND to be executed without special confirmation from now on. +COMMAND must be a symbol. +This command alters the user's .emacs file so that this will apply +to future sessions." + (interactive "CEnable command: ") + (en/disable-command command nil)) + +;;;###autoload (defun disable-command (command) "Require special confirmation to execute COMMAND from now on. COMMAND must be a symbol. This command alters the user's .emacs file so that this will apply to future sessions." (interactive "CDisable command: ") - (if (not (commandp command)) - (error "Invalid command name `%s'" command)) - (put command 'disabled t) - (let ((init-file user-init-file) - (default-init-file - (if (eq system-type 'ms-dos) "~/_emacs" "~/.emacs"))) - (when (null init-file) - (if (or (file-exists-p default-init-file) - (and (eq system-type 'windows-nt) - (file-exists-p "~/_emacs"))) - ;; Started with -q, i.e. the file containing - ;; enabled/disabled commands hasn't been read. Saving - ;; settings there would overwrite other settings. - (error "Saving settings from \"emacs -q\" would overwrite existing customizations")) - (setq init-file default-init-file) - (if (and (not (file-exists-p init-file)) - (eq system-type 'windows-nt) - (file-exists-p "~/_emacs")) - (setq init-file "~/_emacs"))) - (with-current-buffer (find-file-noselect - (substitute-in-file-name init-file)) - (goto-char (point-min)) - (if (search-forward (concat "(put '" (symbol-name command) " ") nil t) - (delete-region - (progn (beginning-of-line) (point)) - (progn (forward-line 1) (point))) - (goto-char (point-max)) - (insert ?\n)) - (insert "(put '" (symbol-name command) " 'disabled t)\n") - (save-buffer)))) + (en/disable-command command t)) (provide 'novice)