diff lisp/select.el @ 851:e7ee5f8bde58

[xemacs-hg @ 2002-05-23 11:46:08 by ben] fix for raymond toy's crash, alloca crashes, some recover-session improvements files.el: Recover-session improvements: Only show session files where some files can actually be recovered, and show in chronological order. subr.el, menubar-items.el: As promised to rms, the functionality in truncate-string-with-continuation-dots has been merged into truncate-string-to-width. Change callers in menubar-items.el. select.el: Document some of these funs better. Fix problem where we were doing own-clipboard twice. Makefile.in.in: Add alloca.o. Ensure that alloca.s doesn't compile into alloca.o, but allocax.o (not that it's currently used or anything.) EmacsFrame.c, abbrev.c, alloc.c, alloca.c, callint.c, callproc.c, config.h.in, device-msw.c, device-x.c, dired.c, doc.c, editfns.c, emacs.c, emodules.c, eval.c, event-Xt.c, event-msw.c, event-stream.c, file-coding.c, fileio.c, filelock.c, fns.c, glyphs-gtk.c, glyphs-msw.c, glyphs-x.c, gui-x.c, input-method-xlib.c, intl-win32.c, lisp.h, lread.c, menubar-gtk.c, menubar-msw.c, menubar.c, mule-wnnfns.c, nt.c, objects-msw.c, process-nt.c, realpath.c, redisplay-gtk.c, redisplay-output.c, redisplay-x.c, redisplay.c, search.c, select-msw.c, sysdep.c, syswindows.h, text.c, text.h, ui-byhand.c: Fix Raymond Toy's crash. Repeat to self: 2^21 - 1 is NOT the same as (2 << 21) - 1. Fix crashes due to excessive alloca(). replace alloca() with ALLOCA(), which calls the C alloca() [which uses xmalloc()] when the size is too big. Insert in various places calls to try to flush the C alloca() stored info if there is any. Add MALLOC_OR_ALLOCA(), for places that expect to be alloca()ing large blocks. This xmalloc()s when too large and records an unwind-protect to free -- relying on the caller to unbind_to() elsewhere in the function. Use it in concat(). Use MALLOC instead of ALLOCA in select-msw.c. xemacs.mak: Add alloca.o.
author ben
date Thu, 23 May 2002 11:46:46 +0000
parents 74899b430f18
children 8174a45f637c
line wrap: on
line diff
--- a/lisp/select.el	Tue May 21 23:47:40 2002 +0000
+++ b/lisp/select.el	Thu May 23 11:46:46 2002 +0000
@@ -3,6 +3,7 @@
 ;; Copyright (C) 1998 Andy Piper.
 ;; Copyright (C) 1990, 1997 Free Software Foundation, Inc.
 ;; Copyright (C) 1995 Sun Microsystems.
+;; Copyright (C) 2002 Ben Wing.
 
 ;; Maintainer: XEmacs Development Team
 ;; Keywords: extensions, dumped
@@ -46,13 +47,19 @@
 set the clipboard.")
 
 (defun copy-primary-selection ()
-  "Copy the selection to the Clipboard and the kill ring."
+  "Copy the selection to the Clipboard and the kill ring.
+This is similar to the command \\[kill-ring-save] except that it will
+save to the Clipboard even if that command doesn't, and it handles rectangles
+properly."
   (interactive)
   (and (console-on-window-system-p)
        (cut-copy-clear-internal 'copy)))
 
 (defun kill-primary-selection ()
-  "Copy the selection to the Clipboard and the kill ring, then delete it."
+  "Copy the selection to the Clipboard and the kill ring, then deleted it.
+This is similar to the command \\[kill-region] except that it will
+save to the Clipboard even if that command doesn't, and it handles rectangles
+properly."
   (interactive "*")
   (and (console-on-window-system-p)
        (cut-copy-clear-internal 'cut)))
@@ -130,7 +137,7 @@
 that can be converted using the function corresponding to DATA-TYPE
 in `select-converter-alist'---strings are the usual choice, but
 other types may be permissible depending on the DATA-TYPE parameter
-(if DATA-TYPE is not supplied, the default behavior is window
+\(if DATA-TYPE is not supplied, the default behavior is window
 system specific, but strings are always accepted).
 HOW-TO-ADD may be any of the following:
 
@@ -139,7 +146,7 @@
   'append or t        -- append data to existing DATA-TYPE data.
 
 DATA-TYPE is the window-system specific data type identifier
-(see `register-selection-data-type' for more information).
+\(see `register-selection-data-type' for more information).
 
 The selection may also be a cons of two markers pointing to the same buffer,
 or an overlay.  In these cases, the selection is considered to be the text
@@ -355,8 +362,7 @@
       (cond ((memq mode '(cut copy))
 	     (if rect-p
 		 (progn
-		   ;; why is killed-rectangle free?  Is it used somewhere?
-		   ;; should it be defvarred?
+		   ;; killed-rectangle is defvarred in rect.el
 		   (setq killed-rectangle (extract-rectangle s e))
 		   (kill-new (mapconcat #'identity killed-rectangle "\n")))
 	       (copy-region-as-kill s e))
@@ -365,6 +371,7 @@
 	     ;; some other way, but owning the clipboard twice in that case
 	     ;; wouldn't actually hurt anything.
 	     (or (and (consp kill-hooks) (memq 'own-clipboard kill-hooks))
+		 (eq 'own-clipboard interprogram-cut-function)
 		 (own-clipboard (car kill-ring)))))
       (cond ((memq mode '(cut clear))
 	     (if rect-p