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
}
#endif
The '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