Re: Wanted editor feature: synchronized horizontal split

Amit Aronovitch <[email protected]> Sun, 26 Sep 2010 13:23:52 +0200
Newsgroups gmane.culture.hackers.israel
Message-ID <[email protected]>
--005045016778ba190d049127d8fb
Content-Type: text/plain; charset=ISO-8859-1

On Sun, Sep 26, 2010 at 12:49 PM, Shlomi Fish <shlomif-ik1l9ssToec+JF/[email protected]> wrote:

> Hi Amit,
>
> On Saturday 25 September 2010 17:01:39 Amit Aronovitch wrote:
> > When reading (or editing) long textual documents, especially source code,
> > you always have to compromise between viewing larger portions of the code
> > at once (to get a wider context), and having reasonably sized fonts (long
> > documents take long time to read, you wouldn't want to stress your eyes
> > too much).
> > Since code typically has a fixed, relatively short, line width, there is
> no
> > point in stretching your window horizontally. Only vertical stretching
> > helps, and you are limited by the height of your screen.
> > The problem became even worse with the increased popularity of
> wide-screens
> > (for a given screen area, you now get shorter screens, and either have to
> > settle for less lines to display or strain the eyes with smaller sized
> > fonts).
> >
> > I think that the best way to use screen area in modern wide screens would
> > be to "cut" a "virtual" tall window into two halves and have them
> > displayed side by side. In other words, have a wide window for your
> > editor, which is horizontally split in two halves, where lines from the
> > top of the right pane scroll into the bottom of the left pane and vice
> > versa.
> > In Emacs I can simulate a crude version of this by carefully resizing and
> > scrolling two views of the same buffer, such that the top line of the
> right
> > view follows the bottom line of the left one
> > (see screenshot in  http://dl.dropbox.com/u/6960989/horizsplit.png ),
> and
> > then turn on "scroll-all-mode" to force synchronized scrolling.
> > However:
> > * It is a bit tricky to set up.
> > * You loose synchronization if you try to scroll beyond the top or bottom
> > of your file.
> > * I would like to have a single scrollbar, cursor and status line, rather
> > than two (which is confusing).
> > (well, maybe there is a special emacs mode for what I want, but I do not
> > know of such).
> >
> > Now the question:
> > Is such a feature available in your favorite editor? Do you know of a
> good
> > editor that supports this?
>
> It is available in Vim using the ":setlocal scrollbind" feature (tried it
> now
> and it works). Here is the excerpt from the Vim FAQ about it:
>
> {{{
> 10.8. How do I scroll two or more buffers simultaneously?
>
> You can set the "scrollbind" option for each of the buffer to scroll them
> simultaneously.
>
> For more information, read
>
>    :help 'scrollbind'
>    :help scroll-binding
>    :help 'scrollopt'
> }}}
>
> And Vim/gvim is my favourite editor. :-)
>
> In emacs, if you bind the views, and then scroll up until the left half
reaches the top, then further scroll-ups would only scroll the right half
and you lose sync. Similar thing happens when the right half reaches the
bottom.
Does Vim avoid this problem?
Also, what about scrollbars and cursors - do you get a single one (as I
want) or two of each (as I get in emacs)?

Finally, is there an emacs-like keyboard binding for Vim (the reverse of
emacs' "viper" mode)?

   AA

--005045016778ba190d049127d8fb
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable




<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/htm=
l4/strict.dtd">
<html>
<head>
</head>







<body style=3D"background-color: #fff;">
<span style=3D"display:none">&nbsp;</span>

<!--~-|**|PrettyHtmlStartT|**|-~-->
<div id=3D"ygrp-mlmsg" style=3D"position:relative;">
  <div id=3D"ygrp-msg" style=3D"z-index: 1;">
<!--~-|**|PrettyHtmlEndT|**|-~-->

    <div id=3D"ygrp-text" >
=20=20=20=20=20=20
=20=20=20=20=20=20
      <p><div dir=3D"ltr"><br><div class=3D"gmail_quote">On Sun, Sep 26, 20=
10 at 12:49 PM, Shlomi Fish <span dir=3D"ltr">&lt;<a href=3D"mailto:shlomif=
@iglu.org.il">shlomif-ik1l9ssToec+JF/[email protected]</a>&gt;</span> wrote:<br><blockquote clas=
s=3D"gmail_quote" style=3D"border-left: 1px solid rgb(204, 204, 204);">
Hi Amit,<br>
<div><div></div><div class=3D"h5"><br>
On Saturday 25 September 2010 17:01:39 Amit Aronovitch wrote:<br>
&gt; When reading (or editing) long textual documents, especially source co=
de,<br>
&gt; you always have to compromise between viewing larger portions of the c=
ode<br>
&gt; at once (to get a wider context), and having reasonably sized fonts (l=
ong<br>
&gt; documents take long time to read, you wouldn&#39;t want to stress your=
 eyes<br>
&gt; too much).<br>
&gt; Since code typically has a fixed, relatively short, line width, there =
is no<br>
&gt; point in stretching your window horizontally. Only vertical stretching=
<br>
&gt; helps, and you are limited by the height of your screen.<br>
&gt; The problem became even worse with the increased popularity of wide-sc=
reens<br>
&gt; (for a given screen area, you now get shorter screens, and either have=
 to<br>
&gt; settle for less lines to display or strain the eyes with smaller sized=
<br>
&gt; fonts).<br>
&gt;<br>
&gt; I think that the best way to use screen area in modern wide screens wo=
uld<br>
&gt; be to &quot;cut&quot; a &quot;virtual&quot; tall window into two halve=
s and have them<br>
&gt; displayed side by side. In other words, have a wide window for your<br=
>
&gt; editor, which is horizontally split in two halves, where lines from th=
e<br>
&gt; top of the right pane scroll into the bottom of the left pane and vice=
<br>
&gt; versa.<br>
&gt; In Emacs I can simulate a crude version of this by carefully resizing =
and<br>
&gt; scrolling two views of the same buffer, such that the top line of the =
right<br>
&gt; view follows the bottom line of the left one<br>
&gt; (see screenshot in =A0<a href=3D"http://dl.dropbox.com/u/6960989/horiz=
split.png" target=3D"_blank">http://dl.dropbox.com/u/6960989/horizsplit.png=
</a> ), and<br>
&gt; then turn on &quot;scroll-all-mode&quot; to force synchronized scrolli=
ng.<br>
&gt; However:<br>
&gt; * It is a bit tricky to set up.<br>
&gt; * You loose synchronization if you try to scroll beyond the top or bot=
tom<br>
&gt; of your file.<br>
&gt; * I would like to have a single scrollbar, cursor and status line, rat=
her<br>
&gt; than two (which is confusing).<br>
&gt; (well, maybe there is a special emacs mode for what I want, but I do n=
ot<br>
&gt; know of such).<br>
&gt;<br>
&gt; Now the question:<br>
&gt; Is such a feature available in your favorite editor? Do you know of a =
good<br>
&gt; editor that supports this?<br>
<br>
</div></div>It is available in Vim using the &quot;:setlocal scrollbind&quo=
t; feature (tried it now<br>
and it works). Here is the excerpt from the Vim FAQ about it:<br>
<br>
{{{<br>
10.8. How do I scroll two or more buffers simultaneously?<br>
<br>
You can set the &quot;scrollbind&quot; option for each of the buffer to scr=
oll them<br>
simultaneously.<br>
<br>
For more information, read<br>
<br>
 =A0 =A0:help &#39;scrollbind&#39;<br>
 =A0 =A0:help scroll-binding<br>
 =A0 =A0:help &#39;scrollopt&#39;<br>
}}}<br>
<br>
And Vim/gvim is my favourite editor. :-)<br><br></blockquote><div>In emacs,=
 if you bind the views, and then scroll up until the left half reaches the =
top, then further scroll-ups would only scroll the right half and you lose =
sync. Similar thing happens when the right half reaches the bottom.<br>
Does Vim avoid this problem?<br>Also, what about scrollbars and cursors - d=
o you get a single one (as I want) or two of each (as I get in emacs)?<br><=
br>Finally, is there an emacs-like keyboard binding for Vim (the reverse of=
 emacs&#39; &quot;viper&quot; mode)?<br>
<br>=A0=A0 AA<br><br></div></div></div>
</p>

    </div>
=20=20=20=20=20

    <!--~-|**|PrettyHtmlStart|**|-~-->
    <div style=3D"color: #fff; height: 0;">__._,_.___</div>

=20=20=20=20=20=20=20=20
=20=20
=20=20=20
    <div id=3D"ygrp-actbar" style=3D"clear: both; margin-bottom: 10px; whit=
e-space: nowrap; color: #666; padding-top: 15px;">
      <div>
        <a href=3D"mailto:[email protected]?subject=3DRe: [hackers-il] W=
anted editor feature: synchronized horizontal split" style=3D"margin-right:=
 0; padding-right: 0;">
	  Reply to <span style=3D"font-weight: 700;">sender</span></a> |
        <a href=3D"mailto:[email protected]?subject=3DRe: [hackers=
-il] Wanted editor feature: synchronized horizontal split">
	  Reply to <span style=3D"font-weight: 700;">group</span></a> |
        	  <a href=3D"http://groups.yahoo.com/group/hackers-il/post;_ylc=3D=
X3oDMTJwMTJsNHZiBF9TAzk3MzU5NzE0BGdycElkAzE4NTczMzIEZ3Jwc3BJZAMxNzA1MDA2NzY=
0BG1zZ0lkAzUxMzYEc2VjA2Z0cgRzbGsDcnBseQRzdGltZQMxMjg1NTAwNTU4?act=3Dreply&m=
essageNum=3D5136">Reply <span style=3D"font-weight: 700;">via web post</spa=
n></a> |
            	<a href=3D"http://groups.yahoo.com/group/hackers-il/post;_ylc=
=3DX3oDMTJlNWtuYm5xBF9TAzk3MzU5NzE0BGdycElkAzE4NTczMzIEZ3Jwc3BJZAMxNzA1MDA2=
NzY0BHNlYwNmdHIEc2xrA250cGMEc3RpbWUDMTI4NTUwMDU1OA--" style=3D"font-weight:=
 700;">Start a New Topic</a>
      </div>

                <a href=3D"http://groups.yahoo.com/group/hackers-il/message=
/5134;_ylc=3DX3oDMTM0MTN0dHBrBF9TAzk3MzU5NzE0BGdycElkAzE4NTczMzIEZ3Jwc3BJZA=
MxNzA1MDA2NzY0BG1zZ0lkAzUxMzYEc2VjA2Z0cgRzbGsDdnRwYwRzdGltZQMxMjg1NTAwNTU4B=
HRwY0lkAzUxMzQ-">Messages in this topic</a>
          (<span style=3D"font-weight: 700;">3</span>)
          </div>=20
<!------- Start Nav Bar ------>

<!-- |**|begin egp html banner|**| -->
<div id=3D"ygrp-vital" style=3D"background-color: #e0ecee; font-family: Ver=
dana; font-size: 10px; margin-bottom: 10px; padding: 10px;">
      <span id=3D"vithd" style=3D"font-weight: bold; color: #333; text-tran=
sform: uppercase; ">Recent Activity:</span>

    <ul style=3D"list-style-type: none; margin: 0; padding: 0; display: inl=
ine;">
                                                    </ul>
=20=20=20=20
  <div style=3D"clear: both; padding-top: 2px; color: #1e66ae;">
    <a href=3D"http://groups.yahoo.com/group/hackers-il;_ylc=3DX3oDMTJlNGJu=
dTJhBF9TAzk3MzU5NzE0BGdycElkAzE4NTczMzIEZ3Jwc3BJZAMxNzA1MDA2NzY0BHNlYwN2dGw=
Ec2xrA3ZnaHAEc3RpbWUDMTI4NTUwMDU1OA--" style=3D"text-decoration: none;">Vis=
it Your Group</a>
  </div>
</div>

=20=20
<div id=3D"ft" style=3D"font-family: Arial; font-size: 11px; margin-top: 5p=
x; padding: 0 2px 0 0; clear: both;">
  <a href=3D"http://groups.yahoo.com/;_ylc=3DX3oDMTJkYWJ0dTNuBF9TAzk3NDc2NT=
kwBGdycElkAzE4NTczMzIEZ3Jwc3BJZAMxNzA1MDA2NzY0BHNlYwNmdHIEc2xrA2dmcARzdGltZ=
QMxMjg1NTAwNTU4" style=3D"float: left;"><img src=3D"http://l.yimg.com/a/i/u=
s/yg/logo/us.gif" height=3D"15" width=3D"137" alt=3D"Yahoo! Groups" style=
=3D"border: 0;"/></a>
  <div style=3D"color: #747575; float: right;">Switch to: <a href=3D"mailto=
:[email protected]?subject=3DChange Delivery Format: T=
raditional" style=3D"text-decoration: none;">Text-Only</a>, <a href=3D"mail=
to:[email protected]?subject=3DEmail Delivery: Digest" clas=
s=3D"margin-rt" style=3D"text-decoration: none;">Daily Digest</a> &bull; <a=
 href=3D"mailto:[email protected]?subject=3DUnsubscrib=
e" style=3D"text-decoration: none;">Unsubscribe</a> &bull; <a href=3D"http:=
//docs.yahoo.com/info/terms/" style=3D"text-decoration: none;">Terms of Use=
</a></div>
</div>

<!-- |**|end egp html banner|**| -->

  </div> <!-- ygrp-msg -->

  <!-- Sponsor -->
  <!-- |**|begin egp html banner|**| -->
  <div id=3D"ygrp-sponsor" style=3D"width:160px; float:right; clear:none; m=
argin:0 0 25px 0; background: #fff;">

<!-- Start Recommendations -->
<div id=3D"ygrp-reco">
     </div>
<!-- End Recommendations -->



  </div>   <!-- |**|end egp html banner|**| -->

  <div style=3D"clear:both; color: #FFF; font-size:1px;">.</div>
</div>

  <img src=3D"http://geo.yahoo.com/serv?s=3D97359714/grpId=3D1857332/grpspI=
d=3D1705006764/msgId=3D5136/stime=3D1285500558/nc1=3D1/nc2=3D2/nc3=3D3" wid=
th=3D"1" height=3D"1"> <br>

<div style=3D"color: #fff; height: 0;">__,_._,___</div>
<!--~-|**|PrettyHtmlEnd|**|-~-->

</body>

<!--~-|**|PrettyHtmlStart|**|-~-->
<head>
  <style type=3D"text/css">
  <!--
  #ygrp-mkp {
  border: 1px solid #d8d8d8;
  font-family: Arial;
  margin: 10px 0;
  padding: 0 10px;
}

#ygrp-mkp hr {
  border: 1px solid #d8d8d8;
}

#ygrp-mkp #hd {
  color: #628c2a;
  font-size: 85%;
  font-weight: 700;
  line-height: 122%;
  margin: 10px 0;
}

#ygrp-mkp #ads {
  margin-bottom: 10px;
}

#ygrp-mkp .ad {
  padding: 0 0;
}

#ygrp-mkp .ad p {
  margin: 0;
}

#ygrp-mkp .ad a {
  color: #0000ff;
  text-decoration: none;
}
  #ygrp-sponsor #ygrp-lc {
  font-family: Arial;
}

#ygrp-sponsor #ygrp-lc #hd {
  margin: 10px 0px;
  font-weight: 700;
  font-size: 78%;
  line-height: 122%;
}

#ygrp-sponsor #ygrp-lc .ad {
  margin-bottom: 10px;
  padding: 0 0;
}

  a {
    color: #1e66ae;
  }

  #actions {
    font-family: Verdana;
    font-size: 11px;
    padding: 10px 0;
  }

  #activity {
    background-color: #e0ecee;
    float: left;
    font-family: Verdana;
    font-size: 10px;
    padding: 10px;
  }

  #activity span {
    font-weight: 700;
  }

  #activity span:first-child {
    text-transform: uppercase;
  }

  #activity span a {
    color: #5085b6;
    text-decoration: none;
  }

  #activity span span {
    color: #ff7900;
  }

  #activity span .underline {
    text-decoration: underline;
  }

  .attach {
    clear: both;
    display: table;
    font-family: Arial;
    font-size: 12px;
    padding: 10px 0;
    width: 400px;
  }

  .attach div a {
    text-decoration: none;
  }

  .attach img {
    border: none;
    padding-right: 5px;
  }

  .attach label {
    display: block;
    margin-bottom: 5px;
  }

  .attach label a {
    text-decoration: none;
  }
=20=20
  blockquote {
    margin: 0 0 0 4px;
  }

  .bold {
    font-family: Arial;
    font-size: 13px;
    font-weight: 700;
  }

  .bold a {
    text-decoration: none;
  }

  dd.last p a {
    font-family: Verdana;
    font-weight: 700;
  }

  dd.last p span {
    margin-right: 10px;
    font-family: Verdana;
    font-weight: 700;
  }

  dd.last p span.yshortcuts {
    margin-right: 0;
  }

  div.attach-table div div a {
    text-decoration: none;
  }

  div.attach-table {
    width: 400px;
  }

  div.file-title a, div.file-title a:active, div.file-title a:hover, div.fi=
le-title a:visited {
    text-decoration: none;
  }

  div.photo-title a, div.photo-title a:active, div.photo-title a:hover, div=
.photo-title a:visited {
    text-decoration: none;
  }

  div#ygrp-mlmsg #ygrp-msg p a span.yshortcuts {
    font-family: Verdana;
    font-size: 10px;
    font-weight: normal;
  }

  .green {
    color: #628c2a;
  }

  .MsoNormal {
    margin: 0 0 0 0;
  }

  o {
    font-size: 0;
  }

  #photos div {
    float: left;
    width: 72px;
  }

  #photos div div {
    border: 1px solid #666666;
    height: 62px;
    overflow: hidden;
    width: 62px;
  }

  #photos div label {
    color: #666666;
    font-size: 10px;
    overflow: hidden;
    text-align: center;
    white-space: nowrap;
    width: 64px;
  }

  #reco-category {
    font-size: 77%;
  }

  #reco-desc {
    font-size: 77%;
  }

  .replbq {
    margin: 4px;
  }

  #ygrp-actbar div a:first-child {
   /* border-right: 0px solid #000;*/
    margin-right: 2px;
    padding-right: 5px;
  }

  #ygrp-mlmsg {
    font-size: 13px;
    font-family: Arial, helvetica,clean, sans-serif;
    *font-size: small;
    *font: x-small;
  }

  #ygrp-mlmsg table {
    font-size: inherit;
    font: 100%;
  }

  #ygrp-mlmsg select, input, textarea {
    font: 99% Arial, Helvetica, clean, sans-serif;
  }

  #ygrp-mlmsg pre, code {
    font:115% monospace;
    *font-size:100%;
  }

  #ygrp-mlmsg * {
    line-height: 1.22em;
  }

  #ygrp-mlmsg #logo {
    padding-bottom: 10px;
  }

  #ygrp-mlmsg a {
    color: #1E66AE;
  }

  #ygrp-msg p a {
    font-family: Verdana;
  }

  #ygrp-msg p#attach-count span {
    color: #1E66AE;
    font-weight: 700;
  }

  #ygrp-reco #reco-head {
    color: #ff7900;
    font-weight: 700;
  }

  #ygrp-reco {
    margin-bottom: 20px;
    padding: 0px;
  }

  #ygrp-sponsor #ov li a {
    font-size: 130%;
    text-decoration: none;
  }

  #ygrp-sponsor #ov li {
    font-size: 77%;
    list-style-type: square;
    padding: 6px 0;
  }=20

  #ygrp-sponsor #ov ul {
    margin: 0;
    padding: 0 0 0 8px;
  }

  #ygrp-text {
    font-family: Georgia;
  }

  #ygrp-text p {
    margin: 0 0 1em 0;
  }

  #ygrp-text tt {
    font-size: 120%;
  }

  #ygrp-vital ul li:last-child {
    border-right: none !important;=20
  }=20
  -->
  </style>
</head>

<!--~-|**|PrettyHtmlEnd|**|-~-->
</html>
<!-- end group email -->


--005045016778ba190d049127d8fb--