unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* fill length of visual line mode
@ 2014-10-02  7:48 Ivan Kanis
  2014-10-02 15:16 ` Eli Zaretskii
  2014-10-02 15:50 ` Glenn Morris
  0 siblings, 2 replies; 13+ messages in thread
From: Ivan Kanis @ 2014-10-02  7:48 UTC (permalink / raw)
  To: Emacs Development List

Hello,

I just enabled visual line mode today. I have started using it to
display gnus article. I noticed that the fill happens at the width of
the Emacs window. I set fill-column to 70 and I was expecting it to wrap
there.

There is a hack [1] by James Wright to make it work by expanding the
right margin of the buffer's window.

I don't feel it should be so complicated to customize this behavior.

Would it be OK to code wrap at fill-column?

Ivan

[1] The code on Emacs wiki:

(defvar visual-wrap-column nil)

(defun set-visual-wrap-column (new-wrap-column &optional buffer)
  "Force visual line wrap at NEW-WRAP-COLUMN in BUFFER (defaults
to current buffer) by setting the right-hand margin on every
window that displays BUFFER.  A value of NIL or 0 for
NEW-WRAP-COLUMN disables this behavior."
  (interactive (list (read-number "New visual wrap column, 0 to disable: "
                                  (or visual-wrap-column fill-column 0))))
  (if (and (numberp new-wrap-column)
           (zerop new-wrap-column))
    (setq new-wrap-column nil))
  (with-current-buffer (or buffer (current-buffer))
    (visual-line-mode t)
    (set (make-local-variable 'visual-wrap-column) new-wrap-column)
    (add-hook 'window-configuration-change-hook
              'update-visual-wrap-column nil t)
    (let ((windows (get-buffer-window-list)))
      (while windows
        (when (window-live-p (car windows))
          (with-selected-window (car windows)
            (update-visual-wrap-column)))
        (setq windows (cdr windows))))))

(defun update-visual-wrap-column ()
  (if (not visual-wrap-column)
    (set-window-margins nil nil)
    (let* ((current-margins (window-margins))
           (right-margin (or (cdr current-margins) 0))
           (current-width (window-width))
           (current-available (+ current-width right-margin)))
      (if (<= current-available visual-wrap-column)
        (set-window-margins nil (car current-margins))
        (set-window-margins nil (car current-margins)
                            (- current-available
  visual-wrap-column))))))



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: fill length of visual line mode
  2014-10-02  7:48 fill length of visual line mode Ivan Kanis
@ 2014-10-02 15:16 ` Eli Zaretskii
  2014-10-03 21:19   ` Johan Bockgård
  2014-10-02 15:50 ` Glenn Morris
  1 sibling, 1 reply; 13+ messages in thread
From: Eli Zaretskii @ 2014-10-02 15:16 UTC (permalink / raw)
  To: Ivan Kanis; +Cc: emacs-devel

> From: Ivan Kanis <ivan@kanis.fr>
> Date: Thu, 02 Oct 2014 09:48:12 +0200
> 
> I just enabled visual line mode today. I have started using it to
> display gnus article. I noticed that the fill happens at the width of
> the Emacs window. I set fill-column to 70 and I was expecting it to wrap
> there.

That's not how word-wrap was designed and implemented.  It works more
like Web browsers, i.e. it wraps at the window edge.

> There is a hack [1] by James Wright to make it work by expanding the
> right margin of the buffer's window.
> 
> I don't feel it should be so complicated to customize this behavior.
> 
> Would it be OK to code wrap at fill-column?

Not sure what you mean by your question.  Are you asking whether
patches to implement the wrap at fill-column will be accepted?  If so,
I'm quite sure the answer is YES.



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: fill length of visual line mode
  2014-10-02  7:48 fill length of visual line mode Ivan Kanis
  2014-10-02 15:16 ` Eli Zaretskii
@ 2014-10-02 15:50 ` Glenn Morris
  2014-10-03 20:39   ` Ivan Kanis
  1 sibling, 1 reply; 13+ messages in thread
From: Glenn Morris @ 2014-10-02 15:50 UTC (permalink / raw)
  To: Ivan Kanis; +Cc: Emacs Development List

Ivan Kanis wrote:

> I just enabled visual line mode today. I have started using it to
> display gnus article. I noticed that the fill happens at the width of
> the Emacs window. I set fill-column to 70 and I was expecting it to wrap
> there.

This is http://debbugs.gnu.org/cgi/bugreport.cgi?bug=18589 .
(Presumably wrote a blog post or something and this is now flavour of
the week.)

> There is a hack [1] by James Wright to make it work by expanding the
> right margin of the buffer's window.

See comments at
http://lists.gnu.org/archive/html/emacs-devel/2013-12/msg00495.html .
    
    The code you quote seems mostly OK, but I don't know who wrote it, so
    I can't just install it, for copyright reasons.
    
    If someone can rewrite it and submit a patch, or if the original author
    can submit the patch, I'd be happy to install the feature.



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: fill length of visual line mode
  2014-10-02 15:50 ` Glenn Morris
@ 2014-10-03 20:39   ` Ivan Kanis
  2014-10-03 21:20     ` Stefan Monnier
  0 siblings, 1 reply; 13+ messages in thread
From: Ivan Kanis @ 2014-10-03 20:39 UTC (permalink / raw)
  To: Glenn Morris; +Cc: Eli Zaretskii, Emacs Development List

October, 02 at 18:16 Eli wrote:

>> From: Ivan Kanis <ivan@kanis.fr>
>> Date: Thu, 02 Oct 2014 09:48:12 +0200
>> 
>> I just enabled visual line mode today. I have started using it to
>> display gnus article. I noticed that the fill happens at the width of
>> the Emacs window. I set fill-column to 70 and I was expecting it to wrap
>> there.
>
> That's not how word-wrap was designed and implemented.  It works more
> like Web browsers, i.e. it wraps at the window edge.

It's too long for me at work where I use a tiling window manager and
wide screen.

>> There is a hack [1] by James Wright to make it work by expanding the
>> right margin of the buffer's window.
>> 
>> I don't feel it should be so complicated to customize this behavior.
>> 
>> Would it be OK to code wrap at fill-column?
>
> Not sure what you mean by your question.  Are you asking whether
> patches to implement the wrap at fill-column will be accepted?  If so,
> I'm quite sure the answer is YES.

It is what I meant.

October, 02 at 11:50 Glenn wrote:

> The code you quote seems mostly OK, but I don't know who wrote it, so
> I can't just install it, for copyright reasons.
>     
> If someone can rewrite it and submit a patch, or if the original author
> can submit the patch, I'd be happy to install the feature.

It just boils down to setting the right margin. I have to hide the right
fringe or it looks wrong. FWIW here is how I cobbled for gnus article.

(defun ivan-gnus-hack-visual-line-length ()
  "Set visual line length by expanding the right margin of the
buffer’s window."
  (let ((window (selected-window)))
    (select-window (car (get-buffer-window-list gnus-article-buffer)))
    (set-window-margins nil 0 (- (window-width) 80))
    (set-window-fringes (selected-window) 8 0)
    (visual-line-mode)
    (select-window window)))

(add-hook 'gnus-article-prepare-hook 'ivan-gnus-hack-visual-line-length)

It just feels hackish and wrong. The right thing I feel is to use
fill-column.

Ivan
-- 
You must've hit the wrong any key.
    -- BOFH excuse #52



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: fill length of visual line mode
  2014-10-02 15:16 ` Eli Zaretskii
@ 2014-10-03 21:19   ` Johan Bockgård
  2014-10-04  7:07     ` Eli Zaretskii
  0 siblings, 1 reply; 13+ messages in thread
From: Johan Bockgård @ 2014-10-03 21:19 UTC (permalink / raw)
  To: emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

>> From: Ivan Kanis <ivan@kanis.fr>
>> Date: Thu, 02 Oct 2014 09:48:12 +0200
>> 
>> I just enabled visual line mode today. I have started using it to
>> display gnus article. I noticed that the fill happens at the width of
>> the Emacs window. I set fill-column to 70 and I was expecting it to wrap
>> there.
>
> That's not how word-wrap was designed and implemented.  It works more
> like Web browsers, i.e. it wraps at the window edge.

The original word wrap patch by Kim did support wrapping at a specified
column, but this feature was removed when the code was integrated into
Emacs.



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: fill length of visual line mode
  2014-10-03 20:39   ` Ivan Kanis
@ 2014-10-03 21:20     ` Stefan Monnier
  2014-10-04  9:58       ` Harald Hanche-Olsen
  2014-10-04 14:23       ` Ivan Kanis
  0 siblings, 2 replies; 13+ messages in thread
From: Stefan Monnier @ 2014-10-03 21:20 UTC (permalink / raw)
  To: Ivan Kanis; +Cc: Eli Zaretskii, Emacs Development List

> It just boils down to setting the right margin. I have to hide the right
> fringe or it looks wrong.

Better to swap the margin and the fringe with fringes-outside-margins.

> (defun ivan-gnus-hack-visual-line-length ()
>   "Set visual line length by expanding the right margin of the
> buffer’s window."
>   (let ((window (selected-window)))
>     (select-window (car (get-buffer-window-list gnus-article-buffer)))
>     (set-window-margins nil 0 (- (window-width) 80))
>     (set-window-fringes (selected-window) 8 0)
>     (visual-line-mode)
>     (select-window window)))

You want to use `with-selection-window' above.
Additionally, the above will lose its effect if you hide the window and
show it again: you'd need to do it via window-configuration-change-hook.
Other problem: if window-width is smaller than 80 (which I gather is
your target fill-column in the above code), you end up setting
a negative margin.

> It just feels hackish and wrong.  The right thing I feel is to use
> fill-column.

I'm not opposed to a patch that would let it obey fill-column
(optionally).  But it does beg the question: what if the window is
smaller than fill-column?  Should it then fill at the window's edge or
should it continue as if truncate-lines is set?


        Stefan



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: fill length of visual line mode
  2014-10-03 21:19   ` Johan Bockgård
@ 2014-10-04  7:07     ` Eli Zaretskii
  2014-10-04 17:16       ` Johan Bockgård
  0 siblings, 1 reply; 13+ messages in thread
From: Eli Zaretskii @ 2014-10-04  7:07 UTC (permalink / raw)
  To: Johan Bockgård; +Cc: emacs-devel

> From: Johan Bockgård <bojohan@gnu.org>
> Date: Fri, 03 Oct 2014 23:19:39 +0200
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> >> From: Ivan Kanis <ivan@kanis.fr>
> >> Date: Thu, 02 Oct 2014 09:48:12 +0200
> >> 
> >> I just enabled visual line mode today. I have started using it to
> >> display gnus article. I noticed that the fill happens at the width of
> >> the Emacs window. I set fill-column to 70 and I was expecting it to wrap
> >> there.
> >
> > That's not how word-wrap was designed and implemented.  It works more
> > like Web browsers, i.e. it wraps at the window edge.
> 
> The original word wrap patch by Kim did support wrapping at a specified
> column, but this feature was removed when the code was integrated into
> Emacs.

If so, bringing that back should be easier, as the code to do that is
probably archived somewhere.




^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: fill length of visual line mode
  2014-10-03 21:20     ` Stefan Monnier
@ 2014-10-04  9:58       ` Harald Hanche-Olsen
  2014-10-04 15:45         ` Drew Adams
  2014-10-04 14:23       ` Ivan Kanis
  1 sibling, 1 reply; 13+ messages in thread
From: Harald Hanche-Olsen @ 2014-10-04  9:58 UTC (permalink / raw)
  To: emacs-devel

[Stefan Monnier <monnier@iro.umontreal.ca> (2014-10-03 21:20:07 UTC)]

> I'm not opposed to a patch that would let it obey fill-column
> (optionally).  But it does beg the question: what if the window is
> smaller than fill-column?  Should it then fill at the window's edge or
> should it continue as if truncate-lines is set?

Filling at the window's edge is the only reasonable option, IMO.

The behaviour of web browsers was mentioned earlier. But you have the
CSS property max-width to modify that. I have – and frequently use – a
bookmarklet that lets me set the max-width property on the body
element in order to improve readability. It beats adjusting the
browser window itself.

Perhaps emacs could have a variable max-fill-column which, when set,
could govern visual line mode in this way? If set to t, it would mean
use the value of fill-column. Or if set to a number, ignore
fill-column and use the number itself. It shouldn't be allowed to
override fill-column in the other use cases, though. Perhaps
visual-line-max-fill-column would be a better name, if perhaps a bit
unwieldy.

– Harald



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: fill length of visual line mode
  2014-10-03 21:20     ` Stefan Monnier
  2014-10-04  9:58       ` Harald Hanche-Olsen
@ 2014-10-04 14:23       ` Ivan Kanis
  2014-10-04 22:25         ` Stefan Monnier
  1 sibling, 1 reply; 13+ messages in thread
From: Ivan Kanis @ 2014-10-04 14:23 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Eli Zaretskii, Emacs Development List

October, 03 at 17:20 Stefan wrote:

Hi Stefan,

Let's forget about the code I posted. It's a stupid hack that works for
me.

>> It just feels hackish and wrong.  The right thing I feel is to use
>> fill-column.
>
> But it does beg the question: what if the window is smaller than
> fill-column? Should it then fill at the window's edge or should it
> continue as if truncate-lines is set?

I didn't think of that. I bet users will want either. So a variable
will say what to do.
-- 
Program load too heavy for processor to lift.
    -- BOFH excuse #30



^ permalink raw reply	[flat|nested] 13+ messages in thread

* RE: fill length of visual line mode
  2014-10-04  9:58       ` Harald Hanche-Olsen
@ 2014-10-04 15:45         ` Drew Adams
  0 siblings, 0 replies; 13+ messages in thread
From: Drew Adams @ 2014-10-04 15:45 UTC (permalink / raw)
  To: Harald Hanche-Olsen, emacs-devel

> Perhaps emacs could have a variable max-fill-column which, when set,
> could govern visual line mode in this way? If set to t, it would
> mean use the value of fill-column. Or if set to a number, ignore
> fill-column and use the number itself. It shouldn't be allowed to
> override fill-column in the other use cases, though. Perhaps
> visual-line-max-fill-column would be a better name, if perhaps a bit
> unwieldy.

If it is specific to visual lines then yes of course, "visual-line"
(or similar) should be in the name.  Users should not be able to
get the impression, by looking only at the name, that this has
something to do with `fill-column' generally.



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: fill length of visual line mode
  2014-10-04  7:07     ` Eli Zaretskii
@ 2014-10-04 17:16       ` Johan Bockgård
  0 siblings, 0 replies; 13+ messages in thread
From: Johan Bockgård @ 2014-10-04 17:16 UTC (permalink / raw)
  To: emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

>> From: Johan Bockgård <bojohan@gnu.org>
>> Date: Fri, 03 Oct 2014 23:19:39 +0200
>> 
>> The original word wrap patch by Kim did support wrapping at a specified
>> column, but this feature was removed when the code was integrated into
>> Emacs.
>
> If so, bringing that back should be easier, as the code to do that is
> probably archived somewhere.

http://lists.gnu.org/archive/html/emacs-devel/2005-07/msg01112.html

http://lists.gnu.org/archive/html/emacs-devel/2008-06/msg01544.html



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: fill length of visual line mode
  2014-10-04 14:23       ` Ivan Kanis
@ 2014-10-04 22:25         ` Stefan Monnier
  2014-10-05  7:59           ` Ivan Kanis
  0 siblings, 1 reply; 13+ messages in thread
From: Stefan Monnier @ 2014-10-04 22:25 UTC (permalink / raw)
  To: Ivan Kanis; +Cc: Eli Zaretskii, Emacs Development List

> Let's forget about the code I posted. It's a stupid hack that works for me.
>>> It just feels hackish and wrong.  The right thing I feel is to use
>>> fill-column.
>> But it does beg the question: what if the window is smaller than
>> fill-column? Should it then fill at the window's edge or should it
>> continue as if truncate-lines is set?
> I didn't think of that. I bet users will want either. So a variable
> will say what to do.

I think pursuing the window-configuration-change-hook path is actually
a good idea: if we can get the desired behavior via Elisp code, it's
generally preferable (the C code is hairy enough as it is).  It also
makes it easier to offer configurability (e.g. to choose whether to
center the visible text in the window, or not).


        Stefan



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: fill length of visual line mode
  2014-10-04 22:25         ` Stefan Monnier
@ 2014-10-05  7:59           ` Ivan Kanis
  0 siblings, 0 replies; 13+ messages in thread
From: Ivan Kanis @ 2014-10-05  7:59 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Eli Zaretskii, Emacs Development List

October, 04 at 18:25 Stefan wrote:

>> Let's forget about the code I posted. It's a stupid hack that works for me.
>>>> It just feels hackish and wrong.  The right thing I feel is to use
>>>> fill-column.
>>> But it does beg the question: what if the window is smaller than
>>> fill-column? Should it then fill at the window's edge or should it
>>> continue as if truncate-lines is set?
>> I didn't think of that. I bet users will want either. So a variable
>> will say what to do.
>
> I think pursuing the window-configuration-change-hook path is actually
> a good idea: if we can get the desired behavior via Elisp code, it's
> generally preferable (the C code is hairy enough as it is).  It also
> makes it easier to offer configurability (e.g. to choose whether to
> center the visible text in the window, or not).

OK. I won't do it straight away as the gnus hack is sufficient for me
for now. I am planning to use visual line mode for org in the future. If
I do it I will revisit your suggestions to write some elisp that can be
added to Emacs proper.

Ivan
-- 
Only two things are infinite, the universe and human stupidity, and
I'm not sure about the former.
    -- Albert Einstein



^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2014-10-05  7:59 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-10-02  7:48 fill length of visual line mode Ivan Kanis
2014-10-02 15:16 ` Eli Zaretskii
2014-10-03 21:19   ` Johan Bockgård
2014-10-04  7:07     ` Eli Zaretskii
2014-10-04 17:16       ` Johan Bockgård
2014-10-02 15:50 ` Glenn Morris
2014-10-03 20:39   ` Ivan Kanis
2014-10-03 21:20     ` Stefan Monnier
2014-10-04  9:58       ` Harald Hanche-Olsen
2014-10-04 15:45         ` Drew Adams
2014-10-04 14:23       ` Ivan Kanis
2014-10-04 22:25         ` Stefan Monnier
2014-10-05  7:59           ` Ivan Kanis

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).