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")
next prev parent reply other threads:[~2008-02-05 5:58 UTC|newest]
Thread overview: 100+ 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
[not found] <20071012105022.6c8b174a@tweety>
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
List information: https://www.gnu.org/software/emacs/
* 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 public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).