From: Ergus <spacibba@aol.com>
To: Eli Zaretskii <eliz@gnu.org>
Cc: emacs-devel@gnu.org
Subject: Re: Fill column indicator functionality
Date: Mon, 11 Mar 2019 11:48:14 +0100 [thread overview]
Message-ID: <20190311104814.kp2nv6arv47hcykz@Ergus> (raw)
In-Reply-To: <838sxo87gc.fsf@gnu.org>
Hi again:
I have a simple version for the column indicator line. There are still
missing functionalities like R2L or multiple columns indicator
implementations, but I don't want to go very complex on this in the
first try.
I have 2 questions:
1) In the graphical implementation I generated the column following the
Eli suggestions with something like:
struct font *font = face->font ? face->font : FRAME_FONT (f);
it->char_to_display = '|';
int stretch_ascent = (((it->ascent + it->descent)
* FONT_BASE (font)) / FONT_HEIGHT (font));
memset (&it->position, 0, sizeof it->position);
it->avoid_cursor_p = true;
it->face_id = merge_faces (it->w, Qline_number, 0, DEFAULT_FACE_ID);
it->start_of_box_run_p = false;
append_stretch_glyph (it, Qnil, width,
it->ascent + it->descent, stretch_ascent);
PRODUCE_GLYPHS (it);
it->position = saved_pos;
it->avoid_cursor_p = saved_avoid_cursor;
it->face_id = saved_face_id;
it->start_of_box_run_p = saved_box_start;
it->char_to_display = saved_char;
The problem is that in this case if (setq show-trailing-whitespace t)
the whitespaces aren't highlighted if they are not longer that the line;
in term mode (with the loop) it works fine.
The function highlight_trailing_whitespace checks for glyph->type ==
STRETCH_GLYPH so I am missing something.
2) What name do you suggest for this mode? I propose
display-column-indicator.
Thanks in advance.
Ergus
On Sat, Mar 09, 2019 at 04:10:11PM +0200, Eli Zaretskii wrote:
>> Date: Sat, 9 Mar 2019 14:22:09 +0100
>> From: Ergus <spacibba@aol.com>
>> Cc: emacs-devel@gnu.org
>>
>> >You are on the right track. But I'd suggest to do this inside the
>> >function extend_face_to_end_of_line. It is called near that label,
>> >but you will see that it's called in several more places; I expect at
>> >least some of them to need the same changes.
>> >
>> Hi Eli, I just finished a working version (pretty simple as a proof of
>> concept). That works in terminal mode. But in graphical mode we should
>> look for another approach because extend_face_to_end_of_line returns in:
>>
>> if (FRAME_WINDOW_P (f)
>> && MATRIX_ROW_DISPLAYS_TEXT_P (it->glyph_row)
>> && face->box == FACE_NO_BOX
>> && FACE_COLOR_TO_PIXEL (face->background, f) == FRAME_BACKGROUND_PIXEL (f)
>> #ifdef HAVE_WINDOW_SYSTEM
>> && !face->stipple
>> #endif
>> && !it->glyph_row->reversed_p)
>> return;
>>
>> So it don't write until the line end.
>
>Yes, you need to add one more condition to that 'if', so that it
>doesn't return when this feature is in effect.
>
>> In graphical mode maybe it is better to do this change writing directly
>> a vertical line in the windows' frame background.
>
>I don't think we can do this in Emacs, the background is just a color
>for us.
>
>> That way it will be maybe more efficient because we only do it
>> once.
>
>If it were possible, it still could not be done once, because every
>redisplay would have to redraw it.
>
>> But I don't know if this is possible-recommended.
>
>It's not possible with what we have in Emacs today.
>
>> BTW: Is it possible to generate a single wider glyph instead of doing a
>> loop?.
>
>Yes, of course: you produce a single stretch glyph of a suitable
>width. Look at what the code does in the "row->reversed_p" case.
>
>> >Which data structures? there are quite a few of them, so please be
>> >more specific.
>> >
>> glyph <-> it: why this looks so complex?
>
>For 2 main reasons:
>
> . the 'it' structure needs to keep track of several state variables,
> which affect more than one glyph, and it needs to do that without
> relying on the glyphs, because sometimes these functions are
> called with it->glyph_row set to NULL (when we need to simulate
> display without displaying anything, see move_it_to
>
> . the 'it' structure instance is discarded once the glyphs are
> produced, so if we need to record information about the glyphs, we
> need to keep it with the glyphs themselves
>
>> Because "it" has too many properties I can't understand their
>> functionalities and sometimes I think I could reinvent the wheel.
>
>The comments in dispextern.h should help. If they are not enough, we
>can add more comments, but you need to point out the missing
>information.
>
next prev parent reply other threads:[~2019-03-11 10:48 UTC|newest]
Thread overview: 196+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-02-05 10:53 Fill column indicator functionality Ergus
2019-02-05 16:41 ` Eli Zaretskii
2019-02-05 18:47 ` Ergus
2019-02-05 19:56 ` Drew Adams
2019-02-05 23:32 ` Ergus
2019-02-06 16:08 ` Eli Zaretskii
2019-02-06 20:48 ` John Yates
2019-02-06 22:25 ` Ergus
2019-02-07 1:41 ` Basil L. Contovounesios
2019-02-07 14:31 ` Eli Zaretskii
2019-02-10 22:04 ` Ergus
2019-02-11 15:55 ` Eli Zaretskii
2019-02-11 16:56 ` Jimmy Aguilar Mena
2019-02-11 17:13 ` Eli Zaretskii
2019-03-08 18:57 ` Ergus
2019-03-08 20:06 ` Eli Zaretskii
2019-03-09 13:22 ` Ergus
2019-03-09 14:10 ` Eli Zaretskii
2019-03-11 10:48 ` Ergus [this message]
2019-03-11 15:30 ` Eli Zaretskii
2019-03-11 19:58 ` Andy Moreton
2019-03-11 20:24 ` Eli Zaretskii
2019-03-12 15:29 ` Ergus
2019-03-12 16:19 ` Eli Zaretskii
2019-03-12 19:20 ` Ergus
2019-03-13 16:19 ` Eli Zaretskii
2019-03-13 20:02 ` Ergus
2019-03-13 20:09 ` Eli Zaretskii
2019-03-14 3:02 ` Ergus
2019-03-14 6:40 ` Eli Zaretskii
2019-03-14 16:51 ` Ergus
2019-03-14 17:59 ` Andreas Schwab
2019-03-14 18:22 ` Eli Zaretskii
[not found] ` <20190314211313.giyz7p6jtmquabea@Ergus>
[not found] ` <83bm2c1smi.fsf@gnu.org>
2019-03-15 20:56 ` Ergus
2019-03-15 22:52 ` Óscar Fuentes
2019-03-15 23:22 ` Ergus
2019-03-15 23:47 ` Óscar Fuentes
2019-03-16 6:50 ` Ergus
2019-03-16 7:48 ` Eli Zaretskii
2019-03-16 7:42 ` Eli Zaretskii
2019-03-16 12:26 ` Eli Zaretskii
2019-03-17 17:28 ` Alp Aker
2019-03-17 18:03 ` Ergus
2019-03-17 18:40 ` Eli Zaretskii
2019-03-16 9:36 ` Ergus
2019-03-16 10:18 ` Question about documented functions Ergus
2019-03-16 12:21 ` Eli Zaretskii
2019-03-16 13:53 ` Ergus
2019-03-16 14:05 ` Eli Zaretskii
2019-03-16 12:40 ` Fill column indicator functionality Eli Zaretskii
2019-03-14 21:28 ` Óscar Fuentes
2019-03-14 23:54 ` Ergus
2019-03-14 18:58 ` Clément Pit-Claudel
2019-03-15 7:30 ` Eli Zaretskii
2019-03-15 12:44 ` Clément Pit-Claudel
2019-03-15 14:07 ` Óscar Fuentes
2019-03-15 14:54 ` Clément Pit-Claudel
2019-03-15 15:15 ` Óscar Fuentes
2019-03-15 15:30 ` Clément Pit-Claudel
2019-03-15 14:12 ` Eli Zaretskii
2019-03-15 14:35 ` Clément Pit-Claudel
2019-03-15 16:13 ` Eli Zaretskii
2019-03-15 18:26 ` Clément Pit-Claudel
2019-03-15 19:14 ` Eli Zaretskii
2019-03-15 15:13 ` Stefan Monnier
2019-03-15 13:00 ` Alp Aker
2019-03-15 13:30 ` Mattias Engdegård
2019-03-15 14:24 ` Eli Zaretskii
2019-03-15 15:05 ` Mattias Engdegård
2019-03-15 15:54 ` Eli Zaretskii
2019-03-15 15:09 ` Stefan Monnier
2019-03-15 15:56 ` Eli Zaretskii
2019-03-15 13:54 ` Eli Zaretskii
2019-03-15 14:19 ` Alp Aker
2019-03-15 14:58 ` Clément Pit-Claudel
2019-03-16 15:07 ` Johan Bockgård
2019-03-16 15:22 ` Clément Pit-Claudel
2019-03-15 15:43 ` Eli Zaretskii
2019-03-15 17:24 ` Óscar Fuentes
2019-03-15 18:28 ` Clément Pit-Claudel
2019-03-15 14:35 ` Alp Aker
2019-03-09 18:02 ` John Yates
2019-03-09 18:23 ` Eli Zaretskii
-- strict thread matches above, loose matches on Subject: below --
2019-03-15 16:59 Drew Adams
2019-03-15 18:21 ` Eli Zaretskii
2019-03-15 19:18 ` Drew Adams
2019-03-15 19:30 ` Eli Zaretskii
2019-03-15 19:51 ` Ergus
2019-03-18 1:03 Ergus
2019-03-18 3:35 ` Eli Zaretskii
2019-03-18 11:42 ` Ergus
2019-03-18 17:10 ` Eli Zaretskii
2019-04-02 12:42 ` Ergus
2019-04-02 13:03 ` Óscar Fuentes
2019-04-02 13:25 ` Óscar Fuentes
2019-04-02 13:37 ` Ergus
2019-04-02 15:07 ` Eli Zaretskii
2019-04-02 15:35 ` Ergus
2019-04-02 15:44 ` Eli Zaretskii
2019-04-02 16:36 ` Ergus
2019-04-02 16:48 ` Eli Zaretskii
2019-04-02 17:00 ` Ergus
2019-04-02 17:26 ` Eli Zaretskii
2019-04-02 17:48 ` Ergus
2019-04-02 18:28 ` Eli Zaretskii
2019-04-02 21:22 ` Ergus
2019-04-03 5:20 ` Eli Zaretskii
2019-04-03 10:22 ` Ergus
2019-04-03 11:11 ` Eli Zaretskii
2019-04-05 9:10 ` Robert Pluim
2019-04-05 10:36 ` Ergus
2019-04-05 11:47 ` Eli Zaretskii
2019-04-05 12:13 ` Robert Pluim
2019-04-05 12:46 ` Eli Zaretskii
2019-04-05 14:09 ` Robert Pluim
2019-04-05 14:13 ` Eli Zaretskii
2019-04-05 14:38 ` Eli Zaretskii
2019-04-05 15:04 ` Ergus
2019-04-05 15:17 ` Eli Zaretskii
2019-04-05 17:30 ` Ergus
2019-04-05 19:05 ` Eli Zaretskii
2019-04-05 20:03 ` Ergus
2019-04-05 21:10 ` Óscar Fuentes
2019-04-05 22:01 ` Ergus
2019-04-05 22:20 ` Óscar Fuentes
2019-04-06 6:49 ` Eli Zaretskii
2019-04-06 11:06 ` Ergus
2019-04-06 12:53 ` Eli Zaretskii
2019-04-06 6:51 ` Eli Zaretskii
2019-04-06 13:21 ` Eli Zaretskii
2019-04-06 15:20 ` Ergus
2019-04-06 16:00 ` Eli Zaretskii
2019-04-06 18:59 ` Ergus
2019-04-06 19:07 ` Eli Zaretskii
2019-04-06 19:51 ` Ergus
2019-04-07 18:19 ` Ergus
2019-04-07 18:31 ` Eli Zaretskii
2019-04-07 18:35 ` Ergus
2019-04-07 18:38 ` Ergus
2019-04-07 19:02 ` Eli Zaretskii
2019-04-07 20:05 ` Ergus
2019-04-08 2:27 ` Eli Zaretskii
2019-04-08 8:51 ` Ergus
2019-04-08 14:57 ` Eli Zaretskii
2019-04-08 16:04 ` Ergus
2019-04-12 13:46 ` Ergus
2019-04-12 13:54 ` Eli Zaretskii
2019-05-01 11:08 ` Ergus
2019-05-03 13:19 ` Eli Zaretskii
2019-05-03 14:14 ` Basil L. Contovounesios
2019-05-03 15:10 ` Eli Zaretskii
2019-05-03 15:25 ` Basil L. Contovounesios
2019-05-03 16:21 ` Eli Zaretskii
2019-05-03 16:18 ` Ergus
2019-05-03 17:49 ` Ergus
2019-05-03 18:32 ` Eli Zaretskii
2019-05-03 18:39 ` Eli Zaretskii
2019-05-03 21:05 ` Ergus
2019-05-04 6:54 ` Eli Zaretskii
2019-05-04 9:37 ` Ergus
2019-05-04 11:04 ` Eli Zaretskii
2019-05-04 11:29 ` Óscar Fuentes
2019-05-04 15:44 ` Alp Aker
2019-05-04 15:59 ` Eli Zaretskii
2019-05-04 16:32 ` Eli Zaretskii
2019-05-04 16:32 ` Alp Aker
2019-05-04 16:36 ` Eli Zaretskii
2019-05-04 16:38 ` Alp Aker
2019-05-04 16:42 ` Eli Zaretskii
2019-05-05 14:40 ` Ergus
2019-05-04 16:42 ` Ergus
2019-05-03 14:34 ` Basil L. Contovounesios
2019-05-03 15:31 ` Alp Aker
2019-04-07 20:51 ` Ergus
2019-04-07 21:23 ` Stefan Monnier
2019-04-07 21:37 ` Ergus
2019-04-07 21:39 ` Stefan Monnier
2019-04-05 13:06 ` Eli Zaretskii
2019-04-05 15:28 ` Eli Zaretskii
2019-04-05 18:11 ` Ergus
2019-04-05 19:03 ` Eli Zaretskii
2019-04-05 21:15 ` Ergus
2019-04-06 10:13 ` Robert Pluim
2019-04-06 12:54 ` Eli Zaretskii
2019-04-05 11:44 ` Eli Zaretskii
2019-04-05 12:09 ` Robert Pluim
2019-04-05 12:44 ` Eli Zaretskii
2019-04-05 13:21 ` Eli Zaretskii
2019-04-05 13:47 ` Robert Pluim
2019-04-05 14:08 ` Robert Pluim
2019-04-03 12:13 ` Stefan Monnier
2019-04-02 23:11 ` Dmitry Gutov
2019-04-02 17:01 ` Robert Pluim
2019-04-02 17:26 ` Ergus
2019-04-02 17:50 ` Robert Pluim
2019-05-04 22:51 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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190311104814.kp2nv6arv47hcykz@Ergus \
--to=spacibba@aol.com \
--cc=eliz@gnu.org \
--cc=emacs-devel@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.