From: Keith David Bershatsky <esq@lawlist.com>
To: 17678@debbugs.gnu.org
Subject: bug#17678: 24.4.50; Feature Request -- calculate new `window-start` & `window-end` before visual redisplay
Date: Tue, 03 Jun 2014 10:48:54 -0700 [thread overview]
Message-ID: <m2ppiphojd.wl%esq@lawlist.com> (raw)
At the present time, I do not believe that Emacs has the ability to calculate a new `window-start` and a new `window-end` without a redisplay occurring, because it needs to take into account things like the new cursor position, `visual-line-mode`, `linenum-mode`, etc.
Functions assigned to the `post-command-hook` use the `window-start` and `window-end` positions that were previously visible before a new redisplay occurs.
Example:
* Long buffer of text that exceeds the `window-height`.
* Jump interactively from `beginning-of-buffer` to `ending-of-buffer`, or visa-versa.
* In the `post-command-hook`, have the following two elements:
** Remove overlays xyz between the *old* `window-start` and *old* `window-end`.
** Add overlays xyz between the *new* `window-start` and *new* `window-end`.
The final component above (i.e., ** Add overlays xyz between the *new* . . .) cannot be done correctly without a forced `redisplay` occurring. The result of a forced redisplay is that the user will see a momentary visual representation of the buffer *without* overlays xyz. The forced redisplay permits Emacs to correctly calculate the *new* `window-start` and *new* `window-end`.
In a stackoverflow thread regarding this issue, @Stefan suggested that I take a look at the `jit-lock-register`. After combing through the code in `jit-lock.el` and trying some experiments, I believe that `jit-lock.el` is more suited to a situation when buffer *modification* occurs -- it is also suited for situations where one may wish to incrementially act upon an entire buffer in small chunks at a time to increase efficiency of avaialble resources.
http://stackoverflow.com/questions/23923371/emacs-calculating-new-window-start-end-without-redisplay
I believe that the solution may be to have a `sneak-preview-redisplay` whereby the *new* `window-start` and *new* `window-end` could be correctly calculated without the visual buffer actually being redisplayed.
Thanks,
Keith
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
In GNU Emacs 24.4.50.1 (x86_64-apple-darwin10.8.0, NS appkit-1038.36 Version 10.6.8 (Build 10K549))
of 2014-06-01 on MP.local
Repository revision: 117215 lekktu@gmail.com-20140601162519-4dacx2w0ak528z2r
Windowing system distributor `Apple', version 10.3.1038
Configured using:
`configure --with-ns'
Configured features:
ACL LIBXML2 ZLIB
Important settings:
locale-coding-system: utf-8-unix
Major mode: Fundamental
Minor modes in effect:
lawlist-scroll-bar-mode: t
lawlist-delete-selection-mode: t
lawlist-linum-mode: t
lawlist-visual-line-mode: t
vr-mode: t
hr-mode: t
flyspell-mode: t
desktop-save-mode: t
tabbar-mode: t
font-lock-mode: t
blink-cursor-mode: t
transient-mark-mode: t
Recent input:
<down> <down> <down> <down> <down> <down> <down> <down>
<down> <M-right> <M-right> <M-right> <M-right> <M-right>
<M-right> <M-right> <M-right> <M-right> <M-right> <M-right>
<M-right> <M-right> <M-right> <M-right> <M-right> <M-right>
<M-right> <M-right> <M-right> <M-right> <right> <right>
<right> <right> <right> <right> <right> <right> <right>
<right> <right> <right> <right> <right> <right> <right>
<right> <right> <right> <right> <right> <right> <right>
<right> <right> <right> <right> <right> <right> <right>
<right> <right> <right> <right> <right> <M-right> <M-right>
<M-right> <M-right> <M-right> <M-right> <M-right> <M-right>
<M-right> <s-up> <down> <down> <down> <down> <down>
<down> <down> <down> <down> <down> <down> <down> <down>
<down> <down> <down> <down> <down> <down> <down> <down>
<down> <down> <down> <up> <M-right> <M-right> <M-right>
<M-right> <M-right> <M-right> <M-right> <M-right> <M-right>
<M-right> <M-right> <M-right> <M-right> <M-right> <M-right>
<M-right> <M-right> <M-right> <M-right> <M-right> <M-right>
<M-right> <M-right> <M-right> <M-right> <M-right> <M-right>
<M-right> <M-right> <M-right> <M-right> <M-right> <M-right>
<M-right> <M-right> <M-right> <M-right> <M-right> <M-left>
<M-left> <M-left> <M-left> <M-left> <M-left> <M-left>
<M-left> <M-left> <M-left> <M-left> <M-left> <M-left>
<M-left> <M-left> <M-left> <M-left> <M-left> <M-left>
<M-left> <M-left> <M-left> <M-left> <M-left> <M-left>
<M-left> <wheel-down> <double-wheel-down> <triple-wheel-down>
<wheel-down> <double-wheel-down> <triple-wheel-down>
<wheel-down> <double-wheel-down> <triple-wheel-down>
<wheel-down> <double-wheel-down> <triple-wheel-down>
<triple-wheel-down> <wheel-down> <double-wheel-down>
<triple-wheel-down> <wheel-down> <double-wheel-down>
<triple-wheel-down> <wheel-down> <double-wheel-down>
<triple-wheel-down> <wheel-up> <double-wheel-up> <triple-wheel-up>
<wheel-up> <wheel-up> <double-wheel-up> <triple-wheel-up>
<help-echo> <down-mouse-1> <mouse-1> <wheel-up> <double-wheel-up>
<triple-wheel-up> <triple-wheel-up> <wheel-up> <double-wheel-up>
<triple-wheel-up> <down> <down> <down> <down> <down>
<up> <up> <up> <up> <up> <s-up> <down> <down> <down>
<down> <down> <down> <down> <down> <down> <down> <down>
<down> <down> <down> <down> <down> <down> <down> <down>
<down> <down> <down> <down> <s-right> <left> <left>
<left> <left> <left> <left> <left> <left> <left> s-N
s-w k <left> <left> <left> <left> <left> <left> <left>
<left> <left> s-N s-w k <escape> x e m a c s - b u
g <return> <backspace> <backspace> <backspace> <backspace>
<backspace> <backspace> <backspace> <backspace> <backspace>
r e p o r t - e m a c s - b u g <return>
Recent messages:
Saving...done
Mark set
[k]ill or [s]ave draft?
Loading msgdb for +/Users/HOME/.0.data/.0.emacs/.0.mail/msgdb/imap/mail.lawlist.com/lawlist/INBOX.Drafts/spool...done
Type C-c C-x C-z to exit MIME mode, and type C-c C-x ? to get help.
Saving...done
Mark set
[k]ill or [s]ave draft?
Loading msgdb for +/Users/HOME/.0.data/.0.emacs/.0.mail/msgdb/imap/mail.lawlist.com/lawlist/INBOX.Drafts/spool...done
*beep*
Load-path shadows:
/Users/HOME/.0.data/.0.emacs/.0.flim/md4 hides /Users/HOME/.0.data/.0.emacs/Emacs_06_01_2014.app/Contents/Resources/lisp/md4
/Users/HOME/.0.data/.0.emacs/.0.flim/hex-util hides /Users/HOME/.0.data/.0.emacs/Emacs_06_01_2014.app/Contents/Resources/lisp/hex-util
/Users/HOME/.0.data/.0.emacs/.0.flim/sasl hides /Users/HOME/.0.data/.0.emacs/Emacs_06_01_2014.app/Contents/Resources/lisp/net/sasl
/Users/HOME/.0.data/.0.emacs/.0.flim/sasl-ntlm hides /Users/HOME/.0.data/.0.emacs/Emacs_06_01_2014.app/Contents/Resources/lisp/net/sasl-ntlm
/Users/HOME/.0.data/.0.emacs/.0.flim/sasl-digest hides /Users/HOME/.0.data/.0.emacs/Emacs_06_01_2014.app/Contents/Resources/lisp/net/sasl-digest
/Users/HOME/.0.data/.0.emacs/.0.flim/sasl-cram hides /Users/HOME/.0.data/.0.emacs/Emacs_06_01_2014.app/Contents/Resources/lisp/net/sasl-cram
/Users/HOME/.0.data/.0.emacs/.0.flim/ntlm hides /Users/HOME/.0.data/.0.emacs/Emacs_06_01_2014.app/Contents/Resources/lisp/net/ntlm
/Users/HOME/.0.data/.0.emacs/.0.flim/hmac-md5 hides /Users/HOME/.0.data/.0.emacs/Emacs_06_01_2014.app/Contents/Resources/lisp/net/hmac-md5
/Users/HOME/.0.data/.0.emacs/.0.flim/hmac-def hides /Users/HOME/.0.data/.0.emacs/Emacs_06_01_2014.app/Contents/Resources/lisp/net/hmac-def
/Users/HOME/.0.data/.0.emacs/.0.wl/rfc2368 hides /Users/HOME/.0.data/.0.emacs/Emacs_06_01_2014.app/Contents/Resources/lisp/mail/rfc2368
/Users/HOME/.0.data/.0.emacs/.0.wl/utf7 hides /Users/HOME/.0.data/.0.emacs/Emacs_06_01_2014.app/Contents/Resources/lisp/gnus/utf7
/Users/HOME/.0.data/.0.emacs/.0.simi/smime hides /Users/HOME/.0.data/.0.emacs/Emacs_06_01_2014.app/Contents/Resources/lisp/gnus/smime
/Users/HOME/.emacs.d/elpa/tabulated-list-20120406.1351/tabulated-list hides /Users/HOME/.0.data/.0.emacs/Emacs_06_01_2014.app/Contents/Resources/lisp/emacs-lisp/tabulated-list
/Users/HOME/.0.data/.0.emacs/.0.simi/pgg hides /Users/HOME/.0.data/.0.emacs/Emacs_06_01_2014.app/Contents/Resources/lisp/obsolete/pgg
/Users/HOME/.0.data/.0.emacs/.0.simi/pgg-pgp5 hides /Users/HOME/.0.data/.0.emacs/Emacs_06_01_2014.app/Contents/Resources/lisp/obsolete/pgg-pgp5
/Users/HOME/.0.data/.0.emacs/.0.simi/pgg-pgp hides /Users/HOME/.0.data/.0.emacs/Emacs_06_01_2014.app/Contents/Resources/lisp/obsolete/pgg-pgp
/Users/HOME/.0.data/.0.emacs/.0.simi/pgg-parse hides /Users/HOME/.0.data/.0.emacs/Emacs_06_01_2014.app/Contents/Resources/lisp/obsolete/pgg-parse
/Users/HOME/.0.data/.0.emacs/.0.simi/pgg-gpg hides /Users/HOME/.0.data/.0.emacs/Emacs_06_01_2014.app/Contents/Resources/lisp/obsolete/pgg-gpg
/Users/HOME/.0.data/.0.emacs/.0.simi/pgg-def hides /Users/HOME/.0.data/.0.emacs/Emacs_06_01_2014.app/Contents/Resources/lisp/obsolete/pgg-def
Features:
(shadow emacsbug modb-legacy wl-mime mime-edit pgg-parse pccl pccl-20
signature mime-setup mail-mime-setup semi-setup mime-pgp pgg-def
mime-play filename mime-image modb-standard elmo-imap4 disp-table
bbdb-autoloads lawlist-wl wl-demo wl-draft eword-encode wl-template
sendmail elmo-net elmo-cache elmo-map elmo-dop wl-news wl-address
wl-thread wl-folder wl wl-e21 wl-spam wl-action wl-summary wl-refile
wl-util pp elmo-flag elmo-localdir wl-message elmo-mime mmelmo-buffer
mmelmo-imap mime-view mime-conf calist semi-def mmimap mime-parse
mmbuffer mmgeneric elmo-multi elmo-spam elsp-header elsp-generic elmo
elmo-signal wl-highlight wl-vars wl-version elmo-msgdb modb
modb-generic modb-entity luna mime elmo-util emu invisible inv-23 poem
poem-e20 poem-e20_3 eword-decode std11 elmo-date elmo-vars
elmo-version w3m-load mime-w3m w3m browse-url doc-view jka-compr
image-mode w3m-hist w3m-fb bookmark-w3m w3m-ems w3m-ccl ccl
w3m-favicon w3m-image w3m-proc w3m-util smiley gnus-art mm-uu mml2015
mm-view mml-smime smime savehist lawlist-vr-hr lawlist-whitespace
lawlist-github conf-mode log-edit add-log find-lisp package esh-var
esh-io esh-cmd esh-opt esh-ext esh-proc esh-arg eldoc esh-groups
eshell esh-module esh-mode esh-util dired-x view tramp tramp-compat
tramp-loaddefs trampver server grep epa epg epg-config diff-mode
autorevert filenotify log-view pcvs-util ido time-stamp vc-git vc
vc-dispatcher ediff-merg ediff-wind ediff-diff ediff-mult ediff-help
ediff-init ediff-util ediff rx ert ewoc debug eieio-base
lawlist-calculator ps-print ps-def lpr flyspell ispell bbdb timezone
find-func dired-aux lawlist-yasnippet help-mode multiple-cursors
mc-separate-operations rectangular-region-mode mc-mark-more thingatpt
mc-cycle-cursors mc-edit-lines multiple-cursors-core rect saveplace
lawlist-tex-mode pcase compile shell pcomplete comint ansi-color ring
skeleton compare-w desktop frameset lawlist-tabbar lawlist-org
lawlist-calendar edmacro kmacro derived lawlist-toodledo advice
url-http url-auth url-gw url url-proxy url-privacy url-expand
url-methods url-history url-cookie url-domsuf url-util url-parse
auth-source eieio byte-opt bytecomp byte-compile cconv eieio-core
password-cache url-vars mailcap json xml noutline outline easy-mmode
gnus-sum gnus-group gnus-undo gnus-start gnus-cloud nnimap nnmail
mail-source tls utf7 mel path-util mime-def alist mcharset mcs-20
mcs-e20 pcustom pces pces-e20 pces-20 broken poe pym static apel-ver
product netrc nnoo parse-time gnus-spec gnus-int gnus-range message
cl-macs dired format-spec rfc822 mml easymenu mml-sec mm-decode
mm-bodies mm-encode mail-parse rfc2231 rfc2047 rfc2045 ietf-drums
mailabbrev gmm-utils mailheader gnus-win gnus gnus-ems nnheader
gnus-util mail-utils mm-util help-fns mail-prsvr wid-edit cl gv
cl-loaddefs cl-lib time-date tooltip electric uniquify ediff-hook
vc-hooks lisp-float-type mwheel ns-win tool-bar dnd fontset image
regexp-opt fringe tabulated-list newcomment lisp-mode prog-mode
register page menu-bar rfn-eshadow timer select scroll-bar mouse
jit-lock font-lock syntax facemenu font-core frame cham georgian
utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean
japanese hebrew greek romanian slovak czech european ethiopic indian
cyrillic chinese case-table epa-hook jka-cmpr-hook help simple abbrev
minibuffer nadvice loaddefs button faces cus-face macroexp files
text-properties overlay sha1 md5 base64 format env code-pages mule
custom widget hashtable-print-readable backquote make-network-process
cocoa ns multi-tty emacs)
Memory information:
((conses 16 736782 78749)
(symbols 48 55597 0)
(miscs 40 501 2390)
(strings 32 116279 16804)
(string-bytes 1 3864862)
(vectors 16 42181)
(vector-slots 8 741196 80204)
(floats 8 1011 262)
(intervals 56 778 234)
(buffers 960 13))
next reply other threads:[~2014-06-03 17:48 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-03 17:48 Keith David Bershatsky [this message]
2014-06-11 18:00 ` bug#17678: 24.4.50; Feature Request -- calculate new `window-start` & `window-end` before visual redisplay Stefan Monnier
2014-06-11 18:45 ` Eli Zaretskii
2014-06-11 21:58 ` Stefan Monnier
2014-06-12 17:54 ` Eli Zaretskii
2014-06-13 2:11 ` Stefan Monnier
2014-06-13 6:22 ` Eli Zaretskii
2014-06-13 12:34 ` Stefan Monnier
2014-06-13 13:27 ` Eli Zaretskii
2014-06-13 14:14 ` Stefan Monnier
2014-06-13 14:47 ` Eli Zaretskii
2014-06-13 18:47 ` Stefan Monnier
2014-06-13 20:21 ` Keith David Bershatsky
2014-06-13 20:59 ` Eli Zaretskii
2014-06-14 9:45 ` Eli Zaretskii
2014-06-14 17:10 ` Keith David Bershatsky
2014-06-15 2:24 ` Stefan Monnier
2014-06-13 16:22 ` Keith David Bershatsky
2014-06-13 17:55 ` Eli Zaretskii
2014-06-13 18:24 ` Keith David Bershatsky
2014-06-13 20:54 ` Eli Zaretskii
2014-06-13 21:19 ` Keith David Bershatsky
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=m2ppiphojd.wl%esq@lawlist.com \
--to=esq@lawlist.com \
--cc=17678@debbugs.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).