unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Juri Linkov <juri@jurta.org>
Cc: steventamm@mac.com, emacs-devel@gnu.org
Subject: recenter-ratio (was: Re: Toolbars on MacOSX)
Date: Thu, 13 May 2004 07:33:33 +0300	[thread overview]
Message-ID: <87wu3h0wv6.fsf_-_@mail.jurta.org> (raw)
In-Reply-To: <20040512.171251.91443934.mituharu@math.s.chiba-u.ac.jp> (YAMAMOTO Mitsuharu's message of "Wed, 12 May 2004 17:12:51 +0900 (JST)")

YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> writes:
>   http://developer.apple.com/documentation/UserExperience/Conceptual/OSXHIGuidelines/XHIGWindows/chapter_16_section_3.html#//apple_ref/doc/uid/20000961/BABIFCFJ

I must say that Apple human interface guidelines define very
well-researched principles of implementing the good user interfaces.
I will not discuss its usefulness for Emacs design now, but one
chapter reminded me about an improvement I wanted to propose for
addition to Emacs.  The chapter at

http://developer.apple.com/documentation/UserExperience/Conceptual/OSXHIGuidelines/XHIGWindows/chapter_16_section_4.html#//apple_ref/doc/uid/20000961-BACFHDHE

defines a concept of "visually centered placement", where the distance
from the bottom to the center should be approximately twice the
distance as that from the center to the top.  This applies to the
window positioning, but the same principle makes sense also for the
cursor positioning in Emacs.  Currently by default the cursor is
always placed exactly in the center of the window (i.e. on the window
line equal to the window height divided by the constant 2).  I use
a special key to scroll the window to adjust the place with the cursor
to more convenient vertical position (which is about 1/3 of the window
height).  Unfortunately, currently it is not possible to change the
hard-coded default cursor position.

The following patch introduces a new variable with the default value 2.
Its value defines a ratio at which the cursor is placed by default
from the top of the window relative to the window height.  It even
can be set to the Golden Ratio if one wishes so:

(setq recenter-ratio (expt (/ (1+ (sqrt 5)) 2) 2))

Index: emacs/src/window.c
===================================================================
RCS file: /cvsroot/emacs/emacs/src/window.c,v
retrieving revision 1.465
diff -u -r1.465 window.c
--- emacs/src/window.c	7 May 2004 00:43:49 -0000	1.465
+++ emacs/src/window.c	13 May 2004 04:34:11 -0000
@@ -120,6 +120,10 @@
 
 Lisp_Object Vother_window_scroll_buffer;
 
+Lisp_Object Vrecenter_ratio;
+
 /* Non-nil means it's function to call to display temp buffers.  */
 
 Lisp_Object Vtemp_buffer_show_function;
@@ -5172,7 +5221,7 @@
       int ht = window_internal_height (w);
 
       if (center_p)
-	arg = make_number (ht / 2);
+	arg = make_number (ht / XFLOATINT (Vrecenter_ratio));
       else if (XINT (arg) < 0)
 	arg = make_number (XINT (arg) + ht);
 
@@ -5241,7 +5290,7 @@
 
   lines = displayed_window_lines (w);
   if (NILP (arg))
-    XSETFASTINT (arg, lines / 2);
+    XSETFASTINT (arg, lines / XFLOATINT (Vrecenter_ratio));
   else
     {
       arg = Fprefix_numeric_value (arg);
@@ -6474,6 +6523,10 @@
 	       doc: /* If non-nil, this is a buffer and \\[scroll-other-window] should scroll its window.  */);
   Vother_window_scroll_buffer = Qnil;
 
+  DEFVAR_LISP ("recenter-ratio", &Vrecenter_ratio,
+	       doc: /* Ratio to recenter cursor.  */);
+  Vrecenter_ratio = 2;
+
   DEFVAR_BOOL ("pop-up-frames", &pop_up_frames,
 	       doc: /* *Non-nil means `display-buffer' should make a separate frame.  */);
   pop_up_frames = 0;

Index: emacs/src/xdisp.c
===================================================================
RCS file: /cvsroot/emacs/emacs/src/xdisp.c,v
retrieving revision 1.888
diff -u -r1.888 xdisp.c
--- emacs/src/xdisp.c	10 May 2004 11:16:37 -0000	1.888
+++ emacs/src/xdisp.c	13 May 2004 03:34:29 -0000
@@ -229,6 +229,8 @@
 extern Lisp_Object Qwhen;
 extern Lisp_Object Qhelp_echo;
 
+extern Lisp_Object Vrecenter_ratio;
+
 Lisp_Object Qoverriding_local_map, Qoverriding_terminal_local_map;
 Lisp_Object Qwindow_scroll_functions, Vwindow_scroll_functions;
 Lisp_Object Qredisplay_end_trigger_functions;
@@ -11722,7 +11724,7 @@
 	  /* If point does not appear, try to move point so it does
 	     appear. The desired matrix has been built above, so we
 	     can use it here.  */
-	  new_vpos = window_box_height (w) / 2;
+	  new_vpos = window_box_height (w) / XFLOATINT (Vrecenter_ratio);
 	}
 
       if (!make_cursor_line_fully_visible (w, 0))
@@ -11922,7 +11924,7 @@
   /* Finally, just choose place to start which centers point */
 
  recenter:
-  centering_position = window_box_height (w) / 2;
+  centering_position = window_box_height (w) / XFLOATINT (Vrecenter_ratio);
 
  point_at_top:
   /* Jump here with centering_position already set to 0.  */

-- 
Juri Linkov
http://www.jurta.org/emacs/

  parent reply	other threads:[~2004-05-13  4:33 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-05-04 21:16 Toolbars on MacOSX Piet van Oostrum
2004-05-11  9:49 ` YAMAMOTO Mitsuharu
2004-05-11  9:48   ` Kim F. Storm
2004-05-12  2:48   ` Steven Tamm
2004-05-12  8:07     ` Jason Rumney
2004-05-12  8:44       ` Miles Bader
2004-05-12  8:12     ` YAMAMOTO Mitsuharu
2004-05-12 14:13       ` Kim F. Storm
2004-05-13  4:33       ` Juri Linkov [this message]
2004-05-13  5:04         ` recenter-ratio (was: Re: Toolbars on MacOSX) Miles Bader
2004-05-13  8:02         ` David Kastrup
2004-05-13  8:46         ` Kim F. Storm
2004-05-13  9:58         ` Andreas Schwab
2004-05-22  8:15       ` Toolbars on MacOSX YAMAMOTO Mitsuharu
     [not found]         ` <D73CE7B6-AECF-11D8-A841-00039390AB82@mac.com>
     [not found]           ` <wlzn7rhbmp.wl@church.math.s.chiba-u.ac.jp>
2004-05-30  0:43             ` Toolbars on MacOSX (seem to work) Steven Tamm
2004-06-05 15:53         ` Toolbars on MacOSX Andreas Schwab

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=87wu3h0wv6.fsf_-_@mail.jurta.org \
    --to=juri@jurta.org \
    --cc=emacs-devel@gnu.org \
    --cc=steventamm@mac.com \
    /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).