unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Jesse Medeiros <jessenzr@gmail.com>
To: Stefan Kangas <stefan@marxist.se>
Cc: emacs-devel@gnu.org
Subject: Re: Patch to vertically center line content when using line-spacing variable
Date: Sat, 31 Aug 2019 21:01:44 -0300	[thread overview]
Message-ID: <CABDXFDktiaBM0Zqxe_6jp9D98FRZbgRJwqu8bqBNE2Dta8stog@mail.gmail.com> (raw)
In-Reply-To: <CADwFkmmi9xyX_c2zLWwFxv+cW+WQRatvrTu862Ef3cp-znAZAQ@mail.gmail.com>

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

> The preferred format for patches is to have a commit message in the
> form of a ChangeLog entry, and to send it as an attached file produced
> with e.g. "git format-patch -1".

Oh, sorry I missed that. I'm sending the patch in the attachment.
Thanks for the tips.

On Sat, Aug 31, 2019 at 7:36 PM Stefan Kangas <stefan@marxist.se> wrote:
>
> Jesse Medeiros <jessenzr@gmail.com>:
>
> > Here's the link for the patch:
> >
> > https://github.com/sollidsnake/emacs/commit/aff5c59d10001e1161884ef3d0725eda86fa3ea0
>
> Hi Jesse,
>
> Thanks, and welcome to Emacs.
>
> The preferred format for patches is to have a commit message in the
> form of a ChangeLog entry, and to send it as an attached file produced
> with e.g. "git format-patch -1".  If you could re-send your patch in
> that format, it would help others to review your changes.
>
> You can find the details in the CONTRIBUTE file in the source
> repository.  One tip is also to have a look at the git log to see how
> others have formatted their commit messages.
>
> Best regards,
> Sefan Kangas

[-- Attachment #2: 0001-Center-lines-vertically-with-line-spacing-vertical-c.patch --]
[-- Type: text/x-patch, Size: 4159 bytes --]

From 60532f6087d0f3cc20197da1790d2f5cec0ecbee Mon Sep 17 00:00:00 2001
From: Jesse Nazario <jessenzr@gmail.com>
Date: Sat, 31 Aug 2019 15:35:34 -0300
Subject: [PATCH] Center lines vertically with line-spacing-vertical-center

When using line-spacing, the new variable line-spacing-vertical-center
can be set to non-nil to center the line content vertically.
---
 src/buffer.c | 13 +++++++++++++
 src/buffer.h |  4 ++++
 src/xdisp.c  |  8 +++++++-
 3 files changed, 24 insertions(+), 1 deletion(-)

diff --git a/src/buffer.c b/src/buffer.c
index 62a3d66c8b..1b9f96d61b 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -219,6 +219,11 @@ bset_extra_line_spacing (struct buffer *b, Lisp_Object val)
   b->extra_line_spacing_ = val;
 }
 static void
+bset_line_spacing_vertical_center (struct buffer *b, Lisp_Object val)
+{
+  b->line_spacing_vertical_center_ = val;
+}
+static void
 bset_file_format (struct buffer *b, Lisp_Object val)
 {
   b->file_format_ = val;
@@ -956,6 +961,7 @@ reset_buffer (register struct buffer *b)
     (b, BVAR (&buffer_defaults, enable_multibyte_characters));
   bset_cursor_type (b, BVAR (&buffer_defaults, cursor_type));
   bset_extra_line_spacing (b, BVAR (&buffer_defaults, extra_line_spacing));
+  bset_line_spacing_vertical_center (b, BVAR (&buffer_defaults, line_spacing_vertical_center));
 
   b->display_error_modiff = 0;
 }
@@ -5190,6 +5196,7 @@ init_buffer_once (void)
   XSETFASTINT (BVAR (&buffer_local_flags, header_line_format), idx); ++idx;
   XSETFASTINT (BVAR (&buffer_local_flags, cursor_type), idx); ++idx;
   XSETFASTINT (BVAR (&buffer_local_flags, extra_line_spacing), idx); ++idx;
+  XSETFASTINT (BVAR (&buffer_local_flags, line_spacing_vertical_center), idx); ++idx;
   XSETFASTINT (BVAR (&buffer_local_flags, cursor_in_non_selected_windows), idx); ++idx;
 
   /* buffer_local_flags contains no pointers, so it's safe to treat it
@@ -5259,6 +5266,7 @@ init_buffer_once (void)
   bset_bidi_paragraph_separate_re (&buffer_defaults, Qnil);
   bset_cursor_type (&buffer_defaults, Qt);
   bset_extra_line_spacing (&buffer_defaults, Qnil);
+  bset_line_spacing_vertical_center (&buffer_defaults, Qnil);
   bset_cursor_in_non_selected_windows (&buffer_defaults, Qt);
 
   bset_enable_multibyte_characters (&buffer_defaults, Qt);
@@ -6248,6 +6256,11 @@ from (abs POSITION).  If POSITION is positive, point was at the front
 If value is a floating point number, it specifies the spacing relative
 to the default frame line height.  A value of nil means add no extra space.  */);
 
+  DEFVAR_PER_BUFFER ("line-spacing-vertical-center",
+		     &BVAR (current_buffer, line_spacing_vertical_center), Qnil,
+                     doc: /* Non-nil will center the line content vertically
+when using `line-spacing' variable.  */);
+
   DEFVAR_PER_BUFFER ("cursor-in-non-selected-windows",
 		     &BVAR (current_buffer, cursor_in_non_selected_windows), Qnil,
 		     doc: /* Non-nil means show a cursor in non-selected windows.
diff --git a/src/buffer.h b/src/buffer.h
index 2080a6f40b..48cf06d06f 100644
--- a/src/buffer.h
+++ b/src/buffer.h
@@ -740,6 +740,10 @@ #define BVAR(buf, field) ((buf)->field ## _)
      in the display of this buffer.  */
   Lisp_Object extra_line_spacing_;
 
+  /* When non-nil will center the line content vertically. To be used
+     along with `line-spacing'.  */
+  Lisp_Object line_spacing_vertical_center_;
+
   /* Cursor type to display in non-selected windows.
      t means to use hollow box cursor.
      See `cursor-type' for other values.  */
diff --git a/src/xdisp.c b/src/xdisp.c
index 75bc536cb9..0ddabe6e09 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -29294,7 +29294,13 @@ gui_produce_glyphs (struct it *it)
 
   if (extra_line_spacing > 0)
     {
-      it->descent += extra_line_spacing;
+      if (! BVAR (XBUFFER (it->w->contents), line_spacing_vertical_center)) {
+        it->descent += extra_line_spacing;
+      } else {
+        int spacing = extra_line_spacing / 2;
+        it->ascent += spacing;
+        it->descent += spacing;
+      }
       if (extra_line_spacing > it->max_extra_line_spacing)
 	it->max_extra_line_spacing = extra_line_spacing;
     }
-- 
2.23.0


  reply	other threads:[~2019-09-01  0:01 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-08-31 21:53 Patch to vertically center line content when using line-spacing variable Jesse Medeiros
2019-08-31 22:36 ` Stefan Kangas
2019-09-01  0:01   ` Jesse Medeiros [this message]
2019-09-03  0:01     ` Jesse Medeiros
2019-09-07  9:50     ` Eli Zaretskii
2019-09-08 23:24       ` Jesse Medeiros
2019-09-09  7:39         ` martin rudalics
2019-09-09  8:40         ` Robert Pluim
2019-09-12 12:08           ` Jesse Medeiros
2019-09-12 14:26             ` Robert Pluim
2019-09-12 20:49               ` Jesse Medeiros
2019-09-13  9:35                 ` Robert Pluim
2019-09-29 23:54           ` Jesse Medeiros
2019-09-30  7:07             ` Robert Pluim
  -- strict thread matches above, loose matches on Subject: below --
2020-01-23 16:32 조성빈
2020-01-23 19:22 ` Eli Zaretskii
2020-02-07 17:06   ` Jesse Medeiros
2020-02-07 18:26     ` Eli Zaretskii
2020-04-05 18:55     ` 조성빈 via "Emacs development discussions.
2020-04-06 21:13       ` Jesse Medeiros
2020-04-07 14:17         ` Eli Zaretskii
2021-04-12 20:24 email
2021-04-25 19:41 ` Lars Ingebrigtsen
2021-04-25 20:15   ` john muhl
2021-04-25 20:21   ` Eli Zaretskii
2021-04-25 23:25     ` Fu Yuan
2021-04-25 23:28   ` Stefan Kangas
2021-04-25 23:56     ` Clément Pit-Claudel
2021-04-26  1:00       ` Stefan Kangas
2021-04-26 14:00         ` Clément Pit-Claudel
2021-04-25 23:56   ` Clément Pit-Claudel
2021-04-26 12:35   ` Eli Zaretskii
2021-04-26 20:04     ` Lars Ingebrigtsen

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=CABDXFDktiaBM0Zqxe_6jp9D98FRZbgRJwqu8bqBNE2Dta8stog@mail.gmail.com \
    --to=jessenzr@gmail.com \
    --cc=emacs-devel@gnu.org \
    --cc=stefan@marxist.se \
    /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).