Re: Automating paragraphs (was Re: Dump help pages)

2021-04-21 Thread BPJ
Den tis 20 apr. 2021 17:46Julius Hamilton  skrev:

> Thanks.
>
> This is pretty complicated, but probably what I had in mind.
>
> So, some basic clarification -
>
> You defined a new command called Jp. You specify a line range, and it
> starts at every non blank line and joins all following non blank lines.
>
> That's quite good. Thanks very much.
>
> What about the second command I had in mind? I could really use a way to
> select a paragraph and insert N newlines between every Word (Vim "W") (and
> also sentence, on a separate occasion), with a single command, say in
> visual mode.
>
> With your command, I can imagine it could be modified to start at every
> Word and just append newlines. Do you think you could write an example of
> this?
>

I came up with the following. It basically is a pair of typing-saving
canned s/// command which replaces all consecutive horizontal whitespace
with a given number of linebreaks throughout the buffer, in a range or in
the current visual selection, in the second version restricted to
horizontal whitespace after sentence-final punctuation.

" Command :Wl [{N}] (*W*ord *l*ine)
"   Replace consecutive horizontal whitespace in buffer/range/selection
"   with N line breaks (Default: the number in variable g:Wl_line_breaks)

let g:Wl_line_breaks=1

:com! -range=% -nargs=? Wl exe
printf(',s/\s\+/%s/g',repeat('\r', ( ?  :
g:Wl_line_breaks)))

" Explanation:
"   -range=%
" The command operates over the whole buffer or over a given range,
which
" may be visual.
"   -nargs=?
" The command takes an optional argument.
"   exe printf(...)
" Constructs a string containing the actual command, then executes this
" string as a command.
"   ( ?  : g:Wl_line_breaks)
" Compute N: use the argument if there was one (and it was non-zero)
" or else use the number which is the value of the global variable
" g:Wl_line_breaks, which must be defined.
" It is up to you to make sure that the argument and the variable value
" are positive integers!
"   repeat('\r', N)
" Construct a string which will be interpolated as N linebreaks.
" The string doesn't actually contain linebreaks, but they will "become"
" line breaks when the command is executed.
"   s/\s\+/%s/g
" Here %s will be replaced with N linebreaks,
" so if N is 1 it's s/\s+/\r/g
" and if N is 4 it's s/\s+/\r\r\r\r/g
" so basically replace all consecutive horizontal whitespace
" with the desired number of linebreaks.

" Command :Sl [{N}] (*S*entence *l*ine)
"   Replace consecutive horizontal whitespace *after a ./?/!*
"   in buffer/range/selection with N line breaks (Default: the number in
variable g:Sl_line_breaks)

let g:Sl_line_breaks=1

:com! -range=% -nargs=? Sl exe
printf(',s/[.?!]\zs\s\+/%s/g',repeat('\r', ( ?
 : g:Sl_line_breaks)))

" Explanation:
"   This is basically the same as above, but requires that the horizontal
"   whitespace is preceded with a "." or "?" or "!", and it has its own
"   variable for the default value of N.

" Mappings to execute :Wl/:Sl (without argument) over buffer/selection
nor Wl :Wl
nor Sl :Sl


And, how to use it on highlighted text in visual mode, instead of
> specifying a line range?
>

The commands above and the command from yesterday work on an existing or
previous visual selection too. If you have a visual selection and press :
the commandline is prefixed with '<,'> which is a range equal to the lines
holding the visual selection. You can also insert that range manually to
restrict a previously used command to the latest visual selection.

The mappings above work either on the whole buffer or the visual selection,
so just make a visual selection and type Wl and it just happens in the
visual selection.

In yesterday's installment the

vnor Jp :Jp

means that you can make a visual selection and just type Jp and have the
:Jp command applied to the selection. Just make sure that the selection
ends with a blank line. The

nnor Jp ...

line from yesterday does the same over the whole buffer in normal mode,
with the difference that it first inserts a blank line at the bottom of the
buffer to make sure there is one.



> Thanks very much,
> Julius
>

It's nothing. I have been using yesterday's command/mappings for ages, and
I will certainly use those from today too.

/bpj


>
>
>
>
> On Tue, Apr 20, 2021, 09:13 BPJ  wrote:
>
>> Den fre 16 apr. 2021 19:27Stan Brown  skrev:
>>
>>> On 2021-04-16 09:42, Julius Hamilton wrote:
>>>
>>> > At the beginning of a paragraph which has been separated mid-sentence
>>> > onto separate lines, how might I automate the process of calling CTRL-J
>>> > until all the separated lines in the paragraph have been combined into
>>> > one line? Will Vim be able to call CTRL-J until a condition is met, for
>>> > example, that the single line being built ends in a sentence (a
>>> period),
>>> > or until the next line is a blank newline?
>>>
>>
>> I have the following in my .vimrc :
>>
>> " Command to join lines in 

Re: Automating paragraphs (was Re: Dump help pages)

2021-04-20 Thread Julius Hamilton
Thanks.

This is pretty complicated, but probably what I had in mind.

So, some basic clarification -

You defined a new command called Jp. You specify a line range, and it
starts at every non blank line and joins all following non blank lines.

That's quite good. Thanks very much.

What about the second command I had in mind? I could really use a way to
select a paragraph and insert N newlines between every Word (Vim "W") (and
also sentence, on a separate occasion), with a single command, say in
visual mode.

With your command, I can imagine it could be modified to start at every
Word and just append newlines. Do you think you could write an example of
this? And, how to use it on highlighted text in visual mode, instead of
specifying a line range?

Thanks very much,
Julius





On Tue, Apr 20, 2021, 09:13 BPJ  wrote:

> Den fre 16 apr. 2021 19:27Stan Brown  skrev:
>
>> On 2021-04-16 09:42, Julius Hamilton wrote:
>>
>> > At the beginning of a paragraph which has been separated mid-sentence
>> > onto separate lines, how might I automate the process of calling CTRL-J
>> > until all the separated lines in the paragraph have been combined into
>> > one line? Will Vim be able to call CTRL-J until a condition is met, for
>> > example, that the single line being built ends in a sentence (a period),
>> > or until the next line is a blank newline?
>>
>
> I have the following in my .vimrc :
>
> " Command to join lines in all paragraphs in a range/the whole buffer (Jp
> == join paras)
> :com! -range=% Jp ,g/^\s*\S/ .,/^\s*$/-join
>
> " Explanation:
> "  :g/^\s*\S/ " Go to the first in each sequence of non-blank lines
>   " Actually every non-blank line but the result is the same here!
> "  .,/^\s*$/- " "Select" all lines from the current to the one before the
> next blank line
> "  join  " Join the "selected" lines
>
> " Mapping to join lines in all paras in the buffer
> :nnor Jp GoggVG:Jp
>
> " Explanation:
> "  G " Go to the last line in the buffer
> "  o " Add a blank line below the last so we are sure there is one!
> "  gg " Go to the first line in the buffer
> "  V  " Visually select the (first) line
> "  G  " Extend the selection to the last line in the buffer
> "  :Jp " Execute the command defined above
>
> " Mapping to execute the :Jp command over the current visual selection
> :vnor Jp :Jp
>
> HTH
>
> /bpj
>
>
>> The short answer is go to the top of the paragraph and press Shift+V,
>> then to the bottom and press Shift+J (not Ctrl+J). You can automate this
>> further by writing a function that would figure out the top and bottom
>> of the paragraph via whatever logic you build in. See :help :function.
>>
>> > Then, how might I automate the process of entering N newlines between
>> > every sentence? I.e., automating pressing ), i, enter a few times, then
>> > escape, for multiple sentences? I could create a shortcut to execute
>> > these commands and call it myself, or it could also repeat until the
>> > conditions above. How would I do either?
>>
>> Example, for N = 4:
>> :imap  
>> Type the actual < and > characters as shown. To use this, at the end of
>> typing your paragraph do not press Esc but press F9 (or whatever key you
>> mapped).
>>
>> If you sometimes want to insert N blank lines in already-written text,
>> add this:
>> :map  A
>> The previous map was active in insert mode; this one is active in normal
>> mode. It moves to the end of the current line ("A") in insert mode and
>> then appends the insert-mode version of F9.
>>
>> Once you've verified that these work as you wish, you can put them in
>> your $VIM/_vimrc file so that they will be executed whenever you start
>> Vim.
>>
>> > Also, how do I go back to where the cursor previously was, in case I
>> > accidentally move it?
>>
>> `` or ''
>> (One goes back to the _line_) where you were; the other goes back to the
>> exact position within the line.)
>>
>> --
>> Stan Brown
>> Tehachapi, CA, USA
>> https://BrownMath.com
>> https://OakRoadSystems.com
>>
>> --
>> --
>> You received this message from the "vim_use" maillist.
>> Do not top-post! Type your reply below the text you are replying to.
>> For more information, visit http://www.vim.org/maillist.php
>>
>> ---
>> You received this message because you are subscribed to the Google Groups
>> "vim_use" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to vim_use+unsubscr...@googlegroups.com.
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/vim_use/d9ee4264-13cb-eef7-be14-e0e68f9df155%40fastmail.fm
>> .
>>
> --
> --
> You received this message from the "vim_use" maillist.
> Do not top-post! Type your reply below the text you are replying to.
> For more information, visit http://www.vim.org/maillist.php
>
> ---
> You received this message because you are subscribed to the Google Groups
> "vim_use" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to 

Re: Automating paragraphs (was Re: Dump help pages)

2021-04-20 Thread BPJ
I wrote:

I have the following in my .vimrc :
>
> " Command to join lines in all paragraphs in a range/the whole buffer (Jp
> == join paras)
> :com! -range=% Jp ,g/^\s*\S/ .,/^\s*$/-join
>
> " Explanation:
> "  :g/^\s*\S/ " Go to the first in each sequence of non-blank lines
>   " Actually every non-blank line but the result is the same here!
> "  .,/^\s*$/- " "Select" all lines from the current to the one before the
> next blank line
>

This should have been:

"  .,/^\s*$/-1

I accidentally removed the digit 1 (not sure it matters though!)


"  join  " Join the "selected" lines
>
> " Mapping to join lines in all paras in the buffer
> :nnor Jp GoggVG:Jp
>
> " Explanation:
> "  G " Go to the last line in the buffer
> "  o " Add a blank line below the last so we are sure there is one!
> "  gg " Go to the first line in the buffer
> "  V  " Visually select the (first) line
> "  G  " Extend the selection to the last line in the buffer
> "  :Jp " Execute the command defined above
>
> " Mapping to execute the :Jp command over the current visual selection
> :vnor Jp :Jp
>
> HTH
>
> /bpj
>
>
>> The short answer is go to the top of the paragraph and press Shift+V,
>> then to the bottom and press Shift+J (not Ctrl+J). You can automate this
>> further by writing a function that would figure out the top and bottom
>> of the paragraph via whatever logic you build in. See :help :function.
>>
>> > Then, how might I automate the process of entering N newlines between
>> > every sentence? I.e., automating pressing ), i, enter a few times, then
>> > escape, for multiple sentences? I could create a shortcut to execute
>> > these commands and call it myself, or it could also repeat until the
>> > conditions above. How would I do either?
>>
>> Example, for N = 4:
>> :imap  
>> Type the actual < and > characters as shown. To use this, at the end of
>> typing your paragraph do not press Esc but press F9 (or whatever key you
>> mapped).
>>
>> If you sometimes want to insert N blank lines in already-written text,
>> add this:
>> :map  A
>> The previous map was active in insert mode; this one is active in normal
>> mode. It moves to the end of the current line ("A") in insert mode and
>> then appends the insert-mode version of F9.
>>
>> Once you've verified that these work as you wish, you can put them in
>> your $VIM/_vimrc file so that they will be executed whenever you start
>> Vim.
>>
>> > Also, how do I go back to where the cursor previously was, in case I
>> > accidentally move it?
>>
>> `` or ''
>> (One goes back to the _line_) where you were; the other goes back to the
>> exact position within the line.)
>>
>> --
>> Stan Brown
>> Tehachapi, CA, USA
>> https://BrownMath.com
>> https://OakRoadSystems.com
>>
>> --
>> --
>> You received this message from the "vim_use" maillist.
>> Do not top-post! Type your reply below the text you are replying to.
>> For more information, visit http://www.vim.org/maillist.php
>>
>> ---
>> You received this message because you are subscribed to the Google Groups
>> "vim_use" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to vim_use+unsubscr...@googlegroups.com.
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/vim_use/d9ee4264-13cb-eef7-be14-e0e68f9df155%40fastmail.fm
>> .
>>
>

-- 
-- 
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_use+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_use/CADAJKhAbSe-2WBM%3D0287Zf%2BKXciTQE7GtkFTr4xptJHNfxhWzQ%40mail.gmail.com.


Re: Automating paragraphs (was Re: Dump help pages)

2021-04-20 Thread BPJ
Den fre 16 apr. 2021 19:27Stan Brown  skrev:

> On 2021-04-16 09:42, Julius Hamilton wrote:
>
> > At the beginning of a paragraph which has been separated mid-sentence
> > onto separate lines, how might I automate the process of calling CTRL-J
> > until all the separated lines in the paragraph have been combined into
> > one line? Will Vim be able to call CTRL-J until a condition is met, for
> > example, that the single line being built ends in a sentence (a period),
> > or until the next line is a blank newline?
>

I have the following in my .vimrc :

" Command to join lines in all paragraphs in a range/the whole buffer (Jp
== join paras)
:com! -range=% Jp ,g/^\s*\S/ .,/^\s*$/-join

" Explanation:
"  :g/^\s*\S/ " Go to the first in each sequence of non-blank lines
  " Actually every non-blank line but the result is the same here!
"  .,/^\s*$/- " "Select" all lines from the current to the one before the
next blank line
"  join  " Join the "selected" lines

" Mapping to join lines in all paras in the buffer
:nnor Jp GoggVG:Jp

" Explanation:
"  G " Go to the last line in the buffer
"  o " Add a blank line below the last so we are sure there is one!
"  gg " Go to the first line in the buffer
"  V  " Visually select the (first) line
"  G  " Extend the selection to the last line in the buffer
"  :Jp " Execute the command defined above

" Mapping to execute the :Jp command over the current visual selection
:vnor Jp :Jp

HTH

/bpj


> The short answer is go to the top of the paragraph and press Shift+V,
> then to the bottom and press Shift+J (not Ctrl+J). You can automate this
> further by writing a function that would figure out the top and bottom
> of the paragraph via whatever logic you build in. See :help :function.
>
> > Then, how might I automate the process of entering N newlines between
> > every sentence? I.e., automating pressing ), i, enter a few times, then
> > escape, for multiple sentences? I could create a shortcut to execute
> > these commands and call it myself, or it could also repeat until the
> > conditions above. How would I do either?
>
> Example, for N = 4:
> :imap  
> Type the actual < and > characters as shown. To use this, at the end of
> typing your paragraph do not press Esc but press F9 (or whatever key you
> mapped).
>
> If you sometimes want to insert N blank lines in already-written text,
> add this:
> :map  A
> The previous map was active in insert mode; this one is active in normal
> mode. It moves to the end of the current line ("A") in insert mode and
> then appends the insert-mode version of F9.
>
> Once you've verified that these work as you wish, you can put them in
> your $VIM/_vimrc file so that they will be executed whenever you start Vim.
>
> > Also, how do I go back to where the cursor previously was, in case I
> > accidentally move it?
>
> `` or ''
> (One goes back to the _line_) where you were; the other goes back to the
> exact position within the line.)
>
> --
> Stan Brown
> Tehachapi, CA, USA
> https://BrownMath.com
> https://OakRoadSystems.com
>
> --
> --
> You received this message from the "vim_use" maillist.
> Do not top-post! Type your reply below the text you are replying to.
> For more information, visit http://www.vim.org/maillist.php
>
> ---
> You received this message because you are subscribed to the Google Groups
> "vim_use" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to vim_use+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/vim_use/d9ee4264-13cb-eef7-be14-e0e68f9df155%40fastmail.fm
> .
>

-- 
-- 
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_use+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_use/CADAJKhA-3Dmp1O7XcGsJ0BPkivshP%3DWt47_nvP_sJdPwN2j64Q%40mail.gmail.com.


Re: Automating paragraphs (was Re: Dump help pages)

2021-04-17 Thread Stan Brown


On 2021-04-17 06:30, Julius Hamilton wrote:
> Would you mind providing a simple outline of a function which would
> terminate on some basic condition, such as, the next line is a blank
> newline? I will read those docs.

The first step is for you to clarify your criteria. Then :help
:function, :help if, and so on, to turn your intentions into code. Or
you may not need code as such in your function. :help / tells you how to
do searches based on all sorts of criteria, and any Vim command can be
included in a function.

> I use Vim in Termux, an Android terminal emulator app. I don't know if I
> have buttons such as F9. I will investigate it. However, is there a way
> to check what non-F keys are free to be mapped to something? Thanks very
> much.

:help :map

I would suggest you not set a goal of reading all the help documents; I
believe even experienced Vim users could find that overwhelming. (I know
I would.) A much more reasonable goal is to read appropriate _portions_
that answer your questions. And when you're reading something for which
you have immediate use, you're much more likely to retain what you read.

There is also Google, of course. Just a day or two ago I couldn't think
what term to query via :help, so I googled my query and got an answer
immediately.

-- 
Stan Brown
Tehachapi, CA, USA
https://BrownMath.com
https://OakRoadSystems.com

-- 
-- 
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_use+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_use/3b0e07a3-6474-e8d6-4378-b54d7ec85f13%40fastmail.fm.


Re: Automating paragraphs (was Re: Dump help pages)

2021-04-17 Thread Julius Hamilton
Thanks very much, really appreciate it.

Would you mind providing a simple outline of a function which would
terminate on some basic condition, such as, the next line is a blank
newline? I will read those docs.

I use Vim in Termux, an Android terminal emulator app. I don't know if I
have buttons such as F9. I will investigate it. However, is there a way to
check what non-F keys are free to be mapped to something? Thanks very much.

Best regards,
Julius



On Fri, Apr 16, 2021, 19:27 Stan Brown  wrote:

> On 2021-04-16 09:42, Julius Hamilton wrote:
>
> > At the beginning of a paragraph which has been separated mid-sentence
> > onto separate lines, how might I automate the process of calling CTRL-J
> > until all the separated lines in the paragraph have been combined into
> > one line? Will Vim be able to call CTRL-J until a condition is met, for
> > example, that the single line being built ends in a sentence (a period),
> > or until the next line is a blank newline?
>
> The short answer is go to the top of the paragraph and press Shift+V,
> then to the bottom and press Shift+J (not Ctrl+J). You can automate this
> further by writing a function that would figure out the top and bottom
> of the paragraph via whatever logic you build in. See :help :function.
>
> > Then, how might I automate the process of entering N newlines between
> > every sentence? I.e., automating pressing ), i, enter a few times, then
> > escape, for multiple sentences? I could create a shortcut to execute
> > these commands and call it myself, or it could also repeat until the
> > conditions above. How would I do either?
>
> Example, for N = 4:
> :imap  
> Type the actual < and > characters as shown. To use this, at the end of
> typing your paragraph do not press Esc but press F9 (or whatever key you
> mapped).
>
> If you sometimes want to insert N blank lines in already-written text,
> add this:
> :map  A
> The previous map was active in insert mode; this one is active in normal
> mode. It moves to the end of the current line ("A") in insert mode and
> then appends the insert-mode version of F9.
>
> Once you've verified that these work as you wish, you can put them in
> your $VIM/_vimrc file so that they will be executed whenever you start Vim.
>
> > Also, how do I go back to where the cursor previously was, in case I
> > accidentally move it?
>
> `` or ''
> (One goes back to the _line_) where you were; the other goes back to the
> exact position within the line.)
>
> --
> Stan Brown
> Tehachapi, CA, USA
> https://BrownMath.com
> https://OakRoadSystems.com
>
> --
> --
> You received this message from the "vim_use" maillist.
> Do not top-post! Type your reply below the text you are replying to.
> For more information, visit http://www.vim.org/maillist.php
>
> ---
> You received this message because you are subscribed to the Google Groups
> "vim_use" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to vim_use+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/vim_use/d9ee4264-13cb-eef7-be14-e0e68f9df155%40fastmail.fm
> .
>

-- 
-- 
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_use+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_use/CAGrXgp37RNC_0WneQ1zj3CfhfNWi%2BnunAP4GAKB-g0A23GqKaA%40mail.gmail.com.


Automating paragraphs (was Re: Dump help pages)

2021-04-16 Thread Stan Brown
On 2021-04-16 09:42, Julius Hamilton wrote:

> At the beginning of a paragraph which has been separated mid-sentence
> onto separate lines, how might I automate the process of calling CTRL-J
> until all the separated lines in the paragraph have been combined into
> one line? Will Vim be able to call CTRL-J until a condition is met, for
> example, that the single line being built ends in a sentence (a period),
> or until the next line is a blank newline?

The short answer is go to the top of the paragraph and press Shift+V,
then to the bottom and press Shift+J (not Ctrl+J). You can automate this
further by writing a function that would figure out the top and bottom
of the paragraph via whatever logic you build in. See :help :function.

> Then, how might I automate the process of entering N newlines between
> every sentence? I.e., automating pressing ), i, enter a few times, then
> escape, for multiple sentences? I could create a shortcut to execute
> these commands and call it myself, or it could also repeat until the
> conditions above. How would I do either?

Example, for N = 4:
:imap  
Type the actual < and > characters as shown. To use this, at the end of
typing your paragraph do not press Esc but press F9 (or whatever key you
mapped).

If you sometimes want to insert N blank lines in already-written text,
add this:
:map  A
The previous map was active in insert mode; this one is active in normal
mode. It moves to the end of the current line ("A") in insert mode and
then appends the insert-mode version of F9.

Once you've verified that these work as you wish, you can put them in
your $VIM/_vimrc file so that they will be executed whenever you start Vim.

> Also, how do I go back to where the cursor previously was, in case I
> accidentally move it?

`` or ''
(One goes back to the _line_) where you were; the other goes back to the
exact position within the line.)

-- 
Stan Brown
Tehachapi, CA, USA
https://BrownMath.com
https://OakRoadSystems.com

-- 
-- 
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_use+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_use/d9ee4264-13cb-eef7-be14-e0e68f9df155%40fastmail.fm.