emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: line-line-move-visual: was line motion problem


From: Chong Yidong
Subject: Re: line-line-move-visual: was line motion problem
Date: Fri, 18 Jul 2008 12:08:30 -0400
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.0.60 (gnu/linux)

Miles Bader <address@hidden> writes:

> Chong Yidong <address@hidden> writes:
>> Since no one has commented, I've gone ahead and checked in
>> visual-line-mode into CVS.  Problem reports would be welcome.
>
> Seems to work pretty well...
>
> C-k acts a bit strangely, I think because it doesn't delete the
> whitespace at the end of the killed "line"; the result is that the
> cursor always ends up on the end of the previous "line" after using it.
>
> Also, what about dealing with fringe continuation glyphs?  I understand
> that some people want them, even in visual-line-mode, but I think many
> won't want them, so it would be good if there were an easy setting that
> would cause visual-line-mode suppress them.

The following simple patch implements a new variable,
`word-wrap-disable-fringe-indicators', that hides the continuation
indicators when word-wrap is on.  (The variable name is a little long
but I can't think of anything else.)

WDYT?

*** trunk/src/fringe.c.~1.53.~  2008-07-15 14:47:33.000000000 -0400
--- trunk/src/fringe.c  2008-07-18 12:03:55.000000000 -0400
***************
*** 39,44 ****
--- 39,48 ----
  
  Lisp_Object Voverflow_newline_into_fringe;
  
+ /* Non-nil means suppress continuation glyphs for word-wrap.  */
+ 
+ Lisp_Object Vword_wrap_disable_fringe_indicators;
+ 
  /* List of known fringe bitmap symbols.
  
     The fringe bitmap number is stored in the `fringe' property on
***************
*** 958,963 ****
--- 962,968 ----
    Lisp_Object ind = Qnil;
  #define MAX_BITMAP_CACHE (8*4)
    int bitmap_cache[MAX_BITMAP_CACHE];
+   int show_left_continuation, show_right_continuation;
  
    if (w->pseudo_window_p)
      return 0;
***************
*** 1058,1063 ****
--- 1063,1076 ----
     : (bitmap_cache[cache*4+2+partial_p] =                     \
        get_logical_fringe_bitmap (w, which, 1, partial_p)))
  
+   show_left_continuation
+     = (NILP (XBUFFER (w->buffer)->word_wrap)
+        || NILP (Vword_wrap_disable_fringe_indicators)
+        || EQ (Vword_wrap_disable_fringe_indicators, Qright));
+   show_right_continuation
+     = (NILP (XBUFFER (w->buffer)->word_wrap)
+        || NILP (Vword_wrap_disable_fringe_indicators)
+        || EQ (Vword_wrap_disable_fringe_indicators, Qleft));
  
    for (y = 0, rn = 0;
         y < yb && rn < nrows;
***************
*** 1089,1095 ****
                : LEFT_FRINGE (2, Qtop, 0));
        else if (row->indicate_eob_p && EQ (boundary_bot, Qleft))
        left = LEFT_FRINGE (3, Qbottom, row->ends_at_zv_p);
!       else if (MATRIX_ROW_CONTINUATION_LINE_P (row))
        left = LEFT_FRINGE (4, Qcontinuation, 0);
        else if (row->indicate_empty_line_p && EQ (empty_pos, Qleft))
        left = LEFT_FRINGE (5, Qempty_line, 0);
--- 1102,1109 ----
                : LEFT_FRINGE (2, Qtop, 0));
        else if (row->indicate_eob_p && EQ (boundary_bot, Qleft))
        left = LEFT_FRINGE (3, Qbottom, row->ends_at_zv_p);
!       else if (MATRIX_ROW_CONTINUATION_LINE_P (row)
!              && show_left_continuation)
        left = LEFT_FRINGE (4, Qcontinuation, 0);
        else if (row->indicate_empty_line_p && EQ (empty_pos, Qleft))
        left = LEFT_FRINGE (5, Qempty_line, 0);
***************
*** 1116,1122 ****
                 : RIGHT_FRINGE (2, Qtop, 0));
        else if (row->indicate_eob_p && EQ (boundary_bot, Qright))
        right = RIGHT_FRINGE (3, Qbottom, row->ends_at_zv_p);
!       else if (row->continued_p)
        right = RIGHT_FRINGE (4, Qcontinuation, 0);
        else if (row->indicate_top_line_p && EQ (arrow_top, Qright))
        right = RIGHT_FRINGE (6, Qup, 0);
--- 1130,1137 ----
                 : RIGHT_FRINGE (2, Qtop, 0));
        else if (row->indicate_eob_p && EQ (boundary_bot, Qright))
        right = RIGHT_FRINGE (3, Qbottom, row->ends_at_zv_p);
!       else if (row->continued_p
!              && show_right_continuation)
        right = RIGHT_FRINGE (4, Qcontinuation, 0);
        else if (row->indicate_top_line_p && EQ (arrow_top, Qright))
        right = RIGHT_FRINGE (6, Qup, 0);
***************
*** 1649,1654 ****
--- 1664,1681 ----
  If nil, also continue lines which are exactly as wide as the window.  */);
    Voverflow_newline_into_fringe = Qt;
  
+   DEFVAR_LISP ("word-wrap-disable-fringe-indicators",
+              &Vword_wrap_disable_fringe_indicators,
+     doc: /* *If non-nil, suppress fringe indicators when word-wrap is on.
+ This variable takes effect only if `word-wrap' is non-nil.
+ If its value is nil, the usual fringe indicators associated with
+ continuation lines are displayed for wrapped lines.
+ If its value is `left', the left fringe indicator is not displayed.
+ If its value is `right', the right fringe indicator is not displayed.
+ Any other non-nil value means neither fringe indicator is displayed.
+ This variable does not affect other types of fringe indicators.  */);
+   Vword_wrap_disable_fringe_indicators = Qt;
+ 
    DEFVAR_LISP ("fringe-bitmaps", &Vfringe_bitmaps,
      doc: /* List of fringe bitmap symbols.  */);
    Vfringe_bitmaps = Qnil;




reply via email to

[Prev in Thread] Current Thread [Next in Thread]