[ESS] Indentation questions

Ista Zahn istazahn at gmail.com
Tue Nov 4 16:04:51 CET 2014


Hi again,

In the light of day I see my post from last night was rambling and
probably not clear or easy to answer. Sorry about that.

After sleeping on it I've got most of what I want with the following settings:

(setq ess-first-continued-statement-offset 2)
(setq ess-continued-statement-offset 0)
(setq ess-arg-function-offset-new-line 0)
(setq ess-arg-function-offset nil)

The final thing that I can't seem to nail down is this: I would really
like both "2's" in the following to be indented to the same level:

1 +
  mean(rnorm(100), na.rm=TRUE) +
  2 +
  mean(rnorm(100),
       na.rm=TRUE) +
         2

I really don't see what relevance putting the second argument to
"mean" on a separate line has for the way the subsequent continuation
line should be indented. Please, if you know how to get this to indent
as

1 +
  mean(rnorm(100), na.rm=TRUE) +
  2 +
  mean(rnorm(100),
       na.rm=TRUE) +
  2

I would be very grateful.

Thanks,
Ista

On Mon, Nov 3, 2014 at 10:36 PM, Ista Zahn <istazahn at gmail.com> wrote:
> Hi all,
>
> I've been unhappy with ESS indention for some time, and finally got
> around to trying to adjust it to my taste. It didn't go well, and so
> I'm turning to the collective wisdom of this list for help. NOTE: this is
> a long post, due mostly to my inability to state my issue clearly. A shorter
> version is at https://github.com/emacs-ess/ESS/issues/120
>
> OK, here goes; basically I like how Rstudio
> indents things, which mostly means lining up things up by reference to
> the calling function. Here are some examples (these examples also
> available at http://pastebin.com/y7UERhv6 in case your email client
> doesn't like to use a fixed-width font):
>
> #Rstudio:
> mean(rnorm(100,
>            mean = runif(1,
>                         1,
>                         10)),
>      na.rm=TRUE
> )
>
> # ESS
> mean(rnorm(100,
>            mean = runif(1,
>                1,
>                10)),
>      na.rm=TRUE
>      )
>
> The Rstudio version makes it easy to see which lines are arguments to
> which functions, and I'd like to set ESS to use a similar indentation
> style. I've fiddled with all the ess.*offset variables I can find, but
> I can't seem to find a satisfactory setting.
>
> The biggest annoyance is the indentation of continuation lines. There
> have been several posts about this including
> http://emacs.1067599.n5.nabble.com/indentation-of-ggplot-code-and-ess-13-09-02-td322315.html
> which suggests the following setting:
>
> (add-to-list 'ess-style-alist
>              '(my-style
>                (ess-indent-level . 4)
>                (ess-first-continued-statement-offset . 2)
>                (ess-continued-statement-offset . 0)
>                (ess-brace-offset . -4)
>                (ess-expression-offset . 4)
>                (ess-else-offset . 0)
>                (ess-close-brace-offset . 0)
>                (ess-brace-imaginary-offset . 0)
>                (ess-continued-brace-offset . 0)
>                (ess-arg-function-offset . 4)
>                (ess-arg-function-offset-new-line . '(4))
>                ))
>
>
> This does improve simple examples such as turning this:
>
> 1 +
>     2 +
>         3 +
>             4
>
> into
>
> 1 +
>   2 +
>   3 +
>   4
>
> though I would really like
>
> 1 +
> 2 +
> 3 +
> 4
>
> But it still leave more complicated things like
>
> mean(rnorm(100)) +
>   2 +
>   mean(rnorm(100,
>              mean = runif(1, 1, 10)), na.rm=TRUE) +
>                2 +
>                2
>
> I really don't understand why it makes sense to indent the "2's"
> differently depending on whether they come before or after the second
> "mean(rnorm(...". Compare this to the Rstudio indentation:
>
> mean(rnorm(100)) +
>   2 +
>   mean(rnorm(100,
>              mean = runif(1, 1, 10)), na.rm=TRUE) +
>   2 +
>   2
>
> Right. So I hate to be that guy, but seriously, how can I make ESS
> indentation behave more like Rstudio?
>
> Thanks,
> Ista



More information about the ESS-help mailing list