all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: "David De La Harpe Golden" <david.delaharpe.golden@gmail.com>
To: rms@gnu.org
Cc: emacs-devel@gnu.org
Subject: Re: Improving X selection?
Date: Tue, 5 Feb 2008 05:58:23 +0000	[thread overview]
Message-ID: <8e24944a0802042158s46e50586u1b70b1b3340985e1@mail.gmail.com> (raw)
In-Reply-To: <E1JLhY6-00071z-FQ@fencepost.gnu.org>

[-- Attachment #1: Type: text/plain, Size: 609 bytes --]

On 03/02/2008, Richard Stallman <rms@gnu.org> wrote:

> If you convince me there is a problem, I will look for other
> solutions; I certainly won't use this one.
>

Other solutions - fixing select-active-regions with an idle timer that
polls the region for changes?

Here's a (standalone, i.e. against CVS, not incremental to other
patches) attempt with run-with-idle-timer.  Seems to work okay, though
is probably
not incredibly efficient (has got to be better than doing something
every single point move though).

[Because I put it in simple.el and it uses timer, had to change load
order in loadup.el...]

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: select-active-regions-when-idle.diff --]
[-- Type: text/x-diff; name=select-active-regions-when-idle.diff, Size: 3469 bytes --]

Index: lisp/simple.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/simple.el,v
retrieving revision 1.899
diff -u -r1.899 simple.el
--- lisp/simple.el	1 Feb 2008 16:01:05 -0000	1.899
+++ lisp/simple.el	5 Feb 2008 05:49:19 -0000
@@ -3323,11 +3323,55 @@
     (setq mark-active nil)
     (run-hooks 'deactivate-mark-hook))))
 
+
+(defun set-select-active-regions (opt val)
+  (setq select-active-regions val)
+  (setq select-active-regions-last-region nil)
+  (if val
+      (progn
+	(funcall 'cancel-function-timers 
+	 'maybe-select-for-select-active-regions)
+	(run-with-idle-timer 
+	 0 t'maybe-select-for-select-active-regions))
+    (funcall 'cancel-function-timers 
+     'maybe-select-for-select-active-regions)))
+
+
 (defcustom select-active-regions nil
   "If non-nil, an active region automatically becomes the window selection."
   :type 'boolean
   :group 'killing
-  :version "23.1")
+  :version "23.1"
+  :risky t
+  :set 'set-select-active-regions)
+
+
+
+(defvar select-active-regions-last-region nil
+  "record of last propagated region for comparison.")
+
+(defun maybe-select-for-select-active-regions ()
+  "Implements `select-active-regions'. Called by timer
+`select-active-regions-timer' and `set-mark'"
+  (and select-active-regions
+       (region-active-p)
+       (let ((current-region-text
+	      (buffer-substring (region-beginning) (region-end))))
+	 (if (or (null select-active-regions-last-region)
+		 (not (string= select-active-regions-last-region
+			       current-region-text)))
+	     (if (or (null current-region-text) 
+		     (string= "" current-region-text))
+		 ;; don't propagate if this region is empty, but this 
+		 ;; region being empty means future nonempty regions 
+		 ;; need repropagation
+		 (setq select-active-regions-last-region nil)
+	       ;; this should be a call to interprogram-highlight-function
+	       ;; if/when that is introduced.
+	       (x-set-selection nil current-region-text)
+	       (setq select-active-regions-last-region 
+		     current-region-text))))))
+		 
 
 (defun set-mark (pos)
   "Set this buffer's mark to POS.  Don't use this function!
@@ -3351,8 +3395,9 @@
 	(setq mark-active t)
 	(run-hooks 'activate-mark-hook)
 	(and select-active-regions
-	     (x-set-selection
-	      nil (buffer-substring (region-beginning) (region-end))))
+	     ;; force repropagate if mark is reset
+	     (progn (setq select-active-regions-last-region nil)
+		    (maybe-select-for-select-active-regions)))
 	(set-marker (mark-marker) pos (current-buffer)))
     ;; Normally we never clear mark-active except in Transient Mark mode.
     ;; But when we actually clear out the mark value too,
Index: lisp/loadup.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/loadup.el,v
retrieving revision 1.160
diff -u -r1.160 loadup.el
--- lisp/loadup.el	1 Feb 2008 22:43:10 -0000	1.160
+++ lisp/loadup.el	5 Feb 2008 05:49:19 -0000
@@ -82,6 +82,8 @@
 (message "%s" (garbage-collect))
 (load "loaddefs.el")  ;Don't get confused if someone compiled this by mistake.
 (message "%s" (garbage-collect))
+
+(load "emacs-lisp/timer") ; select-active-region in simple.el needs timer. 
 (load "simple")
 
 (load "help")
@@ -145,7 +147,6 @@
       (and (boundp 'x-toolkit-scroll-bars)
 	   (load "scroll-bar"))
       (load "select")))
-(load "emacs-lisp/timer")
 (load "isearch")
 (load "rfn-eshadow")
 

  parent reply	other threads:[~2008-02-05  5:58 UTC|newest]

Thread overview: 101+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-10-15 10:20 Improving X selection? Horsley, Tom
2007-10-15 11:06 ` Jan Djärv
2007-10-16  4:10 ` Richard Stallman
2007-10-16 23:29   ` David De La Harpe Golden
2007-10-17  1:05     ` David De La Harpe Golden
2007-12-25 21:13     ` Richard Stallman
2008-01-28 19:52       ` David De La Harpe Golden
2008-01-29  0:59         ` David De La Harpe Golden
2008-02-01 19:15           ` David De La Harpe Golden
2008-02-02  0:17             ` David De La Harpe Golden
2008-02-03 11:38               ` David De La Harpe Golden
2008-02-03 12:44                 ` Jan D.
2008-02-03 13:12                   ` David De La Harpe Golden
2008-02-04 21:02                     ` David De La Harpe Golden
2008-02-05  3:38                       ` David De La Harpe Golden
2008-02-05  7:08                       ` Jan Djärv
2008-02-07  3:57                         ` David De La Harpe Golden
2008-02-07  4:23                           ` Miles Bader
2008-02-07  4:59                             ` David De La Harpe Golden
2008-02-07  9:07                           ` Jason Rumney
2008-02-07 16:32                             ` David De La Harpe Golden
2008-02-07 17:11                               ` David De La Harpe Golden
2008-02-07 17:13                               ` Jason Rumney
2008-02-07 19:46                                 ` Stefan Monnier
2008-02-10 18:42                                 ` Richard Stallman
2008-02-11 17:46                                   ` David De La Harpe Golden
2008-02-07 17:25                               ` Stefan Monnier
2008-02-07 17:39                                 ` David De La Harpe Golden
2008-02-07 17:51                                   ` David De La Harpe Golden
2008-02-07 19:54                                   ` Stefan Monnier
2008-02-07 15:14                           ` Stefan Monnier
2008-02-07 16:15                             ` David De La Harpe Golden
2008-02-07 18:01                               ` Stephen J. Turnbull
2008-02-07 18:07                                 ` David De La Harpe Golden
2008-02-07 19:21                                   ` Stephen J. Turnbull
2008-02-08  1:19                                     ` Miles Bader
2008-02-08  1:42                                       ` David De La Harpe Golden
2008-02-07 18:22                                 ` David De La Harpe Golden
2008-02-07 19:45                                   ` Stefan Monnier
2008-02-07 20:39                                     ` David De La Harpe Golden
2008-02-07 21:25                                       ` Stephen J. Turnbull
2008-02-07 21:41                                         ` David De La Harpe Golden
2008-02-08  0:22                                           ` Stephen J. Turnbull
2008-02-08  1:26                                             ` David De La Harpe Golden
2008-02-07 22:43                                       ` Stefan Monnier
2008-02-08  2:50                                         ` David De La Harpe Golden
2008-02-08 13:26                                           ` OT [was Re: Improving X selection?] Tom Horsley
2008-02-08 15:30                                             ` David De La Harpe Golden
2008-02-08 16:07                                               ` OT Stefan Monnier
2008-02-08 16:43                                                 ` OT David De La Harpe Golden
2008-02-08 14:41                                           ` Improving X selection? Stefan Monnier
2008-02-08 15:21                                             ` David De La Harpe Golden
2008-02-17  3:38                                             ` David De La Harpe Golden
2008-02-17  3:55                                               ` David De La Harpe Golden
2008-02-07 21:01                                     ` Tom Horsley
2008-02-07 21:18                                       ` David De La Harpe Golden
2008-02-07 21:36                                         ` Tom Horsley
2008-02-07 21:40                                           ` David De La Harpe Golden
2008-02-07 22:51                                       ` Stefan Monnier
     [not found]                                 ` <8e24944a0802071042u43d68f04pc8492ad8ce07aa18@mail.gmail.com>
2008-02-07 18:44                                   ` Fwd: " David De La Harpe Golden
2008-02-03 16:18             ` Richard Stallman
2008-02-03 18:29               ` David De La Harpe Golden
2008-02-05  5:58               ` David De La Harpe Golden [this message]
2008-02-05  6:23                 ` Miles Bader
2008-02-05  6:56                   ` David De La Harpe Golden
2008-02-03 16:18           ` Richard Stallman
  -- strict thread matches above, loose matches on Subject: below --
2007-10-12 14:50 Tom Horsley
2007-10-14 16:29 ` Richard Stallman
2007-10-14 17:25   ` Jeremy Maitin-Shepard
2007-10-15  6:19     ` Jan Djärv
2007-10-15  6:21       ` Jan Djärv
2007-10-15  6:41       ` Eli Zaretskii
2007-10-15  6:55       ` Miles Bader
2007-10-15  8:16         ` Jan Djärv
2007-10-15 14:21       ` Stefan Monnier
2007-10-15 18:30       ` Richard Stallman
2007-10-15 19:26         ` Jeremy Maitin-Shepard
2007-10-15 20:03           ` Andreas Schwab
2007-10-15 20:22             ` Jeremy Maitin-Shepard
2007-10-16  8:02               ` Frank Schmitt
2007-10-16  7:27           ` Jan Djärv
2007-10-16 10:08             ` René Kyllingstad
2007-10-16 13:15               ` Stefan Monnier
2008-08-18 15:29                 ` René Kyllingstad
2008-08-18 18:47                   ` David De La Harpe Golden
2008-08-18 19:16                 ` David Hansen
2008-08-19  8:06                   ` Frank Schmitt
2008-08-25 15:34                     ` Juri Linkov
2008-08-25 15:56                       ` Frank Schmitt
2008-08-28 17:45                         ` David De La Harpe Golden
2008-08-28 17:58                           ` Frank Schmitt
2008-08-28 18:19                             ` David De La Harpe Golden
2008-08-29  5:53                               ` David Hansen
2008-08-30  4:08                                 ` David De La Harpe Golden
2008-08-31  7:41                                   ` David Hansen
2008-08-20 22:41                   ` David De La Harpe Golden
2008-08-25 15:34                     ` Juri Linkov
2008-08-26  3:09                       ` David Hansen
2008-08-26  8:03                         ` David De La Harpe Golden
2008-08-26  8:41                           ` David Hansen
2007-10-16  7:26         ` Jan Djärv

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=8e24944a0802042158s46e50586u1b70b1b3340985e1@mail.gmail.com \
    --to=david.delaharpe.golden@gmail.com \
    --cc=emacs-devel@gnu.org \
    --cc=rms@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.