From: Nicolas Richard <youngfrog@members.fsf.org>
To: Eli Zaretskii <eliz@gnu.org>
Cc: 20734@debbugs.gnu.org
Subject: bug#20734: 25.0.50; "Args out of range" with help-window-select t
Date: Fri, 05 Jun 2015 11:25:35 +0200 [thread overview]
Message-ID: <867fritskw.fsf@members.fsf.org> (raw)
In-Reply-To: <83r3pqpsh0.fsf@gnu.org> (Eli Zaretskii's message of "Fri, 05 Jun 2015 09:41:31 +0300")
Eli Zaretskii <eliz@gnu.org> writes:
>> I understand that
>> get_char_property_and_overlay
>> (make_number (PT), Qdisplay, selected_window,
>> &overlay))
>> should not refer to PT but to "PT in selected_window", but I don't know
>> how to do that.
>
> Are you saying that adjust_point_for_property is called with the
> current buffer different from what's recorded in selected_window's
> buffer?
Yes, that's what I was guessing anyway.
> If so, please show the evidence: what is in current_buffer
> and what is recorded as the selected window's buffer at that point.
Let me try that. What I did :
1. run under gdb
2. follow the recipe up to the point where I type "C-h f if", but don't
hit RET
3. then go to gdb window
4. hit C-z to put a breakpoint in adjust_point_for_property
5. continue
6. go back to emacs and hit RET
Now back to gdb :
(gdb) p XBUFFER(XWINDOW(selected_window)->contents)->name_
$1 = 143880388
(gdb) xpr
Lisp_String
$2 = (struct Lisp_String *) 0x89370c0
"*Help*"
(gdb) p current_buffer->name_
$3 = 139646148
(gdb) xpr
Lisp_String
$4 = (struct Lisp_String *) 0x852d4c0
"*Messages*"
(gdb) p PT
$5 = 10067
(gdb) p Fwindow_point (selected_window)
$6 = 6
> And please note that the conditions in the 'if' clause that determine
> whether adjust_point_for_property is called freely manipulate values
> of current_buffer and PT, so perhaps the solution is add there a
> condition that selected_window's buffer and current_buffer are equal,
> such that in the case in point adjust_point_for_property is not called
> at all.
In command_loop_1 ?
I can more or less follow the code step by step, but I don't really
understand it. The only thing I'm now almost 100% confident is that in
this call (found in adjust_point_for_property) :
get_char_property_and_overlay
(make_number (PT), Qdisplay, selected_window,
&overlay))
PT refers to current_buffer, which is different from the buffer in
selected_window in the situation I encountered.
> To answer your question directly, it should be possible to compute the
> (Lisp integer) value of point in the selected window as either
Thanks. This works for me, but is it TRT ?
Commit 53fb39a08a6d18b67ea6073966874fa700d9f97f
References: yf-master
Author: Nicolas Richard <youngfrog@members.fsf.org>
AuthorDate: Fri Jun 5 11:18:19 2015 +0200
Commit: Nicolas Richard <youngfrog@members.fsf.org>
CommitDate: Fri Jun 5 11:20:08 2015 +0200
* src/keyboard.c (adjust_point_for_property): Use selected window (Bug#20590)
1 parent commit, 6 merged branches, 1 containing branch
Parent | f10a924 (todo-show): Throw an error if buffer is empty but was modified.
Merged | emacs-24 master run-2015-05-29_19-09 running yf-fix-query-replace-with-NULs yf-master
Containing | yf-master
Follows | emacs-24.5-rc3-fixed (4919)
1 file changed, 4 insertions(+), 2 deletions(-)
src/keyboard.c | 6 ++++--
modified src/keyboard.c
@@ -1702,8 +1702,10 @@ adjust_point_for_property (ptrdiff_t last_pt, bool modified)
if (check_display
&& PT > BEGV && PT < ZV
&& !NILP (val = get_char_property_and_overlay
- (make_number (PT), Qdisplay, selected_window,
- &overlay))
+ (make_number
+ (marker_position
+ (XWINDOW (selected_window)->pointm)),
+ Qdisplay, selected_window, &overlay))
&& display_prop_intangible_p (val, overlay, PT, PT_BYTE)
&& (!OVERLAYP (overlay)
? get_property_and_range (PT, Qdisplay, &val, &beg, &end, Qnil)
--
Nico.
next prev parent reply other threads:[~2015-06-05 9:25 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-04 19:47 bug#20734: 25.0.50; "Args out of range" with help-window-select t Nicolas Richard
2015-06-04 22:27 ` Stefan Monnier
2015-06-05 9:33 ` Nicolas Richard
2015-06-05 13:46 ` Eli Zaretskii
2015-06-05 6:41 ` Eli Zaretskii
2015-06-05 9:25 ` Nicolas Richard [this message]
2015-06-05 13:45 ` Eli Zaretskii
2015-06-05 19:48 ` Nicolas Richard
2015-06-05 19:56 ` Eli Zaretskii
2015-06-06 8:44 ` Nicolas Richard
2015-06-06 8:56 ` Eli Zaretskii
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=867fritskw.fsf@members.fsf.org \
--to=youngfrog@members.fsf.org \
--cc=20734@debbugs.gnu.org \
--cc=eliz@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).