[ANNOUNCE] nano-4.9 is released

Benno Schulenberg <[email protected]> Tue, 24 Mar 2020 11:47:16 +0100
Newsgroups gmane.editors.nano.announce,gmane.editors.nano.devel
Message-ID <[email protected]>
This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--===============2299461703758199098==
Content-Type: multipart/signed; micalg=pgp-sha512;
 protocol="application/pgp-signature";
 boundary="AYFttuDp2UpkqtPmxxzsXwMCwU3F9CK0x"

This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--AYFttuDp2UpkqtPmxxzsXwMCwU3F9CK0x
Content-Type: multipart/mixed; boundary="ztiMh9kUTrNXGOOcpQY40N2Rw1mhfaQu5"

--ztiMh9kUTrNXGOOcpQY40N2Rw1mhfaQu5
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: quoted-printable


2020.03.24 - GNU nano 4.9  "die fetten Jahre sind vorbei"

=E2=80=A2 When justifying a selection, the new paragraph and the
  succeeding one get the appropriate first-line indent.
=E2=80=A2 Trying to justify an empty selection does not crash.
=E2=80=A2 Redoing the insertion of an empty file does not crash.
=E2=80=A2 On the BSDs and macOS, ^H has become rebindable again
  (in most terminal emulators, not on the console).
=E2=80=A2 DOS line endings in nanorc files are accepted.
=E2=80=A2 Option --suspend / 'set suspend' has been renamed to
  the more logical --suspendable / 'set suspendable'.


GNU nano is a simple and easy-to-use editor for on the terminal.
  https://nano-editor.org/
  https://nano-editor.org/manual.html

A concise overview of nano's shortcut keystrokes:
  https://nano-editor.org/cheatsheet.html

The tarball and its signature are here:
  https://nano-editor.org/dist/latest/nano-4.9.tar.xz
  https://nano-editor.org/dist/latest/nano-4.9.tar.xz.asc


Specific issues that were addressed in this release:
  https://savannah.gnu.org/bugs/?56307  (trailing blanks after justificat=
ion)
  https://savannah.gnu.org/bugs/?56308  (copy first-line indent  [request=
])
  https://savannah.gnu.org/bugs/?57437  (possible mistaken first-line ind=
ent)
  https://savannah.gnu.org/bugs/?57756  (accept nanorc in DOS format  [re=
quest])
  https://savannah.gnu.org/bugs/?57777  (useless buffer when honoring loc=
k file)

  https://savannah.gnu.org/bugs/?57804  (wrong character count after M-V)=

  https://savannah.gnu.org/bugs/?57808  (remaining tail line after undo)
  https://savannah.gnu.org/bugs/?57832  (wrong count after undoing hardwr=
ap)
  https://savannah.gnu.org/bugs/?57851  (unwanted jumpy scroll with softw=
rap)
  https://savannah.gnu.org/bugs/?57897  (^K did not cut penultimate line)=


  https://savannah.gnu.org/bugs/?57900  (M-T could cut emptiness at EOF)
  https://savannah.gnu.org/bugs/?57901  (missing feedback with --tempfile=
)
  https://savannah.gnu.org/bugs/?57915  (*crash* when redoing empty inser=
tion)
  https://savannah.gnu.org/bugs/?57931  (filtering could filter too much)=

  https://savannah.gnu.org/bugs/?57932  (use of some uninitialized memory=
)

  https://savannah.gnu.org/bugs/?57934  (another use of uninitialized mem=
ory)
  https://savannah.gnu.org/bugs/?57942  (nanorc allowed some empty regexe=
s)
  https://savannah.gnu.org/bugs/?57950  (start=3D without end=3D was stor=
ed anyway)
  https://savannah.gnu.org/bugs/?57958  (poorly placed cursor upon some r=
edos)
  https://savannah.gnu.org/bugs/?57959  (*crash* when justifying empty re=
gion)

  https://savannah.gnu.org/bugs/?57960  (backward selection not always re=
tained)
  https://savannah.gnu.org/bugs/?57972  (out-of-bounds access when justif=
ying)
  https://savannah.gnu.org/bugs/?57974  (succeeding indentation could be =
wrong)
  https://savannah.gnu.org/bugs/?57981  (rebinding ^H on macOS did not wo=
rk)
  https://savannah.gnu.org/bugs/?57984  (possible miswrapping for small w=
idths)

  https://savannah.gnu.org/bugs/?57987  (unwanted linefeed in help text)
  https://savannah.gnu.org/bugs/?57991  (help text could scroll horizonta=
lly)
  https://savannah.gnu.org/bugs/?57993  (misplaced "[" with softwrap)
  https://savannah.gnu.org/bugs/?57994  (no title bar in Korean locale)
  https://savannah.gnu.org/bugs/?58010  (LF was ignored in bracketed past=
e)


Changes between v4.8 and v4.9:
------------------------------

Saagar Jha (1):
      rcfile: fix an out-of-bounds read on empty lines

Neal Gompa (1):
      syntax: spec: add some keywords that were added in RPM 4.15 and 4.1=
3

Benno Schulenberg (210):
      bindings: remove the translation of ^H to Backspace on the BSDs
      build: fix compilation for --enable-tiny --enable-justify
      build: restore non-UTF8 fallbacks, to allow compiling with --disabl=
e-utf8
      build: update the conditional placement of the "Go To Line" menu it=
em
      bump version numbers and add a news item for the 4.9 release
      chars: optimize a function for the most common blanks: space and ta=
b
      copyright: update to the current year for significantly changed fil=
es
      cutting: let M-T cut a trailing empty line, but not nothing at all
      cutting: with --cutfromcursor, allow ^K to cut the penultimate empt=
y line
      display: do not show a "[" double-width placeholder when softwrappi=
ng
      display: keep the help items aligned, by not writing too many chara=
cters
      docs: improve the descriptions of --softwrap and 'set softwrap'
      docs: mark bracketed pasting as done in the TODO list
      docs: mention that ^[ (Esc) is unbindable, and explain why
      docs: remove the note saying that nanorc files must be in Unix form=
at
      docs: trim some TODO items, and condense several others
      docs: update the form of an option, --suspendable / 'set suspendabl=
e'
      docs: update the missed occurrences of --suspendable / 'set suspend=
able'
      feedback: give a clearer message when trying to justify an empty re=
gion
      feedback: make sure that a later message can overwrite a short warn=
ing
      files: be consistent in which code means "New File"
      files: don't check uninitialized memory when writing new file  [val=
grind]
      files: when piping, always pipe whatever was cut to the external co=
mmand
      gnulib: update to its current upstream state
      help: do not break a line inside the 17-column keystrokes area
      help: increase the minimum help-text width from 32 to 40 columns
      input: accommodate silly emulators that have LF instead of CR in a =
paste
      input: after reallocating a string, do not write to its old address=

      input: allocate sufficient bytes for entering a Unicode codepoint
      input: keep a multibyte character together during verbatim entry
      justify: do not copy too many bytes when trimming leading whitespac=
e
      justify: do not crash when the user attempts to justify an empty re=
gion
      justify: do not take an empty line as template for first-line inden=
tation
      justify: give the first line of a marked region its proper indentat=
ion
      justify: never break a line in leading whitespace
      justify: restore a region properly when it was marked backwards
      justify: skip over blanks after the region, to not skew the indenta=
tion
      justify: skip over in-line whitespace only, not over leading whites=
pace
      justify: trim prefixed whitespace when justifying a marked region
      justify: trim the leading blanks of a marked region at the right mo=
ment
      justify: when appropriate, move end point of marked region forward
      justify: when the cursor is at the left edge, keep it there
      locking: do not open an empty buffer when respecting the first lock=
 file
      moving: do not put the cursor at end-of-line when in a help text
      options: rename --suspend to --suspendable, to make more sense
      po: update translations and regenerate POT file and PO files
      prompt: insert a burst of bytes in one go instead of characterwise
      rcfile: allow alternate line endings in nanorc files
      rcfile: do not allow a regex for name, header, or magic to be empty=

      rcfile: don't store a coloring rule before it is complete
      rcfile: rename bindable function 'suspendenable' to 'suspendable'
      rcfile: when a start=3D is not matched with an end=3D, abandon the =
whole rule
      rcfile: when finding a mistake, skip the rest of the line
      shutdown: don't refer to an open file when there aren't any
      softwrap: when typing goes beyond the bottom row, scroll just one r=
ow
      syntax: nanorc: colorize 'rawsequences', not the obsolete 'rebindke=
ypad'
      syntax: spec: add two missing % signs, and colorize also "%triggerp=
rein"
      syntax: spec: colorize the date and author of changelog items diffe=
rently
      syntax: spec: drop invalid parentheses after "Summary"
      tweaks: abort in three situations that should never occur
      tweaks: add a COUPLE_END undo item a bit later, instead of updating=
 it
      tweaks: add a different helping variable
      tweaks: add a supporting variable, in order to condense some statem=
ents
      tweaks: add calls of die() for five theoretical programming mistake=
s
      tweaks: adjust some whitespace, reshuffle two ifs, and remove two b=
races
      tweaks: adjust the indentation after the previous change
      tweaks: always determine the second lead, to simplify the rewrap ca=
ll
      tweaks: avoid a complaint about uninitialized memory  [valgrind]
      tweaks: call add_undo() before the character is actually added
      tweaks: change a function to return the name of the lock file on su=
ccess
      tweaks: change a function with two possible results to boolean
      tweaks: change an integer to a short, and reshuffle it for better p=
acking
      tweaks: change another function with two possible results to boolea=
n
      tweaks: check for a starting quote in one place instead of three
      tweaks: combine two ifs into one
      tweaks: condense a comment, reshuffle conditions, and remove unwant=
ed one
      tweaks: condense a fragment of code
      tweaks: condense two fragments of code
      tweaks: convert integers to bytes in one place instead of two
      tweaks: copy and store a deleted character in a conciser manner
      tweaks: correct a typo, improve two indentations, and rewrap a line=

      tweaks: correct two typos in a changelog, and drop a doubled word
      tweaks: create an undo item earlier, and discard it when needed
      tweaks: don't bother reallocating the line data when undoing a line=
 join
      tweaks: do some text alignments properly: with spaces, not tabs
      tweaks: drop a check for something that will not occur
      tweaks: drop two comments that contain variable names
      tweaks: elide a function call, by copying a byte directly
      tweaks: elide an intermediate copy of a character during injection,=
 twice
      tweaks: elide an intermediate copy of an added character
      tweaks: elide a parameter, and rename a variable
      tweaks: elide a supporting variable, to make four loops slightly fa=
ster
      tweaks: elide a variable and an unneeded iteration
      tweaks: elide one variable and three gotos
      tweaks: elide three unneeded #defines
      tweaks: elide two variables and their two assignments
      tweaks: exclude a function when compiled without spell-checking sup=
port
      tweaks: extend the undo data for deleting and backspacing more dire=
ctly
      tweaks: factor out a three-line condition into a separate function
      tweaks: frob a statement, rewrap two lines, and remove a pair of br=
aces
      tweaks: frob two statements, condense another, and add a comment
      tweaks: highlight keystrokes in the documentation more consistently=

      tweaks: improve four comments, and condense two fragments of code
      tweaks: improve three comments, and reshuffle two declarations
      tweaks: improve two comments
      tweaks: improve two comments, and remove an unneeded one
      tweaks: inject the entire burst of bytes at once into the edit buff=
er
      tweaks: instead of swapping the end points later, assign them corre=
ctly
      tweaks: invert the logic of a symbol, to make more sense
      tweaks: make prompt-bar input more similar to edit-buffer input
      tweaks: make two conditions more direct, and thus elide two functio=
ns
      tweaks: mesh two bits of code together
      tweaks: move a function to after the one that it calls
      tweaks: move a function to before the one that calls it
      tweaks: move a function to before the one that calls it
      tweaks: move a function to its proper place in the order of things
      tweaks: move a function to where it is used
      tweaks: move another function to where it is used
      tweaks: move some definitions closer to where they are used
      tweaks: move two functions to before the ones that call them
      tweaks: normalize a translator hint, update one, and add another
      tweaks: normalize the indentation after the previous change
      tweaks: normalize the indentation after the previous change
      tweaks: normalize the indentation after the previous two changes
      tweaks: pull the NUL-terminating of a string into a function
      tweaks: rearrange a case item, so that PASTE is always after CUT
      tweaks: rearrange some conditions, for compactness
      tweaks: relocate a function to before its callers
      tweaks: relocate eleven functions to before they are called
      tweaks: remove a now-unused helper function
      tweaks: remove an unneeded indirection
      tweaks: remove a redundant assignment
      tweaks: remove a redundant statement, a spurious reference to 'cutb=
ottom'
      tweaks: remove a superfluous assignment, and reshuffle a call
      tweaks: remove non-UTF-8 code from three more functions
      tweaks: remove some redundant filtering, and thus elide a parameter=

      tweaks: remove some unneeded braces, not used elsewhere either
      tweaks: remove two redundant case labels
      tweaks: remove two superfluous checks
      tweaks: remove two superfluous conditions
      tweaks: rename a constant, and rename and relocate a function
      tweaks: rename a function, and condense a few comments
      tweaks: rename a function, and split a variable into two separate o=
nes
      tweaks: rename a function, to be more fitting, and improve some com=
ments
      tweaks: rename a function, to remove an obscuring abbreviation
      tweaks: rename another function, to remove the obscuring abbreviati=
on
      tweaks: rename a parameter and a variable, and reword two comments
      tweaks: rename a symbol, to match the corresponding renamed option
      tweaks: rename a variable, and add a helping one
      tweaks: rename a variable, and reshuffle a declaration
      tweaks: rename a variable, away from a single letter
      tweaks: rename a variable, away from a single letter
      tweaks: rename a variable, for aptness
      tweaks: rename a variable, reshuffle an assignment, and change a co=
de
      tweaks: rename a variable, to be a bit clearer
      tweaks: rename a variable, to get out of the way of a later rename
      tweaks: rename a variable, to not be a substring of a function name=

      tweaks: rename four more functions, to get rid of an abbreviation
      tweaks: rename four parameters, to be more distinct and telling
      tweaks: rename four variables, to be a bit more telling
      tweaks: rename to the same name two variables that have the same ro=
le
      tweaks: rename two elements of an undo record, to be more telling
      tweaks: rename two functions, for shortness
      tweaks: rename two functions, to match the style of others
      tweaks: rename two more elements of an undo record, for symmetry
      tweaks: rename two more functions, to match the style of others
      tweaks: rename two more variables, to harmonize with two others
      tweaks: rename two parameters, to not overlap with other names
      tweaks: rename two symbols, to be more precise
      tweaks: rename two variables, and frob four comments
      tweaks: rename two variables, and reshuffle a few things
      tweaks: rename two variables, for distinctiveness
      tweaks: rename two variables, to be different or for more contrast
      tweaks: rename two variables, to harmonize with two others
      tweaks: rename two variables, to suit both the marked and unmarked =
case
      tweaks: reorder a case item, to have SPLIT_BEGIN always before SPLI=
T_END
      tweaks: reshuffle a condition, for compacter code
      tweaks: reshuffle a condition, for compactness
      tweaks: reshuffle a few declarations and assignments
      tweaks: reshuffle an assignment and a free()
      tweaks: reshuffle some code, in preparation for improving it
      tweaks: reshuffle some stuff, to have related things together
      tweaks: reshuffle the setting of the starting point of a cut
      tweaks: reshuffle the trimming of leading whitespace, for compactne=
ss
      tweaks: reshuffle two declarations plus a fragment of code
      tweaks: simplify the undoing and redoing of an <Enter>
      tweaks: strip a parameter that is equivalent to 'openfile' for both=
 calls
      tweaks: strip a parameter that is TRUE for both calls
      tweaks: swap the use of 'head' and 'tail' for CUT and PASTE undo it=
ems
      tweaks: trim an unnecessary detail from an error message
      tweaks: unabbreviate the name of a variable
      tweaks: unwrap four lines, and use explicit codes where possible
      tweaks: update several comments after the previous changes
      tweaks: update some comments after the previous changes
      tweaks: use a symbol instead of a number, and drop two unneeded cas=
ts
      tweaks: use spaces when aligning things, not tabs
      tweaks: use the variable that suits 'END' better
      tweaks: weld two fragments together, twice, by eliding an unneeded =
'if'
      tweaks: when appropriate, move starting point of justified region b=
ack
      tweaks: when extending the marked region, include also exotic blank=
s
      tweaks: when undoing an addition or redoing a deletion, do not real=
locate
      undo: do not mark the buffer as modified when pasting back nothing
      undo: do not try to copy a cutbuffer that is NULL
      undo: do not try to paste back an empty cutbuffer
      undo: for an automatic hard-wrap, store the correct previous buffer=
 size
      undo: store the cursor row, for redoing filtering & justification b=
etter
      undo: treat a cut-until-end-of-buffer like a backward marked region=

      undo: use the correct original fusion point when unjoining two line=
s
      undo: when undoing a paste or an insertion, remove an added magic l=
ine
      usage: improve the description of --softwrap

--=20

Benno


--ztiMh9kUTrNXGOOcpQY40N2Rw1mhfaQu5--

--AYFttuDp2UpkqtPmxxzsXwMCwU3F9CK0x
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCgAdFiEEv9AJBh5TUFKtDfIVDSjU0qCs6IQFAl555T4ACgkQDSjU0qCs
6ISrKA//eq+MXU9K3RMrXeQjhTti9XNhPeeq9vcqRT8r794vHwMFaYiTMpPEeiQA
kTMVo5M8sD7LtLxDQIqfE4t+GRoI4FtizWGu2qSqMjqLw+FhklneXM1PSd2VFHE9
CnZ4TIYW7VQZcefnxahfGX3y8BQichdWMUq2yNkDBPHzhQnv8NHkHXDTDCzQqarV
Tar0oqe++gpTDR9B4Osx+aAizJZyeEBx3TN/rtvaRD6SUJylYyZi3TKpC5k1D7nZ
7CKt6Bi8+EJZAgBnJooW2zbYYzwUTaLiiwFoP8AT421vUPgaqq3a1tqYVsUlKPBY
fh1twfTonoEAYGKlAmui4JoBwFvhIMoJFG4OBd+HwtSd0yoYkLqdR/Y7Qsjq46wu
EYyh35lmRI+J3+9c+7snGJFuF3ZJUegC87Ba7O0uKNI5UUMGeAUbgjOeoh0so6Tl
Yf23d2pZtOc+vybnUh8pDgmPdTvq1JBYhY6gkU5Hh7Dz9bwCGkBiAhMUMKXYepdG
40vxS4WSNuGM799THn4ntdgHUx4OPNA8HnBXLke5dz4kucdd+RpRyoPEGghTFPE+
2YqaHpOOoWp4f+1ufjBJfvU3TjG4wTBxzdz1aBTA/Nji48MyxcYaS7mFnT1Uyqrs
tEprk9xjJtNP+xuOBJe7E2llaYMoii35u4f9a2eMtTNZys2LoRY=
=MUtA
-----END PGP SIGNATURE-----

--AYFttuDp2UpkqtPmxxzsXwMCwU3F9CK0x--


--===============2299461703758199098==
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Disposition: inline

X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW5mby1uYW5v
IG1haWxpbmcgbGlzdApJbmZvLW5hbm9AZ251Lm9yZwpodHRwczovL2xpc3RzLmdudS5vcmcvbWFp
bG1hbi9saXN0aW5mby9pbmZvLW5hbm8K

--===============2299461703758199098==--