Ralf Goertz
2017-Aug-28 07:33 UTC
[Rd] patch: automatically adjust width option when terminal is resized
Hi, I guess there have been discussions about this in the past and from what I understood hooking an R-function to facilitate automatic adjustment is problematic. So why not doing it like this: --- R-3.4.1/src/unix/sys-std.c 2017-03-24 00:03:59.000000000 +0100 +++ R-3.4.1/src/unix/sys-std.patched.c 2017-08-28 09:16:02.714204023 +0200 @@ -1005,6 +1005,9 @@ // introduced in readline 4.0: only used for >= 6.3 #ifdef HAVE_RL_RESIZE_TERMINAL rl_resize_terminal(); + int rl_height, rl_width; + rl_get_screen_size(&rl_height,&rl_width); + R_SetOptionWidth(rl_width); #endif } #endif I tried it out and it works perfectly here. Of course there should be an option to switch this on and off but you get the idea. What do you think? Thanks, Ralf
Ralf Goertz
2017-Sep-01 08:23 UTC
[Rd] patch: automatically adjust width option when terminal is resized
Am Mon, 28 Aug 2017 09:33:31 +0200 schrieb Ralf Goertz <r_goertz at web.de>: Hello, me again> Hi, > > I guess there have been discussions about this in the past and from > what I understood hooking an R-function to facilitate automatic > adjustment is problematic. So why not doing it like this:would anybody care to comment? I think it is quite important to have an automatic adjustment of R's idea of the width of its terminal window. I quite often find myself in the situation that I started R in its own (wide) xterm. Then I look at some data frame or vector like this (using small width here in order to stay within the ususal width of a text posting):> (r=rnorm(20))[1] 0.05672115 0.59047528 0.41337747 0.01737960 -0.78133482 [6] 0.49218494 -0.78793312 -1.26125820 0.56748784 0.65725277 [11] -0.04419487 0.14463142 -0.48613097 0.42789592 1.22424913 [16] 0.43272842 -0.70089673 0.14313221 -0.97159181 -1.29164930 Then I want to plot something> hist(r)Because the plot window and the xterm don't fit side by side I resize the xterm to be smaller. Then I want to see the data again:> r[1] 0.05672115 0.59047528 0.41337747 0.01737960 - 0.78133482 [6] 0.49218494 -0.78793312 -1.26125820 0.56748784 0.65725277 [11] -0.04419487 0.14463142 -0.48613097 0.42789592 1.22424913 [16] 0.43272842 -0.70089673 0.14313221 -0.97159181 - 1.29164930 This is ugly and hard to read. Many good programs like vim adjust their internal width representation automatically. Why shouldn't R do the same? It seems quite easy, at least when readline is used: --- R-3.4.1/src/unix/sys-std.c 2017-03-24 00:03:59.000000000 +0100 +++ R-3.4.1/src/unix/sys-std.patched.c 2017-08-28 09:16:02.714204023 +0200 @@ -1005,6 +1005,9 @@ // introduced in readline 4.0: only used for >= 6.3 #ifdef HAVE_RL_RESIZE_TERMINAL rl_resize_terminal(); + int rl_height, rl_width; + rl_get_screen_size(&rl_height,&rl_width); + R_SetOptionWidth(rl_width); #endif } #endif> I tried it out and it works perfectly here. Of course there should be > an option to switch this on and off but you get the idea. What do you > think?It would be much appreciated if you considered it. Thanks Ralf
luke-tierney at uiowa.edu
2017-Sep-01 12:20 UTC
[Rd] patch: automatically adjust width option when terminal is resized
On Fri, 1 Sep 2017, Ralf Goertz wrote:> Am Mon, 28 Aug 2017 09:33:31 +0200 > schrieb Ralf Goertz <r_goertz at web.de>: > > > Hello, me again > >> Hi, >> >> I guess there have been discussions about this in the past and from >> what I understood hooking an R-function to facilitate automatic >> adjustment is problematic. So why not doing it like this: > > would anybody care to comment? I think it is quite important to have an > automatic adjustment of R's idea of the width of its terminal window. I > quite often find myself in the situation that I started R in its own > (wide) xterm. Then I look at some data frame or vector like this (using > small width here in order to stay within the ususal width of a text > posting): > >> (r=rnorm(20)) > [1] 0.05672115 0.59047528 0.41337747 0.01737960 -0.78133482 > [6] 0.49218494 -0.78793312 -1.26125820 0.56748784 0.65725277 > [11] -0.04419487 0.14463142 -0.48613097 0.42789592 1.22424913 > [16] 0.43272842 -0.70089673 0.14313221 -0.97159181 -1.29164930 > > > Then I want to plot something > >> hist(r) > > Because the plot window and the xterm don't fit side by side I resize > the xterm to be smaller. Then I want to see the data again: > >> r > [1] 0.05672115 0.59047528 0.41337747 0.01737960 - > 0.78133482 > [6] 0.49218494 -0.78793312 -1.26125820 0.56748784 > 0.65725277 > [11] -0.04419487 0.14463142 -0.48613097 0.42789592 > 1.22424913 > [16] 0.43272842 -0.70089673 0.14313221 -0.97159181 - > 1.29164930 > > This is ugly and hard to read. Many good programs like vim adjust their > internal width representation automatically. Why shouldn't R do the > same? It seems quite easy, at least when readline is used: > > > --- R-3.4.1/src/unix/sys-std.c 2017-03-24 00:03:59.000000000 +0100 > +++ R-3.4.1/src/unix/sys-std.patched.c 2017-08-28 09:16:02.714204023 > +0200 @@ -1005,6 +1005,9 @@ > // introduced in readline 4.0: only used for >= 6.3 > #ifdef HAVE_RL_RESIZE_TERMINAL > rl_resize_terminal(); > + int rl_height, rl_width; > + rl_get_screen_size(&rl_height,&rl_width); > + R_SetOptionWidth(rl_width); > #endif > } > #endifThe 'width' option affects more than printing to the console; it also affects, for example, printing to a file via sink() or capture.output(). So doing this unconditionally would not be a good idea. Making it available as an option for those who want it seems reasonable but still involves a lot more work than these three lines. It requires designing a protocol for enabling this feature, ideally in a way that can be made to work well on other interfaces (e.g. Windows, Mac, RStudio) as well, and it requires documenting all this in a sensible place. A more complete proposal might well be considered for adoption. Best, luke> >> I tried it out and it works perfectly here. Of course there should be >> an option to switch this on and off but you get the idea. What do you >> think? > > It would be much appreciated if you considered it. > > Thanks Ralf > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel >-- Luke Tierney Ralph E. Wareham Professor of Mathematical Sciences University of Iowa Phone: 319-335-3386 Department of Statistics and Fax: 319-335-3017 Actuarial Science 241 Schaeffer Hall email: luke-tierney at uiowa.edu Iowa City, IA 52242 WWW: http://www.stat.uiowa.edu