# Multiline input and whitespace

**URL:** <https://discourse.julialang.org/t/multiline-input-and-whitespace/7020>\
**Category:** Internals & Design\
**Tags:** question\
**Created:** [November 12, 2017, 9:22am UTC](https://discourse.julialang.org/t/multiline-input-and-whitespace/7020 "2017-11-12T09:22:40Z")\
**Posts on this page:** 17\
**Page:** 1

<div class="post-metadata">

**Author:** ![Tamas\_Papp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamas_papp/32/25949_2.png) [@Tamas\_Papp](https://discourse.julialang.org/u/Tamas_Papp)\
**Post date:** [November 12, 2017, 9:22am UTC](https://discourse.julialang.org/t/multiline-input-and-whitespace/7020/1 "2017-11-12T09:22:40Z")

</div>

This issue came up when sending a function with a lot of blank lines in [julia-repl](https://github.com/tpapp/julia-repl/issues/14). It can be reproduced like this:

```julia
julia> function f()
       
       
ERROR: syntax: incomplete: premature end of input

```

ie 3x `RET` after `f()`. Is this a bug? Should Julia wait for the `end`, or does it give up after a while? Is the threshold for the latter well-defined?

---

<div class="post-metadata">

**Author:** ![bkamins](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bkamins/32/208538_2.png) [@bkamins](https://discourse.julialang.org/u/bkamins)\
**Post date:** [November 12, 2017, 9:37am UTC](https://discourse.julialang.org/t/multiline-input-and-whitespace/7020/2 "2017-11-12T09:37:24Z")

</div>

REPL seems to allow two newlines before deciding that the end of input is premature.  
I do not know if it is intended, but you can cheat it like this:

```julia
julia> [i for i in

       1:1]
1-element Array{Int64,1}:
 1

julia> [i for i in

       1:1]
1-element Array{Int64,1}:
 1

julia> [i for i in

       1:1]
1-element Array{Int64,1}:
 1

```

Here I obtained the second and third expression by going back the command history deleting `1:1]`, pressing two newlines, and reinserting `1:1]`. Adding three newlines produces an error.

---

<div class="post-metadata">

**Author:** ![Tamas\_Papp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamas_papp/32/25949_2.png) [@Tamas\_Papp](https://discourse.julialang.org/u/Tamas_Papp)\
**Post date:** [November 12, 2017, 9:46am UTC](https://discourse.julialang.org/t/multiline-input-and-whitespace/7020/3 "2017-11-12T09:46:13Z")

</div>

To clarify: the intent of this question is to establish whether this is intended behavior or a bug before opening an issue.

If this is intended, it should be documented (I could not find it, but perhaps I was not looking at the right place). That said, my life would be much easier if this was a considered a bug and got fixed accordingly, otherwise I will have to so some magic to remove newlines from code (but not strings etc).

---

<div class="post-metadata">

**Author:** ![mauro3](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mauro3/32/292_2.png) [@mauro3](https://discourse.julialang.org/u/mauro3)\
**Post date:** [November 12, 2017, 9:56am UTC](https://discourse.julialang.org/t/multiline-input-and-whitespace/7020/4 "2017-11-12T09:56:38Z")

</div>

As an aside, it would probably good to have a paste-mode. For this and also for pasting code including prompts.

---

<div class="post-metadata">

**Author:** ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)\
**Post date:** [November 12, 2017, 11:56am UTC](https://discourse.julialang.org/t/multiline-input-and-whitespace/7020/5 "2017-11-12T11:56:54Z")

</div>

There is a paste mode (bracket paste) which is automatically enabled when pasting (in most terminals). This can be opted into by plugin by sending the correct ansi sequence to the repl, see [https://cirw.in/blog/bracketed](https://cirw.in/blog/bracketed) paste.

---

<div class="post-metadata">

**Author:** ![mauro3](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mauro3/32/292_2.png) [@mauro3](https://discourse.julialang.org/u/mauro3)\
**Post date:** [November 12, 2017, 12:01pm UTC](https://discourse.julialang.org/t/multiline-input-and-whitespace/7020/6 "2017-11-12T12:01:27Z")

</div>

Corrected link [bracketed paste mode](https://cirw.in/blog/bracketed-paste)

Edit: Looks like emacs has some support for this [https://www.gnu.org/software/emacs/manual/html\_mono/efaq.html](https://www.gnu.org/software/emacs/manual/html_mono/efaq.html)

Edit edit: more links: [https://github.com/syl20bnr/spacemacs/issues/3064](https://github.com/syl20bnr/spacemacs/issues/3064), [EmacsWiki: bracketed-paste.el](https://www.emacswiki.org/emacs/bracketed-paste.el)

---

<div class="post-metadata">

**Author:** ![StefanKarpinski](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stefankarpinski/32/24_2.png) [@StefanKarpinski](https://discourse.julialang.org/u/StefanKarpinski)\
**Post date:** [November 13, 2017, 9:07pm UTC](https://discourse.julialang.org/t/multiline-input-and-whitespace/7020/7 "2017-11-13T21:07:10Z")

</div>

I think that @keno implemented this way back in the day and that it’s intentional. I’ve never used this feature personally, so I don’t really care if it stays or goes, but he may have more thoughts.

---

<div class="post-metadata">

**Author:** ![Keno](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/keno/32/285_2.png) [@Keno](https://discourse.julialang.org/u/Keno)\
**Post date:** [November 13, 2017, 9:31pm UTC](https://discourse.julialang.org/t/multiline-input-and-whitespace/7020/8 "2017-11-13T21:31:49Z")

</div>

Yes, it’s intentional. It’s there so people get a syntax error when they have incomplete sequences but don’t think they do. As was mentioned, use bracketed paste mode for pasting expressions.

---

<div class="post-metadata">

**Author:** ![StefanKarpinski](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/stefankarpinski/32/24_2.png) [@StefanKarpinski](https://discourse.julialang.org/u/StefanKarpinski)\
**Post date:** [November 13, 2017, 9:36pm UTC](https://discourse.julialang.org/t/multiline-input-and-whitespace/7020/9 "2017-11-13T21:36:28Z")

</div>

It does have the advantage that when someone gets frustrated and keeps hitting return, they eventually get an error and a new prompt instead of just a seemingly hung REPL.

---

<div class="post-metadata">

**Author:** ![Keno](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/keno/32/285_2.png) [@Keno](https://discourse.julialang.org/u/Keno)\
**Post date:** [November 13, 2017, 9:43pm UTC](https://discourse.julialang.org/t/multiline-input-and-whitespace/7020/10 "2017-11-13T21:43:17Z")

</div>

Yes, it’s the “angry user detection” heuristic. Note you can always press shift enter to get a literal newline.

---

<div class="post-metadata">

**Author:** ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)\
**Post date:** [November 13, 2017, 9:53pm UTC](https://discourse.julialang.org/t/multiline-input-and-whitespace/7020/11 "2017-11-13T21:53:50Z")

</div>

The shift+enter does not work for me. Does it work for anyone else?

---

<div class="post-metadata">

**Author:** ![rfourquet](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rfourquet/32/3610_2.png) [@rfourquet](https://discourse.julialang.org/u/rfourquet)\
**Post date:** [November 13, 2017, 9:55pm UTC](https://discourse.julialang.org/t/multiline-input-and-whitespace/7020/12 "2017-11-13T21:55:41Z")

</div>

I think Keno meant alt+enter.

---

<div class="post-metadata">

**Author:** ![Keno](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/keno/32/285_2.png) [@Keno](https://discourse.julialang.org/u/Keno)\
**Post date:** [November 13, 2017, 10:21pm UTC](https://discourse.julialang.org/t/multiline-input-and-whitespace/7020/13 "2017-11-13T22:21:44Z")

</div>

I did, yes. Thanks for the correction.

---

<div class="post-metadata">

**Author:** ![bkamins](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bkamins/32/208538_2.png) [@bkamins](https://discourse.julialang.org/u/bkamins)\
**Post date:** [November 13, 2017, 10:48pm UTC](https://discourse.julialang.org/t/multiline-input-and-whitespace/7020/14 "2017-11-13T22:48:19Z")

</div>

Unfortunately in Windows console alt+enter turns on full screen mode.

---

<div class="post-metadata">

**Author:** ![Tamas\_Papp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamas_papp/32/25949_2.png) [@Tamas\_Papp](https://discourse.julialang.org/u/Tamas_Papp)\
**Post date:** [November 14, 2017, 8:38am UTC](https://discourse.julialang.org/t/multiline-input-and-whitespace/7020/15 "2017-11-14T08:38:09Z")

</div>

Thanks. Bracketed paste solves my problems and I can see the rationale for this, so I am fine with it, just didn’t know about it.

But if I wanted to submit a PR documenting this (breaking out after 3 newlines, using Alt-Enter, mention bracketed paste mode), where should it go? [Workflow tips](https://docs.julialang.org/en/latest/manual/workflow-tips/#REPL-based-workflow-1)?

---

<div class="post-metadata">

**Author:** ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)\
**Post date:** [November 14, 2017, 12:29pm UTC](https://discourse.julialang.org/t/multiline-input-and-whitespace/7020/16 "2017-11-14T12:29:26Z")

</div>

It’s documented at [https://docs.julialang.org/en/stable/manual/interacting-with-julia/#Key-bindings-1](https://docs.julialang.org/en/stable/manual/interacting-with-julia/#Key-bindings-1)

---

<div class="post-metadata">

**Author:** ![Tamas\_Papp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamas_papp/32/25949_2.png) [@Tamas\_Papp](https://discourse.julialang.org/u/Tamas_Papp)\
**Post date:** [November 14, 2017, 12:33pm UTC](https://discourse.julialang.org/t/multiline-input-and-whitespace/7020/17 "2017-11-14T12:33:40Z")

</div>

`Meta-Enter` is indeed documented (thanks!), but I could not find the documentation for

1. bracketed paste mode, and
2. breaking out after 3 newlines

there. Are they somewhere else? If not, where should they go?
