all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* fill-paragraph with pre and postfix
@ 2014-11-05  3:00 Jacob Gerlach
  2014-11-05 11:34 ` Alexis
  0 siblings, 1 reply; 9+ messages in thread
From: Jacob Gerlach @ 2014-11-05  3:00 UTC (permalink / raw)
  To: help-gnu-emacs

Hi list,

A project I'm working on uses a handling function for some command line
documentation:

  blk("  I want to format my documentation like this.                  ");

In order to match the convention for our project, it should include the two
leading spaces and be filled with spaces out to column 70.

The only built in functionality I could find to help with this is
"fill-prefix". Besides not handling the end of the line, I had some trouble
where fill-paragrah didn't seem to actually fill at fill-column like I
expected when I defined a custom prefix.

So my first question is - have I missed a built in capability to do this?
(Alternatively, is there a library in the repos?)

Assuming the answer is no, I set out to write a function that would take a
paragraph of text, fill the text, and wrap it in the function, but I ran in
to some difficulties:

(defun my-fill-and-wrap (start end)
  "Fills region and wrap in blk(  \"...\");"
  (interactive "r")
  (let ((fill-column 70)
        (fill-prefix "  blk(  \""))
    (goto-char start)
    (fill-paragraph)
    (save-excursion
      (while (< (point) end)
        (end-of-line)
        (insert-char " "
          (- 70 (- (line-end-position) (line-beginning-position))))
        (insert "\");")
        (forward-line))))))

Executing this function seems to do nothing. No filling, or any change to
the text for that matter. Any pointers on what I'm doing wrong would be
greatly appreciated.

Jake


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: fill-paragraph with pre and postfix
  2014-11-05  3:00 fill-paragraph with pre and postfix Jacob Gerlach
@ 2014-11-05 11:34 ` Alexis
       [not found]   ` <CAA6UvuGBeVzLqqvzY5E8DX7kuMtRiJBuP6-AORsrjPR1uuxTtg@mail.gmail.com>
  0 siblings, 1 reply; 9+ messages in thread
From: Alexis @ 2014-11-05 11:34 UTC (permalink / raw)
  To: help-gnu-emacs


Jacob Gerlach writes:

> A project I'm working on uses a handling function for some command line
> documentation:
>
>   blk("  I want to format my documentation like this.                  ");
>
> In order to match the convention for our project, it should include the two
> leading spaces and be filled with spaces out to column 70.

Will the text that gets padded with spaces always be less than 70
columns in total?


Alexis.



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: fill-paragraph with pre and postfix
       [not found]   ` <CAA6UvuGBeVzLqqvzY5E8DX7kuMtRiJBuP6-AORsrjPR1uuxTtg@mail.gmail.com>
@ 2014-11-05 12:18     ` Jacob Gerlach
  2014-11-06  3:45       ` Alexis
  0 siblings, 1 reply; 9+ messages in thread
From: Jacob Gerlach @ 2014-11-05 12:18 UTC (permalink / raw)
  To: help-gnu-emacs

---------- Forwarded message ----------
From: "Jacob Gerlach" <jacobgerlach@gmail.com>
Date: Nov 5, 2014 7:17 AM
Subject: Re: fill-paragraph with pre and postfix
To: "Alexis" <flexibeast@gmail.com>
Cc:


On Nov 5, 2014 6:42 AM, "Alexis" <flexibeast@gmail.com> wrote:
>
>
> Jacob Gerlach writes:
>
> > A project I'm working on uses a handling function for some command line
> > documentation:
> >
> >   blk("  I want to format my documentation like this.
");
> >
> > In order to match the convention for our project, it should include the
two
> > leading spaces and be filled with spaces out to column 70.
>
> Will the text that gets padded with spaces always be less than 70
> columns in total?

No, the idea is to use this function on a paragraph of text and have it
broken into appropriately sized lines and then wrapped with the format
function. Something akin to fill paragraph.
>
>
> Alexis.
>


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: fill-paragraph with pre and postfix
  2014-11-05 12:18     ` Jacob Gerlach
@ 2014-11-06  3:45       ` Alexis
  2014-11-10 15:24         ` Jacob Gerlach
  0 siblings, 1 reply; 9+ messages in thread
From: Alexis @ 2014-11-06  3:45 UTC (permalink / raw)
  To: help-gnu-emacs


Jacob Gerlach writes:

> On Nov 5, 2014 6:42 AM, "Alexis" <flexibeast@gmail.com> wrote:
>>
>>
>> Jacob Gerlach writes:
>>
>> > A project I'm working on uses a handling function for some command line
>> > documentation:
>> >
>> >   blk("  I want to format my documentation like this.
> ");
>> >
>> > In order to match the convention for our project, it should include the
> two
>> > leading spaces and be filled with spaces out to column 70.
>>
>> Will the text that gets padded with spaces always be less than 70
>> columns in total?
>
> No, the idea is to use this function on a paragraph of text and have it
> broken into appropriately sized lines and then wrapped with the format
> function. Something akin to fill paragraph.

*nod* So you'd want output along the lines of:

    blk("  I want to format my documentation like this.                        \nI want to format my documentation like this. I want to format my      \ndocumentation like this.                                              ")

?

(Or should /each/ 70-column line be wrapped with  'blk("")'?)


Alexis.



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: fill-paragraph with pre and postfix
  2014-11-06  3:45       ` Alexis
@ 2014-11-10 15:24         ` Jacob Gerlach
  2014-11-11  0:19           ` Alexis
  0 siblings, 1 reply; 9+ messages in thread
From: Jacob Gerlach @ 2014-11-10 15:24 UTC (permalink / raw)
  To: Alexis, help-gnu-emacs

On Wed Nov 05 2014 at 10:52:13 PM Alexis <flexibeast@gmail.com> wrote:

> (Or should /each/ 70-column line be wrapped with  'blk("")'?)
>
> Almost this. Fill column should be 70, including the blk(". So the
paragraph should be filled to lines of up to 65 chars, then wrapped.


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: fill-paragraph with pre and postfix
  2014-11-10 15:24         ` Jacob Gerlach
@ 2014-11-11  0:19           ` Alexis
       [not found]             ` <CAA6UvuEQYgVUkgWD_MkU_mnjYVt6PSXA72RSe9S2YOJmxnNOUg@mail.gmail.com>
  0 siblings, 1 reply; 9+ messages in thread
From: Alexis @ 2014-11-11  0:19 UTC (permalink / raw)
  To: help-gnu-emacs


Jacob Gerlach writes:

> Fill column should be 70, including the blk(". So the
> paragraph should be filled to lines of up to 65 chars, then wrapped.

Hmm, but from what you said earlier, doesn't each line also need to have
a closing:

    ")

? Which would mean that the paragraph would be filled to lines of up to
/63/ characters, such that this:

    The quick brown fox jumped over the lazy dogs. The quick brown fox
    jumped over the lazy dogs. The quick brown fox jumped over the lazy
    dogs.

would be transformed to this?

    blk("The quick brown fox jumped over the lazy dogs. The quick brown ")
    blk("fox jumped over the lazy dogs. The quick brown fox jumped over ")
    blk("the lazy dogs.                                                 ")

If not, can you please show what the final output should look like?


Alexis.



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: fill-paragraph with pre and postfix
       [not found]             ` <CAA6UvuEQYgVUkgWD_MkU_mnjYVt6PSXA72RSe9S2YOJmxnNOUg@mail.gmail.com>
@ 2014-11-11  8:26               ` Alexis
  2014-11-24 19:26                 ` Jacob Gerlach
  0 siblings, 1 reply; 9+ messages in thread
From: Alexis @ 2014-11-11  8:26 UTC (permalink / raw)
  To: help-gnu-emacs


Jacob Gerlach writes:

> On Mon, Nov 10, 2014 at 7:19 PM, Alexis <flexibeast@gmail.com> wrote:
>
>> Hmm, but from what you said earlier, doesn't each line also need to have
>> a closing:
>>
>>     ")
>>
> I'm counting 70 up to, but not including the closing "), so the total line
> length should ultimately be 72.
>
>>
>> If not, can you please show what the final output should look like?
>>
> Getting the exact number of chars is not so important - this would be one
> number in the function that I can tweak as necessary. I don't have a
> function that works at all. Do you have any advice on modifying function
> from my original post, or alternatively, a library or other functionality
> that could help with this?

Well, i was going to try putting together some ELisp that does what you
want, as i think it's an interesting thing to do. :-) But, what i'm
primarily confused about is not the exact line length required, but the
overall /structure/ required. Setting aside the issue of the exact line
length required, which of the following forms is what you're after?

1.

blk("This is a sentence "
    "stretching over    "
    "three lines.       ")

2.

blk("This is a sentence 
     stretching over    
     three lines.       ")

[There are fill spaces at the end of the first and second lines.]

3.

blk("This is a sentence ")
blk("stretching over    ")
blk("three lines.       ")

If none of the above, could you please provide a multi-line example of
the structure - regardless of exact line length - that you require?


Alexis.



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: fill-paragraph with pre and postfix
  2014-11-11  8:26               ` Alexis
@ 2014-11-24 19:26                 ` Jacob Gerlach
  2014-11-26  8:48                   ` Alexis
  0 siblings, 1 reply; 9+ messages in thread
From: Jacob Gerlach @ 2014-11-24 19:26 UTC (permalink / raw)
  To: Alexis, help-gnu-emacs

Sorry for the delay, lost track of this thread for awhile.

On Tue Nov 11 2014 at 3:48:32 AM Alexis <flexibeast@gmail.com> wrote:

> Setting aside the issue of the exact line
> length required, which of the following forms is what you're after?
>
> [...]

> 3 .

blk("This is a sentence ")

blk("stretching over    ")
> blk("three lines.       ")
>

#3 Is exactly what I'm looking for


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: fill-paragraph with pre and postfix
  2014-11-24 19:26                 ` Jacob Gerlach
@ 2014-11-26  8:48                   ` Alexis
  0 siblings, 0 replies; 9+ messages in thread
From: Alexis @ 2014-11-26  8:48 UTC (permalink / raw)
  To: help-gnu-emacs


Jacob Gerlach writes:

> 3 .
>
> blk("This is a sentence ")
> blk("stretching over    ")
> blk("three lines.       ")
>
> #3 Is exactly what I'm looking for

Okay, so i think the following is roughly what you're after; for
increased clarity, it makes use of Magnar Sveen's string-manipulation
library s.el (https://github.com/magnars/s.el, available via both MELPA
and Marmalade):

    (require 's)
    (defun format-paragraph ()
      (interactive)
      (let* ((leading "blk(\"")
             (trailing "\")\n")
             (width 65)
             (para-start (save-excursion
                           (backward-paragraph)
                           (point)))
             (para-end (save-excursion
                         (forward-paragraph)
                         (point)))
             (para (s-replace
                    "\n" " "
                    (s-trim
                     (buffer-substring-no-properties para-start para-end))))
             (line "")
             (result ""))
        (while (not (string= "" para))
          (let ((w (if (> (length para) width)
                       width
                     (length para))))
            (setq line (substring para 0 w))
            (if (and (> (length para) width) 
                     (string-match "[^[:space:]]+$" line))
                (setq w (match-beginning 0))
              (setq w (length para)))
            (setq line (s-pad-right width " " (substring para 0 w)))
            (setq result (concat result leading line trailing))
            (setq para (substring para w))))
        (save-excursion
          (kill-region para-start para-end)
          (goto-char (1+ para-start))
          (insert result))))

Hope that helps!


Alexis.



^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2014-11-26  8:48 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-11-05  3:00 fill-paragraph with pre and postfix Jacob Gerlach
2014-11-05 11:34 ` Alexis
     [not found]   ` <CAA6UvuGBeVzLqqvzY5E8DX7kuMtRiJBuP6-AORsrjPR1uuxTtg@mail.gmail.com>
2014-11-05 12:18     ` Jacob Gerlach
2014-11-06  3:45       ` Alexis
2014-11-10 15:24         ` Jacob Gerlach
2014-11-11  0:19           ` Alexis
     [not found]             ` <CAA6UvuEQYgVUkgWD_MkU_mnjYVt6PSXA72RSe9S2YOJmxnNOUg@mail.gmail.com>
2014-11-11  8:26               ` Alexis
2014-11-24 19:26                 ` Jacob Gerlach
2014-11-26  8:48                   ` Alexis

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.