Mercurial > emacs
view lisp/gnus/gnus-undo.el @ 99602:c94ec53df9d8
* net/ange-ftp.el (ange-ftp-multi-msgs, ange-ftp-good-msgs)
(ange-ftp-try-passive-mode, ange-ftp-data-buffer-name)
(ange-ftp-account-hashtable, ange-ftp-ls-cache-lsargs)
(ange-ftp-ls-cache-file, ange-ftp-ls-cache-res, ange-ftp-get-user)
(ange-ftp-ftp-name-component, ange-ftp-kill-ftp-process)
(ange-ftp-quote-string, ange-ftp-process-handle-line)
(ange-ftp-start-process, ange-ftp-send-cmd, ange-ftp-add-dumb-unix-host)
(ange-ftp-before-parse-ls-hook, ange-ftp-after-parse-ls-hook)
(ange-ftp-ls, ange-ftp-add-dl-dir, ange-ftp-get-file-entry)
(ange-ftp-set-binary-mode, ange-ftp-set-ascii-mode, ange-ftp-get-pwd)
(ange-ftp-file-name-as-directory-alist, ange-ftp-reread-dir)
(ange-ftp-vms-filename-regexp, ange-ftp-bs2000-fix-name-regexp-reverse)
(ange-ftp-bs2000-fix-name-regexp): Fix typos in docstrings.
(ange-ftp-name-format, ange-ftp-gateway-fatal-msgs)
(ange-ftp-xfer-size-msgs, ange-ftp-tmp-name-template)
(ange-ftp-netrc-filename, ange-ftp-disable-netrc-security-check)
(ange-ftp-default-user, ange-ftp-default-password)
(ange-ftp-default-account, ange-ftp-netrc-default-password)
(ange-ftp-netrc-default-account, ange-ftp-dumb-unix-host-regexp)
(ange-ftp-binary-file-name-regexp, ange-ftp-gateway-host)
(ange-ftp-gateway-prompt-pattern, ange-ftp-smart-gateway-port)
(ange-ftp-send-hash, ange-ftp-binary-hash-mark-size)
(ange-ftp-ascii-hash-mark-size, ange-ftp-process-verbose)
(ange-ftp-ftp-program-name, ange-ftp-gateway-ftp-program-name)
(ange-ftp-ftp-program-args, ange-ftp-nslookup-program)
(ange-ftp-make-backup-files, ange-ftp-retry-time)
(ange-ftp-bs2000-special-prefix): Remove * from defcustom docstrings.
(ange-ftp-skip-msgs, ange-ftp-potential-error-msgs)
(ange-ftp-gateway-tmp-name-template)
(ange-ftp-generate-anonymous-password, ange-ftp-local-host-regexp)
(ange-ftp-gateway-program-interactive, ange-ftp-smart-gateway)
(ange-ftp-raw-login): Remove * from defcustom docstrings; fix typos.
(ange-ftp-fatal-msgs): Remove * from defcustom docstring; doc fix.
(ange-ftp-gateway-program): Remove * from docstring and reflow.
(ange-ftp-hash-entry-exists-p, ange-ftp-hash-table-keys)
(ange-ftp-raw-send-cmd, ange-ftp-get-files, ange-ftp-canonize-filename)
(ange-ftp-file-name-as-directory, ange-ftp-directory-file-name):
(ange-ftp-copy-files-async, ange-ftp-rename-remote-to-remote):
(ange-ftp-rename-local-to-remote): Doc fixes.
(ange-ftp-set-xfer-size, ange-ftp-call-cont, ange-ftp-process-filter):
Use `when', `unless'.
(ange-ftp-set-passwd): Rename arg PASSWD to PASSWORD.
(ange-ftp-process-handle-hash): Rename arg STR to STRING.
(ange-ftp-nslookup-host): Rename arg HOST to HOSTNAME.
(ange-ftp-smart-login): Rename arg PASS to PASSWORD.
(ange-ftp-normal-login): Rename arg PASS to PASSWORD. Fix typo.
(ange-ftp-process-sentinel): Use `when'. Fix typo.
(ange-ftp-gwp-start): Use `let', not `let*'; use `when'. Fix typo.
(ange-ftp-fix-name-func-alist, ange-ftp-fix-dir-name-func-alist)
(ange-ftp-parse-list-func-alist, ange-ftp-add-file-entry-alist)
(ange-ftp-delete-file-entry-alist): Fix typos and reflow docstring.
(ange-ftp-dumb-unix-host, ange-ftp-binary-file)
(ange-ftp-directory-files, ange-ftp-file-modtime, ange-ftp-vms-host)
(ange-ftp-mts-host, ange-ftp-cms-host, ange-ftp-bs2000-host)
(ange-ftp-bs2000-posix-host): Use `string-match-p' instead of
`(save-match-data (string-match ...))'.
(ange-ftp-use-gateway-p, ange-ftp-use-smart-gateway-p)
(ange-ftp-file-name-directory, ange-ftp-file-name-nondirectory):
Use `string-match-p' instead of `(save-match-data (string-match ...))'.
Doc fixes.
author | Juanma Barranquero <lekktu@gmail.com> |
---|---|
date | Sun, 16 Nov 2008 05:50:23 +0000 |
parents | f42ef85caf91 |
children | a9dc0e7c3f2b |
line wrap: on
line source
;;; gnus-undo.el --- minor mode for undoing in Gnus ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, ;; 2005, 2006, 2007, 2008 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org> ;; Keywords: news ;; This file is part of GNU Emacs. ;; GNU Emacs is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; GNU Emacs is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. ;;; Commentary: ;; This package allows arbitrary undoing in Gnus buffers. As all the ;; Gnus buffers aren't very text-oriented (what is in the buffers is ;; just some arbitrary representation of the actual data), normal Emacs ;; undoing doesn't work at all for Gnus. ;; ;; This package works by letting Gnus register functions for reversing ;; actions, and then calling these functions when the user pushes the ;; `undo' key. As with normal `undo', there it is possible to set ;; undo boundaries and so on. ;; ;; Internally, the undo sequence is represented by the ;; `gnus-undo-actions' list, where each element is a list of functions ;; to be called, in sequence, to undo some action. (An "action" is a ;; collection of functions.) ;; ;; For instance, a function for killing a group will call ;; `gnus-undo-register' with a function that un-kills the group. This ;; package will put that function into an action. ;;; Code: (eval-when-compile (require 'cl)) (require 'gnus-util) (require 'gnus) (defgroup gnus-undo nil "Undoing in Gnus buffers." :group 'gnus) (defcustom gnus-undo-limit 2000 "The number of undoable actions recorded." :type 'integer :group 'gnus-undo) (defcustom gnus-undo-mode nil "Minor mode for undoing in Gnus buffers." :type 'boolean :group 'gnus-undo) (defcustom gnus-undo-mode-hook nil "Hook called in all `gnus-undo-mode' buffers." :type 'hook :group 'gnus-undo) ;;; Internal variables. (defvar gnus-undo-actions nil) (defvar gnus-undo-boundary t) (defvar gnus-undo-last nil) (defvar gnus-undo-boundary-inhibit nil) ;;; Minor mode definition. (defvar gnus-undo-mode-map nil) (unless gnus-undo-mode-map (setq gnus-undo-mode-map (make-sparse-keymap)) (gnus-define-keys gnus-undo-mode-map "\M-\C-_" gnus-undo "\C-_" gnus-undo "\C-xu" gnus-undo ;; many people are used to type `C-/' on X terminals and get `C-_'. [(control /)] gnus-undo)) (defun gnus-undo-make-menu-bar () ;; This is disabled for the time being. (when nil (define-key-after (current-local-map) [menu-bar file gnus-undo] (cons "Undo" 'gnus-undo-actions) [menu-bar file whatever]))) (defun gnus-undo-mode (&optional arg) "Minor mode for providing `undo' in Gnus buffers. \\{gnus-undo-mode-map}" (interactive "P") (set (make-local-variable 'gnus-undo-mode) (if (null arg) (not gnus-undo-mode) (> (prefix-numeric-value arg) 0))) (set (make-local-variable 'gnus-undo-actions) nil) (set (make-local-variable 'gnus-undo-boundary) t) (when gnus-undo-mode ;; Set up the menu. (when (gnus-visual-p 'undo-menu 'menu) (gnus-undo-make-menu-bar)) (add-minor-mode 'gnus-undo-mode "" gnus-undo-mode-map) (gnus-make-local-hook 'post-command-hook) (add-hook 'post-command-hook 'gnus-undo-boundary nil t) (gnus-run-hooks 'gnus-undo-mode-hook))) ;;; Interface functions. (defun gnus-disable-undo (&optional buffer) "Disable undoing in the current buffer." (interactive) (save-excursion (when buffer (set-buffer buffer)) (gnus-undo-mode -1))) (defun gnus-undo-boundary () "Set Gnus undo boundary." (if gnus-undo-boundary-inhibit (setq gnus-undo-boundary-inhibit nil) (setq gnus-undo-boundary t))) (defun gnus-undo-force-boundary () "Set Gnus undo boundary." (setq gnus-undo-boundary-inhibit nil gnus-undo-boundary t)) (defun gnus-undo-register (form) "Register FORMS as something to be performed to undo a change. FORMS may use backtick quote syntax." (when gnus-undo-mode (gnus-undo-register-1 `(lambda () ,form)))) (put 'gnus-undo-register 'lisp-indent-function 0) (put 'gnus-undo-register 'edebug-form-spec '(body)) (defun gnus-undo-register-1 (function) "Register FUNCTION as something to be performed to undo a change." (when gnus-undo-mode (cond ;; We are on a boundary, so we create a new action. (gnus-undo-boundary (push (list function) gnus-undo-actions) (setq gnus-undo-boundary nil)) ;; Prepend the function to an old action. (gnus-undo-actions (setcar gnus-undo-actions (cons function (car gnus-undo-actions)))) ;; Initialize list. (t (setq gnus-undo-actions (list (list function))))) ;; Limit the length of the undo list. (let ((next (nthcdr gnus-undo-limit gnus-undo-actions))) (when next (setcdr next nil))) ;; We are not at a boundary... (setq gnus-undo-boundary-inhibit t))) (defun gnus-undo (n) "Undo some previous changes in Gnus buffers. Repeat this command to undo more changes. A numeric argument serves as a repeat count." (interactive "p") (unless gnus-undo-mode (error "Undoing is not enabled in this buffer")) (message "%s" last-command) (when (or (not (eq last-command 'gnus-undo)) (not gnus-undo-last)) (setq gnus-undo-last gnus-undo-actions)) (let ((action (pop gnus-undo-last))) (unless action (error "Nothing further to undo")) (setq gnus-undo-actions (delq action gnus-undo-actions)) (setq gnus-undo-boundary t) (mapc 'funcall action))) (provide 'gnus-undo) ;; arch-tag: 0d787bc7-787d-499a-837f-211d2cb07f2e ;;; gnus-undo.el ends here