[ESS] how to make close-parens indent identically to close-brace?

Murat Tasan mmuurr at gmail.com
Wed Dec 10 21:34:57 CET 2014


The only oddity I've noticed when setting ess-close-paren-offset to '(0) is:

    some.function(arg1,
                  arg2
    )

    some.function(
        arg1,
        arg2
        )

, where I'd expect the close parens to offset to the "s" character's position.

I'd argue that version 2 is the more common case (especially with some
design paradigms, like Shiny's UI-construction methods, as described
here: http://shiny.rstudio.com/tutorial/lesson2/).

Cheers!

-m

On Wed, Dec 10, 2014 at 12:58 PM, Murat Tasan <mmuurr at gmail.com> wrote:
> Amaze!
>
> Thanks!
>
> -Murat
>
> On Mon, Dec 8, 2014 at 7:02 PM, Vitalie Spinu <spinuvit at gmail.com> wrote:
>>
>> I have just added a new indentation control variable
>> `ess-close-paren-offset`. This is the doc:
>>
>>      "Extra indentation for closing parenthesis.
>>    When a number, adjustment is made with respect to the opening
>>    parenthesis taking into account the value of
>>    `ess-arg-function-offset-new-line'. With N = 0:
>>
>>    some.function(arg1,
>>                  arg2
>>                  )
>>
>>    When list of of form '(N), where N is a number,
>>    adjust with respect to the indentation of the line containing an
>>    opening parenthesis. With N = 0:
>>
>>    {
>>        some.function(arg1,
>>                      arg2 = X
>>        )
>>    }
>>
>> You would probably like to set it to '(0).
>>
>>  Vitalie
>>
>>  >>> Murat Tasan on Mon, 8 Dec 2014 17:05:23 -0700 wrote:
>>
>>  > Ah, yeah, I hadn't thought of auto-insertion of closing braces (as I
>>  > always keep such auto-insertions off).
>>
>>  > The common style (closing all parens at end of expression) works fine
>>  > until one finds themselves n functions deep in nesting (where n is,
>>  > say, > 3).
>>  > Adding optional arguments during development then becomes a serious chore.
>>
>>  > This is particularly noticeable when using some R paradigms/frameworks
>>  > like Shiny, where nearly all presentation-control functions take
>>  > nothing but ... arguments, and where each argument itself is usually a
>>  > function that takes more ... arguments.
>>
>>  > Is the code behind ess-dont-vertically-align-closing-paren on a
>>  > development branch of ESS?
>>  > I'd love to give it a try :-)
>>
>>  > Cheers,
>>
>>  > -murat
>>
>>  > On Mon, Dec 8, 2014 at 4:50 PM, Vitalie Spinu <spinuvit at gmail.com> wrote:
>>  >>
>>  >> It could be added as there is now a separate treatment of closing paren
>>  >> (ess-calculate-indent--closing-paren). But I would be a bit cautious of
>>  >> that behavior. A widely accepted style is to leave closing parents at
>>  >> eol after the last statement.
>>  >>
>>  >> The biggest disadvantage of } is the interaction with the auto-insertion
>>  >> of closing }.  Whenever you type RET before the closing brace, {|}, you
>>  >> get indented at the beginning of line till you insert some ore text and
>>  >> re-indent. There was even a complaint on this list some time ago.
>>  >>
>>  >> As parenthesis are more common, I personally would be very annoyed by
>>  >> being indented to wrong place each time I insert a new line after an
>>  >> opening paren.
>>  >>
>>  >> Vitalie
>>  >>
>>  >>
>>  >> >>> Kevin Ushey on Sun, 7 Dec 2014 20:40:15 -0800 wrote:
>>  >>
>>  >> > Doh. Sorry, I lied -- that option was something that I had worked on
>>  >> > locally but didn't make it into ESS proper. But I recall Vitalie took
>>  >> > this work and allowed for this control... hopefully he will have a
>>  >> > response.
>>  >>
>>  >> > Sorry,
>>  >> > Kevin
>>  >>
>>  >> > On Sun, Dec 7, 2014 at 8:24 PM, Kevin Ushey <kevinushey at gmail.com> wrote:
>>  >> >> Hi Murat,
>>  >> >>
>>  >> >> There was a new option added for this recently -- see
>>  >> >> `ess-dont-vertically-align-closing-paren`. You can use `(setq
>>  >> >> ess-dont-vertically-align-closing-paren t)` to toggle it.
>>  >> >>
>>  >> >> FWIW, I have this in my `.emacs` to configure the ESS indentation to
>>  >> >> my liking; it should give you a starting place to configure for your
>>  >> >> own preferences.
>>  >> >>
>>  >> >> (setq ess-ac-R-argument-suffix " = ")
>>  >> >> (setq ess-use-auto-complete t)
>>  >> >> (add-hook 'ess-mode-hook
>>  >> >> (lambda ()
>>  >> >> (local-set-key (kbd "<s-return>") 'ess-eval-region-or-line-and-step)
>>  >> >> (show-paren-mode t)
>>  >> >> (setq ess-indent-level 2)
>>  >> >> (setq ess-first-continued-statement-offset 2)
>>  >> >> (setq ess-continued-statement-offset 0)
>>  >> >> (setq ess-arg-function-offset 2)
>>  >> >> (setq ess-arg-function-offset-new-line 2)
>>  >> >> (setq ess-dont-vertically-align-closing-paren t)
>>  >> >> ))
>>  >> >> (ess-toggle-underscore nil)
>>  >> >>
>>  >> >> Cheers,
>>  >> >> Kevin
>>  >> >>
>>  >> >> On Sun, Dec 7, 2014 at 6:53 PM, Murat Tasan <mmuurr at gmail.com> wrote:
>>  >> >>> Hi all ---
>>  >> >>>
>>  >> >>> Does anyone know how to force ESS to treat closing parentheses like
>>  >> >>> closing braces when writing multi-line statements?
>>  >> >>>
>>  >> >>> An example is:
>>  >> >>>
>>  >> >>> ## existing default indentation
>>  >> >>> list(
>>  >> >>> a = 1:10,
>>  >> >>> b = 10:1,
>>  >> >>> )
>>  >> >>>
>>  >> >>> But in such cases, where the open-parens is followed immediately by
>>  >> >>> whitespace/newline, I'd really like the indentation to be like braces.
>>  >> >>> I'd settle with just having the closing parens match up to the start
>>  >> >>> of the call, rather than the open-parens, though:
>>  >> >>>
>>  >> >>> ## treating parens a bit more like braces
>>  >> >>> list(
>>  >> >>> a = 1:10,
>>  >> >>> b = 10:1,
>>  >> >>> )
>>  >> >>>
>>  >> >>> Has anyone ever written such a modification for ESS?
>>  >> >>> (My Elisp is nowhere near sophisticated-enough to know how to specify
>>  >> >>> this type of rule myself :-/ )
>>  >> >>>
>>  >> >>> Cheers,
>>  >> >>>
>>  >> >>> -murat
>>  >> >>>
>>  >> >>> ______________________________________________
>>  >> >>> ESS-help at r-project.org mailing list
>>  >> >>> https://stat.ethz.ch/mailman/listinfo/ess-help>
>>  >> > ______________________________________________
>>  >> > ESS-help at r-project.org mailing list
>>  >> > https://stat.ethz.ch/mailman/listinfo/ess-help
>>
>>  > ______________________________________________
>>  > ESS-help at r-project.org mailing list
>>  > https://stat.ethz.ch/mailman/listinfo/ess-help



More information about the ESS-help mailing list