r2rtf
r2rtf copied to clipboard
Prevent `strwidth()` and `par()` calls from leaking graphics devices
Fixes #227
This is new try (after PR #228) to fix the issue reported in #227 where calls to graphics::strwidth() and graphics::par() unintentionally generate Rplots.pdf files in some environments due to opening a new default graphics device that is never closed.
The discussion in that PR was very helpful in getting this "more proper" solution.
- Add a
with_graphics_device()helper to rungraphics::strwidth()/graphics::par()without implicitly leaving the default device open by opening a null-output device only when needed and closing it on exit. - Refactor code under
R/andtests/to use the helper.
Performance comparison:
microbenchmark::microbenchmark(
r2rtf:::with_graphics_device(graphics::strwidth("Hello world!", units = "inches", cex = 1, font = 1, family = "sans")),
graphics::strwidth("Hello world!", units = "inches", cex = 1, font = 1, family = "sans"),
times = 10000
)
#> min lq mean median uq max neval cld
#> 4.305 4.715 5.132995 5.002 5.371 33.579 10000 a
#> 1.968 2.214 2.418569 2.337 2.501 26.855 10000 b
Note that changing this might affect some strwidth() calculation results slightly.