X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/614a773aa3754defa69dec18cd590f77b94c079e..70041e9ae7072eac5eeff2b5e1a50d9eab6b39f7:/lisp/delsel.el?ds=sidebyside diff --git a/lisp/delsel.el b/lisp/delsel.el index 8259398565..cb5f1c4989 100644 --- a/lisp/delsel.el +++ b/lisp/delsel.el @@ -1,7 +1,7 @@ ;;; delsel.el --- delete selection if you insert ;; Copyright (C) 1992, 1997, 1998, 2001, 2002, 2003, 2004, -;; 2005, 2006, 2007 Free Software Foundation, Inc. +;; 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. ;; Author: Matthieu Devin ;; Maintainer: FSF @@ -10,10 +10,10 @@ ;; This file is part of GNU Emacs. -;; GNU Emacs is free software; you can redistribute it and/or modify +;; 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, or (at your option) -;; any later version. +;; 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 @@ -21,9 +21,7 @@ ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. +;; along with GNU Emacs. If not, see . ;;; Commentary: @@ -35,7 +33,7 @@ ;; Commands which will delete the selection need a 'delete-selection ;; property on their symbols; commands which insert text but don't -;; have this property won't delete the selction. It can be one of +;; have this property won't delete the selection. It can be one of ;; the values: ;; 'yank ;; For commands which do a yank; ensures the region about to be @@ -59,8 +57,8 @@ ;;;###autoload (define-minor-mode delete-selection-mode "Toggle Delete Selection mode. -With prefix ARG, turn Delete Selection mode on if and only if ARG is -positive. +With prefix ARG, turn Delete Selection mode on if ARG is +positive, off if ARG is not positive. When Delete Selection mode is enabled, Transient Mark mode is also enabled and typed text replaces the selection if the selection is @@ -113,7 +111,23 @@ any selection." ;; stop safe_run_hooks from clearing out pre-command-hook. (and (eq inhibit-quit 'pre-command-hook) (setq inhibit-quit 'delete-selection-dummy)) - (signal 'file-supersession (cdr data))))))) + (signal 'file-supersession (cdr data))) + (text-read-only + ;; This signal may come either from `delete-active-region' or + ;; `self-insert-command' (when `overwrite-mode' is non-nil). + ;; To avoid clearing out `pre-command-hook' we handle this case + ;; by issuing a simple message. Note, however, that we do not + ;; handle all related problems: When read-only text ends before + ;; the end of the region, the latter is not deleted but any + ;; subsequent insertion will succeed. We could avoid this case + ;; by doing a (setq this-command 'ignore) here. This would, + ;; however, still not handle the case where read-only text ends + ;; precisely where the region starts: In that case the deletion + ;; would succeed but the subsequent insertion would fail with a + ;; text-read-only error. To handle that case we would have to + ;; investigate text properties at both ends of the region and + ;; skip the deletion when inserting text is forbidden there. + (message "Text is read-only") (ding)))))) (put 'self-insert-command 'delete-selection t) (put 'self-insert-iso 'delete-selection t) @@ -147,16 +161,21 @@ then it takes a second \\[keyboard-quit] to abort the minibuffer." (define-key minibuffer-local-must-match-map "\C-g" 'minibuffer-keyboard-quit) (define-key minibuffer-local-isearch-map "\C-g" 'minibuffer-keyboard-quit) -(defun delsel-unload-hook () +(defun delsel-unload-function () + "Unload the Delete Selection library." (define-key minibuffer-local-map "\C-g" 'abort-recursive-edit) (define-key minibuffer-local-ns-map "\C-g" 'abort-recursive-edit) (define-key minibuffer-local-completion-map "\C-g" 'abort-recursive-edit) (define-key minibuffer-local-must-match-map "\C-g" 'abort-recursive-edit) - (define-key minibuffer-local-isearch-map "\C-g" 'abort-recursive-edit)) - -(add-hook 'delsel-unload-hook 'delsel-unload-hook) + (define-key minibuffer-local-isearch-map "\C-g" 'abort-recursive-edit) + (dolist (sym '(self-insert-command self-insert-iso yank clipboard-yank + insert-register delete-backward-char backward-delete-char-untabify + delete-char newline-and-indent newline open-line)) + (put sym 'delete-selection nil)) + ;; continue standard unloading + nil) (provide 'delsel) -;;; arch-tag: 1e388890-1b50-4ed0-9347-763b1343b6ed +;; arch-tag: 1e388890-1b50-4ed0-9347-763b1343b6ed ;;; delsel.el ends here