dominikh / go-mode.el

Emacs mode for the Go programming language
BSD 3-Clause "New" or "Revised" License
1.37k stars 209 forks source link

Make fill-paragraph work in multi-line back-quoted strings #386

Open ncw opened 3 years ago

ncw commented 3 years ago

It would be nice if fill-paragraph (ALT-Q on standard bindings) worked in multi-line back-quoted strings .

I use multi-line quotes like this to provide help

var help = `
Lots of nice long help text.

Spread out over lots of lines
`

And in editing that help for a terminal fill-paragraph would be super useful!

My current workaround is to drop into text-mode to do the fill-paragraph then return to go-mode.

I'll note that python-mode allows fill-paragraph in its equivalent triple quoted strings.

PS Thanks for writing go-mode - it is a great timesaver :-)

muirdm commented 3 years ago

@ncw can you try the above branch and see if it is what you want?

ncw commented 3 years ago

Before

package main

var info = `info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info`

After

package main

var info = `info info info info info info info info info info info
info info info info info info info info info info info info info info
info info info info info info info info info info info info info info
info info info info info info info info info info info info info info
info info info info info info info info info info info info info info
info info info info info info info info info info info info info info
info info info info info info`

All good :-)

However before

package main

var (
    info = `info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info`
)

after is not quite right

package main

var ( info = `info info info info info info info info info info info
    info info info info info info info info info info info info
    info info info info info info info info info info info info
    info info info info info info info info info info info info
    info info info info info info info info info info info info
    info info info info info info info info info info info info
    info info info info info info info info info info info info
    info info info info` )

Possibly the same problem

before

package main

var another = `this one is ok`
var info = `info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info info`

after

package main

var another = `this one is ok` var info = `info info info info info
info info info info info info info info info info info info info info
info info info info info info info info info info info info info info
info info info info info info info info info info info info info info
info info info info info info info info info info info info info info
info info info info info info info info info info info info info info
info info info info info info info info info info info info`

So nearly!

Thank you for working on this :-)

muirdm commented 3 years ago

Yes, it doesn't work when there is string content on the same line as the backticks. It only narrows the "paragraph" to beginning of line granularity. You can take a stab if you want.

ncw commented 3 years ago

Yes, it doesn't work when there is string content on the same line as the backticks. It only narrows the "paragraph" to beginning of line granularity.

I see

You can take a stab if you want.

I'm afraid I'm only a humble emacs user and have never delved into the magical elisp :-)

Your patch as-is is an improvement and would be useful to me :-)

dominikh commented 2 years ago

After b212a73c21a8b806f9764004397c1d03eb0b2e10, M-q will "work" in raw strings, in that it results in the same behavior as Muir's change did (https://github.com/dominikh/go-mode.el/issues/386#issuecomment-838785624) – which is better than nothing.

I'll look into making it work properly in a separate change.