Showing preview only (5,235K chars total). Download the full file or copy to clipboard to get everything.
Repository: madnight/nano
Branch: master
Commit: 6f9f08306df9
Files: 141
Total size: 4.8 MB
Directory structure:
gitextract_34l9jbph/
├── .github/
│ └── workflows/
│ └── fetch.yml
├── .gitignore
├── AUTHORS
├── COPYING
├── COPYING.DOC
├── ChangeLog
├── ChangeLog.1999-2006
├── ChangeLog.2007-2015
├── IMPROVEMENTS
├── Makefile.am
├── NEWS
├── README
├── README.hacking
├── THANKS
├── TODO
├── autogen.sh
├── configure.ac
├── doc/
│ ├── .gitignore
│ ├── Makefile.am
│ ├── cheatsheet.html
│ ├── faq.html
│ ├── nano.1
│ ├── nano.texi
│ ├── nanorc.5
│ ├── rnano.1
│ └── sample.nanorc.in
├── m4/
│ ├── Makefile.am
│ ├── ac_define_dir.m4
│ └── ax_check_compile_flag.m4
├── nano-regress
├── po/
│ ├── .gitignore
│ ├── LINGUAS
│ ├── Makevars
│ ├── POTFILES.in
│ ├── ar.po
│ ├── bg.po
│ ├── ca.po
│ ├── cs.po
│ ├── da.po
│ ├── de.po
│ ├── eo.po
│ ├── es.po
│ ├── eu.po
│ ├── fi.po
│ ├── fr.po
│ ├── ga.po
│ ├── gl.po
│ ├── hr.po
│ ├── hu.po
│ ├── id.po
│ ├── is.po
│ ├── it.po
│ ├── ja.po
│ ├── ka.po
│ ├── kk.po
│ ├── ko.po
│ ├── ms.po
│ ├── nano.pot
│ ├── nb.po
│ ├── nl.po
│ ├── pl.po
│ ├── pt.po
│ ├── pt_BR.po
│ ├── ro.po
│ ├── ru.po
│ ├── sk.po
│ ├── sl.po
│ ├── sq.po
│ ├── sr.po
│ ├── sv.po
│ ├── tr.po
│ ├── uk.po
│ ├── update_linguas.sh
│ ├── vi.po
│ ├── zh_CN.po
│ └── zh_TW.po
├── roll-a-release.sh
├── src/
│ ├── Makefile.am
│ ├── browser.c
│ ├── chars.c
│ ├── color.c
│ ├── cut.c
│ ├── definitions.h
│ ├── files.c
│ ├── global.c
│ ├── help.c
│ ├── history.c
│ ├── move.c
│ ├── nano.c
│ ├── prompt.c
│ ├── prototypes.h
│ ├── rcfile.c
│ ├── search.c
│ ├── text.c
│ ├── utils.c
│ └── winio.c
└── syntax/
├── Makefile.am
├── asm.nanorc
├── autoconf.nanorc
├── awk.nanorc
├── c.nanorc
├── changelog.nanorc
├── cmake.nanorc
├── css.nanorc
├── default.nanorc
├── email.nanorc
├── extra/
│ ├── ada.nanorc
│ ├── fortran.nanorc
│ ├── haskell.nanorc
│ ├── povray.nanorc
│ └── spec.nanorc
├── go.nanorc
├── groff.nanorc
├── guile.nanorc
├── html.nanorc
├── java.nanorc
├── javascript.nanorc
├── json.nanorc
├── lua.nanorc
├── makefile.nanorc
├── man.nanorc
├── markdown.nanorc
├── nanohelp.nanorc
├── nanorc.nanorc
├── nftables.nanorc
├── objc.nanorc
├── ocaml.nanorc
├── patch.nanorc
├── perl.nanorc
├── php.nanorc
├── po.nanorc
├── python.nanorc
├── ruby.nanorc
├── rust.nanorc
├── sh.nanorc
├── sql.nanorc
├── tcl.nanorc
├── tex.nanorc
├── texinfo.nanorc
├── xml.nanorc
└── yaml.nanorc
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/workflows/fetch.yml
================================================
name: Fetch-upstream
on:
schedule:
- cron: '0 0 * * 1'
workflow_dispatch:
jobs:
fetch:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: '5'
- name: Fetch upstream (dirty hacks)
run: |
mv .github .github~ # hide it from git
git reset --hard HEAD~3
git pull git://git.savannah.gnu.org/nano.git
mv .github~ .github
- name: Commit this script
run: |
git add .
git -c user.email='mail@beuke.org' -c user.name='Fabian Beuke' commit \
-m 'Merge pull request #9 from davidhcefx/patch-3'
git push --force
================================================
FILE: .gitignore
================================================
*~
*.bak
*.o
*.orig
*.patch
*.swp
.deps
.libs
Makefile
Makefile.in
core
.gdb_history
.gdbinit
/src/nano
/src/revision.h
/ABOUT-NLS
/INSTALL
/aclocal.m4
/ar-lib
/autom4te.cache
/compile
/config.cache
/config.guess
/config.h
/config.h.in
/config.log
/config.rpath
/config.status
/config.sub
/configure
/depcomp
/install-sh
/intl
/missing
/mkinstalldirs
/stamp-h1
# Gettext m4 files:
/m4/codeset.m4
/m4/extern-inline.m4
/m4/fcntl-o.m4
/m4/gettext.m4
/m4/glibc2.m4
/m4/glibc21.m4
/m4/host-cpu-c-abi.m4
/m4/iconv.m4
/m4/intdiv0.m4
/m4/intl.m4
/m4/intldir.m4
/m4/intlmacosx.m4
/m4/intmax.m4
/m4/inttypes-pri.m4
/m4/inttypes_h.m4
/m4/lcmessage.m4
/m4/lib-ld.m4
/m4/lib-link.m4
/m4/lib-prefix.m4
/m4/lock.m4
/m4/longlong.m4
/m4/nls.m4
/m4/po.m4
/m4/printf-posix.m4
/m4/progtest.m4
/m4/size_max.m4
/m4/stdint_h.m4
/m4/threadlib.m4
/m4/uintmax_t.m4
/m4/visibility.m4
/m4/wchar_t.m4
/m4/wint_t.m4
/m4/xsize.m4
# Gnulib stuff:
/gnulib/
/lib/
/m4/.gitignore
/m4/gnulib-cache.m4
/snippet/
================================================
FILE: AUTHORS
================================================
This file lists people who have made significant contributions to the
nano editor. Please see the ChangeLog for specific changes by author.
----------------------------------------------------------------------
Chris Allegretta <chrisa@asty.org>
* Original program author and long-time maintainer.
Benno Schulenberg <bensberg@telfort.nl>
* An array of small bug fixes, the cut-word and block-jump
routines, text selection by holding Shift, macro recording
and replay, extra key bindings, the --indicator, --minibar,
and --zero options, and braced functions in string binds.
Current maintainer.
David Lawrence Ramsey <pooka109@gmail.com>
* Multiple-buffer support, operating-dir option (-o), bug fixes
for display routines, wrapping code, spelling fixes, parts of
UTF-8 support, softwrap overhaul, constantshow mode, undoable
indentations, undoable justifications, justifiable regions,
and numerous other fixes. Former stable-series maintainer.
Jordi Mallach <jordi@gnu.org>
* Debian package maintainer, fellow bug squasher, translator
for Catalan. Former head of internationalization support.
Adam Rogoyski <rogoyski@cs.utexas.edu>
* New write_file() function, read_file() optimization, mouse
support, resize support, nohelp (-x) option, justify function,
follow symlink option and bugfixes, and much more.
Robert Siemborski <rjs3@andrew.cmu.edu>
* Miscellaneous cut, display, replace, and other bug fixes,
original and new "magic line" code, read_line() function,
new edit display routines.
Rocco Corsi <rocco.corsi@sympatico.ca>
* Internal spelling code, many optimizations and bug fixes
for findnextstr() and search-related functions, various
display and file-handling fixes.
David Benbennick <dbenbenn@math.cornell.edu>
* Wrap and justify bugfixes/enhancements, new color syntax
code, memleak fixes, parts of the UTF-8 support, and other
miscellaneous fixes.
Mike Frysinger <vapier@gentoo.org>
* Whitespace display mode, --enable-utf8/--disable-utf8 configure
options for ncurses, many new color regexes and improvements to
existing ones in syntax/*.nanorc, the move from svn to git, the
conversion to gnulib, and miscellaneous bug fixes. Former
Gentoo package maintainer.
Mark Majeres <mark@engine12.com>
* A functional undo/redo system, and coloring nano's interface.
Mahyar Abbaspour <mahyar.abaspour@gmail.com>
* Improved handling of SIGWINCH.
Mike Scalora <mike@scalora.org>
* The comment/uncomment feature.
Faissal Bensefia <faissaloo@gmail.com>
* Line numbers.
Sumedh Pendurkar <sumedh.pendurkar@gmail.com>
* The word-completion feature.
Rishabh Dave <rishabhddave@gmail.com>
* Searchable help.
Marco Diego Aurélio Mesquita <marcodiegomesquita@gmail.com>
* Filtering text through an external command.
* Placing anchors (bookmarks) and jumping to them.
Brand Huntsman <alpha@qzx.com>
* The delayed parsing of syntax files.
================================================
FILE: COPYING
================================================
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
================================================
FILE: COPYING.DOC
================================================
GNU Free Documentation License
Version 1.2, November 2002
Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
0. PREAMBLE
The purpose of this License is to make a manual, textbook, or other
functional and useful document "free" in the sense of freedom: to
assure everyone the effective freedom to copy and redistribute it,
with or without modifying it, either commercially or noncommercially.
Secondarily, this License preserves for the author and publisher a way
to get credit for their work, while not being considered responsible
for modifications made by others.
This License is a kind of "copyleft", which means that derivative
works of the document must themselves be free in the same sense. It
complements the GNU General Public License, which is a copyleft
license designed for free software.
We have designed this License in order to use it for manuals for free
software, because free software needs free documentation: a free
program should come with manuals providing the same freedoms that the
software does. But this License is not limited to software manuals;
it can be used for any textual work, regardless of subject matter or
whether it is published as a printed book. We recommend this License
principally for works whose purpose is instruction or reference.
1. APPLICABILITY AND DEFINITIONS
This License applies to any manual or other work, in any medium, that
contains a notice placed by the copyright holder saying it can be
distributed under the terms of this License. Such a notice grants a
world-wide, royalty-free license, unlimited in duration, to use that
work under the conditions stated herein. The "Document", below,
refers to any such manual or work. Any member of the public is a
licensee, and is addressed as "you". You accept the license if you
copy, modify or distribute the work in a way requiring permission
under copyright law.
A "Modified Version" of the Document means any work containing the
Document or a portion of it, either copied verbatim, or with
modifications and/or translated into another language.
A "Secondary Section" is a named appendix or a front-matter section of
the Document that deals exclusively with the relationship of the
publishers or authors of the Document to the Document's overall subject
(or to related matters) and contains nothing that could fall directly
within that overall subject. (Thus, if the Document is in part a
textbook of mathematics, a Secondary Section may not explain any
mathematics.) The relationship could be a matter of historical
connection with the subject or with related matters, or of legal,
commercial, philosophical, ethical or political position regarding
them.
The "Invariant Sections" are certain Secondary Sections whose titles
are designated, as being those of Invariant Sections, in the notice
that says that the Document is released under this License. If a
section does not fit the above definition of Secondary then it is not
allowed to be designated as Invariant. The Document may contain zero
Invariant Sections. If the Document does not identify any Invariant
Sections then there are none.
The "Cover Texts" are certain short passages of text that are listed,
as Front-Cover Texts or Back-Cover Texts, in the notice that says that
the Document is released under this License. A Front-Cover Text may
be at most 5 words, and a Back-Cover Text may be at most 25 words.
A "Transparent" copy of the Document means a machine-readable copy,
represented in a format whose specification is available to the
general public, that is suitable for revising the document
straightforwardly with generic text editors or (for images composed of
pixels) generic paint programs or (for drawings) some widely available
drawing editor, and that is suitable for input to text formatters or
for automatic translation to a variety of formats suitable for input
to text formatters. A copy made in an otherwise Transparent file
format whose markup, or absence of markup, has been arranged to thwart
or discourage subsequent modification by readers is not Transparent.
An image format is not Transparent if used for any substantial amount
of text. A copy that is not "Transparent" is called "Opaque".
Examples of suitable formats for Transparent copies include plain
ASCII without markup, Texinfo input format, LaTeX input format, SGML
or XML using a publicly available DTD, and standard-conforming simple
HTML, PostScript or PDF designed for human modification. Examples of
transparent image formats include PNG, XCF and JPG. Opaque formats
include proprietary formats that can be read and edited only by
proprietary word processors, SGML or XML for which the DTD and/or
processing tools are not generally available, and the
machine-generated HTML, PostScript or PDF produced by some word
processors for output purposes only.
The "Title Page" means, for a printed book, the title page itself,
plus such following pages as are needed to hold, legibly, the material
this License requires to appear in the title page. For works in
formats which do not have any title page as such, "Title Page" means
the text near the most prominent appearance of the work's title,
preceding the beginning of the body of the text.
A section "Entitled XYZ" means a named subunit of the Document whose
title either is precisely XYZ or contains XYZ in parentheses following
text that translates XYZ in another language. (Here XYZ stands for a
specific section name mentioned below, such as "Acknowledgements",
"Dedications", "Endorsements", or "History".) To "Preserve the Title"
of such a section when you modify the Document means that it remains a
section "Entitled XYZ" according to this definition.
The Document may include Warranty Disclaimers next to the notice which
states that this License applies to the Document. These Warranty
Disclaimers are considered to be included by reference in this
License, but only as regards disclaiming warranties: any other
implication that these Warranty Disclaimers may have is void and has
no effect on the meaning of this License.
2. VERBATIM COPYING
You may copy and distribute the Document in any medium, either
commercially or noncommercially, provided that this License, the
copyright notices, and the license notice saying this License applies
to the Document are reproduced in all copies, and that you add no other
conditions whatsoever to those of this License. You may not use
technical measures to obstruct or control the reading or further
copying of the copies you make or distribute. However, you may accept
compensation in exchange for copies. If you distribute a large enough
number of copies you must also follow the conditions in section 3.
You may also lend copies, under the same conditions stated above, and
you may publicly display copies.
3. COPYING IN QUANTITY
If you publish printed copies (or copies in media that commonly have
printed covers) of the Document, numbering more than 100, and the
Document's license notice requires Cover Texts, you must enclose the
copies in covers that carry, clearly and legibly, all these Cover
Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
the back cover. Both covers must also clearly and legibly identify
you as the publisher of these copies. The front cover must present
the full title with all words of the title equally prominent and
visible. You may add other material on the covers in addition.
Copying with changes limited to the covers, as long as they preserve
the title of the Document and satisfy these conditions, can be treated
as verbatim copying in other respects.
If the required texts for either cover are too voluminous to fit
legibly, you should put the first ones listed (as many as fit
reasonably) on the actual cover, and continue the rest onto adjacent
pages.
If you publish or distribute Opaque copies of the Document numbering
more than 100, you must either include a machine-readable Transparent
copy along with each Opaque copy, or state in or with each Opaque copy
a computer-network location from which the general network-using
public has access to download using public-standard network protocols
a complete Transparent copy of the Document, free of added material.
If you use the latter option, you must take reasonably prudent steps,
when you begin distribution of Opaque copies in quantity, to ensure
that this Transparent copy will remain thus accessible at the stated
location until at least one year after the last time you distribute an
Opaque copy (directly or through your agents or retailers) of that
edition to the public.
It is requested, but not required, that you contact the authors of the
Document well before redistributing any large number of copies, to give
them a chance to provide you with an updated version of the Document.
4. MODIFICATIONS
You may copy and distribute a Modified Version of the Document under
the conditions of sections 2 and 3 above, provided that you release
the Modified Version under precisely this License, with the Modified
Version filling the role of the Document, thus licensing distribution
and modification of the Modified Version to whoever possesses a copy
of it. In addition, you must do these things in the Modified Version:
A. Use in the Title Page (and on the covers, if any) a title distinct
from that of the Document, and from those of previous versions
(which should, if there were any, be listed in the History section
of the Document). You may use the same title as a previous version
if the original publisher of that version gives permission.
B. List on the Title Page, as authors, one or more persons or entities
responsible for authorship of the modifications in the Modified
Version, together with at least five of the principal authors of the
Document (all of its principal authors, if it has fewer than five),
unless they release you from this requirement.
C. State on the Title page the name of the publisher of the
Modified Version, as the publisher.
D. Preserve all the copyright notices of the Document.
E. Add an appropriate copyright notice for your modifications
adjacent to the other copyright notices.
F. Include, immediately after the copyright notices, a license notice
giving the public permission to use the Modified Version under the
terms of this License, in the form shown in the Addendum below.
G. Preserve in that license notice the full lists of Invariant Sections
and required Cover Texts given in the Document's license notice.
H. Include an unaltered copy of this License.
I. Preserve the section Entitled "History", Preserve its Title, and add
to it an item stating at least the title, year, new authors, and
publisher of the Modified Version as given on the Title Page. If
there is no section Entitled "History" in the Document, create one
stating the title, year, authors, and publisher of the Document as
given on its Title Page, then add an item describing the Modified
Version as stated in the previous sentence.
J. Preserve the network location, if any, given in the Document for
public access to a Transparent copy of the Document, and likewise
the network locations given in the Document for previous versions
it was based on. These may be placed in the "History" section.
You may omit a network location for a work that was published at
least four years before the Document itself, or if the original
publisher of the version it refers to gives permission.
K. For any section Entitled "Acknowledgements" or "Dedications",
Preserve the Title of the section, and preserve in the section all
the substance and tone of each of the contributor acknowledgements
and/or dedications given therein.
L. Preserve all the Invariant Sections of the Document,
unaltered in their text and in their titles. Section numbers
or the equivalent are not considered part of the section titles.
M. Delete any section Entitled "Endorsements". Such a section
may not be included in the Modified Version.
N. Do not retitle any existing section to be Entitled "Endorsements"
or to conflict in title with any Invariant Section.
O. Preserve any Warranty Disclaimers.
If the Modified Version includes new front-matter sections or
appendices that qualify as Secondary Sections and contain no material
copied from the Document, you may at your option designate some or all
of these sections as invariant. To do this, add their titles to the
list of Invariant Sections in the Modified Version's license notice.
These titles must be distinct from any other section titles.
You may add a section Entitled "Endorsements", provided it contains
nothing but endorsements of your Modified Version by various
parties--for example, statements of peer review or that the text has
been approved by an organization as the authoritative definition of a
standard.
You may add a passage of up to five words as a Front-Cover Text, and a
passage of up to 25 words as a Back-Cover Text, to the end of the list
of Cover Texts in the Modified Version. Only one passage of
Front-Cover Text and one of Back-Cover Text may be added by (or
through arrangements made by) any one entity. If the Document already
includes a cover text for the same cover, previously added by you or
by arrangement made by the same entity you are acting on behalf of,
you may not add another; but you may replace the old one, on explicit
permission from the previous publisher that added the old one.
The author(s) and publisher(s) of the Document do not by this License
give permission to use their names for publicity for or to assert or
imply endorsement of any Modified Version.
5. COMBINING DOCUMENTS
You may combine the Document with other documents released under this
License, under the terms defined in section 4 above for modified
versions, provided that you include in the combination all of the
Invariant Sections of all of the original documents, unmodified, and
list them all as Invariant Sections of your combined work in its
license notice, and that you preserve all their Warranty Disclaimers.
The combined work need only contain one copy of this License, and
multiple identical Invariant Sections may be replaced with a single
copy. If there are multiple Invariant Sections with the same name but
different contents, make the title of each such section unique by
adding at the end of it, in parentheses, the name of the original
author or publisher of that section if known, or else a unique number.
Make the same adjustment to the section titles in the list of
Invariant Sections in the license notice of the combined work.
In the combination, you must combine any sections Entitled "History"
in the various original documents, forming one section Entitled
"History"; likewise combine any sections Entitled "Acknowledgements",
and any sections Entitled "Dedications". You must delete all sections
Entitled "Endorsements".
6. COLLECTIONS OF DOCUMENTS
You may make a collection consisting of the Document and other documents
released under this License, and replace the individual copies of this
License in the various documents with a single copy that is included in
the collection, provided that you follow the rules of this License for
verbatim copying of each of the documents in all other respects.
You may extract a single document from such a collection, and distribute
it individually under this License, provided you insert a copy of this
License into the extracted document, and follow this License in all
other respects regarding verbatim copying of that document.
7. AGGREGATION WITH INDEPENDENT WORKS
A compilation of the Document or its derivatives with other separate
and independent documents or works, in or on a volume of a storage or
distribution medium, is called an "aggregate" if the copyright
resulting from the compilation is not used to limit the legal rights
of the compilation's users beyond what the individual works permit.
When the Document is included in an aggregate, this License does not
apply to the other works in the aggregate which are not themselves
derivative works of the Document.
If the Cover Text requirement of section 3 is applicable to these
copies of the Document, then if the Document is less than one half of
the entire aggregate, the Document's Cover Texts may be placed on
covers that bracket the Document within the aggregate, or the
electronic equivalent of covers if the Document is in electronic form.
Otherwise they must appear on printed covers that bracket the whole
aggregate.
8. TRANSLATION
Translation is considered a kind of modification, so you may
distribute translations of the Document under the terms of section 4.
Replacing Invariant Sections with translations requires special
permission from their copyright holders, but you may include
translations of some or all Invariant Sections in addition to the
original versions of these Invariant Sections. You may include a
translation of this License, and all the license notices in the
Document, and any Warranty Disclaimers, provided that you also include
the original English version of this License and the original versions
of those notices and disclaimers. In case of a disagreement between
the translation and the original version of this License or a notice
or disclaimer, the original version will prevail.
If a section in the Document is Entitled "Acknowledgements",
"Dedications", or "History", the requirement (section 4) to Preserve
its Title (section 1) will typically require changing the actual
title.
9. TERMINATION
You may not copy, modify, sublicense, or distribute the Document except
as expressly provided for under this License. Any other attempt to
copy, modify, sublicense or distribute the Document is void, and will
automatically terminate your rights under this License. However,
parties who have received copies, or rights, from you under this
License will not have their licenses terminated so long as such
parties remain in full compliance.
10. FUTURE REVISIONS OF THIS LICENSE
The Free Software Foundation may publish new, revised versions
of the GNU Free Documentation License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns. See
http://www.gnu.org/copyleft/.
Each version of the License is given a distinguishing version number.
If the Document specifies that a particular numbered version of this
License "or any later version" applies to it, you have the option of
following the terms and conditions either of that specified version or
of any later version that has been published (not as a draft) by the
Free Software Foundation. If the Document does not specify a version
number of this License, you may choose any version ever published (not
as a draft) by the Free Software Foundation.
ADDENDUM: How to use this License for your documents
To use this License in a document you have written, include a copy of
the License in the document and put the following copyright and
license notices just after the title page:
Copyright (c) YEAR YOUR NAME.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
replace the "with...Texts." line with this:
with the Invariant Sections being LIST THEIR TITLES, with the
Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
If you have Invariant Sections without Cover Texts, or some other
combination of the three, merge those two alternatives to suit the
situation.
If your document contains nontrivial examples of program code, we
recommend releasing these examples in parallel under your choice of
free software license, such as the GNU General Public License,
to permit their use in free software.
================================================
FILE: ChangeLog
================================================
Changes between v8.7 and v9.0:
------------------------------
Benno Schulenberg (92):
bindings: assign M-< and M-> to the sideways-scrolling functions
build: add move.c to the list of files that contain translatable strings
build: avoid three warnings when compiling against glibc-2.43
build: exclude whole-window sideways scrolling from the tiny version
bump version numbers and add a news item for the 9.0 release
copyright: update the years for significantly changed files
copyright: update the years for significantly changed files
copyright: update the years for the FSF
display: add extra variable, to avoid one-way toggling of SOLO_SIDESCROLL
display: begin looking for new start matches at the correct place
display: correct the previous commit -- the -1 is needed when going left
display: draw the "<" marker only if part of the line is onscreen
display: for narrow windows, fall back to single-line sidescrolling
display: let option --jumpyscrolling affect also sideways scrolling
display: put cursor at CUSHION columns from edge when scrolling sideways
display: redraw the screen also when 'brink' is not what it should be
display: store `brink` per buffer, to keep the viewport stable
display: when scrolling sideways, refresh edit window only if mark is on
docs: add an Exit Status section to the man page and the manual
docs: add a notice about the changed sideways scrolling behavior
docs: add a section about the recording and replaying of keyboard macros
docs: add ^B among the list of keystrokes for --modernbindings
docs: add notices about the reassignment of the M-< and M-> keystrokes
docs: adjust the cheatsheet for the new functions and changed bindings
docs: adjust the description of `scrollright` for the changed behavior
docs: adjust the description of `scrollright` for the improved behavior
docs: advise the use of --sysconfdir=/etc when configuring nano
docs: copy the 8.7.1 news item from the release branch
docs: document the new bindable `scrollleft` and `scrollright` functions
docs: document the new --solosidescroll and 'set solosidescroll' options
docs: explain what "overlong" means for --breaklonglines
docs: in the cheatsheet, place Ctrl+L in the Special movement section
docs: mention that M-Left, M-Right, M-Up, and M-Down are valid keynames
docs: reshuffle the --solosidescroll option to match the order in --help
docs: trim stuff that is more than four years old from the changelog
docs: use rebindable names M-Up and M-Down instead of Alt+Up and Alt+Down
feedback: prevent interpretation of %s and similar in a filename
files: include also the slash when re-adding the filename to the path
gnulib: update to a recent version, to allow compiling against glibc-2.43
gnulib: update to its current upstream state
help: group the sideways scrolling keystrokes with the horizontal movers
history: create the ~/.local directory with limited access rights
input: allow `recordmacro` and `runmacro` to continue cuts and copies
input: prevent also a string bind from breaking a chain of cuts or copies
input: prevent most toggles from breaking a series of cuts or copies
mouse: allow clicking before the answer to place cursor at its beginning
moving: ignore `scrollleft` and `scrollright` when softwrapping
moving: ignore `scrollleft` and `scrollright` with --solosidescroll too
moving: make the minimum step for sideways scrolling two cells
moving: stay in the viewport when stepping to a longer line
moving: when scrolling sideways, search also upward for a longer line
new default feature: smooth whole-window sideways scrolling
new feature: bindable functions for scrolling a tabsize left or right
new feature: clicking in the scrollbar jumps to the corresponding line
options: accept --solosidescroll and 'set solosidescroll'
rcfile: allow rebinding M-Left, M-Right, M-Up, and M-Down
syntax: elisp: remove file -- something specific to Emacs is not for nano
syntax: groff, man: colorize also \" tail comments and \# line comments
syntax: guile: colorize more syntax words and procedure names
syntax: nanorc: colorize M-Left, M-Right, M-Up, M-Down as valid keynames
syntax: python: colorize also the `match` and `case` keywords
syntax: python: require a blank after the keyword `match`
syntaxes: add a license line to the files created by Mark Oteiza
tweaks: add a comment for an unclear fragment of code
tweaks: avoid having to restore the original click coordinates
tweaks: condense the Python coloring rules, and reword a comment
tweaks: condense two oververbose comments
tweaks: correct a comment
tweaks: correct and simplify the logic from the previous two commits
tweaks: defend against hypothetical format specifiers
tweaks: give the three "debugging" feedback messages a more unusual color
tweaks: lowercase subsequent words in section titles, to be less pompous
tweaks: move a function to a more logical place
tweaks: no need to be overpolite when giving directions
tweaks: normalize brace placement after the previous change
tweaks: reduce the scope of two variables
tweaks: refer to two renamed gnulib modules with their adjusted names
tweaks: remove an unneeded parameter from get_mouseinput()
tweaks: rename a type, away from a double abbreviation
tweaks: rename a variable, away from a double abbreviation
tweaks: rename a variable, for contrast, and to be more fitting
tweaks: rename a variable, to be more fitting
tweaks: rename a variable, to be more fitting and away from an abbrev
tweaks: rename a variable whose function has changed over time
tweaks: rename three functions, to be more accurate
tweaks: rename two functions, reword some comments, rewrap a line
tweaks: rename two variables, away from abbreviations
tweaks: reorder a list of keys, starting with singles, ending with group
tweaks: replace the three instances of impersonal "one" with direct "you"
tweaks: reshuffle or transmute a few lines, to elide an 'if'
tweaks: slightly adjust a wording
tweaks: slightly improve three comments in the sample nanorc
Charles Mirabile (1):
macro: cancel the recording if nothing was entered between start and stop
Changes between v8.6 and v8.7:
------------------------------
Benno Schulenberg (17):
build: avoid a warning when configured with --disable-multibuffer
bump version numbers and add a news item for the 8.7 release
display: regenerate the screen after a resize during a spell check
display: regenerate the screen only before and after waiting for input
display: upon resize, redraw the subwindows only when fully initialized
docs: add example of copy-to-clipboard-with-OSC52 to the sample nanorc
docs: mention that `execute` can pipe buffer or region to the command
gnulib: update to its current upstream state
moving: prevent a negative relative jump from going beyond top of buffer
new feature: execute a command without capturing the output
startup: register the handler for SIGWINCH much earlier
text: when blanking a line due to --autoindent, keep the mark in sync
tweaks: improve a few comments, drop one, and unwrap some lines
tweaks: improve the punctuation of one item in the sample nanorc
tweaks: replace a remaining double dash with a true emdash
tweaks: reshuffle some #ifdefs, and rename a function
tweaks: unwrap three lines, for esthetics
Changes between v8.5 and v8.6:
------------------------------
Benno Schulenberg (22):
browser: let a refresh also reread the file list, like it used to
browser: redo the layout only when an actual resize occurred
browser: redo the layout when the window _might_ have resized
bump version numbers and add a news item for the 8.6 release
completion: don't stop looking for candidates one byte too early
display: when resizing, redraw the bottom bars also when in file browser
docs: document the ++/-- prefix feature for the `gotoline` function
gnulib: update to its current upstream state
history: do not forget anchors when line number is given on command line
new feature: interpret a line number prefixed with ++ or -- as relative
rcfile: accept also {}} in a string bind, for symmetry with {{}
syntax: po: colorize also the %b and %B format specifiers
tweaks: normalize the indentation after the previous change
tweaks: put two related checks together, like they are elsewhere
tweaks: remove a check for a symbol that never gets defined
tweaks: rename a parameter, and invert its logic
tweaks: reshuffle a condition to a better place, like it is elsewhere
tweaks: reshuffle a few lines, for density and to elide an 'else'
tweaks: reshuffle some lines, to group things better
tweaks: split the goto function into an interactive and command-line one
tweaks: swap two symbolic menu names, for giggles
tweaks: use a direct parameter instead of an intermediary boolean
Changes between v8.4 and v8.5:
------------------------------
Benno Schulenberg (44):
anchor: change the aspect of any anchor to a dagger (†)
bindings: always bind ^Q in the WriteOut menu, not only for --saveonexit
bindings: do not list ^L twice (in main help text and help lines)
bindings: let ^L just center the cursor, not cycle it -- let M-% cycle it
bindings: lowercase an ASCII character in a locale-proof manner
build: fix compilation for config with --enable-tiny --enable-histories
build: fix compilation when configured with --disable-histories
build: fix compilation when configured with --disable-utf8
build: swap two linker arguments, to enable compilation on Cygwin
bump version numbers and add a news item for the 8.5 release
docs: add a suggested key combo for wiping all anchors to sample nanorc
docs: in cheatsheet, equalize the spacing in three consecutive blocks
docs: mention that --positionlog also saves the positions of anchors
docs: reword the descriptions of --operatingdir and 'set operatingdir'
feedback: change the appearance of anchors when they will be saved
feedback: change the level of a certain message, to show it is special
feedback: report the setting and removing of an anchor just once
feedback: show in mini bar the presence of an anchor on the cursor line
feedback: suppress "Jumped to anchor" when line numbers are active
feedback: suppress "Removed anchor" when the mini bar is hidden
gnulib: pull in the fix for a cross-compilation failure
gnulib: update to its current upstream state
history: always save the last cursor position, also for line=1,column=1
history: always save the positions of any anchors
history: reverse the order in the file-positions list, to latest first
menus: reshuffle an item, to avoid truncating its help-line label
moving: make cycling (M-%) independent from centering (^L)
new feature: exit with an error status (2) for ^X^Q and ^O^Q
new feature: save and restore anchors when the first line has an anchor
options: accept --whitespacedisplay and 'set whitespacedisplay'
syntax: default: show hard spaces with a lightgrey background
syntaxes: add a license line to files that were created by Mike Frysinger
syntaxes: use character classes instead of range expressions
tweaks: avoid using toupper() and tolower() where easily possible
tweaks: elide an auxiliary variable that is no longer needed
tweaks: elide the unneeded passing around of three parameters
tweaks: elide the unneeded use of an auxiliary function
tweaks: in the browser, implement M-\ and M-/ in a slightly denser way
tweaks: properly tag some keywords in texi doc, instead of using quotes
tweaks: random unimportant edits here and there
tweaks: rename 'use_utf8' to 'using_utf8', and make it a global variable
tweaks: shorten a URL, and update it to use https
tweaks: use reallocations, instead of new allocations plus frees
tweaks: use the correct modifier, to avoid a warning on 32-bit machines
Peter Michaux (1):
build: add the 'm4/host-cpu-c-abi.m4' file to .gitignore
Changes between v8.3 and v8.4:
------------------------------
Benno Schulenberg (40):
bump version numbers and add a news item for the 8.4 release
copyright: update the years for the FSF
docs: add a suggestion to the FAQ on how to configure nano for git
docs: change two interface colors in the sample nanorc
docs: improve the description of the `constantshow` bindable function
docs: in the FAQ, replace an old item with an item about Byte Order Marks
docs: replace a word that is better not used in the plural
docs: use proper emdashes instead of double hyphens: "--" => "\(em"
execute: retain what the user typed before a tool was invoked
feedback: warn when the cursor sits on a Byte Order Mark (BOM)
gnulib: update to its current upstream state
input: adjust file browser and help viewer for changed bracketed pastes
input: implement bracketed pastes in a different manner
input: make bracketed paste more robust against loss of closing sequence
input: remove a special-case workaround
input: remove single-keycode detection from the bracketed-paste routine
input: robustness is good, but dropping a key code is not a good idea
input: wait a bit for "~" when bracketed-paste sequence is incomplete
prompt: accept tabs in an external paste as literal tabs
prompt: beep when an external paste contains a command code
syntax: groff: highlight the zeroeth macro argument too
syntax: man: highlight some escapes, like \& and \(em, specially
syntax: po: colorize also a 'msgctxt' line, and the 'c++-format' flag
syntax: po: colorize also format specifiers like "%.6f"
syntax: po: colorize also format specifiers like "%<PRIu64>"
syntax: po: colorize also Python's "%(name)x" format specifiers
syntax: po: colorize also the %llu and %hhi format specifiers
syntax: po: colorize also the Python-specific conversion specifier "%r"
tweaks: add a translator hint for the three changed file-writing prompts
tweaks: add missing closing quotes, as reported by `mandoc -T lint ...`
tweaks: avoid running tolower() on an out-of-range value
tweaks: change the man-page markup of options that take an argument
tweaks: condense a fragment of code
tweaks: consistently use "\fR" for switching back to normal, roman font
tweaks: prevent some color keywords from getting hyphenated in man page
tweaks: prevent some more keywords from getting hyphenated
tweaks: remove an unwanted newline from a debugging message
tweaks: remove three redundant pairs of parentheses from a nanorc regex
tweaks: remove two commented-out lines and two unused variables
tweaks: swap two fragments of code, to allow unwrapping a line
Brand Huntsman (1):
files: improve the wording of the normal file-writing prompts
Changes between v8.2 and v8.3:
------------------------------
Benno Schulenberg (16):
build: fix a compilation error with gcc-15
bump version numbers and add a news item for the 8.3 release
docs: add Shift+PgUp/PgDown to the FAQ item about urxvt modified keys
docs: clarify the possible effects of a misuse of braced function names
docs: put a space after "|" and before "{enter}" in the sample nanorc
gnulib: update to its current upstream state
syntax: groff: correct the mistaken .rof extension to .roff
syntax: groff: recognize also the .mom extension
syntax: makefile: colorize also multiple targets
syntax: markdown: accept also digit 0 in a list marker
syntax: spec: colorize all canonical architecture names
tweaks: add a small clarifying comment
tweaks: add a translator hint
tweaks: adjust another translator hint, and add two more
tweaks: adjust a translator hint, and add another one
tweaks: drop six unneeded casts
LIU Hao (1):
syntax: asm: add end-of-word anchors to the keywords
Lukáš Zaoral (1):
memory: avoid a leak when linter aborts after producing parsable output
Changes between v8.1 and v8.2:
------------------------------
Benno Schulenberg (22):
bindings: at a Yes-No-All prompt, accept also ^A for "All"
bindings: let the central numpad key (with Ctrl) center the current line
bump version numbers and add a news item for the 8.2 release
docs: do not quote the argument of 'include' statements in sample nanorc
docs: mention former maintainership last among an author's contributions
docs: mention the availability of ^Y, ^N, and ^A at a Yes-No prompt
docs: trim stuff that is more than four years old from the changelog
gnulib: update to its current upstream state
macro: insert it in keystroke buffer without discarding latter's contents
moving: for Alt+Home/Alt+End, refresh the screen when the mark is on
syntax: autoconf: colorize the keywords 'case', 'esac', and 'ifelse' too
syntax: awk: add a missing "|" between "\?" and ":"
syntax: awk: colorize escape sequences specially
syntax: awk: rewrite a regex more densely, and add the missing ~ operator
syntax: man: colorize also the .MT .ME .EX .EE .SY .OP and .YS macros
syntax: nanorc: an unquoted argument of 'include' may not contain blanks
tweaks: delete three redundant checks from the undo/redo code
tweaks: improve or rewrap six comments, and add two missing ones
tweaks: move a condition to the only place that needs it
tweaks: rename a symbol, away from an obscure abbreviation
tweaks: reshuffle a seldom-used function to the end of an if-else series
tweaks: unwrap three lines that don't need to be wrapped
Collin Funk (1):
build: update a symbol that was renamed in gnulib
Changes between v8.0 and v8.1:
------------------------------
Benno Schulenberg (56):
bindings: let ^L put the cursor line at center, then top, then bottom
build: check for the correct function in an #ifdef
build: require version 0.20 of gettext for building nano from git
build: use the standard `autoreconf` invocation
bump version numbers and add a news item for the 8.1 release
docs: add 'set colonparsing' to the sample nanorc
docs: add the Alt+Home/Alt+End shortcuts to the cheatsheet
docs: avert hyphenation of the technical words "ncurses" and "terminfo"
docs: correct the description of --bold, as function tags are unaffected
docs: document the new --listsyntaxes (-z) option
docs: don't say any more that -z was removed, as it has been repurposed
docs: explain the behavior of the new function `cycle`
docs: explain the details of --colonparsing / -@ / 'set colonparsing'
docs: extend the FAQ item about urxvt modified keys, with M-Home/M-End
docs: properly escape a literal '@' in the texi document
docs: remove the 'filename:linenumber' format from the synopsis
files: avoid mistakenly setting the column number to a given line number
files: look for digits and colons starting from the end of the filename
files: when a filename with a colon and digits exists, open that file
files: with --rectrict, prevent invoking the browser and toggling backups
general: disable the type-ahead checking that ncurses normally does
gnulib: update to its current upstream state
help: regroup the `center` item, placing it with the new `cycle`
help: show option -Y/--syntax in --help output also in restricted mode
input: drop recognition of the urxvt escape sequences for M-Home/M-End
input: make sure that a string-bind return value is non-negative
input: provide for urxvt setting a high bit or sending an extra escape
input: recognize the raw Xterm escape sequences for Alt+Home and Alt+End
minibar: do not falsely report that a new, empty file is in Mac format
moving: use edit_scroll() only when scrolling one row is enough
new feature: add bindable function `cycle` that pushes cursor line around
new feature: option -z lists the names of available syntaxes
options: remove the deprecated synonym -$ of -S/--softwrap
options: require --colonparsing/-@ to parse colon+number after a filename
rcfile: remove old bindable function 'nowrap', alias of 'breaklonglines'
startup: do not activate --modernbindings when name starts with "e"
syntaxes: mention the original author of most of the syntax files
syntax: man: colorize some of the things that manipulate hyphenation
syntax: patch: recognize also the .rej extension
text: do not check for <Tab> + mark while getting input but in do_tab()
tweaks: add a space after a '+', for consistent formatting
tweaks: discard a bracketed paste in the help viewer with fewer beeps
tweaks: drop two redundant conditions
tweaks: elide unhelpful occurrences of the word "will"
tweaks: exclude the colon-parsing code from the tiny version
tweaks: extend the deprecation period of 'set nowrap' and prefix 'bright'
tweaks: implement do_center() with a single call instead of three
tweaks: in FAQ, use 'id' attribute instead of empty anchor with 'name'
tweaks: make a comment more accurate, and unabbreviate a variable name
tweaks: make the inclusion condition for do_center() more strict
tweaks: remove the now unneeded special keycode INDENT_KEY
tweaks: reshuffle a declaration, adjust a comment, normalize indentation
tweaks: reshuffle some lines, to put vaguely related things together
tweaks: rewrap some lines, for more even lengths
tweaks: simplify a condition, to match the same condition five lines back
tweaks: slightly reword a phrase in the explanation of --colonparsing
Jaroslav Fowkes (1):
syntax: fortran: fix a typo (a missing backslash)
Changes between v7.2 and v8.0:
------------------------------
Andy Koppe (2):
input: scroll on mousewheel events instead of moving the cursor
rcfile: map the gray #rgb codes (#111 to #EEE) to the xterm grayscale
Benjamin Valentin (1):
new feature: interpret also <filename>:<linenumber> when opening a file
Benno Schulenberg (155):
bindings: allow speller and friends to be rebound also in restricted mode
bindings: in the tiny version, bind M-6 only in main, not at the prompts
bindings: let <Alt+Home/End> move the cursor to top/bottom of viewport
bindings: let M-" place/remove an anchor, and let M-' jump to one
bindings: let M-& show the ncurses version+patch, as a small Easter egg
bindings: make ^F start a forward search by default
bindings: make ^F start a forward search by default
bindings: set up modern bindings also when binary's name starts with "e"
bindings: show ^- instead of ^/ for 'flipgoto' when on a Linux console
bindings: with --modern, do not let ^Q^Q quit nano without saving
bindings: with --modern, use ^H for Help when the terminal allows it
browser: report an error instead of crashing when the folder disappears
browser: restore typing position at prompt after "^R name ^T ^F ^V ^C"
bump version numbers and add a news item for the 8.0 release
chars: add a helper function for stripping leading blanks from a string
copyright: update the years for the FSF
display: add a wnoutrefresh() call for NetBSD, to force a cursor update
display: do not attempt to draw a line that is outside the viewport
display: draw a new magic line rightaway when there are multiline regexes
display: show the help lines down to the tiniest possible terminal size
docs: add a caveat in the FAQ about bracketed pastes
docs: add a clarifying note to the description of --tabstospaces
docs: add an example binding for normalizing Unicode to the sample nanorc
docs: add a reference to the 'help-nano' mailing list
docs: add M-C and M-Z to the cheatsheet, and reshuffle for balance
docs: add ^T^S (spell check) and M-S (softwrap) to the cheatsheet
docs: add two examples of custom key bindings to the nanorc manpage
docs: adjust an example help line in the README to the current state
docs: adjust the cheatsheet for the changed meanings of ^F, ^B, M-F, M-B
docs: clarify that a fileregex is matched against the absolute filename
docs: delete a remark about libvte that is no longer relevant
docs: describe nano more specifically as a text editor
docs: document the <filename>:<linenumber> thing for cursor positioning
docs: document the new bindable functions 'toprow' and 'bottomrow'
docs: document the new --modernbindings option
docs: fix a ten-year-old typo, reported by `correctmost`
docs: improve the description of the 'flipexecute' bindable function
docs: in a synopsis, use braces around a choice of required parts
docs: in the sample nanorc, set the guidestripe to a soft grey
docs: mention backreferences (for replacements with regular expressions)
docs: mention how to get the old behavior of ^F, ^B, M-F, and M-B back
docs: mention that a restricted nano does not access the history files
docs: mention that 'light' background colors do not work on Linux console
docs: mention that --modernbindings overrides --preserve
docs: mention the changed meanings of ^F/^B and also in the texi manual
docs: mention the missing two options that override --bold
docs: say "mini bar", not "minibar", when referring to the actual bar
docs: trim stuff that is more than five years old from the changelog
docs: use a space after #, like everywhere else in the sample nanorc
editing: adjust the mark before trimming redundant blanks
execute: show "Older" and "Newer" in the help lines, to allow rebinding
feedback: drop an unnecessary warning, to not bother the user
feedback: lowercase a letter, as the phrase is not a full sentence
feedback: raise the level of "Macro is empty", to match similar messages
feedback: suppress filename and linecount when --zero is active
feedback: suppress format-conversion messages for --zero and --mini
files: do not allow M-U to remove text read from standard input
files: run `chmod` and `chown` on the descriptor, not on the filename
formatter: do not crash when the formatter command is empty
general: include the Copy function (M-6 or ^C) into the tiny version
general: let the constant-show toggle override the zero-interface mode
gnulib: update to current upstream state, to make a fresh checkout work
gnulib: update to its current upstream state
help: give the "Replace with" prompt its own help text
help: mention M-Home and M-End in the help text and help lines
help: rebalance the help items when --preserve is used
help: restore ^H and ^D as the primary shortcuts for Backspace and Delete
help: show ^F/^B as primary shortcuts for search, not as secondary
indicator: do not oversize the scroller when softwrapping
input: avoid hanging after a 39-character paste on a VSCode terminal
input: flush the keystroke buffer upon any kind of error condition
input: for one bump of the mousewheel scroll two lines, not three
input: intercept a spurious keycode and say what the actual problem is
input: let the handler of string binds return a byte whenever possible
input: neutralize two spurious keycodes from VTE terminals
input: prevent 'macro_length' from underflowing when hammering M-:
input: recognize certain escape sequences for F13 to F16 again
input: snip the `recordmacro` and `runmacro` keystrokes in a better way
input: store key codes in the macro buffer as they come in from ncurses
input: store keystroke in macro buffer only when about to interpret it [reverted]
justify: keep as much of the marked region onscreen as possible
justify: keep the cursor at the original end of a marked region
justify: recompute the multidata for paragraphs larger than the viewport
justify: set the correct starting point also with --cutfromcursor
justify: set `x = 0` for the undo item, for when using --cutfromcursor
linter: do not mess up the input stream when the linter command is empty
linter: use a format string, to deflect format-string attacks
memory: prevent a leak by freeing a possibly already existing color combo
minibar: mention the file format when it's DOS or Mac
moving: preserve horizontal position when jumping to top or bottom row
new feature: functions that jump to the top or bottom of the viewport
new feature: option --modernbindings sets up more widespread key bindings
options: make --modernbindings actually override --preserve
rcfile: add bindable functions for moving the cursor to top or bottom row
rcfile: avoid crashing on an include path that is way too long
replacing: stash the string to be replaced while asking for replacement
revert the previous commit -- forget about -? as a synonym for --help
screen: recalculate the multidata when detecting the need for it
search: avoid a crash after a nested search, reported by `correctmost`
search: avoid crashing after searching a help text during a regex replace
shutdown: ignore a modified buffer when in view mode
softwrap: adjust start-of-screen when the 'edittop' line is hard-wrapped
softwrap: realign start-of-screen when redoing an automatic hard-wrap
softwrap: remember the actual breaking point when wrapping at blanks
startup: use a format string, to deflect format-string attacks
syntax: c: require a preceding blank when a line comment contains a quote
syntax: javascript: recognize also the .mjs extension
syntax: makefile: ensure that the <Tab> key always produces a tab
syntax: makefile, sh: recognize also a fresh Makefile and fresh .profile
syntax: nanorc: colorize {toprow} and {bottomrow} for string binds
syntax: sh: recognize more shells than `sh` on a shebang line for busybox
tweaks: add a comment that refers to the VTE spurious-code issue
tweaks: add a missing 'type' attribute to a <style> tag
tweaks: add an extra variable, to avoid reusing one for another purpose
tweaks: add another translator hint, to help avoid overlong key tags
tweaks: adjust a comment for the changed handling of gray #rgb codes
tweaks: avoid calling isblank()/isalpha() on what could be a signed char
tweaks: condense the code that searches for a colon plus line number
tweaks: delete a redundant fragment of code from do_replace_loop()
tweaks: elide a redundant variable
tweaks: express an 'if' more concisely, and add two blank lines
tweaks: implement the fix of the previous commit somewhat differently
tweaks: improve three translator hints
tweaks: make two strings equal to a third, to slightly ease translation
tweaks: move two static declarations to the only function that uses them
tweaks: normalize the indentation after the previous change
tweaks: normalize the indentation after the previous changes
tweaks: pull a fragment of code a bit forward, to enable the next commit
tweaks: remove two pairs of unneeded braces, and normalize a line
tweaks: rename a function and variable, to describe better what they do
tweaks: rename a function, for contrast, and update antiquated comments
tweaks: rename a struct element, to avoid a theoretical name collision
tweaks: rename a symbol (to be clearer), and add three missing comments
tweaks: rename a variable, away from an abbreviation
tweaks: rename a variable, away from an abbreviation
tweaks: rename a variable, to be a bit more indicative
tweaks: rename a variable, to be clearer when seen in context
tweaks: rename a variable, to be more readable
tweaks: rename a variable, to better indicate what it represents
tweaks: rename two variables, to be clearer and to match others
tweaks: reshuffle four lines, to allow folding some #ifdefs together
tweaks: reshuffle three fragments of code, moving related things together
tweaks: rewrap a comment, and reshuffle seven declarations
tweaks: rewrap two old news items
tweaks: shrink the set of characters recognized as line-column separator
tweaks: slightly improve a comment, to be more accurate
tweaks: slightly reword the help text for the Replace-With prompt
tweaks: ungettextize three strings, to make a translator hint right again
tweaks: use a pair of parentheses to clarify the order of operations
undo: force a screen refresh also for the special case Bsp-at-EOF
undo: prevent a use-after-free, reported by `correctmost`
undo: recompute the multidata when a piece of text is replaced
undo the prelast commit in order to redo it with a fuller commit message
verbatim: avoid referencing an uninitialized value
wrapping: delete only single characters, not a possibly marked region
Jordi Mallach (1):
docs: fix "availabilty" typo in the manual and the nanorc manpage
Mateusz Kazimierczuk (1):
options: add -? as a synonym of -h (--help) [reverted]
Matteo Raso (1):
syntax: python: colorize decorators specially
Mike Frysinger (2):
build: link in $(GETRANDOM_LIB) from gnulib
gnulib: import canonicalize-lgpl for realpath
Changes between v7.1 and v7.2:
------------------------------
Benno Schulenberg (11):
bindings: let ^/ toggle between the 'search' and 'gotoline' menus
bump version numbers and add a news item for the 7.2 release
copyright: update the years for the FSF
docs: give ^K and ^U some useful function in the alternative bindings
docs: put the binding of ^Y after its unbinding, for it to be effective
gnulib: update to its current upstream state
input: disallow bracketed pastes when in view mode
syntax: html: colorize specially the other two emphasizing tags too
tweaks: avoid warnings when compiling with -Wpedantic
tweaks: rewrap an old news item
tweaks: separate a special thanks from the preceding ones
Changes between v7.0 and v7.1:
------------------------------
Benno Schulenberg (8):
build: fix compilation when configured with --disable-comment
bump version numbers and add a news item for the 7.1 release
copyright: update the last year for significantly changed files
docs: say thanks to the Albanian translator
rcfile: report an error when an included file does not exist
text: upon Enter, eat only lefthand blanks, not any other characters
tweaks: avoid passing NULL to access()
tweaks: wrap overlong lines in the Tcl syntax, to make them manageable
Changes between v6.4 and v7.0:
------------------------------
Benno Schulenberg (94):
build: add options --disable-formatter and --disable-linter to configure
build: exclude some pieces that are not needed with --disable-nanorc
build: exclude two unneeded functions correctly from the tiny version
build: fix compilation when configured with --enable-tiny
bump version numbers and add a news item for the 7.0 release
completion: search through all open buffers for possible completions
docs: clarify the distinction between binding a function and "{function}"
docs: describe --disable-formatter and --disable-linter configure options
docs: explain how to include a double quote plus space in a nanorc regex
docs: improve the legibility of an itemized list
docs: mention in the man page how M-V can insert any Unicode code point
docs: mention that string binds may contain function names between braces
docs: replace control codes in the examples with {command} cartouches
docs: suggest a key binding for snipping trailing blanks
execute: show "Cancelled" instead of "Error" when the user hits ^C
extra: use the whole terminal for the crawl, and quicken it a bit
feedback: suppress undo/redo messages when option --zero is in effect
files: before sending data to an external command, decode LF back to NUL
files: improve the error handling when executing an external command
filtering: terminate also the sender process when the user hits ^C
filtering: when returning to a line number, ensure it is within range
gnulib: update to its current upstream state
goto: don't center the current line when the user specified a column only
help: don't show the New-Buffer toggle when in view mode
help: move the M-Del item up, so that M-PgUp and M-PgDn are paired
help: prioritize the unshifted Meta keystrokes for buffer switching
input: allocate a small keystroke buffer, and never free it
input: allocate two small character buffers too, and never free them
input: give up when the capacity of the keystroke buffer overflows
input: interpret commands of the form {functionname} inside string binds
memory: avoid a leak when a string bind specifies an unknown menu
prompt: allow rebinding also ^N, ^Q, and ^Y at the yes-no prompt
prompt: ingest queued characters before handling any subsequent function
prompt: prevent execution of inadmissible functions in view mode
prompt: return FALSE for non-editing functions also in the tiny version
prompt: toggle the help lines only for the 'nohelp' toggle
search: skip a match on the magic line, as it is a just convenience line
startup: ensure that +/string centers the match also with --linenumbers
startup: for +/string, center the found occurrence when possible
startup: quit when standard input is not a TTY (after handling arguments)
startup: report an empty search string also when there is a modifier
syntax: nanorc: colorize valid function names plus surrounding braces
tweaks: add parentheses for consistency, and reshuffle for conciseness
tweaks: allow the linter to be used in view mode, as it makes no changes
tweaks: attribute some of the features that were added in the last years
tweaks: avoid iterating over the same string twice in a row
tweaks: avoid sometimes calling a function three times in a row
tweaks: check the multiline regexes only for Delete and Backspace
tweaks: condense a comment, add two small ones, and reshuffle a line
tweaks: delete a flag that is no longer used
tweaks: determine in another way whether a shortcut is okay in view mode
tweaks: discard a bracketed paste in the browser more efficiently
tweaks: don't use a pointer when the value itself is all that is needed
tweaks: drop an unneeded check for permissibility of prompt shortcuts
tweaks: drop a parameter that is no longer used
tweaks: drop shunting of flags by calling the needed function directly
tweaks: elide a function that does not need to be a separate function
tweaks: elide an assignment by iterating with the target variable
tweaks: elide an intermediary variable that is no longer needed
tweaks: elide an unused parameter
tweaks: elide an unused return value
tweaks: elide a parameter by moving the general case one level up
tweaks: elide a variable, rename another, and reshuffle an assignment
tweaks: fold two cases together, because they basically do the same
tweaks: group the special keycodes for implanted strings together
tweaks: improve two comments, and exclude two unneeded prototypes
tweaks: make the crawl use the whole screen also in the tiny version
tweaks: make two error messages more succinct and easier to translate
tweaks: move the arrays of menu names and symbols to where they are used
tweaks: move the --magic option up, so that --zero comes last
tweaks: move to a given line number more efficiently
tweaks: move two checks plus corresponding calls to a better place
tweaks: normalize the indentation after the previous change
tweaks: reduce four variations of a message to a single common form
tweaks: rename a macro for clarity, and normalize some indentation
tweaks: rename a variable, away from an abbreviation
tweaks: rename two record elements and three parameters, for clarity
tweaks: replace sizeof(char) with 1, as that is assumed anyway
tweaks: reshuffle a declaration, and correct the wording of a comment
tweaks: reshuffle a line, to group things better
tweaks: reshuffle some code and drop some comments, for conciseness
tweaks: reshuffle some code, to not determine a shortcut twice
tweaks: reshuffle some lines, to be more readable instead of compact
tweaks: reshuffle two lines, for conciseness and in preparation
tweaks: reword and/or condense four comments
tweaks: rewrap line, improve wording, and correct typo in old news item
tweaks: rewrap some lines, drop a redundant call, and reshuffle a line
tweaks: simplify a function now that a Unicode code can be typed quicker
tweaks: simplify a pasting routine, modelling it after the injection one
tweaks: use an auxiliary variable to avoid dereferences of 'shortcut'
undo: make sure the current line is defined before it is referenced
verbatim: allow the user to finish Unicode input with <Enter> or <Space>
verbatim: do not overwrite the status bar when the code is invalid
verbatim: don't show dots during Unicode input, as they give wrong idea
Changes between v6.3 and v6.4:
------------------------------
Benno Schulenberg (24):
bump version numbers and add a news item for the 6.4 release
display: remember text and column positions when softwrapping a line
docs: concisely describe how the linter behaves
docs: remove the two notices about the changed defaults
docs: rename README.GIT to README.hacking, so it's clearer what is meant
docs: stop mentioning the obsoleted keywords that were removed
files: designate the root directory with a simple "/", not with "//"
formatter: instead of leaving curses, use full_refresh() to wipe messages
gnulib: update to its current upstream state
help: reshuffle two shortcuts so that more help-line items are paired
options: stop accepting -z, as --suspendable has been dropped too
rcfile: remove five obsolete or deprecated keywords
syntax: default: do not colorize a square or angle bracket after a URL
syntax: perl: add missing keywords, and reduce the length of some lines
syntax: python: mention an alternative linter in a comment
tweaks: add a missing word to a news item
tweaks: add a translator hint
tweaks: improve a comment, and reshuffle two functions plus some lines
tweaks: put each regex on separate line, to better show many keywords
tweaks: rename a variable, to not be the same as a function name
tweaks: rename two variables, to not contain the name of another
tweaks: reshuffle a description and rewrap another
tweaks: reshuffle a few lines, to group things better
version: condense the copyright message, to not dominate the output
LIU Hao (1):
build: ignore errors from `git describe`
Changes between v6.2 and v6.3:
------------------------------
Benno Schulenberg (41):
build: add the --disable-maintainer-mode option to ./configure
build: fix compilation for --enable-{tiny,nanorc,color}
build: fix compilation when configured with --disable-color
build: remove an obsolete check -- the dependent code was deleted
bump version numbers and add a news item for the 6.3 release
display: suppress spotlight yellow and error red when NO_COLOR is set
docs: add an example binding for copying text to the system clipboard
execute: clear an anchor only when the whole buffer gets filtered
execute: don't crash when an empty buffer is piped through a command
execute: stay on the same line number when filtering the whole buffer
feedback: show extra warning when writing failed due to "No space left"
files: do not change to a higher directory when the working one is gone
files: show a warning when the working directory is gone (when used)
files: when the working directory exists, still check its accessibility
filtering: close all output descriptors, so that 'xsel' will terminate
formatting: change cursor position only after saving it in the undo item
gnulib: pull in the workaround for a build problem on NetBSD
gnulib: update to its current upstream state
justify: stay at the same line number when doing a full justification
painting: colorize text also after an unterminated start match
painting: look for another start match only after the actual end match
painting: recalculate the multidata when making large strides or changes
painting: stop coloring an extremely long line after 2000 bytes
painting: tighten the check for a lacking end match on a colored line
syntax: xml: colorize /> properly, and colorize prolog tags differently
syntax: xml: colorize user-defined entities differently
tweaks: avoid a function call when two plain assignments will do
tweaks: change the indentation of a list, to match other indentations
tweaks: don't leave an orphaned temporary file behind when writing fails
tweaks: elide an unneeded call of strlen()
tweaks: exclude the extra truncation warning from the tiny version
tweaks: make the triggering of the recalculation of multidata less eager
tweaks: move the saving and restoring of flags to where it is needed
tweaks: normalize the indentation after the previous change
tweaks: prevent the adding of an unwanted newline in a different way
tweaks: remove redundant braces, and add two translator hints
tweaks: remove some stray spaces before a comma
tweaks: simplify a bit of code, eliding two labels and three gotos
tweaks: simplify a fragment of code, and fold two lines together
tweaks: trim a few comments, rename a function, and reshuffle some code
verbatim: with --zero, keep cursor in viewport when it was on bottom row
Mike Frysinger (1):
general: fix building for Windows
Changes between v6.1 and v6.2:
------------------------------
Benno Schulenberg (14):
bump version numbers and add a news item for the 6.2 release
display: suppress the bottom-bar wiping only when the user is editing
linter: adjust the parsing to accommodate for a modern 'pyflakes'
syntaxes: fold a couple of regexes together, and improve a few comments
tweaks: change the type of a variable, to avoid a compiler warning
tweaks: consistently backslash-escape the dash in M-letter keystrokes
tweaks: rename a misnamed variable
tweaks: rename a variable, reshuffle five lines, and snip two comments
tweaks: rename a variable, to be more correct, and adjust two comments
tweaks: rename a variable, to be more fitting
tweaks: rename two more variables, and drop unneeded initializations
tweaks: rename two variables (to get rid of a prefix), and elide a third
tweaks: store a result, to avoid calling a function twice
tweaks: use an intermediate variable, to avoid using one for two purposes
Changes between v6.0 and v6.1:
------------------------------
Benno Schulenberg (37):
build: fix compilation when configured with --enable-tiny
build: prevent autopoint from overwriting a newer M4 file from gnulib
bump version numbers and add a news item for the 6.1 release
copyright: update the last year for significantly changed files
copyright: update the years for the FSF
docs: mention bindable function 'zero', for toggling the interface bars
docs: mention 'set guidestripe' and 'set unix' in the sample nanorc
docs: remove obsolete Ctrl+Z from the cheatsheet; mention Alt+X instead
files: let ^C cancel the exiting when the file on disk was changed
gnulib: update to its current upstream state
help: make the description of <Tab> more accurate
help: update the description of M-D, to match the actual order of counts
input: instead of moving waiting keycodes, just increment a pointer
input: suppress any spotlighting when there are more keycodes waiting
menus: don't show M-6 in the help lines of any prompt
prompt: allow the user to copy the answer to the cutbuffer (with M-6)
prompt: let ^K erase text after cursor (if any), otherwise whole answer
tweaks: add some feedback to the autogen.sh script, to ease the wait
tweaks: add some small, clarifying comments
tweaks: adjust a translator hint, to fit the order in the POT file
tweaks: drop foreign M-U and M-R from among the sample CUA bindings
tweaks: remove a redundant check -- add a different one for symmetry
tweaks: remove two redundant checks
tweaks: rename a function and its two parameters, for clarity
tweaks: rename a function and reshuffle its call
tweaks: rename a function, to not contain the name of a variable
tweaks: rename another variable, to better fit in with its sisters
tweaks: rename a variable and a parameter, to be more descriptive
tweaks: rename a variable, away from an abbreviation
tweaks: rename a variable, for clarity and contrast
tweaks: rename a variable, to make it clearer it refers to a window
tweaks: rename two variables, and elide a near-enough duplicate
tweaks: reshuffle some sample bindings, to group them differently
tweaks: reword two comments, and rename a variable (away from an abbrev)
tweaks: stop asking the terminal for its new size -- let ncurses do it
tweaks: use some symbolic names instead of unclear numeric values
tweaks: when discarding keycodes, don't bother parsing them
======================================================================
For older changes, see in https://ftp.gnu.org/gnu/nano/nano-6.0.tar.xz
======================================================================
================================================
FILE: ChangeLog.1999-2006
================================================
GNU nano 2.0.3 - 2007.01.29
- General:
- Miscellaneous comment fixes. (DLR)
- More int -> bool conversions. (DLR)
- Don't install the nanorc manpages or generate their HTML
versions if nano is built without nanorc support. Changes to
configure.ac, doc/man/Makefile.am, and doc/man/fr/Makefile.am.
(DLR)
- Simplify the commands that generate HTML documentation in
order to remove unnecessary usage of cat. Changes to
doc/man/Makefile.am, doc/man/fr/Makefile.am, and
doc/texinfo/Makefile.am. (DLR)
- files.c:
do_writeout()
- When setting retval to the return value of
write_(marked_)?file(), use the "?" operator instead of an
if/else clause. (DLR)
is_dir()
- Don't assign dirptr's value using buf until we've asserted
that buf isn't NULL. (DLR)
- Remove unneeded assert. (DLR)
- proto.h:
- Add missing is_dir() prototype. (DLR)
- search.c:
regexp_init()
- Don't assign rc's value via regcomp() until we've asserted
that regexp_compiled is FALSE. (DLR)
- text.c:
do_alt_speller()
- Rename variable altspell_error to alt_spell_error, for
consistency. (DLR)
do_spell()
- Rename variable i to status, for clarity. (DLR)
- winio.c:
do_credits()
- Update the last copyright notice to include 2007. (DLR)
- Makefile.am:
- Add README.CVS to EXTRA_DIST, so that nano's CVS checkout
instructions aren't only available in its CVS snapshots. (DLR)
- README:
- Add more miscellaneous cosmetic fixes. (DLR)
- README.CVS:
- Update for the 2.0 branch of nano. (DLR)
- NEWS:
- Formatting fix. (DLR)
- m4/glib-2.0.m4:
- Import the latest version of this file from glib 2.10.3. (DLR)
- doc/faq.html:
- Update section 4.1 to describe how to open files with names
beginning with '+' at specified columns as well as lines.
(DLR)
- doc/man/fr/Makefile.am:
- Set mandir before setting man_MANS, to more closely match
doc/man/Makefile.am. (DLR)
- doc/syntax/python.nanorc:
- Improve string highlighting regexes. (Mike Frysinger)
GNU nano 2.0.2 - 2006.12.20
- General:
- Miscellaneous comment fixes. (DLR)
- browser.c:
do_browser()
- Properly handle directories that contain nulls. (DLR)
- files.c:
do_insertfile()
- Properly handle filenames and executable commands that contain
nulls. (DLR)
write_file()
- Properly handle filenames that contain nulls. (DLR)
do_writeout()
- Fix a segfault when we can't get the full path of either the
filename we want to save under or the original filename. (DLR,
found by Mike Frysinger)
- nano.h:
- Rename NANO_ALT_REPLACE_KEY to NANO_REPLACE_ALTKEY, for
consistency. (DLR)
- Rename NANO_ALT_.* and NANO_.*ALTKEY to NANO_META_.* and
NANO_.*METAKEY, for consistency. (DLR)
- search.c:
update_history()
- Fix minor memory leak. (DLR)
- text.c:
do_spell()
- When setting i to the return value of write_(marked_)?file(),
use the "?" operator instead of an if/else clause. (DLR)
do_verbatim_input()
- Fix minor memory leak. (DLR)
- winio.c:
parse_kbinput()
- Add missing break. (DLR)
- Fix minor memory leak. (Itay Perl)
parse_verbatim_kbinput()
- Fix minor memory leak. (DLR)
edit_draw()
- Fix potential warnings when assigning -1 to paintlen by using
if/else clauses instead of "?" operators. (DLR)
- configure.ac:
- Reword several option descriptions, for clarity. (DLR)
- doc/faq.html:
- Add miscellaneous wording and capitalization fixes. (DLR)
- BUGS:
- Add miscellaneous cosmetic fixes. (DLR)
- README:
- Update for the 2.0 branch of nano. (DLR)
GNU nano 2.0.1 - 2006.11.20
- General:
- Miscellaneous comment fixes. (DLR)
- Fix copyright notices to not abbreviate the year list using a
range. Changes to do_credits() and all source files. (DLR)
- files.c:
get_full_path()
- Remove unneeded assert. (DLR)
- Fix problem where only paths would be returned when both paths
and filenames should have been. (DLR)
do_writeout()
- For consistency, when saving a file with no name, don't allow
overwriting an existing file when in restricted mode. (DLR)
- Fix problem where a file could sometimes be overwritten
without a warning prompt. (DLR)
- winio.c:
do_replace_highlight()
- Include the code to display zero-length matches even when
regex.h isn't found, as it can also be used to display
zero-length Unicode characters. (DLR)
- doc/rnano.1, doc/fr/rnano.1:
- Add missing "(C)" to the copyright notice in the comments.
(DLR)
- doc/nano.texi:
- Remove unneeded "." from the copyright notice in the comments.
(DLR)
- NEWS:
- Add missing entries for nano 1.0.2 and 1.0.3, since 1.1.0
includes their changes. (DLR)
GNU nano 2.0.0 - 2006.11.06
- General:
- Miscellaneous comment fixes. (DLR)
- Add syntax for POV-Ray files. New file doc/syntax/pov.nanorc;
changes to doc/nanorc.sample.in and doc/syntax/Makefile.am.
(Donnie Berkholz, minor tweaks by DLR)
- AUTHORS:
- Update for the 2.0 branch of nano. (DLR)
- nano.spec.in:
- Update links for the 2.0 branch of nano. (DLR)
- Update for newer RPM-based distributions. (DLR, adapted from
the nano 1.3.12-1.1.spec file in Fedora Rawhide)
- Delete the changelog section, as it hasn't been kept up to
date, and all its changes are documented here in any case.
(DLR)
- doc/faq.html:
- Update links for the 2.0 branch of nano. (DLR)
- doc/nano.1, doc/nanorc.5, doc/rnano.1:
- Add minor wording fixes. (DLR)
- doc/man/fr/nano.1, doc/man/fr/nanorc.5, doc/man/fr/rnano.1:
- Updated manpage translations by Jean-Philippe Guérard.
- doc/nano.texi:
- Add minor wording and punctuation fixes. (DLR)
GNU nano 1.9.99pre3 - 2006.10.25
- chars.c:
nstrncasecmp()
- When returning, use the "?" operator instead of an if/else
clause. (DLR)
- cut.c:
do_cut_text()
- When uncutting text in the process of copying it, always set
placewewant, as do_uncut_text() does, so that the current line
is always updated properly. (DLR)
- files.c:
input_tab()
- Since the field precision operator used in the sprintf() uses
ints and not size_t's, replace it with two strncpy()s, which
use size_t's, and a null termination. (DLR)
- help.c:
parse_help_input()
- Add 'E' and 'e' as aliases for Exit, for consistency with the
file browser. (DLR)
- m4/ac_define_dir.m4:
- Import the latest version of this file from
http://autoconf-archive.cryp.to/ac_define_dir.m4. (DLR)
- doc/faq.html:
- Update the question in section 4.13 to match the version of it
in the answer section. (DLR)
- doc/syntax/c.nanorc:
- Simplify "undef", "ifn?def", "elif", and "else" in the
preprocessor regexes. (DLR)
GNU nano 1.9.99pre2 - 2006.10.02
- General:
- Miscellaneous comment fixes. (DLR)
- Make sure that the statusbar cursor position is always
properly reset when we get out of all statusbar prompts.
Changes to do_insertfile(), do_writeout(),
handle_sigwinch(), main(), and do_prompt_abort(). (DLR)
- prompt.c:
do_statusbar_input()
- If we get a verbatim input sequence ending with Ctrl-J, remove
the Ctrl-J from the buffer before interpreting it as Enter, so
that it doesn't erroneously fall through to the edit window
and get interpreted as Justify. (DLR)
- winio.c:
get_input()
- Simplify to avoid an unnecessary key_buffer_len check. (DLR)
- doc/syntax/c.nanorc:
- Add "size_t" and "ssize_t" to the types regexes. (DLR,
suggested by Mike Frysinger)
- Simplify "signed" and "unsigned" in the types regexes. (DLR)
GNU nano 1.9.99pre1 - 2006.08.29
- General:
- Miscellaneous comment fixes. (DLR)
- Fix option descriptions. At least one of the two parts of
+LINE,COLUMN must be specified at all times; COLUMN is not the
only optional value. Also, fix wording problems in
-O/--morespace and -W/--wordbounds. Changes to usage(),
UPGRADE, nano.1, nanorc.5, rnano.1, nano.texi, and
nanorc.sample.in. (DLR)
- Fix mouse support so that it truly ignores everything except
releases and clicks of button 1. Changes to
enable_mouse_support() and get_mouseinput(). (DLR)
- In certain places, call wnoutrefresh(bottomwin) after calling
blank_statusbar(), in order to ensure that the statusbar is
actually blanked. Changes to do_help(), do_continue(),
handle_sigwinch(), and update_statusbar_line(). (DLR)
- If the mark isn't on, allow Meta-} and Meta-{ to indent and
unindent only the current line, just as it would if the mark
covered only the current line, instead of displaying a
statusbar message and quitting. Changes to shortcut_init(),
do_indent_marked() (renamed do_indent()),
do_indent_marked_void() (renamed do_indent_void()),
do_unindent_marked_void() (renamed do_unindent()), and
UPGRADE. (DLR, suggested by John M. Gabriele)
- Consolidate do_scroll_(up|down)() into do_(up|down)(), as
they have a lot of duplicate code. New functions do_up_void()
and do_down_void(); changes to shortcut_init(), do_up(),
do_scroll_up(), do_down(), do_scroll_down(), do_left(), and
do_right(). (DLR)
- Make Jordi's email address, and the description of what the
manual pages were written for, consistent in the
documentation. Changes to AUTHORS, nano.1, nanorc.5, and
rnano.1. (DLR, based on suggestions by Jordi)
- Don't include sys/ioctl.h in nano.c when NANO_TINY is defined,
as ioctl() is never used then. (DLR)
- Improve the display of bools in debugging statements. Changes
to parse_kbinput(), get_escape_seq_kbinput(),
parse_escape_seq_kbinput(), get_shortcut(), and get_toggle().
(DLR)
- Rename the values of the scroll_dir enum to UP_DIR and
DOWN_DIR, since UP is defined as a termcap value in Tru64's
and NetBSD 3.0's curses.h, which breaks compilation on those
systems. Changes to do_page_up(), do_page_down(), do_up(),
do_down(), nano.h, and edit_scroll(). (DLR; found by Daniel
Richard G. and Adam Wysocki, respectively)
- Rename the DISABLE_ROOTWRAP #define to DISABLE_ROOTWRAPPING.
(DLR)
- When using slang 2.x, call SLutf8_enable() with an argument of
1 instead of TRUE, as that's the proper way to enable its
UTF-8 support. Changes to main() and configure.ac. (DLR)
- Fix punctuation relating to "i.e." in various comments and
documentation. (Benno Schulenberg and DLR)
- Make bad_mbchar a static const char* const in chars.c, as its
value doesn't change. (DLR)
- Add various clarifications to translated strings. Changes to
do_insertfile_void(), shortcut_init(), toggle_init(),
help_init(), print_view_warning(), usage(), and do_mark().
(Benno Schulenberg, minor tweaks by DLR)
- Properly preserve the cursor position when going from the
"Read File" or "Save File As" prompt to the file browser to
the "Go To Directory" prompt, and then canceling back to the
"Read File" or "Save File As" prompt. Changes to
get_prompt_string() and do_prompt(). (DLR)
- Rename the parameter old_pww to pww_save in
need_statusbar_horizontal_update(), need_horizontal_update(),
need_vertical_update(), and edit_redraw(); and rename the
variable old_pww to pww_save in do_search() and do_research();
for consistency. (DLR)
- browser.c:
do_browser()
- Refactor the mouse support, modeling it after do_mouse() for
consistency. (DLR)
- Remove unneeded call to blank_edit(). (DLR)
- After entering "..", select the directory we were in before
instead of the first filename in the list, as Pico does. (DLR)
- Simplify screen update handling and exiting. (DLR)
- Fix potential segfault when going to a directory that doesn't
begin with '/'. (DLR)
do_browse_from()
- During the operating directory check, if path isn't NULL,
don't bother freeing it before mallocstrcpy()ing operating_dir
into it, as the latter operation will free it. (DLR)
- Don't bother freeing path if it's NULL. (DLR)
browser_init()
- Fix off-by-one error when calculating longest that kept the
rightmost column of the screen from being used. (DLR)
- Calculate width here instead of in browser_refresh(), as it's
more consistent. (DLR)
- If filelist is initialized, free it here instead of in several
places in do_browser(). (DLR)
browser_refresh()
- Simplify. (DLR)
- Fix problems where translated versions of "(dir)" could be
truncated, and where file sizes could be too long. (DLR)
- For the ".." entry, display "(parent dir)" instead of "(dir)",
as Pico does. (DLR)
- If a filename is too long, truncate it and display an ellipsis
before it, as titlebar() does. (DLR)
- Add translator comments explaining the maximum intended
lengths of "(dir)" and "(parent dir)". (DLR)
- Fix problem where width wouldn't be properly initialized if
the file list took up one line or less. (DLR)
- Don't display overly long filenames with ellipses if the
number of columns is extremely small. (DLR)
browser_select_filename()
- New function, used to select a specific filename in the list.
(DLR)
findnextfile()
- Simplify the uses of tail(). (DLR)
striponedir()
- Since all the strings passed to this are dynamically
allocated, use null_at() to strip the directory from the
string. Also, return the stripped path instead of modifying
path. (DLR)
- chars.c:
mbstrncasecmp(), mbstrcasestr(), mbrevstrcasestr()
- Don't allocate space for multibyte characters until we've
asserted that the parameters we're using aren't NULL. (DLR)
- files.c:
do_insertfile()
- If we execute a command in a new buffer, move back to the
beginning of the first line of the buffer afterwards, for
consistency. (DLR)
- If we don't insert a file into a new buffer, properly update
the x-coordinate to account for the number of characters
inserted on the current line. (DLR)
get_full_path()
- Don't return NULL when the current directory doesn't exist, as
we can still recover from that. (DLR, found by Mike Frysinger)
- Add various cleanups. (DLR)
- global.c:
sc_init_one(), shortcut_init()
- Don't include blank_after when DISABLE_HELP is defined, as
it's never used then. (DLR)
shortcut_init()
- Remove the ^X shortcut for CutTillEnd at the search prompt, as
official Pico doesn't include it, and it can be confused with
Exit. (DLR, suggested by Benno Schulenberg)
- Make the help shortcut for the "Go to Directory" prompt call
do_browser_help() instead of do_help_void(), as this prompt is
only accessible inside the file browser. (DLR, found by Benno
Schulenberg)
toggle_init()
- Don't include desc or blank_after when DISABLE_HELP is
defined, as neither are ever used then. (DLR)
- Make sure that a blank line is not displayed after the Meta-Q
toggle when mouse support is disabled and we're in restricted
mode, and that it is displayed all other times. (DLR)
toggle_init_one()
- Don't include desc or blank_after when DISABLE_HELP is
defined, as neither are ever used then. (DLR)
- help.c:
do_help()
- Simplify screen update handling and exiting. (DLR)
- Don't allow moving down a page when the last line of the help
text is onscreen. (DLR)
help_init()
- Adjust the first two chunks of the main help text so that
they're no more than 509 characters again. (DLR)
- move.c:
do_scroll_up(), do_scroll_down()
- Fix problems where, after scrolling, the previous and current
lines would not be updated properly if the current line was
not the first or last line of the edit window. (DLR, found by
Mike Frysinger)
- nano.c:
handle_sigwinch()
- Just in case we're in the statusbar prompt, reset the
statusbar cursor position when resizing the window. (DLR)
- nano.h:
- Remove the manual disabling of color support if regex.h isn't
found, as configure.ac now handles that. (DLR)
- rcfile.c:
parse_rcfile()
- Add missing ENABLE_COLOR #ifdef around the second check for a
syntax with no color commands, to fix compilation with rcfile
support and without color support. (Daniel Richard G.)
- search.c:
replace_regexp()
- Remove unnecessary casting of c to int. (DLR)
- text.c:
execute_command()
- Remove the marking of the file as modified, as do_insertfile()
now handles that. (DLR)
- utils.c:
digits()
- Tweak to remove the assumption that n is always positive,
although it always is in this particular case. (DLR)
- winio.c:
parse_kbinput()
- Properly handle combined meta and escape sequences, so that
e.g. Meta-/ will work properly when the / is on the numeric
keypad and NumLock is off. Also, properly handle combined
control character and escape sequences, so that e.g. Esc Esc /
will work properly when the / is on the numeric keypad and
NumLock is off. (DLR)
- Translate extended keypad keys to their ASCII equivalents even
when we hit Escape once or twice before typing them, for
consistency. (DLR)
- If they're defined, translate KEY_SUP into NANO_PREVLINE_KEY
and KEY_SDOWN into NANO_NEXTLINE_KEY, since they are sometimes
generated by Shift-Up and Shift-Down. (DLR)
parse_escape_seq_kbinput()
- Handle unknown and unignored escape sequences once here
instead of twice in parse_kbinput(). (DLR)
- Don't ignore escape sequences anymore. Instead, return the
corresponding key so that parse_kbinput() can translate it.
(DLR)
display_string()
- Properly handle buf[start_index]'s being a null terminator.
(DLR)
edit_draw()
- Simplify the setting of paintlen. (DLR)
titlebar()
- Don't display overly long filenames with ellipses if the
number of columns is extremely small. (DLR)
- Don't display any blank space for the state if we're in the
file browser, as Pico doesn't. (DLR)
- configure.ac:
- If regex.h isn't found, display an error message if we try to
enable color support. (DLR)
- Fix the spacing of the error message displayed when slcurses.h
isn't found. (DLR)
- If we use the --disable-wrapping option, ignore the
--disable-wrapping-as-root option. (DLR)
- Add minor cosmetic tweaks. (DLR)
- doc/Makefile.am:
- Don't include nanorc.sample in EXTRA_DIST, as it's only useful
when we're building from source, as opposed to building a
distribution. (DLR)
- Tweak to remove usage of the += operator again. (DLR)
- doc/man/Makefile.am:
- Tweak to remove usage of the += operator again. (DLR)
- doc/man/fr/nano.1, doc/man/fr/nanorc.5, doc/man/fr/rnano.1:
- Updated manpage translations by Jean-Philippe Guérard.
- doc/faq.html:
- Update section 5.3 again to not state "the latest development
version" before 1.3.12, as it's no longer accurate. (DLR)
- Add some minor spacing fixes. (DLR)
- doc/nano.texi:
- Add missing description of the -O/--morespace command line
option. (DLR)
- doc/syntax/c.nanorc:
- Since .i and .ii are preprocessed C and C++ output, colorize
them here. (Mike Frysinger)
- Remove redundancy from the file extension regexes. (DLR)
- doc/syntax/ruby.nanorc:
- Add missing blank line after the first comment, for
consistency. (DLR)
- Improve highlighting of constants. (John M. Gabriele, minor
tweaks by DLR)
GNU nano 1.3.12 - 2006.06.26
- General:
- Miscellaneous comment fixes. (DLR)
- Implement filename searches in the file browser. New
functions filesearch_init(), findnextfile(),
findnextfile_wrap_reset(), filesearch_abort(),
do_filesearch(), do_fileresearch(), do_first_file(),
do_last_file(), do_help_void(), and do_browser_help(); changes
to do_browser(), parse_browser_input(), shortcut_init(),
do_help(), and help_init(). (DLR)
- Open all files in binary mode for consistency and robustness.
Changes to load_history() and do_rcfile(). (DLR)
- Change translator-specific comments in global.c and prompt.c
so that they show up in nano.pot, and make them all
consistent. (Benno Schulenberg and DLR)
- Reduce USE_UTF8 to a static bool in chars.c, allow nano.c to
set it via a function, and allow winio.c to read its value
when needed. New functions utf8_init() and using_utf8();
changes to is_alnum_mbchar(), is_blank_mbchar(),
is_cntrl_mbchar(), is_punct_mbchar(), control_mbrep(),
mbrep(), mbwidth(), mb_cur_max(), make_mbchar(),
parse_mbchar(), mbstrncasecmp(), mbstrcasestr(),
mbrevstrcasestr(), mbstrnlen(), mbstrchr(), mbstrpbrk(),
mbrevstrpbrk(), has_blank_mbchars(), is_valid_mbstring(),
main(), display_string(), and do_credits(). (DLR)
- Add the ability to use bold text instead of reverse video
text, via the -D/--boldtext command line option and the
"boldtext" rcfile option. Changes to browser_refresh(),
do_help(), usage(), main(), update_statusbar_prompt(),
do_yesno_prompt(), titlebar(), statusbar(), onekey(),
edit_draw(), do_replace_highlight(), nano.1, nanorc.5,
nano.texi, and nanorc.sample. (DLR, suggested by Benno
Schulenberg)
- Add the ability to use self-contained color syntaxes from
separate files, accessible in the nanorc via the "include"
command. New function parse_include(); changes to
parse_rcfile(), do_nanorc(), nanorc.5, and nanorc.sample.
(Victor Ananievsky, Brand Huntsman and DLR)
- Change references to the "help menu" to the "help text
display" refer to display, for clarity. Changes to
shortcut_init(), configure.ac, and faq.html. (DLR, suggested
by Benno Schulenberg)
- Adjust the shortcut list display and related mouse support to
not waste the last few characters of bottomwin when the screen
width isn't a clean multiple of the column width. Changes to
do_mouseinput() and bottombars(). (Benno Schulenberg, minor
tweaks by DLR)
- Add several blank entries to the main shortcut list and the
global toggle list, in order to make the help text easier to
read. Changes to sc_init_one(), toggle_init(),
toggle_init_one(), shortcut_init(), get_toggle(), and
help_init(). (DLR, suggested by Benno Schulenberg)
- Reduce NO_RCFILE to a static bool in nano.c, since it's only
used there. Changes to finish() and main(). (DLR)
- Readd the Cancel -> Exit aliases for the file browser and help
browser. New function parse_help_input(); changes to
parse_browser_input() and do_help(). (DLR, suggested by Benno
Schulenberg)
- Add the ability to copy text into the cutbuffer without
cutting it, via Meta-^ (Meta-6). Note that this is disabled
when NANO_TINY is defined. New functions do_cut_text_void()
and do_copy_text(); changes to do_cut_text(), shortcut_init(),
and do_input(). (DLR, suggested by Ken Tyler)
- Add the ability to indent and unindent all marked lines of
text, via Meta-} (Meta-]) and Meta-{ (Meta-[). New functions
do_indent_marked(), do_indent_marked_void(), and
do_unindent_marked_void(); changes to shortcut_init(). (Chris
and DLR)
- Change the shortcut to find the matching bracket to Ctrl-].
Changes to shortcut_init() and do_statusbar_input(). (DLR)
- Drop the Meta-] and Meta-[ aliases for Meta-} and Meta-{, and
change the shortcut to find the matching bracket from Ctrl-]
back to Meta-], since Ctrl-] is used as the telnet escape key.
Changes to shortcut_init() and do_statusbar_input(). (DLR,
found by Chris)
- Add the ability to move to the first and last line of the help
text and the first and last file in the file browser via
Meta-\ (Meta-|) and Meta-/ (Meta-?). Changes to do_browser(),
shortcut_init(), and do_help(). (DLR)
- Allow unjustifying if we resize the window immediately after
justifying, as Pico does, and make input handling across
resizes more consistent. Changes to handle_sigwinch(),
main(), get_kbinput(), parse_kbinput(), get_byte_kbinput(),
and get_unicode_kbinput(); removal of reset_kbinput(). (DLR)
- Handle statusbar blanking in two places instead of many, so
that it always works consistently. Changes to do_browser(),
do_cut_text(), do_uncut_text(), do_first_line(),
do_last_line(), do_page_up(), do_page_down(), do_para_begin(),
do_para_end(), do_para_end(), do_next_word(), do_prev_word(),
do_home(), do_end(), do_up(), do_scroll_up(), do_down(),
do_scroll_down(), do_left(), do_right(), do_indent_marked(),
do_verbatim_input(), and get_kbinput(). (Benno Schulenberg,
minor tweaks by DLR)
- Handle prepending of wrapped text in one place instead of
many, so that it always works consistently. Changes to
do_uncut_text(), do_insertfile(), do_page_up(),
do_page_down(), do_up(), do_scroll_up(), do_down(),
do_scroll_down(), do_input(), do_search(), do_research(), and
do_delete(). (DLR)
- Ignore unhandled meta key sequences, function keys, and escape
sequences, indicate it on the statusbar, and beep when we get
an unhandled shortcut or toggle, as Pico does. To get this to
work properly, add a shortcut for moving to the next
search/replace string. New function is_ascii_cntrl_char();
changes to shortcut_init(), do_input(), do_statusbar_input(),
get_prompt_string(), and parse_kbinput(). (DLR, suggested by
Nick Warne and Benno Schulenberg)
- Explain the mouse support in more detail, and sync the text of
its description across all documentation. Changes to nano.1,
nanorc.5, nanorc.sample, and nano.texi. (Benno Schulenberg and
DLR)
- If we're using verbatim input to enter a Unicode sequence,
indicate it on the statusbar, and add a translator comment
explaining the message. Also, refactor get_unicode_kbinput()
to remove redundant code. New function add_unicode_digit();
changes to get_unicode_kbinput() and parse_verbatim_kbinput().
(Benno Schulenberg, minor tweaks by DLR)
- Allow normal typing of high-bit control characters, as Pico
does. Changes to do_output() and do_statusbar_output(). (DLR)
- Move color regexes into separate files, make nanorc.sample
reference them, and make them install properly. In the
process, rename nanorc.sample to nanorc.sample.in, put
@PKGDATADIR@ at the beginning of all nanorc file paths, add
needed AC_DEFINE_DIR macro from the Autoconf Macro Archive at
http://autoconf-archive.cryp.to/ac_define_dir.m4, and make
configure.ac do the substitution, so that the proper paths
will always be used in nanorc.sample. New files
m4/ac_define_dir.m4, doc/syntax/Makefile.am,
doc/syntax/asm.nanorc, doc/syntax/c.nanorc,
doc/syntax/groff.nanorc, doc/syntax/html.nanorc,
doc/syntax/java.nanorc, doc/syntax/man.nanorc,
doc/syntax/mutt.nanorc, doc/syntax/nanorc.nanorc,
doc/syntax/patch.nanorc, doc/syntax/perl.nanorc,
doc/syntax/python.nanorc, doc/syntax/ruby.nanorc,
doc/syntax/sh.nanorc, and doc/syntax/tex.nanorc; changes to
configure.ac, nano.spec.in, doc/Makefile.am, and
m4/Makefile.am; removal of doc/nanorc.sample. (DLR)
- Replace usage of the bool curses_ended with the isendwin()
function, and remove curses_ended. Changes to do_suspend().
(DLR)
- Remove the workaround for glibc 2.2.3's broken regexec(), and
replace it with a FAQ entry explaining the problem, since it
could break anything using extended regular expressions, and
glibc 2.2.3 is old. Changes to configure.ac, faq.html,
nano.h, proto.h, and UPGRADE; removal of safe_regexec(). (DLR)
- Minor wording fixes to various messages. Changes to
load_history(), shortcut_init(), toggle_init(), usage(),
do_suspend(), do_input(), rcfile_error(), parse_argument(),
parse_rcfile(), nano.1, nano.texi, and nanorc.sample.in.
(Benno Schulenberg, minor tweaks by DLR and Nick Warne)
- Make suspension clear the screen and put the cursor on the
last line before displaying anything, as Pico does. New
functions disable_mouse_support() and enable_mouse_support();
changes to do_mouse(), do_suspend(), do_continue(), and
terminal_init(). (DLR)
- browser.c:
do_browser()
- Reference NANO_GOTODIR_(ALT|F)?KEY instead of
NANO_GOTOLINE_(ALT|F)?KEY for the "Go to Directory" shortcut.
(DLR)
parse_browser_input()
- Remove redundant key checks. (DLR)
browser_refresh()
- Rename variable editline to line, for consistency. (DLR)
- Change variable i from an int to a size_t in order to match
selected, which it's compared against. (DLR)
- color.c:
color_update()
- Fix incorrect setting of defcolor, which prevented the
reserved "default" syntax from being handled correctly. (DLR)
- cut.c:
cut_to_eof()
- New function, containing the main functionality of
do_cut_till_end(). (DLR)
do_cut_text()
- Add parameter cut_till_end, to indicate when we're cutting
from the current cursor position to the end of the file, and
call cut_to_eof() when it's TRUE. (DLR)
do_cut_till_end()
- Convert to a wrapper for do_cut_text(). (DLR)
- files.c:
open_file()
- Remove redundant wording in the error message when we try to
open a device file. (DLR)
do_insertfile()
- Use actual gettext calls instead of no-ops, for consistency.
(DLR)
safe_tempfile()
- Don't ignore $TMPDIR if it's set but blank, for consistency.
(DLR)
write_file()
- Don't free backupname before displaying it in a statusbar error
message. (DLR, found by Bill Marcum)
- If we can't save the backup file for some reason, at least
save the original file, if possible, since that's better than
saving nothing. (DLR, problem found by Bill Marcum, solution
suggested by Jordi)
- Clarify the error messages when creating a temporary file or
writing one for prepending fails. (DLR)
- Simplify the routine for closing the file just before we
indicate success on the statusbar. (DLR)
do_writeout()
- Fix problem where the modifiers at the "Write File" prompt
were marked for translation via gettext no-ops but never
actually translated. (Benno Schulenberg)
free_chararray()
- Assert that array isn't NULL, for consistency with the other
free_.*() functions. (DLR)
- global.c:
shortcut_init()
- Change the cursor position display help text to use "display"
instead of "show", for consistency. (DLR)
- In the main shortcut list, move the "Refresh" shortcut down to
after the "Enter" shortcut, for consistency. (DLR)
- Add the ability to move to the first and last line of the
current file from the main list via Meta-\ (Meta-|) and Meta-/
(Meta-?). Also, make sure all the equivalent shortcuts in the
search, replace, and "Go To Line" lists accept both the meta
keys and the equivalent function keys. (DLR)
- Reorganize the main shortcut list to make it easier for new
users. It now lists the twelve Pico-compatible default
operations, followed by search and replace shortcuts, followed
by cut and paste shortcuts, followed by marking shortcuts,
followed by back and forth movement shortcuts, followed by
start and end movement shortcuts, followed by buffer-switching
shortcuts, followed by insertion and deletion shortcuts,
followed by special movement shortcuts, followed by advanced
word and paragraph shortcuts, followed by display shortcuts.
(DLR and Benno Schulenberg, suggested by Benno Schulenberg)
- Tweak the descriptions of some shortcut keys to make them more
uniform. (Benno Schulenberg, minor tweaks by DLR)
- Shorten the "Where is Next" shortcut name to fit on the screen
after adding Meta-\ (Meta-|) and Meta-/ (Meta-?). (DLR)
- Lengthen the "UnCut Txt" shortcut name to "UnCut Text", as
there's enough room to display it unabbreviated. (DLR)
- Clarify the descriptions of the "Search" and "Replace"
shortcuts, and add spaces to the "Exit" shortcut's description
in multibuffer mode. (Benno Schulenberg)
- Remove the "Go To Line" shortcut in the replace shortcut list,
for compatibility with Pico. (DLR)
toggle_init()
- In the global toggle list, move the "Constant cursor position
display" toggle up to after the "Use more space for editing"
toggle, for consistency. (DLR)
- Reorganize the global toggle list to make it easier for new
users. It now lists toggles that affect the way things are
displayed, followed by toggles that affect editing, followed
by toggles that have to do with peripheral things. (DLR,
suggested by Benno Schulenberg)
- help.c:
do_help()
- Call get_shortcut() after getting input, so that we only have
to check for a main shortcut key instead of both it and all of
its equivalents. (DLR)
- Clean up the handling of NANO_REFRESH_KEY. (DLR)
- Remove redundant key checks. (DLR)
help_init()
- If we have at least two entries' worth of blank space, use it
to display more of "^Space" and "M-Space". (DLR, suggested by
Benno Schulenberg)
- Add various wording fixes. (DLR and Benno Schulenberg)
- If one of the help strings ends in newlines followed by a
space, move the space to the next help string to make it
easier for translators to see. (Benno Schulenberg)
- Make sure we have enough memory in all cases when displaying
the shortcut and toggle lists. (DLR)
- Wrap the shortcut list help text, and display it even when we
have fewer than 24 columns, for consistency with the toggle
help text. (DLR, suggested by Benno Schulenberg)
parse_help_input()
- Add Space and '-' as aliases for PageDown and PageUp, for
consistency with the file browser. (DLR, suggested by Benno
Schulenberg)
- Remove redundant key checks. (DLR)
help_line_len()
- Properly handle the case where we can't break the line of help
text. (DLR)
- Wrap the line of help text at (COLS - 1) instead of
(COLS - 8), for consistency. (DLR, suggested by Benno
Schulenberg)
- nano.c:
print1opt_full()
- Rename to print_opt_full(), for consistency. (DLR)
usage()
- Fix inaccuracies in the usage example. (DLR)
- Put command line arguments in <>'s instead of []'s, as the
latter imply that the arguments are optional when they aren't.
(DLR, found by Benno Schulenberg)
renumber()
- Remove invalid assert. (DLR, found by Filipe Moreira)
do_input()
- Remove redundant check for allow_funcs' being TRUE when we get
KEY_MOUSE. (DLR)
- Don't blow away the cutbuffer when we get a shortcut and the
function associated with it is do_cut_till_end(). (DLR)
- Simplify the routine to preserve the cutbuffer when we call a
cutting or copying function associated with a shortcut. (DLR)
- nano.h:
- Reorder the toggle #defines to match their corresponding order
in toggle_init(). (DLR)
- Move the #include for sys/param.h here from nano.c, and add an
#ifdef around it. (DLR)
- prompt.c:
get_prompt_string()
- Include the handling of the help key even when help is
disabled, so that we aren't erroneously kicked out of the
statusbar prompt under any circumstances. (DLR, found by Benno
Schulenberg)
do_statusbar_input()
- Remove redundant check for allow_funcs' being TRUE when we get
KEY_MOUSE. (DLR)
- Improve the handling of NANO_REFRESH_KEY. (DLR)
total_statusbar_refresh()
- New function, called when we get NANO_REFRESH_KEY in
do_statusbar_input(). (DLR)
do_yesno_prompt()
- Handle the keys in a switch statement instead of a long if
block, for simplicity. (DLR)
- rcfile.c:
parse_argument()
- Rename variable ptr_bak to ptr_save, for consistency. (DLR)
- Add double quotes around invalid string arguments in error
messages, for consistency. (DLR)
- Add single quotes around the invalid string argument in the
error message about unterminated strings, to avoid confusion.
(Benno Schulenberg)
parse_syntax()
- Don't generate an error if we find a duplicate syntax name,
since we might be trying to override a syntax in the global
nanorc with one in our local nanorc. Instead, free any
duplicate syntaxes we find, so that we always use the last
syntax with a given name. (DLR)
color_to_short()
- Add quotes around invalid string arguments in error messages,
for consistency. (DLR)
parse_colors()
- Check for a color command's not following a syntax line before
anything else. (DLR)
- Add quotes around invalid string arguments in error messages,
for consistency. (DLR)
parse_rcfile()
- Properly generate an error if we've read in a syntax without
any associated color commands. (DLR)
- Change variable i from an int to a size_t, for consistency.
(DLR)
- Properly handle rcfiles that don't end in newlines. (DLR)
- Add quotes around invalid string arguments in error messages,
for consistency. (DLR)
do_rcfile()
- Check for the rcfile's being a directory or device file and
reject it if it is, for consistency with file handling
elsewhere. (DLR)
- Remove SYSCONFDIR #ifdef, as SYSCONFDIR should always be set.
(DLR)
- Change all rcfile error messages to refer to commands instead
of directives, for consistency with nanorc.5. (DLR)
- text.c:
break_line()
- Fix problem where tab widths in columns would always be
calculated as tabsize. (DLR, found by Alexey Toptygin)
- Handle newlines consistently when searching for the last blank
in the first group of blanks in the range of (goal - 1). (DLR,
found by Benno Schulenberg)
do_justify()
- Remove redundant key checks. (DLR)
do_spell()
- Clarify the error message when creating a temporary file
fails. (DLR)
- Set currshortcut to main_list before calling total_refresh()
near the end of the function, so that we don't display the
wrong shortcut list. (DLR)
do_verbatim_input()
- Add a translator comment explaining the "Verbatim Input"
statusbar message. (Benno Schulenberg)
- Unconditionally blank the statusbar as soon as we're finished
getting input. (DLR, suggested by Benno Schulenberg)
- utils.c:
digits()
- Return the proper number of digits when n is exactly 10. (DLR)
- Simplify to use a for loop instead of a while loop. (DLR)
ngetdelim()
- Set errno to EINVAL if stream is not a valid file stream.
This matches the manual page. (DLR)
nperror()
- Simplify. (DLR)
check_linenumbers()
- Removed, as it's no longer used, and since there's no way to
tell if its return value will be in int or ssize_t range.
(DLR)
- winio.c:
parse_kbinput()
- If we get NANO_CONTROL_8, properly handle it in all cases.
(DLR)
parse_escape_seq_kbinput()
- New function used to interpret escape sequences, formerly part
of parse_kbinput(). (DLR)
get_byte_kbinput()
- Fix typo preventing Esc Esc 3 through Esc Esc 6 from being
interpreted as control key sequences. (DLR)
- Tweak to more closely match get_unicode_kbinput(). (DLR)
get_control_kbinput()
- Add Ctrl-/ as an alias for Ctrl-_. (DLR, found by Benno
Schulenberg)
- Simplify the if blocks wherever possible. (DLR)
parse_verbatim_kbinput()
- Don't include the ability to enter a Unicode sequence via
verbatim input mode if ENABLE_UTF8 isn't defined or we're not
in a UTF-8 locale. (DLR)
check_statusblank()
- Avoid redundant updates when statusblank is 0. (DLR)
display_string()
- Properly display double-column characters if they're past the
first virtual page and their first column is covered by the
"$" displayed at the beginning of the line. (DLR)
statusbar()
- Blank the statusbar after 26 keystrokes instead of 25, for
compatibility with Pico. (DLR)
edit_draw()
- Properly ignore zero-length regexes in multi-line regexes as
well as single-line ones. This avoids a segfault when trying
to color e.g. "start="$" end="$"". (DLR, found by Trevor
Caira)
- Don't display any statusbar message when we get a zero-length
regex, as we can get one under legitimate circumstances. (DLR,
found by Mike Frysinger)
update_line()
- Remove unneeded assert. (DLR)
edit_redraw()
- Fix problem where not all lines would be updated properly if
we'd scrolled off the screen and the mark was on. (DLR)
do_credits()
- Update the last copyright notice to include 2006. (DLR)
- configure.ac:
- Remove old warnings about color support. (DLR)
- Remove conditional header checks for fcntl.h and termios.h, as
nano won't build without them, and add conditional header
check for sys/param.h, as some systems need only limits.h.
(DLR)
- doc/faq.html:
- Add a new section 4.4, and move all section 4 entries after it
down one number, to explain how to deal with problems typing
Meta-[. (DLR)
- Add a new section 4.5, and move all section 4 entries after it
down one number, to explain a problem that can occur when
holding down keys to generate Meta sequences. (Benno
Schulenberg, minor tweaks by DLR)
- Add a few capitalization and wording fixes. (DLR)
- Remove section 4.4, and move all section 4 entries after it up
one number, since it no longer applies. Meta-] and Meta-[ are
no longer used to indent and unindent marked text, since they
require that the bracket matching key change to Ctrl-], which
is used as the telnet escape key. (DLR, found by Chris)
- Make the link to the nano CVS page a bit more readable. (DLR)
- Update section 3.8 to mention the new "Unicode Input" prompt,
and how Unicode input only works when Unicode support is
enabled. (DLR)
- Add minor punctuation, wording, and typo fixes. (DLR)
- Update section 5.3, due to the display fix for two-column
Unicode characters. (DLR)
- doc/nano.1:
- Update the copyright years to include 2006. (DLR)
- Explicitly mention that all regexes should be extended regular
expressions. (DLR, suggested by John M. Gabriele)
- Miscellaneous minor fixes. (DLR)
- Add various wording fixes. (Benno Schulenberg and DLR)
- Put command line arguments in <>'s instead of []'s, as the
latter imply that the arguments are optional when they aren't.
(Benno Schulenberg)
- doc/nanorc.5:
- Update the copyright years to include 2006. (DLR)
- Explicitly mention that all regexes should be extended regular
expressions. (DLR, suggested by John M. Gabriele)
- Miscellaneous minor fixes. (DLR)
- Add various wording fixes. (Benno Schulenberg and DLR)
- Mention that the nanorc file should not be in DOS or Mac
format. (DLR)
- doc/rnano.1:
- Update the copyright years to include 2006. (DLR)
- Explicitly mention that all regexes should be extended regular
expressions. (DLR, suggested by John M. Gabriele)
- Miscellaneous minor fixes. (DLR)
- Add various wording fixes. (Benno Schulenberg and DLR)
- Add description of the +LINE[,COLUMN] option. (DLR)
- doc/nano.texi:
- Update the copyright years to include 2006. (DLR)
- Explicitly mention that all regexes should be extended regular
expressions. (DLR, suggested by John M. Gabriele)
- Miscellaneous minor fixes. (DLR)
- Add various wording fixes. (Benno Schulenberg and DLR)
- Change license to GPL, in order to match the rest of the
documentation, and because the current license is incompatible
with everything else in any case. (DLR)
- Mention that backup files and spell checking are disabled in
restricted mode, as rnano.1 does. (DLR)
- Add minor updates to put some text back in sync with nano's
help text, and with nano's current feature set. (DLR)
- Add a "Nanorc Files" section to explain the nanorc file format
in detail, using text from nanorc.5. (DLR)
- Put command line arguments in <>'s instead of []'s, as the
latter imply that the arguments are optional when they aren't.
(Benno Schulenberg)
- Add missing description of -H/--historylog, and move
-x/--nohelp down so that all the command line options are in
alphabetical order. (Benno Schulenberg)
- Change all occurrences of "file name" to "filename". (Benno
Schulenberg)
- doc/man/Makefile.am:
- Simplify the setting of SUBDIRS. (DLR)
- doc/man/fr/nano.1, doc/man/fr/nanorc.5, doc/man/fr/rnano.1:
- Updated manpage translations by Jean-Philippe Guérard.
- doc/nanorc.sample:
- Miscellaneous minor fixes. (DLR and Benno Schulenberg)
- Tweak the "c-file" regex for characters to accept '"' again,
as it's apparently valid, and simplify it. (DLR)
- Simplify the "shellscript" regex for command line options.
(DLR)
- Replace instances of \" with ", since quotes inside string
parameters don't need to be escaped with backslashes. (DLR)
- Mention in the comments that more than one start/end regex can
be included per line. Also, change the comment for the
"whitespace" option so that the hexadecimal character values
are six digits long, and state which character values work
with which encodings. (DLR)
- Add sample regexes for Python. (singular on the Gentoo forums,
http://forums.gentoo.org/viewtopic.php?t=86562; minor tweaks
by DLR, suggested by John M. Gabriele)
- Explicitly mention that all regexes should be extended regular
expressions. (DLR, suggested by John M. Gabriele)
- Simplify the "nanorc" regex for commands. (DLR)
- Mention that the nanorc file should not be in DOS or Mac
format. (DLR)
- Add various wording fixes. (Benno Schulenberg and DLR)
- Replace instances of "\w" with its equivalent "[0-9A-Z_a-z]",
and instances of "\W" with its equivalent "[^0-9A-Z_a-z]", for
greater readability. (DLR)
- Remove unneeded foreground color for the Java source regex
used to highlight trailing whitespace, since we now support
background colors without foreground colors. (DLR)
- Further simplify the "groff" regexes. (DLR)
- Tweak the "shellscript" regexes to properly color all special
variables, such as $? and $@. (Benno Schulenberg)
- Tweak the "nanorc" regexes to color keywords bright green
instead of cyan, and comments bright blue instead of blue.
(John M. Gabriele)
- Simplify the extensions associated with the "nanorc" regexes.
(DLR)
- Add regexes for Ruby. (John M. Gabriele, minor tweaks by DLR)
- doc/nanorc.sample.in:
- Add comments describing the relationships between syntax file
names and the names used as their short descriptions. (John M.
Gabriele)
- doc/java.nanorc:
- Simplify a comment. (DLR)
- doc/man.nanorc:
- Change the name of the "manpage" regexes to "man", for
consistency. (John M. Gabriele)
- doc/nanorc.nanorc:
- Tweak the "nanorc" regexes to color comments starting with a
double ## cyan instead of bright blue. (John M. Gabriele)
- doc/ruby.nanorc:
- Add regex for "here" docs. (John M. Gabriele)
- doc/sh.nanorc:
- Tweak the regex for special variables, moving "-" to the end,
to avoid excessive coloring or an "Invalid range end" error.
(Benno Schulenberg)
- Tweak the "sh" regexes to color comments cyan instead of
yellow. (John M. Gabriele)
- src/Makefile.am:
- If we're uninstalling, remove the "rnano" symlink. (DLR, found
by Benno Schulenberg)
- Remove "-Iintl" from INCLUDES, as we don't use an intl
directory inside the source directory anymore. (DLR)
- README, README.CVS:
- Add various cosmetic and wording improvements. (John M.
Gabriele, minor tweaks by DLR)
- TODO:
- Update for nano 2.0, since we're now in a feature freeze.
(DLR)
- UPGRADE:
- Miscellaneous minor fixes. (DLR)
- Update for nano 2.0, since we're now in a feature freeze.
(DLR)
GNU nano 1.3.11 - 2006.03.30
- General:
- Miscellaneous comment fixes. (DLR)
- Remove unnecessary #ifdef around termios.h #include in nano.c.
(DLR)
- Sort the default strings for brackets and punct, and the "or"
atom in the default regex string for quotestr, according to
ASCII. Changes to main(), nano.1, nanorc.5, and
nanorc.sample. (DLR)
- Rework the bracket searching code to handle multibyte bracket
characters, and allow specifying matching bracket characters
other than the default via the "matchbrackets" rcfile option.
New functions mbstrpbrk() and mbrevstrpbrk(); changes to
find_statusbar_bracket_match(), do_statusbar_find_bracket(),
find_bracket_match(), do_find_bracket(), main(),
parse_rcfile(), nanorc.5, and nanorc.sample. (DLR)
- Rework input parsing in the file browser to be more flexible.
New function parse_browser_input(); changes to do_browser().
(DLR)
- Allow tab completion of directories at the "Go To Directory"
prompt. Also, move the browser drawing routines to a separate
function, and make sure it's used when refreshing or doing tab
completion at the prompt in the file browser. New function
browser_refresh(); changes to do_browser(), browser_init(),
do_insertfile(), do_writeout(), cwd_tab_completion(),
input_tab(), do_statusbar_input(), get_prompt_string(),
do_prompt(), search_init(), do_replace(), do_gotolinecolumn(),
and do_int_spell_fix(). (DLR)
- browser.c:
do_browser()
- Properly set currshortcut back to the file browser shortcut
list after a "Go To Directory" prompt, and properly restore
the file list display after returning from the help browser at
the "Go To Directory" prompt. (DLR)
- Rename variable j to i, for consistency. (DLR)
- Make fileline, old_selected, and the static selected size_t's,
since the first and second can hold the value of the third,
and the first can be that large. (DLR)
- chars.c:
mbstrchr()
- Make parameter c const. (DLR)
- files.c:
do_writeout()
- Remove unneeded setting of currshortcut. (DLR)
is_dir()
- Rename parameter ret to retval, for consistency. (DLR)
- global.c:
shortcut_init()
- Remove erroneous handling of the "Get Help" shortcut in the
file browser shortcut list. (DLR)
- nano.h:
- Remove now-unneeded VERMSG #define. (DLR)
- prompt.c:
get_prompt_string()
- Redraw the prompt and set finished to FALSE when NANO_HELP_KEY
is pressed, so that we don't leave the prompt, enter the help
browser, and restart the prompt after leaving it. This will
properly preserve the cursor position after doing the last of
these. (DLR)
- utils.c:
ngetdelim()
- Do sanity checks manually again instead of in an assert, and
set errno to EINVAL as well as return -1 if they fail. This
matches the manual page. (DLR)
- winio.c:
get_key_buffer()
- If we fail to get a character MAX_BUF_SIZE times in a row,
hang up regardless of the value of errno. This fixes a
problem where nano doesn't terminate properly under xterm if
the user su's to root, runs nano, and then closes the terminal
window. errno isn't set properly to EIO then. (DLR, found by
John <acocaracha@gmail.com>)
parse_kbinput()
- Interpret Shift-Begin, Shift-Delete, Shift-End, Shift-Home,
Shift-Insert, and Shift-Suspend as Begin, Delete, End, Home,
Insert, and Suspend, respectively, regardless of whether
--rebindkeypad is used. (DLR, found by David Benbennick)
titlebar()
- Use PACKAGE_STRING, as defined by autoconf, instead of VERMSG.
(DLR)
edit_redraw()
- If either current or old_current is offscreen, we're not on
the first page, and/or we're not on the same page as before,
update old_current before scrolling the edit window. This
fixes a potential display problem when a search moves the
cursor offscreen and onto a different page. (DLR, found by
Mike Frysinger)
display_string()
- Fix minor memory leak. (DLR)
- Fix memory corruption problems caused by not allocating enough
space for converted when a line ends in a tab(s) and we're not
in UTF-8 mode. (DLR, found by Duncan Geoffry Doyle, Nick
Warne, and Mike Frysinger)
- doc/faq.html:
- Update the Free Translation Project's address, change the
character set to UTF-8, and remove broken links to contributed
RedHat nano packages. (DLR)
- doc/nano.1:
- Better display the default values for quotestr. (DLR)
- doc/nanorc.5:
- Give the default values for the brackets and punct options,
and better display the default values for quotestr. (DLR)
- Mention that quotes inside string parameters don't need to be
escaped with backslashes. (John M. Gabriele, minor tweaks by
DLR)
- doc/rnano.1:
- Remove unneeded comments. (DLR)
- doc/nanorc.sample:
- Remove unneeded comment. (DLR)
- Mention that quotes inside string parameters don't need to be
escaped with backslashes. (John M. Gabriele, minor tweaks by
DLR)
- THANKS:
- Add new Swedish translator.
GNU nano 1.3.10 - 2005.12.23
- General:
- Miscellaneous comment fixes. (DLR)
- More int -> bool conversions. (DLR)
- Add the ability to scroll up or down single lines without
scrolling the cursor, via Meta-- and Meta-+. Note that this
is disabled when NANO_SMALL is defined. New functions
do_scroll_up() and do_scroll_down(); changes to
shortcut_init(). (DLR, suggested by Mike Frysinger)
- Properly handle mouse clicks on the statusbar prompt text.
New functions statusbar_xplustabs() and
get_statusbar_page_start(); changes to do_statusbar_mouse(),
nanoget_repaint(), nanogetstr(), and statusq(). (DLR)
- Since the statusbar prompt code needs at least 4 columns in
order to work properly, make that the minimum number of
columns that nano requires in order to run, and remove
assertions and code that make use of a smaller number of
columns. Changes to window_init(), nanoget_repaint(),
titlebar(), statusbar(), and get_page_start(). (DLR)
- Move get_page_start(), xplustabs(), actual_x(), strnlenpt(),
strlenpt(), check_linenumbers(), dump_buffer(), and
dump_buffer_reverse() from winio.c to utils.c, as they're
really utility functions. (DLR)
- Add missing stdio.h #include to text.c and winio.c, and remove
unneeded sys/wait.h #include from files.c. (DLR)
- Move functions specific to the statusbar prompt to their own
source file, adjust related variables accordingly, and rename
variable resetstatuspos reset_statusbar_x. New file prompt.c;
changes to do_statusbar_input(), do_statusbar_mouse(),
do_statusbar_output(), do_statusbar_home(),
do_statusbar_end(), do_statusbar_right(), do_statusbar_left(),
do_statusbar_backspace(), do_statusbar_delete(),
do_statusbar_cut_text(), do_statusbar_next_word(),
do_statusbar_prev_word(), do_statusbar_verbatim_input(),
statusbar_xplustabs(), get_statusbar_page_start(),
nanoget_repaint(), nanogetstr(), statusq(), statusq_abort(),
and do_yesno() (all moved to prompt.c). (DLR)
- Move functions specific to the help browser to their own
source file, and adjust related variables accordingly. New
file help.c; changes to help_init(), help_line_len(), and
do_help() (all moved to help.c). (DLR)
- Tweak a few functions to remove the assumption that the file
always ends in a magicline. Changes to cut_line(),
do_cut_till_end(), open_buffer(), read_file(), write_file(),
do_last_line(), do_para_end(), do_wrap(), backup_lines(),
find_paragraph(), do_justify(), do_alt_speller(), and
do_wordlinechar_count(). (DLR)
- Tweak a few functions to rely on fileage and filebot instead
of NULL for their checks to detect the top or bottom of the
file. Changes to cut_line(), cut_to_eol(), do_page_up(),
do_page_down(), do_para_end(), do_next_word(), do_prev_word(),
do_up(), do_down(), do_scroll_down(), do_right(), do_mouse(),
do_gotolinecolumn(), do_delete(), begpar(), find_paragraph(),
do_wrap(), remove_magicline(), and edit_scroll(). (DLR)
- Add new -L/--nonewlines command line option, and new
"nonewlines" rcfile option, to control whether nano adds
magiclines to the ends of files. Changes to read_file(),
write_marked_file(), move_to_filestruct(),
copy_from_filestruct(), usage(), do_output(), main(),
do_replace_loop(), do_delete(), do_int_spell_fix(),
do_alt_speller(), nano.1, nanorc.5, nano.texi, and
nanorc.sample. (DLR, suggested by Jaime
<re2823@Safe-mail.net>)
- Move functions specific to the file browser to their own
source file, and adjust related variables accordingly. New
file browser.c; changes to striponedir(), browser_init(),
do_browser(), and do_browse_from() (all moved to browser.c).
(DLR)
- Add the statusbar prompt's equivalent of placewewant,
statusbar_pww, to prompt.c, and convert its functions to use
it. New functions reset_statusbar_cursor() and
need_statusbar_horizontal_update(); changes to
do_statusbar_mouse(), do_statusbar_output(),
do_statusbar_home(), do_statusbar_end(), do_statusbar_right(),
do_statusbar_left(), do_statusbar_delete(),
do_statusbar_cut_text(), do_statusbar_next_word(),
do_statusbar_prev_word(), do_statusbar_verbatim_input(),
nanoget_repaint() (renamed update_statusbar_line()),
nanogetstr() (renamed get_prompt_string()), statusq() (renamed
do_prompt()), statusq_abort() (renamed do_prompt_abort()), and
do_yesno() (renamed do_yesno_prompt()). (DLR)
- Initialize the static pid_t pid in text.c to -1. (DLR)
- Fix copyright years on source files. All functions in
browser.c were originally added in 2001; the oldest function
in color.c is do_colorinit() (now color_init()), which was
originally added in 2001; the oldest function in chars.c is
revstrstr(), which was originally added in 2001; the oldest
function in help.c is do_help(), which was originally added in
2000; the oldest function in prompt.c is statusq() (now
do_prompt()), which was originally added before 0.6.6, which
was apparently in 1999; all functions in rcfile.c were
originally added in 2001; one of the oldest functions in
search.c is do_search(), which was originally added in 0.2.7,
which was apparently in 1999; and one of the oldest functions
in text.c is do_wrap(), which was originally added in 0.3.1,
which was apparently in 1999. (DLR)
- For functions originally adapted from other sources, add
notices from the original files, as we do with the tab
completion functions adapted from busybox, updating the Free
Software Foundation's address as needed. Also, invoke LGPL
clause 3 to convert the LGPLed ngetdelim() and ngetline()
functions to use the GPL instead. This is done so that we
don't have to include a copy of the LGPL, and because the
changes made to integrate these functions with nano make them
dependent on nano's GPLed functions and hence useless
elsewhere. (DLR)
- Don't install the localized versions of the manpages if
nano is built with --disable-nls. Changes to Makefile.am and
doc/man/Makefile.am. (Mike Frysinger)
- Rename the NANO_SMALL #define to NANO_TINY. (DLR)
- Overhaul the bracket searching code so that it no longer
requires regex support to work. New functions revstrpbrk()
and find_bracket_match(); changes to shortcut_init() and
do_find_bracket(). (DLR)
- Add the ability to do bracket searches at the statusbar
prompt. New functions find_statusbar_bracket_match() and
do_statusbar_find_bracket(); changes to do_statusbar_input().
(DLR)
- Beep whenever we can't read a file or directory and have to
indicate it on the statusbar, as Pico does. Changes to
do_browser(), open_file(), and write_file(). (DLR)
- Adjust copyright notices in all source files to account for
Chris' reassigning the 2005-2006 copyright on nano to me.
Changes to do_credits(). (DLR)
- Readd RETSIGTYPE return types for signal handlers, since any
problems with its being defined as the wrong type aren't
nano's fault. Changes to handle_hupterm(), do_suspend(),
do_continue(), handle_sigwinch(), and cancel_command(). (DLR)
- Since proto.h includes nano.h, and nano.h includes config.h
first, include proto.h first and remove redundant includes of
config.h in all non-header source files. (DLR)
- Refer to the Enter key instead of the Return key for
consistency. Changes to load_history() and rcfile_error().
(DLR)
- browser.c:
do_browser()
- When setting the width of each file, use the "?" operator
instead of an if/else clause. (DLR)
- chars.c:
mbwidth()
- If wcwidth() returns -1 for the character passed in, treat the
character as having the width of Unicode U+FFFD (Replacement
Character) instead of having a width of zero, since display
problems can crop up with the latter approach. (DLR)
mbstrchr()
- Detect the case where the character isn't found in the string
more accurately. (DLR)
- cut.c:
cut_line()
- Since placewewant will always be zero after the line is cut,
set it to zero directly instead of assigning it the value of
xplustabs(). (DLR)
- files.c:
read_file()
- Remove apparently unneeded logic to handle a case where
current is NULL, since it shouldn't be NULL there. (DLR)
get_next_filename()
- Store the value of digits(ULONG_MAX) in a static, since it
doesn't change and hence doesn't need to be recalculated.
(DLR)
- global.c:
shortcut_init()
- Change the description of the Meta-] shortcut to "Find
matching bracket", as it's clearer. (DLR)
- nano.c:
version()
- If DISABLE_WRAPPING is defined, the code in DISABLE_ROOTWRAP
#ifdefs isn't included, so don't display
"--disable-wrapping-as-root" in that case. (DLR)
do_cont()
- Rename to do_continue(), and rename parameter s to signal, for
consistency. (DLR)
do_verbatim_input()
- Move to text.c, since it's an advanced text-based operation.
(DLR)
- nano.h:
- Readd MIN_EDITOR_COLS #define, set to 4. (DLR)
- proto.h:
- Remove now-unused externs for currslen, shortcut_list,
fileinfo, syntaxfile_regexp, and synfilematches. (DLR)
- prompt.c:
do_statusbar_input()
- Fix misplaced break when handling NANO_VERBATIM_KEY. (DLR)
reset_statusbar_cursor()
- Fix cursor placement problem by modeling the code more closely
after reset_cursor(). (DLR)
get_prompt_string()
- Adjust #ifdefs to leave out disabled keys entirely instead of
keeping enough code to just ignore them. (DLR)
- rcfile.c:
do_rcfile()
- Remove unneeded assert. (DLR)
- search.c:
search_abort()
- Rename to search_replace_abort(). (DLR)
findnextstr()
- Remove parameter can_display_wrap, as it's always set to TRUE
now, and rename parameter wholeword to whole_word, for
consistency. (DLR)
- Only include the whole_word parameter when DISABLE_SPELLER
isn't defined, as it's only used then. (DLR)
replace_abort()
- Replace with search_replace_abort(), since it does the same
things that this function does. (DLR)
do_replace_loop()
- Change order of parameters to more closely match those of
findnextstr(), and rename parameter wholewords to whole_word,
for consistency. (DLR)
- Only include the whole_word parameter when DISABLE_SPELLER
isn't defined, as it's only used then. (DLR)
- text.c:
execute_command()
- Instead of hardcoding /bin/sh as the shell to use when
executing a command, use $SHELL, and only fall back to /bin/sh
if $SHELL isn't set. (DLR)
do_wrap()
- Rename variable wrapping to prepending, to avoid confusion,
and rename the static bool same_line_wrap to prepend_wrap to
match. (DLR)
- Properly add a new magicline when needed if, in the process of
wrapping, we prepend text to the last line of the file. (DLR)
break_line()
- Only include the newline parameter if DISABLE_HELP isn't
defined, as it's only used then. (DLR)
- In the surrounding #ifdef, replace the combination of
!DISABLE_JUSTIFY and !DISABLE_WRAPPING with
!DISABLE_WRAPJUSTIFY, for consistency. (DLR)
begpar()
- Return FALSE if foo is NULL, as inpar() does. (DLR)
backup_lines()
- Return void instead of a pointer to the copy of the first
line, since current will point to the same location after the
text is copied and so can be used instead of the old return
value. (DLR)
- Remove unused quote_len parameter. (DLR)
do_justify()
- Don't save current_y and restore it if the user unjustifies,
as the reset_cursor() called by edit_refresh() after restoring
edittop and current will ensure that current_y is restored to
its original value. (DLR)
- Renumber after justifying each individual paragraph, since
find_paragraph() needs the line numbers to be right as well as
edit_refresh(). This fixes a potential segfault when doing
full justify with auto-indent turned on. (DLR)
do_alt_speller()
- Move the code that replaces the text of the current file with
the text of the spell-checked file into its own function,
replace_buffer(). (DLR)
- utils.c:
parse_line_column()
- Simplify parsing of the column number. (DLR)
ngetdelim()
- Do sanity checks in an assert instead of checking them
manually and returning -1 if they fail. (DLR)
is_whole_word()
- Only include when DISABLE_SPELLER isn't defined, as it's only
used then. (DLR)
get_page_start()
- Fix test so that we scroll through the line in 8-character
chunks when COLS is greater than 8, not when COLS is greater
than 9. (DLR)
remove_magicline()
- Add assert. (DLR)
- winio.c:
nanoget_repaint()
- Rename parameter inputbuf to buf, for consistency. (DLR)
reset_cursor()
- Rename variable x to xpt, to avoid confusion. (DLR)
update_line()
- Remove now-unneeded logic that set the index parameter to zero
if the fileptr parameter didn't point to current. (DLR)
edit_add()
- Rename to edit_draw(), and rename parameter yval to line.
(DLR)
do_cursorpos()
- Remove unneeded assert. (DLR)
do_yesno()
- Make mouse clicks on the Yes/No/All shortcuts work properly
when the MORE_SPACE flag is set. (DLR)
- configure.ac:
- Clarify description of --disable-speller. (DLR)
- Disable wrapping entirely when --enable-tiny is used, as it
matches the FAQ, it makes nano even smaller, and it eliminates
the need for --disable-wrapping-as-root in that case (in which
it's impossible to turn wrapping back on without nanorc
support). (DLR)
- README.CVS:
- Mention that the minimum required version of texinfo is 4.0,
since that's the first version that supports generating HTML.
(DLR)
- Mention that the minimum required version of groff is 1.12,
since that's the first version that supports generating HTML.
(DLR)
- Update the given cvs commands so that they work again. (DLR)
- doc/faq.html:
- Add a new section 5.3 to explain the status of nano's Unicode
support. (Mike Frysinger, minor tweaks by DLR)
- Clarify section 5.3 to better explain how to enable Unicode
support, and remove the mention of quirks, since they turned
out to not be a nano problem. (Mike Frysinger and DLR)
- doc/nano.1:
- Make one non-bold instance of "nano" bold, for consistency.
(DLR)
- doc/man/fr/nano.1, doc/man/fr/nanorc.5:
- Updated manpage translations by Jean-Philippe Guérard.
- doc/rnano.1:
- Add rnano.1 manpage from Thijs Kinkhorst. (Jordi) DLR: Merge
a few minor updates from nano.1.
- doc/nano.texi:
- Fix inconsistent wording and punctuation. (DLR)
- Add missing configure options. (Mike Frysinger, minor tweaks
by DLR)
- Sort the configure options more consistently, and add missing
--disable-utf8 option. (DLR)
- Move --disable-wrapping above --enable-tiny, as the latter now
turns it on. (DLR)
- doc/nanorc.sample:
- Tweak the "c-file" regex for characters to properly accept
'\"' and reject '"' and '''. (DLR)
- doc/texinfo/Makefile.am:
- Automatically generate an HTML version of the info page,
nano.html. (DLR)
- src/Makefile.am:
- Add browser.c, help.c, and prompt.c to nano_SOURCES. (DLR)
GNU nano 1.3.9 - 2005.10.23
- General:
- Miscellaneous comment fixes. (DLR)
- More int -> bool conversions. (DLR)
- Fix a few last instances of the current line number's being
saved as an int instead of a ssize_t. Changes to
renumber_all(), renumber(), do_alt_speller(), and
backup_lines(). (DLR)
- Reorder some functions for consistency. (DLR)
- Rename variable open_files openfile, for consistency. (DLR)
- Remove renumber()'s dependency on the main filestruct.
Changes to renumber(); removal of renumber_all(). (DLR)
- Restructure things so that every file has its own
openfilestruct, and so that the values in it are used directly
instead of being periodically synced up with the globals.
Accordingly, remove the globals. Changes to pretty much
every function. Rename add_open_file() make_new_buffer(),
rename load_buffer() open_buffer(), rename load_open_file()
display_buffer(), rename open_prevnext_file()
switch_to_prevnext_buffer(), rename open_prevfile_void()
switch_to_prev_buffer(), rename open_nextfile_void()
switch_to_next_buffer(), rename write_marked()
write_marked_file(), remove load_file(), rename cancel_fork()
cancel_command(), rename open_pipe() execute_command(), remove
execute_command(), rename resize_variables(), rename
global_init() window_size_init(), rename get_buffer()
get_key_buffer(), and rename get_buffer_len()
get_key_buffer_len(). (DLR)
- Replace all mvwaddstr(hblank) calls with a new function that
does the same thing without the need for hblank. New function
blank_line(); changes to do_browser(), blank_titlebar(),
blank_topbar(), blank_edit(), blank_statusbar(),
blank_bottombars(), update_line(), and edit_refresh(). (DLR)
- Make the static pid variable used by execute_command() and
cancel_command() a pid_t instead of an int, for consistency.
(DLR)
- Consistently make the flags global and any variables used to
hold it longs. (DLR)
- Make edit_scroll() sophisticated enough to keep track of
current and current_x, update the lines before and after the
scrolled region, and properly scroll more than editwinrows
lines; and change the movement functions that use
edit_scroll() to (a) set current and current_x before calling
it, and (b) no longer call edit_redraw() afterward, as it's
now unnecessary. These changes eliminate redundant screen
updates when the mark is on, since the mark display depends on
current and current_x. Also change edit_redraw() to use
edit_scroll() instead of edit_refresh() when one of its two
reference lines is offscreen. Changes to edit_scroll(),
do_page_up(), do_page_down(), do_up(), and do_down(). (DLR)
- Consistently make the fg and bg colortype struct entries and
any variables used to hold them shorts. Changes to
do_colorinit() (renamed color_init()), color_to_int() (renamed
color_to_short()), and parse_colors(). (DLR)
- Change color handling to save only the extension and color
regex strings constantly, and to actually compile them on an
as-needed basis. Also, make a color syntax specified on the
command line override the syntax associated with the current
file extension, add a "default" syntax that takes no
extensions for those files that don't match any other
syntax's extensions, and add a "none" syntax that's the same
as having no syntax at all. Changes to update_color(),
thanks_for_all_the_fish(), nregcomp(), parse_syntax(), and
parse_colors(). (Brand Huntsman and DLR)
- Various other color fixes. Handle unspecified foreground
colors properly, treat syntax names case sensitively, flag
duplicate syntax names as errors, don't automatically
reinitialize the displayed colors every time we update the
current buffer's colors (since the buffer may not be displayed
immediately), don't bother doing complete refreshes of the
screen when color support is enabled if there's no regex
associated with the current file, and rename variable
exttype->val to exttype->ext, for consistency. Changes to
do_colorinit() (renamed color_init()), update_color() (renamed
color_update()), write_file(), do_input(), do_output(), and
parse_syntax(). (DLR)
- Simplify get_totals() to only get the total number of
characters, and eliminate dependence on its old ability to get
the total number of lines by renumber()ing when necessary and
using the number of the last line of a filestruct. Changes to
read_file(), move_to_filestruct(), copy_from_filestruct(),
do_justify(), get_totals() (renamed get_totsize()), and
do_cursorpos(). (DLR)
- Change the NANO_WIDE #define to ENABLE_UTF8, as the latter is
clearer. (DLR)
- Minor history code fixes: Make sure that the current position
in the history list is properly set to the bottom if we cancel
out of the prompt, and that magichistory is properly updated
when we change it and then move up. New function
history_reset(); changes to nanogetstr(). (DLR)
- Various character-handling cleanups. If we get an invalid
multibyte sequence, treat it as Unicode FFFD (Replacement
Character), unless we're searching for a match to it. Also,
remove unneeded variables and checks when parsing multibyte
sequences. Changes to is_alnum_mbchar(), is_blank_mbchar(),
is_cntrl_mbchar(), is_punct_mbchar(), control_mbrep(),
mbwidth(), make_mbchar(), parse_mbchar(), mbstrncasecmp(),
mbstrcasestr(), mbrevstrcasestr(), mbstrchr(), and
display_string(). (DLR)
- Move advanced text operations (command execution in a buffer,
wrapping, spell checking, justifying, and word counting) to
their own source file, and adjust related variables
accordingly. New file text.c; changes to cancel_command(),
execute_command(), do_backspace(), do_delete(), do_tab(),
do_enter(), do_mark(), wrap_reset(), do_wrap(),
do_int_spell_fix(), do_int_speller(), do_alt_speller(),
do_spell(), break_line(), indent_length(), justify_format(),
quote_length(), quotes_match(), indents_match(), begpar(),
inpar(), backup_lines(), find_paragraph(), do_justify(),
do_justify_void(), do_full_justify(), and do_word_count() (all
moved to text.c). (DLR)
- Since the total number of lines in a file is the same as the
number of its last line when all its lines are numbered
properly, use that in place of openfile->totlines, and
eliminate references to openfile->totlines. Changes to
initialize_buffer_text(), read_file(), move_to_filestruct(),
copy_from_filestruct(), do_delete(), do_enter(), do_wrap(),
do_justify(), do_alt_speller(), do_wordlinechar_count(),
new_magicline(), remove_magicline(), and do_cursorpos(). (DLR)
- Various fill-related cleanups. Move check_die_too_small() and
window_size_init()'s code into window_init(), as they really
belong there, remove associated separate calls to them, make
sure window_init() is always called at the same time when
redrawing the screen, and turn the keypad on in topwin in case
we ever read input from it. Changes to window_init(), main(),
and do_alt_speller(); removal of check_die_too_small() and
window_size_init(). (DLR)
- Remove still more redundant screen updates. Change all
wrefresh() calls to wnoutrefresh() calls, except for those in
total_update() and do_credits(); call doupdate() just before
using blocking input, since nano spends the most time using
it, for blocking input; and only do constant cursor position
display if we're just about to use blocking input. Changes to
input_tab(), do_browser(), do_output(), main(),
get_key_buffer(), check_statusblank(), nanogetstr(),
titlebar(), statusbar(), bottombars(), edit_refresh(),
do_yesno(), and do_help(). (DLR)
- Treat the Unicode characters D800-DFFF, FDD0-FDEF, and
xxFFFE-xxFFFF, as invalid, since the C library's multibyte
functions don't seem to. New function is_valid_unicode();
changes to mbrep() and make_mbchar(). (DLR)
- Store Unicode values in longs instead of ints, and cover the
entire range of Unicode. Changes to make_mbchar(),
is_valid_unicode(), parse_kbinput(), get_unicode_kbinput(),
parse_verbatim_kbinput(), and faq.html. (DLR)
- Readd the option to turn the keypad off by default from nano
1.2.x, but rename the long option from --keypad to
--rebindkeypad, clarify its description on the command line,
and add an updated FAQ entry about its use. Changes to
window_init(), usage(), main(), get_verbatim_kbinput(),
nanorc.sample, nano.1, nanorc.5, nano.texi, and faq.html.
(DLR)
- Add new -W/--wordbounds command line option, and new
"wordbounds" rcfile option, to control whether
the word movement functions treat punctuation characters as
part of a word. Changes to do_next_word_void(),
do_prev_word_void(), usage(), main(), nano.1, nanorc.5,
nano.texi, and nanorc.sample. (DLR, suggested by Mike
Frysinger)
- Update email address. Changes to faq.html and AUTHORS. (DLR)
- Remove do_(left|right)()'s ability to optionally not update
the current line, as this was only used in do_backspace(), and
it didn't always update the screen properly. Changes to
shortcut_init(), do_left(), do_right(), and do_backspace();
removal of do_left_void() and do_right_void(). (DLR; problem
found by Mike Frysinger)
- color.c:
- Remove unneeded fcntl.h include. (DLR)
- chars.c:
control_rep(), control_mbrep()
- Assert that the multibyte character passed in is a control
character if it's valid. (DLR)
- If crep is an invalid multibyte sequence, copy Unicode 0xFFFD
(Replacement Character) into it using strncpy() instead of
assigning the former to it. This avoids segfaults when freeing
crep later, since it's supposed to be dynamically allocated.
(DLR)
mbrep()
- New function, the equivalent of control_mbrep() for non-control
characters. (DLR)
parse_mbchar()
- Remove now-unneeded bad_chr parameter. (DLR)
mbstrchr()
- Don't count matches between valid and invalid multibyte
sequences anymore, for consistency. (DLR)
- files.c:
open_file()
- Assert that filename isn't NULL, and don't do anything special
if it's blank, as the the former case shouldn't occur, and the
latter case is now handled elsewhere. (DLR)
write_file(), write_marked_file(), do_writeout()
- Make append an append_type enum instead of an int. (DLR)
input_tab()
- Make columns an int instead of a size_t, since it's limited by
COLS. (DLR)
- global.c:
shortcut_init()
- Simplify wording of nano_gotoline_msg. (Jordi and Ken Tyler)
- Clarify wording of nano_wordcount_msg, as it will only go
through the marked portions of the file if the mark is on.
(DLR)
- move.c:
do_first_line(), do_last_line()
- Simplify by only using edit_redraw(), and also make them call
check_statusblank(). (DLR)
do_page_up(), do_page_down()
- If there's less than a page of text onscreen, just call
do_(first|last)_line(). (DLR)
do_para_begin(), do_para_begin_void(), do_para_end(),
do_para_end_void(), do_next_word(), do_next_word_void(),
do_prev_word(), do_prev_word_void()
- Move here from nano.c, as they're movement functions, and also
make them call check_statusblank().
- nano.c:
move_to_filestruct()
- Fix problem where edittop wouldn't be reset properly if it was
inside the text moved to another filestruct. (DLR)
copy_from_filestruct()
- Miscellaneous cleanups. (DLR)
usage()
- Properly mention the support for "[+LINE,COLUMN]" on the
command line when HAVE_GETOPT_LONG isn't defined. (DLR)
- Remove unneeded translation of "--quickblank". (DLR)
do_verbatim_input()
- If constant cursor position display is on, make sure the
cursor position is displayed properly when we finish. (DLR)
do_next_word()
- Rework to be more like do_prev_word(), to avoid a potential
problem if we start at the end of a line. (DLR)
do_mouse()
- Avoid redundant screen updates by using edit_redraw() instead
of edit_refresh(), and remove now-erroneous code that disables
setting the mark while in view mode. (DLR)
do_output()
- When adding a character, just add its length in bytes to
current_x instead of calling do_right(), and set placewewant
afterward. (DLR)
do_alt_speller()
- If we can't invoke the spell checker, use sprintf() instead of
snprintf() to write the error string we return, as the one
formatted value is a simple string, and so altspell_error will
always be long enough to hold it. Also remove unnecessary
initialization of altspell_error, refactor so that msglen is
no longer needed, and make the error message more similar to
what the internal spell checker returns under the same
circumstances. (DLR)
- Block any pending SIGWINCHes while the alternate spell checker
is running, so that it can handle them, and unblock them once
it's finished and we've loaded the spell-checked file back in.
(DLR)
- Use doupdate() to reenter curses mode instead of refresh().
(DLR)
do_spell()
- When displaying an error message from do_(int|alt)_speller(),
don't display the error message corresponding to errno if
errno is zero. (David Benbennick)
do_justify()
- If constant cursor position display is on, make sure the
cursor position is displayed properly when we finish. (DLR)
handle_sigwinch()
- Use doupdate() to reenter curses mode instead of refresh().
(DLR)
allow_pending_sigwinch()
- Simplify by using the "?" operator instead of an if clause.
(DLR)
main()
- When opening files with "+LINE,COLUMN" arguments on the
command line, don't update the screen when moving to their
specified lines and columns. (DLR)
- Rename variable fill_flag_used to fill_used, for consistency.
(DLR)
- nano.h:
- Since we only use vsnprintf() now, remove the #ifdef block for
HAVE_SNPRINTF. (DLR)
- Remove TOP from the topmidnone enum, and rename the latter
centernone. (DLR)
- Move stdlib.h, dirent.h, regex.h, and assert.h includes here,
as every source file needs them. (DLR)
- Rename the updown enum scroll_dir and the centernone enum
update_type for clarity, and add an append_type enum. (DLR)
- If we don't have regex.h and hence regex support, disable
color support, as it depends on the use of regexes. (DLR)
- rcfile.c:
nregcomp()
- Return TRUE when the compilation succeeds and FALSE otherwise,
instead of the other way around. (DLR)
- search.c:
search_init()
- Don't blank out last_replace anymore when we get a new string,
as it'll be blanked out in do_replace(). Also, consolidate
the cases for blank and new search strings, as they now differ
only in which string they pass to regexp_init(). (DLR)
is_whole_word()
- Move to utils.c, as it's really a utility function in the same
vein as regexp_bol_or_eol(). (DLR)
replace_abort()
- Remove unnecessary update of placewewant. (DLR)
do_replace()
- Blank out last_replace properly again just before displaying
the "Replace" prompt. (DLR, found by Mike Frysinger)
- Remove unnecessary renumber(). (DLR)
do_gotolinecolumn()
- Add parameter allow_update to control whether the screen is
updated after moving. If it's TRUE, call edit_refresh() after
edit_update(). (DLR)
do_gotopos()
- Only include this function when DISABLE_SPELLER isn't defined,
as the alternate spell checking code is now the only place
where it's used. (DLR)
do_find_bracket()
- Add comments and minor cleanups. (DLR)
find_history()
- Make parameters const where possible. (DLR)
update_history()
- Don't renumber the history list starting after the entry we
found if the entry we found is at the bottom of the list.
(DLR, found by Simon Strandman)
get_history_completion()
- Make parameters const where possible. (DLR)
- text.c:
do_tab()
- Make sure that we insert the correct number of spaces if the
TABS_TO_SPACES flag is set and placewewant is greater than the
current column position of the cursor. (DLR)
do_enter()
- Don't update the edit window until we set placewewant. (DLR)
break_line()
- Fix a problem where a line could be broken in the middle of a
multibyte character. (DLR)
do_word_count()
- Rename to do_wordlinechar_count(), and expand to also count
the number of lines and characters in the file or selection,
as wc does. (DLR)
- winio.c:
get_key_buffer()
- Only save all open buffers and hang up when a blocking
wgetch() returns ERR and errno is set to EIO (input/output
error). If errno is set to something else, recover properly.
This fixes problems with nano's erroneously hanging up while
e.g. resizing or unsuspending in a chroot. (DLR, found by Mike
Frysinger)
get_escape_seq_kbinput()
- Fix typo preventing the VT100/VT220/VT320/xterm/rxvt escape
sequence for ',' on the numeric keypad with NumLock off from
being interpreted properly. (DLR)
get_word_kbinput()
- Multiply the entered digits by hexadecimal numbers instead of
decimal numbers for clarity, rename to get_unicode_kbinput(),
and rename variables word and word_digits to uni and
uni_digits. (DLR)
parse_verbatim_kbinput()
- Rename variables word_mb and word_mb_len to uni_mb and
uni_mb_len. (DLR)
display_string()
- Instead of using parse_mbchar()'s bad_chr parameter, use
mbrep() to get the representation of a bad character. (DLR)
- If column is less than start_col and the character's a tab,
which can be possible if there are enough tabs and the
terminal size is sufficiently large, don't try to display it
using control_mbrep(). (DLR, found by Duncan Geoffry Doyle)
- Really avoid a memory corruption problem by allocating enough
space for COLS characters. (DLR)
edit_redraw(), edit_refresh()
- Clean up and simplify. (DLR)
edit_update()
- Since we no longer use TOP, remove references to it. Also,
don't call edit_refresh() anymore; it will call us. (DLR)
do_statusbar_next_word()
- Rework to be more like do_statusbar_prev_word(), to avoid a
potential problem if we start at the end of a line. (DLR)
do_statusbar_input()
- Call do_statusbar_mouse() instead of do_mouse(). (DLR)
do_statusbar_output()
- When adding a character, just add its length in bytes to
statusbar_x instead of calling do_statusbar_right(). (DLR)
titlebar()
- Rework to display only one space after the version number, so
that there's more room for other things, and to not display
the status when we're in the file browser, since Pico doesn't.
(DLR)
do_credits()
- Various cleanups. Turn on the MORE_SPACE and NO_HELP flags
before showing the credits, so that they use as much of the
screen as possible, and set the flags back to their original
values afterward. Also, call wscrl(1) instead of scroll(),
only call scrollok() just before and after we scroll, and
tweak where screen updates occur so that messages are properly
displayed when they first scroll onto the bottom line of the
screen. (DLR)
- Add Mike Frysinger to credits. (DLR)
- configure.ac:
- Since we only use vsnprintf() now, remove the tests for
snprintf(). (DLR)
- Change the description of "sufficient wide character support"
to "sufficient UTF-8 support", as the latter is clearer. (DLR)
- Update the description of the ENABLE_COLOR option to mention
the need for regex.h. (DLR)
- doc/faq.html:
- Update section 4.10 to mention that pasting from the X
clipboard via the middle mouse button also works when the
Shift key is used. (DLR)
- doc/nanorc.sample:
- Add regexes for Bourne shell scripts. (Mike Frysinger, minor
tweaks by DLR)
- Explain how the "none" and "default" syntaxes work. (DLR)
- Tweaks and additions to the "c-file" regexes: handle #defined
constants more accurately and use a brighter color for them,
support C99 standard integer types, support more GCC builtins,
and color code flow control statements differently. (Mike
Frysinger) DLR: Slightly simplify the integer types regex.
- Tweak one "TeX" regex to use the "icolor" directive. (DLR)
- doc/man/nanorc.5:
- Explain how the "none" and "default" syntaxes work. (DLR)
- doc/man/fr/nano.1, doc/man/fr/nanorc.5:
- Updated translation by Jean-Philippe Guérard.
- src/Makefile.am:
- Add text.c to nano_SOURCES. (DLR)
- AUTHORS:
- Add Mike Frysinger. (DLR)
- README.CVS:
- Since we only use vsnprintf() now, remove the mention of
snprintf(). (DLR)
- THANKS:
- Add Bulgarian and Dutch translators.
GNU nano 1.3.8 - 2005.06.30
- General:
- Miscellaneous comment fixes. (DLR)
- Various #include fixes. Since proto.h includes nano.h, only
include the former in source files. Also add an #include
guard to proto.h, and make the config.h #include in nano.
gitextract_34l9jbph/
├── .github/
│ └── workflows/
│ └── fetch.yml
├── .gitignore
├── AUTHORS
├── COPYING
├── COPYING.DOC
├── ChangeLog
├── ChangeLog.1999-2006
├── ChangeLog.2007-2015
├── IMPROVEMENTS
├── Makefile.am
├── NEWS
├── README
├── README.hacking
├── THANKS
├── TODO
├── autogen.sh
├── configure.ac
├── doc/
│ ├── .gitignore
│ ├── Makefile.am
│ ├── cheatsheet.html
│ ├── faq.html
│ ├── nano.1
│ ├── nano.texi
│ ├── nanorc.5
│ ├── rnano.1
│ └── sample.nanorc.in
├── m4/
│ ├── Makefile.am
│ ├── ac_define_dir.m4
│ └── ax_check_compile_flag.m4
├── nano-regress
├── po/
│ ├── .gitignore
│ ├── LINGUAS
│ ├── Makevars
│ ├── POTFILES.in
│ ├── ar.po
│ ├── bg.po
│ ├── ca.po
│ ├── cs.po
│ ├── da.po
│ ├── de.po
│ ├── eo.po
│ ├── es.po
│ ├── eu.po
│ ├── fi.po
│ ├── fr.po
│ ├── ga.po
│ ├── gl.po
│ ├── hr.po
│ ├── hu.po
│ ├── id.po
│ ├── is.po
│ ├── it.po
│ ├── ja.po
│ ├── ka.po
│ ├── kk.po
│ ├── ko.po
│ ├── ms.po
│ ├── nano.pot
│ ├── nb.po
│ ├── nl.po
│ ├── pl.po
│ ├── pt.po
│ ├── pt_BR.po
│ ├── ro.po
│ ├── ru.po
│ ├── sk.po
│ ├── sl.po
│ ├── sq.po
│ ├── sr.po
│ ├── sv.po
│ ├── tr.po
│ ├── uk.po
│ ├── update_linguas.sh
│ ├── vi.po
│ ├── zh_CN.po
│ └── zh_TW.po
├── roll-a-release.sh
├── src/
│ ├── Makefile.am
│ ├── browser.c
│ ├── chars.c
│ ├── color.c
│ ├── cut.c
│ ├── definitions.h
│ ├── files.c
│ ├── global.c
│ ├── help.c
│ ├── history.c
│ ├── move.c
│ ├── nano.c
│ ├── prompt.c
│ ├── prototypes.h
│ ├── rcfile.c
│ ├── search.c
│ ├── text.c
│ ├── utils.c
│ └── winio.c
└── syntax/
├── Makefile.am
├── asm.nanorc
├── autoconf.nanorc
├── awk.nanorc
├── c.nanorc
├── changelog.nanorc
├── cmake.nanorc
├── css.nanorc
├── default.nanorc
├── email.nanorc
├── extra/
│ ├── ada.nanorc
│ ├── fortran.nanorc
│ ├── haskell.nanorc
│ ├── povray.nanorc
│ └── spec.nanorc
├── go.nanorc
├── groff.nanorc
├── guile.nanorc
├── html.nanorc
├── java.nanorc
├── javascript.nanorc
├── json.nanorc
├── lua.nanorc
├── makefile.nanorc
├── man.nanorc
├── markdown.nanorc
├── nanohelp.nanorc
├── nanorc.nanorc
├── nftables.nanorc
├── objc.nanorc
├── ocaml.nanorc
├── patch.nanorc
├── perl.nanorc
├── php.nanorc
├── po.nanorc
├── python.nanorc
├── ruby.nanorc
├── rust.nanorc
├── sh.nanorc
├── sql.nanorc
├── tcl.nanorc
├── tex.nanorc
├── texinfo.nanorc
├── xml.nanorc
└── yaml.nanorc
SYMBOL INDEX (447 symbols across 17 files)
FILE: src/browser.c
function read_the_list (line 48) | void read_the_list(const char *path, DIR *dir)
function reselect (line 111) | void reselect(const char *name)
function browser_refresh (line 130) | void browser_refresh(void)
function findfile (line 259) | void findfile(const char *needle, bool forwards)
function search_filename (line 295) | void search_filename(bool forwards)
function research_filename (line 340) | void research_filename(bool forwards)
function to_first_file (line 357) | void to_first_file(void)
function to_last_file (line 363) | void to_last_file(void)
type stat (line 597) | struct stat
type stat (line 680) | struct stat
FILE: src/chars.c
function is_alpha_char (line 33) | bool is_alpha_char(const char *c)
function is_alnum_char (line 49) | bool is_alnum_char(const char *c)
function is_blank_char (line 64) | bool is_blank_char(const char *c)
function is_cntrl_char (line 82) | bool is_cntrl_char(const char *c)
function is_punct_char (line 94) | bool is_punct_char(const char *c)
function is_word_char (line 110) | bool is_word_char(const char *c, bool allow_punct)
function control_rep (line 132) | char control_rep(const signed char c)
function control_mbrep (line 145) | char control_mbrep(const char *c, bool isdata)
function mbtowide (line 165) | int mbtowide(wchar_t *wc, const char *c)
function is_doublewidth (line 211) | bool is_doublewidth(const char *ch)
function is_zerowidth (line 226) | bool is_zerowidth(const char *ch)
function char_length (line 248) | int char_length(const char *pointer)
function mbstrlen (line 285) | size_t mbstrlen(const char *pointer)
function collect_char (line 299) | int collect_char(const char *string, char *thechar)
function advance_over (line 311) | int advance_over(const char *string, size_t *column)
function step_left (line 355) | size_t step_left(const char *buf, size_t pos)
function step_right (line 394) | size_t step_right(const char *buf, size_t pos)
function mbstrcasecmp (line 400) | int mbstrcasecmp(const char *s1, const char *s2)
function mbstrncasecmp (line 406) | int mbstrncasecmp(const char *s1, const char *s2, size_t n)
function has_blank_char (line 624) | bool has_blank_char(const char *string)
function white_string (line 634) | bool white_string(const char *string)
function strip_leading_blanks_from (line 644) | void strip_leading_blanks_from(char *string)
FILE: src/color.c
function set_interface_colorpairs (line 36) | void set_interface_colorpairs(void)
function set_syntax_colorpairs (line 85) | void set_syntax_colorpairs(syntaxtype *sntx)
function prepare_palette (line 110) | void prepare_palette(void)
function found_in_list (line 126) | bool found_in_list(regexlisttype *head, const char *shibboleth)
function find_and_prime_applicable_syntax (line 137) | void find_and_prime_applicable_syntax(void)
function check_the_multis (line 235) | void check_the_multis(linestruct *line)
function precalc_multicolorinfo (line 290) | void precalc_multicolorinfo(void)
FILE: src/cut.c
function expunge (line 29) | void expunge(undo_type action)
function do_delete (line 121) | void do_delete(void)
function do_backspace (line 141) | void do_backspace(void)
function is_cuttable (line 160) | bool is_cuttable(bool test_cliff)
function chop_word (line 186) | void chop_word(bool forward)
function chop_previous_word (line 237) | void chop_previous_word(void)
function chop_next_word (line 246) | void chop_next_word(void)
function extract_segment (line 256) | void extract_segment(linestruct *top, size_t top_x, linestruct *bot, siz...
function ingraft_buffer (line 375) | void ingraft_buffer(linestruct *topline)
function copy_from_buffer (line 449) | void copy_from_buffer(linestruct *somebuffer)
function cut_marked_region (line 468) | void cut_marked_region(void)
function do_snip (line 485) | void do_snip(bool marked, bool until_eof, bool append)
function cut_text (line 541) | void cut_text(void)
function cut_till_eof (line 566) | void cut_till_eof(void)
function zap_text (line 585) | void zap_text(void)
function copy_marked_region (line 610) | void copy_marked_region(void)
function copy_text (line 648) | void copy_text(void)
function paste_text (line 730) | void paste_text(void)
FILE: src/definitions.h
type format_type (line 283) | typedef enum {
type message_type (line 287) | typedef enum {
type kind_of_writing_type (line 291) | typedef enum {
type update_type (line 295) | typedef enum {
type undo_type (line 300) | typedef enum {
type colortype (line 388) | typedef struct colortype {
type regexlisttype (line 407) | typedef struct regexlisttype {
type augmentstruct (line 414) | typedef struct augmentstruct {
type syntaxtype (line 425) | typedef struct syntaxtype {
type lintstruct (line 458) | typedef struct lintstruct {
type linestruct (line 475) | typedef struct linestruct {
type groupstruct (line 495) | typedef struct groupstruct {
type undostruct (line 506) | typedef struct undostruct {
type positionstruct (line 535) | typedef struct positionstruct {
type openfilestruct (line 549) | typedef struct openfilestruct {
type rcoption (line 616) | typedef struct rcoption {
type keystruct (line 624) | typedef struct keystruct {
type funcstruct (line 648) | typedef struct funcstruct {
type completionstruct (line 666) | typedef struct completionstruct {
FILE: src/files.c
function make_new_buffer (line 41) | void make_new_buffer(void)
function delete_lockfile (line 131) | bool delete_lockfile(const char *lockfilename)
function write_lockfile (line 149) | bool write_lockfile(const char *lockfilename, const char *filename, bool...
type stat (line 246) | struct stat
function stat_with_alloc (line 335) | void stat_with_alloc(const char *filename, struct stat **pstat)
function has_valid_path (line 348) | bool has_valid_path(const char *filename)
function set_modified (line 498) | void set_modified(void)
function prepare_for_display (line 513) | void prepare_for_display(void)
function mention_name_and_linecount (line 530) | void mention_name_and_linecount(void)
function redecorate_after_switch (line 555) | void redecorate_after_switch(void)
function switch_to_prev_buffer (line 589) | void switch_to_prev_buffer(void)
function switch_to_next_buffer (line 596) | void switch_to_next_buffer(void)
function close_buffer (line 603) | void close_buffer(void)
function read_file (line 651) | void read_file(FILE *f, int fd, const char *filename, bool undoable)
function open_file (line 839) | int open_file(const char *filename, bool new_one, FILE **f)
type stat (line 916) | struct stat
function cancel_the_command (line 943) | void cancel_the_command(int signal)
function send_data (line 954) | void send_data(const linestruct *line, int fd)
function execute_command (line 978) | void execute_command(const char *command)
function insert_a_file_or (line 1152) | void insert_a_file_or(bool execute)
function do_insertfile (line 1342) | void do_insertfile(void)
function do_execute (line 1350) | void do_execute(void)
type stat (line 1362) | struct stat
function init_operating_dir (line 1460) | void init_operating_dir(void)
function outside_of_confinement (line 1476) | bool outside_of_confinement(const char *somepath, bool tabbing)
function init_backup_dir (line 1502) | void init_backup_dir(void)
function copy_file (line 1520) | int copy_file(FILE *inn, FILE *out, bool close_out)
function make_backup_of (line 1551) | bool make_backup_of(char *realname)
function write_file (line 1717) | bool write_file(const char *name, FILE *thefile, bool normal,
function write_region_to_file (line 2029) | bool write_region_to_file(const char *name, FILE *stream, bool normal,
function write_it_out (line 2076) | int write_it_out(bool exiting, bool withprompt)
function do_writeout (line 2313) | void do_writeout(void)
function do_savefile (line 2321) | void do_savefile(void)
type passwd (line 2346) | struct passwd
function diralphasort (line 2373) | int diralphasort(const void *va, const void *vb)
function is_dir (line 2398) | bool is_dir(const char *path)
type passwd (line 2416) | struct passwd
type dirent (line 2462) | struct dirent
FILE: src/global.c
function case_sens_void (line 308) | void case_sens_void(void) {;}
function regexp_void (line 309) | void regexp_void(void) {;}
function backwards_void (line 310) | void backwards_void(void) {;}
function get_older_item (line 312) | void get_older_item(void) {;}
function get_newer_item (line 313) | void get_newer_item(void) {;}
function flip_replace (line 315) | void flip_replace(void) {;}
function flip_goto (line 316) | void flip_goto(void) {;}
function to_files (line 318) | void to_files(void) {;}
function goto_dir (line 319) | void goto_dir(void) {;}
function do_nothing (line 322) | void do_nothing(void) {;}
function do_toggle (line 323) | void do_toggle(void) {;}
function dos_format (line 324) | void dos_format(void) {;}
function append_it (line 325) | void append_it(void) {;}
function prepend_it (line 326) | void prepend_it(void) {;}
function back_it_up (line 327) | void back_it_up(void) {;}
function flip_execute (line 328) | void flip_execute(void) {;}
function flip_pipe (line 329) | void flip_pipe(void) {;}
function flip_convert (line 330) | void flip_convert(void) {;}
function flip_newbuffer (line 333) | void flip_newbuffer(void) {;}
function discard_buffer (line 335) | void discard_buffer(void) {;}
function do_cancel (line 336) | void do_cancel(void) {;}
function add_to_funcs (line 339) | void add_to_funcs(void (*function)(void), int menus, const char *tag,
function keycode_from_string (line 362) | int keycode_from_string(const char *keystring)
function show_curses_version (line 419) | void show_curses_version(void)
function add_to_sclist (line 427) | void add_to_sclist(int menus, const char *scstring, const int keycode,
function keystruct (line 460) | const keystruct *first_sc_for(int menu, void (*function)(void))
function shown_entries_for (line 470) | size_t shown_entries_for(int menu)
function keystruct (line 491) | const keystruct *get_shortcut(const int keycode)
function functionptrtype (line 515) | functionptrtype func_from_key(const int keycode)
function functionptrtype (line 526) | functionptrtype interpret(const int keycode)
function toggle_numbers (line 564) | void toggle_numbers(void)
FILE: src/help.c
function help_init (line 41) | void help_init(void)
function wrap_help_text_into_buffer (line 325) | void wrap_help_text_into_buffer(void)
function show_help (line 396) | void show_help(void)
function do_help (line 579) | void do_help(void)
FILE: src/history.c
function history_init (line 48) | void history_init(void)
function reset_history_pointer_for (line 67) | void reset_history_pointer_for(const linestruct *item)
function linestruct (line 80) | linestruct *find_in_history(const linestruct *start, const linestruct *end,
function update_history (line 95) | void update_history(linestruct **item, const char *text, bool avoid_dupl...
function have_statedir (line 200) | bool have_statedir(void)
function load_history (line 256) | void load_history(void)
function write_list (line 302) | bool write_list(const linestruct *head, FILE *histories)
function save_history (line 320) | void save_history(void)
function restore_anchors (line 367) | void restore_anchors(char *string)
function load_positions_register (line 391) | void load_positions_register(void)
function save_positions_register (line 460) | void save_positions_register(void)
function reload_positions_if_needed (line 509) | void reload_positions_if_needed(void)
function update_positions_register (line 531) | void update_positions_register(void)
function restore_cursor_position_if_any (line 576) | void restore_cursor_position_if_any(void)
FILE: src/move.c
function to_first_line (line 27) | void to_first_line(void)
function to_last_line (line 37) | void to_last_line(void)
function get_edge_and_target (line 54) | void get_edge_and_target(size_t *leftedge, size_t *target_column)
function proper_x (line 74) | size_t proper_x(linestruct *line, size_t *leftedge, bool forward,
function set_proper_index_and_pww (line 99) | void set_proper_index_and_pww(size_t *leftedge, size_t target, bool forw...
function do_page_up (line 116) | void do_page_up(void)
function do_page_down (line 148) | void do_page_down(void)
function to_top_row (line 181) | void to_top_row(void)
function to_bottom_row (line 196) | void to_bottom_row(void)
function do_cycle (line 212) | void do_cycle(void)
function do_center (line 228) | void do_center(void)
function do_para_begin (line 238) | void do_para_begin(linestruct **line)
function do_para_end (line 248) | void do_para_end(linestruct **line)
function to_para_begin (line 259) | void to_para_begin(void)
function to_para_end (line 270) | void to_para_end(void)
function to_prev_block (line 292) | void to_prev_block(void)
function to_next_block (line 314) | void to_next_block(void)
function do_prev_word (line 335) | void do_prev_word(void)
function do_next_word (line 379) | bool do_next_word(bool after_ends)
FILE: src/nano.c
type termios (line 56) | struct termios
type sigaction (line 63) | struct sigaction
function linestruct (line 67) | linestruct *make_new_node(linestruct *prevnode)
function splice_node (line 86) | void splice_node(linestruct *afterthis, linestruct *newnode)
function delete_node (line 100) | void delete_node(linestruct *line)
function unlink_node (line 118) | void unlink_node(linestruct *line)
function free_lines (line 133) | void free_lines(linestruct *src)
function linestruct (line 147) | linestruct *copy_node(const linestruct *src)
function linestruct (line 164) | linestruct *copy_buffer(const linestruct *src)
function renumber_from (line 188) | void renumber_from(linestruct *line)
function print_view_warning (line 199) | void print_view_warning(void)
function in_restricted_mode (line 205) | bool in_restricted_mode(void)
function suggest_ctrlT_ctrlZ (line 217) | void suggest_ctrlT_ctrlZ(void)
function restore_terminal (line 229) | void restore_terminal(void)
function finish (line 241) | void finish(void)
function close_and_go (line 267) | void close_and_go(void)
function do_exit (line 300) | void do_exit(void)
function emergency_save (line 326) | void emergency_save(const char *filename)
function die (line 349) | void die(const char *msg, ...)
function window_init (line 393) | void window_init(void)
function disable_mouse_support (line 450) | void disable_mouse_support(void)
function enable_mouse_support (line 456) | void enable_mouse_support(void)
function mouse_init (line 463) | void mouse_init(void)
function print_opt (line 473) | void print_opt(const char *shortflag, const char *longflag, const char *...
function usage (line 490) | void usage(void)
function version (line 662) | void version(void)
function list_syntax_names (line 804) | void list_syntax_names(void)
function make_a_note (line 824) | void make_a_note(int signal)
function install_handler_for_Ctrl_C (line 830) | void install_handler_for_Ctrl_C(void)
function restore_handler_for_Ctrl_C (line 842) | void restore_handler_for_Ctrl_C(void)
function reconnect_and_store_state (line 850) | void reconnect_and_store_state(void)
function scoop_stdin (line 865) | bool scoop_stdin(void)
function set_up_sigwinch_handler (line 907) | void set_up_sigwinch_handler(void)
function set_up_signal_handlers (line 919) | void set_up_signal_handlers(void)
function handle_hupterm (line 963) | void handle_hupterm(int signal)
function handle_crash (line 970) | void handle_crash(int signal)
function suspend_nano (line 978) | void suspend_nano(int signal)
function do_suspend (line 1001) | void do_suspend(void)
function continue_nano (line 1013) | void continue_nano(int signal)
function block_sigwinch (line 1034) | void block_sigwinch(bool blockit)
function handle_sigwinch (line 1048) | void handle_sigwinch(int signal)
function regenerate_screen (line 1056) | void regenerate_screen(void)
function toggle_this (line 1084) | void toggle_this(int flag)
function disable_extended_io (line 1164) | void disable_extended_io(void)
function disable_kb_interrupt (line 1177) | void disable_kb_interrupt(void)
function enable_kb_interrupt (line 1189) | void enable_kb_interrupt(void)
function disable_flow_control (line 1201) | void disable_flow_control(void)
function enable_flow_control (line 1213) | void enable_flow_control(void)
function terminal_init (line 1232) | void terminal_init(void)
function get_keycode (line 1253) | int get_keycode(const char *keyname, const int standard)
function confirm_margin (line 1270) | void confirm_margin(void)
function unbound_key (line 1297) | void unbound_key(int code)
function process_click (line 1341) | int process_click(void)
function wanted_to_move (line 1393) | bool wanted_to_move(void (*func)(void))
function changes_something (line 1408) | bool changes_something(functionptrtype f)
function suck_up_input_and_paste_it (line 1437) | void suck_up_input_and_paste_it(void)
function inject (line 1477) | void inject(char *burst, size_t count)
function process_a_keystroke (line 1580) | void process_a_keystroke(void)
function main (line 1737) | int main(int argc, char **argv)
FILE: src/prompt.c
function do_statusbar_home (line 32) | void do_statusbar_home(void)
function do_statusbar_end (line 38) | void do_statusbar_end(void)
function do_statusbar_prev_word (line 45) | void do_statusbar_prev_word(void)
function do_statusbar_next_word (line 72) | void do_statusbar_next_word(void)
function do_statusbar_left (line 111) | void do_statusbar_left(void)
function do_statusbar_right (line 123) | void do_statusbar_right(void)
function do_statusbar_backspace (line 135) | void do_statusbar_backspace(void)
function do_statusbar_delete (line 146) | void do_statusbar_delete(void)
function lop_the_answer (line 161) | void lop_the_answer(void)
function copy_the_answer (line 171) | void copy_the_answer(void)
function paste_into_answer (line 182) | void paste_into_answer(void)
function process_prompt_click (line 197) | int process_prompt_click(void)
function inject_into_answer (line 218) | void inject_into_answer(char *burst, size_t count)
function do_statusbar_verbatim_input (line 234) | void do_statusbar_verbatim_input(void)
function absorb_character (line 251) | void absorb_character(int input, functionptrtype function)
function handle_editing (line 290) | bool handle_editing(functionptrtype function)
function get_statusbar_page_start (line 341) | size_t get_statusbar_page_start(size_t base, size_t column)
function put_cursor_at_end_of_answer (line 352) | void put_cursor_at_end_of_answer(void)
function draw_the_promptbar (line 358) | void draw_the_promptbar(void)
function add_or_remove_pipe_symbol_from_answer (line 401) | void add_or_remove_pipe_symbol_from_answer(void)
function functionptrtype (line 417) | functionptrtype acquire_an_answer(int *actual, bool *listed,
function ask_user (line 663) | int ask_user(bool withall, const char *question)
FILE: src/rcfile.c
function display_rcfile_errors (line 167) | void display_rcfile_errors(void)
function jot_error (line 176) | void jot_error(const char *msg, ...)
function keystruct (line 215) | keystruct *strtosc(const char *input)
function name_to_menu (line 511) | int name_to_menu(const char *name)
function compile (line 623) | bool compile(const char *expression, int rex_flags, regex_t **packed)
function begin_new_syntax (line 646) | void begin_new_syntax(char *ptr)
function check_for_nonempty_syntax (line 715) | void check_for_nonempty_syntax(void)
function is_universal (line 731) | bool is_universal(void (*func)(void))
function parse_binding (line 744) | void parse_binding(char *ptr, bool dobind)
function is_good_file (line 896) | bool is_good_file(char *file)
function parse_one_include (line 917) | void parse_one_include(char *file, syntaxtype *syntax)
function parse_includes (line 978) | void parse_includes(char *ptr)
function closest_index_color (line 1015) | short closest_index_color(short red, short green, short blue)
function color_to_short (line 1056) | short color_to_short(const char *colorname, bool *vivid, bool *thick)
function parse_combination (line 1101) | bool parse_combination(char *combotext, short *fg, short *bg, int *attri...
function parse_rule (line 1159) | void parse_rule(char *ptr, int rex_flags)
function set_interface_color (line 1247) | void set_interface_color(int element, char *combotext)
function grab_and_store (line 1260) | void grab_and_store(const char *kind, char *ptr, regexlisttype **storage)
function pick_up_name (line 1316) | void pick_up_name(const char *kind, char *ptr, char **storage)
function parse_syntax_commands (line 1342) | bool parse_syntax_commands(char *keyword, char *ptr)
function check_vitals_mapped (line 1369) | static void check_vitals_mapped(void)
function parse_rcfile (line 1393) | void parse_rcfile(FILE *rcstream, bool just_syntax, bool intros_only)
function parse_one_nanorc (line 1708) | void parse_one_nanorc(void)
function have_nanorc (line 1721) | bool have_nanorc(const char *path, const char *name)
function do_rcfiles (line 1734) | void do_rcfiles(void)
FILE: src/search.c
function regexp_init (line 34) | bool regexp_init(const char *regexp)
function tidy_up_after_search (line 58) | void tidy_up_after_search(void)
function search_init (line 76) | void search_init(bool replacing, bool retain_answer)
function findnextstr (line 174) | int findnextstr(const char *needle, bool whole_word_only, int modus,
function do_search_forward (line 351) | void do_search_forward(void)
function do_search_backward (line 358) | void do_search_backward(void)
function do_research (line 365) | void do_research(void)
function do_findprevious (line 395) | void do_findprevious(void)
function do_findnext (line 402) | void do_findnext(void)
function not_found_msg (line 409) | void not_found_msg(const char *str)
function go_looking (line 421) | void go_looking(void)
function replace_regexp (line 455) | int replace_regexp(char *string, bool create)
function do_replace_loop (line 533) | ssize_t do_replace_loop(const char *needle, bool whole_word_only,
function do_replace (line 695) | void do_replace(void)
function ask_for_and_do_replacements (line 706) | void ask_for_and_do_replacements(void)
function goto_line_posx (line 753) | void goto_line_posx(ssize_t linenumber, size_t pos_x)
function do_gotolinecolumn (line 774) | void do_gotolinecolumn(void)
function ask_for_line_and_column (line 780) | void ask_for_line_and_column(char *provided)
function goto_line_and_column (line 825) | void goto_line_and_column(ssize_t line, ssize_t column, bool hugfloor)
function find_a_bracket (line 895) | bool find_a_bracket(bool reverse, const char *bracket_pair)
function do_find_bracket (line 937) | void do_find_bracket(void)
function put_or_lift_anchor (line 1015) | void put_or_lift_anchor(void)
function go_to_and_confirm (line 1033) | void go_to_and_confirm(linestruct *line)
function to_prev_anchor (line 1055) | void to_prev_anchor(void)
function to_next_anchor (line 1066) | void to_next_anchor(void)
FILE: src/text.c
function do_mark (line 41) | void do_mark(void)
function do_tab (line 58) | void do_tab(void)
function indent_a_line (line 89) | void indent_a_line(linestruct *line, char *indentation)
function do_indent (line 117) | void do_indent(void)
function length_of_white (line 170) | size_t length_of_white(const char *text)
function compensate_leftward (line 201) | void compensate_leftward(linestruct *line, size_t leftshift)
function unindent_a_line (line 220) | void unindent_a_line(linestruct *line, size_t indent_len)
function do_unindent (line 239) | void do_unindent(void)
function handle_indent_action (line 275) | void handle_indent_action(undostruct *u, bool undoing, bool add_indent)
function comment_line (line 308) | bool comment_line(undo_type action, linestruct *line, const char *commen...
function do_comment (line 368) | void do_comment(void)
function handle_comment_action (line 428) | void handle_comment_action(undostruct *u, bool undoing, bool add_comment)
function undo_cut (line 461) | void undo_cut(undostruct *u)
function redo_cut (line 483) | void redo_cut(undostruct *u)
function do_undo (line 501) | void do_undo(void)
function do_redo (line 684) | void do_redo(void)
function do_enter (line 854) | void do_enter(void)
function discard_until (line 932) | void discard_until(const undostruct *thisitem)
function add_undo (line 961) | void add_undo(undo_type action, const char *message)
function update_multiline_undo (line 1102) | void update_multiline_undo(ssize_t lineno, char *indentation)
function update_undo (line 1135) | void update_undo(undo_type action)
function do_wrap (line 1233) | void do_wrap(void)
function break_line (line 1394) | ssize_t break_line(const char *textstart, ssize_t goal, bool snap_at_nl)
function indent_length (line 1457) | size_t indent_length(const char *line)
function quote_length (line 1471) | size_t quote_length(const char *line)
function begpar (line 1486) | bool begpar(const linestruct *const line, int depth)
function inpar (line 1531) | bool inpar(const linestruct *const line)
function find_paragraph (line 1542) | bool find_paragraph(linestruct **firstline, size_t *const linecount)
function concat_paragraph (line 1568) | void concat_paragraph(linestruct *line, size_t count)
function copy_character (line 1597) | void copy_character(char **from, char **to)
function squeeze (line 1613) | void squeeze(linestruct *line, size_t skip)
function rewrap_paragraph (line 1659) | void rewrap_paragraph(linestruct **line, char *lead_string, size_t lead_...
function justify_paragraph (line 1711) | void justify_paragraph(linestruct **line, size_t count)
function justify_text (line 1747) | void justify_text(bool whole_buffer)
function do_justify (line 2025) | void do_justify(void)
function do_full_justify (line 2031) | void do_full_justify(void)
function construct_argument_list (line 2043) | void construct_argument_list(char ***arguments, char *command, char *fil...
function replace_buffer (line 2063) | bool replace_buffer(const char *filename, undo_type action, const char *...
function treat (line 2109) | void treat(char *tempfile_name, char *theprogram, bool spelling)
function fix_spello (line 2246) | bool fix_spello(const char *word)
function do_int_speller (line 2351) | void do_int_speller(const char *tempfile_name)
function do_spell (line 2539) | void do_spell(void)
function do_linter (line 2589) | void do_linter(void)
function do_formatter (line 2945) | void do_formatter(void)
function count_lines_words_and_characters (line 2983) | void count_lines_words_and_characters(void)
function do_verbatim_input (line 3040) | void do_verbatim_input(void)
function complete_a_word (line 3106) | void complete_a_word(void)
FILE: src/utils.c
function get_homedir (line 33) | void get_homedir(void)
function digits (line 78) | int digits(ssize_t n)
function parse_num (line 109) | bool parse_num(const char *string, ssize_t *result)
function parse_line_column (line 130) | bool parse_line_column(const char *string, ssize_t *line, ssize_t *column)
function recode_NUL_to_LF (line 160) | void recode_NUL_to_LF(char *string, size_t length)
function recode_LF_to_NUL (line 172) | size_t recode_LF_to_NUL(char *string)
function free_chararray (line 187) | void free_chararray(char **array, size_t len)
function is_separate_word (line 202) | bool is_separate_word(size_t position, size_t length, const char *text)
function get_page_start (line 344) | size_t get_page_start(size_t column)
function xplustabs (line 372) | size_t xplustabs(void)
function actual_x (line 379) | size_t actual_x(const char *text, size_t column)
function wideness (line 400) | size_t wideness(const char *text, size_t maxlen)
function breadth (line 421) | size_t breadth(const char *text)
function new_magicline (line 432) | void new_magicline(void)
function remove_magicline (line 443) | void remove_magicline(void)
function mark_is_before_cursor (line 458) | bool mark_is_before_cursor(void)
function get_region (line 467) | void get_region(linestruct **top, size_t *top_x, linestruct **bot, size_...
function get_range (line 485) | void get_range(linestruct **top, linestruct **bot)
function linestruct (line 505) | linestruct *line_from_number(ssize_t number)
function number_of_characters_in (line 521) | size_t number_of_characters_in(const linestruct *begin, const linestruct...
FILE: src/winio.c
function record_macro (line 86) | void record_macro(void)
function add_to_macrobuffer (line 116) | void add_to_macrobuffer(int code)
function run_macro (line 125) | void run_macro(void)
function reserve_space_for (line 146) | void reserve_space_for(size_t newsize)
function read_keys_from (line 195) | void read_keys_from(WINDOW *frame)
function waiting_keycodes (line 329) | size_t waiting_keycodes(void)
function put_back (line 335) | void put_back(int keycode)
function implant (line 351) | void implant(const char *string)
function get_code_from_plantation (line 361) | int get_code_from_plantation(void)
function get_input (line 417) | int get_input(WINDOW *frame)
function arrow_from_ABCD (line 439) | int arrow_from_ABCD(int letter)
function convert_SS3_sequence (line 448) | int convert_SS3_sequence(const int *seq, size_t length, int *consumed)
function convert_CSI_sequence (line 589) | int convert_CSI_sequence(const int *seq, size_t length, int *consumed)
function parse_escape_sequence (line 929) | int parse_escape_sequence(int starter)
function assemble_byte_code (line 952) | int assemble_byte_code(int keycode)
function convert_to_control (line 989) | int convert_to_control(int kbinput)
function parse_kbinput (line 1013) | int parse_kbinput(WINDOW *frame)
function get_kbinput (line 1372) | int get_kbinput(WINDOW *frame, bool showcursor)
function assemble_unicode (line 1396) | long assemble_unicode(int symbol)
function get_mouseinput (line 1592) | int get_mouseinput(int *mouse_y, int *mouse_x)
function blank_row (line 1706) | void blank_row(WINDOW *window, int row)
function blank_titlebar (line 1713) | void blank_titlebar(void)
function blank_edit (line 1719) | void blank_edit(void)
function blank_statusbar (line 1726) | void blank_statusbar(void)
function wipe_statusbar (line 1732) | void wipe_statusbar(void)
function blank_bottombars (line 1744) | void blank_bottombars(void)
function blank_it_when_expired (line 1753) | void blank_it_when_expired(void)
function set_blankdelay_to_one (line 1769) | void set_blankdelay_to_one(void)
function else (line 1823) | else if (is_doublewidth(text)) {
function buffer_number (line 1973) | int buffer_number(openfilestruct *buffer)
function show_states_at (line 1989) | void show_states_at(WINDOW *window)
function titlebar (line 2004) | void titlebar(const char *path)
function minibar (line 2160) | void minibar(void)
function statusline (line 2306) | void statusline(message_type importance, const char *msg, ...)
function statusbar (line 2414) | void statusbar(const char *msg)
function warn_and_briefly_pause (line 2421) | void warn_and_briefly_pause(const char *msg)
function post_one_key (line 2432) | void post_one_key(const char *keystroke, const char *tag, int width)
function bottombars (line 2451) | void bottombars(int menu)
function place_the_cursor (line 2508) | void place_the_cursor(void)
function draw_row (line 2557) | void draw_row(int row, const char *converted, linestruct *line, size_t f...
function update_line (line 2834) | int update_line(linestruct *line, size_t index)
function update_softwrapped_line (line 2882) | int update_softwrapped_line(linestruct *line)
function line_needs_update (line 2942) | bool line_needs_update(const size_t old_column, const size_t new_column)
function go_back_chunks (line 2961) | int go_back_chunks(int nrows, linestruct **line, size_t *leftedge)
function go_forward_chunks (line 2998) | int go_forward_chunks(int nrows, linestruct **line, size_t *leftedge)
function less_than_a_screenful (line 3039) | bool less_than_a_screenful(size_t was_lineno, size_t was_leftedge)
function draw_scrollbar (line 3056) | void draw_scrollbar(void)
function edit_scroll (line 3090) | void edit_scroll(bool direction)
function get_softwrap_breakpoint (line 3149) | size_t get_softwrap_breakpoint(const char *linedata, size_t leftedge,
function get_chunk_and_edge (line 3219) | size_t get_chunk_and_edge(size_t column, linestruct *line, size_t *lefte...
function extra_chunks_in (line 3243) | size_t extra_chunks_in(linestruct *line)
function chunk_for (line 3250) | size_t chunk_for(size_t column, linestruct *line)
function leftedge_for (line 3257) | size_t leftedge_for(size_t column, linestruct *line)
function ensure_firstcolumn_is_aligned (line 3269) | void ensure_firstcolumn_is_aligned(void)
function actual_last_column (line 3286) | size_t actual_last_column(size_t leftedge, size_t column)
function current_is_above_screen (line 3310) | bool current_is_above_screen(void)
function current_is_below_screen (line 3325) | bool current_is_below_screen(void)
function current_is_offscreen (line 3345) | bool current_is_offscreen(void)
function edit_redraw (line 3352) | void edit_redraw(linestruct *old_current, update_type manner)
function edit_refresh (line 3398) | void edit_refresh(void)
function adjust_viewport (line 3470) | void adjust_viewport(update_type manner)
function full_refresh (line 3492) | void full_refresh(void)
function draw_all_subwindows (line 3499) | void draw_all_subwindows(void)
function report_cursor_position (line 3519) | void report_cursor_position(void)
function spotlight (line 3549) | void spotlight(size_t from_col, size_t to_col)
function spotlight_softwrapped (line 3580) | void spotlight_softwrapped(size_t from_col, size_t to_col)
function do_credits (line 3633) | void do_credits(void)
Condensed preview — 141 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (5,607K chars).
[
{
"path": ".github/workflows/fetch.yml",
"chars": 648,
"preview": "name: Fetch-upstream\non:\n schedule:\n - cron: '0 0 * * 1'\n workflow_dispatch:\n\njobs:\n fetch:\n runs-on: ubuntu-late"
},
{
"path": ".gitignore",
"chars": 980,
"preview": "*~\n*.bak\n*.o\n*.orig\n*.patch\n*.swp\n.deps\n.libs\nMakefile\nMakefile.in\n\ncore\n.gdb_history\n.gdbinit\n\n/src/nano\n/src/revision."
},
{
"path": "AUTHORS",
"chars": 2935,
"preview": "This file lists people who have made significant contributions to the\nnano editor. Please see the ChangeLog for specifi"
},
{
"path": "COPYING",
"chars": 35068,
"preview": "\n\t\t GNU GENERAL PUBLIC LICENSE\n\t\t Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <"
},
{
"path": "COPYING.DOC",
"chars": 20403,
"preview": "\t\tGNU Free Documentation License\n\t\t Version 1.2, November 2002\n\n\n Copyright (C) 2000,2001,2002 Free Software Foundatio"
},
{
"path": "ChangeLog",
"chars": 51601,
"preview": "Changes between v8.7 and v9.0:\n------------------------------\n\nBenno Schulenberg (92):\n bindings: assign M-< and M-"
},
{
"path": "ChangeLog.1999-2006",
"chars": 371671,
"preview": "GNU nano 2.0.3 - 2007.01.29\n- General:\n\t- Miscellaneous comment fixes. (DLR)\n\t- More int -> bool conversions. (DLR)\n\t- D"
},
{
"path": "ChangeLog.2007-2015",
"chars": 205516,
"preview": "[Development moved to git on April 1. The Changelog was discontinued.]\n\n\n2016-03-31 Benno Schulenberg <bensberg@juste"
},
{
"path": "IMPROVEMENTS",
"chars": 12534,
"preview": "Improvements in GNU nano\n========================\n\nSince 9.0:\n - With M-< and M-> the viewport can be scrolled sideways"
},
{
"path": "Makefile.am",
"chars": 297,
"preview": "AUTOMAKE_OPTIONS = gnu no-dependencies\n\nSUBDIRS = doc lib m4 po src\n\nif USE_COLOR\nSUBDIRS += syntax\nendif\n\nEXTRA_DIST = "
},
{
"path": "NEWS",
"chars": 131231,
"preview": "2026.04.08 - GNU nano 9.0 \"Le bonheur est dans le pré\"\n• When the cursor almost goes offscreen to the right, all lines a"
},
{
"path": "README",
"chars": 5428,
"preview": "\n GNU nano -- a simple editor, inspired by Pico\n\nPurpose\n\n Nano is a small and simple text editor for use on"
},
{
"path": "README.hacking",
"chars": 3758,
"preview": "INSTRUCTIONS FOR COMPILING AND INSTALLING NANO FROM GIT\n=======================================================\n\nThe lat"
},
{
"path": "THANKS",
"chars": 6391,
"preview": "The following people have helped GNU nano in some way or another.\nIf we missed you here, let us know!\n\n\nTranslations:\n=="
},
{
"path": "TODO",
"chars": 99,
"preview": "\nFor a list of open bugs and requested features see:\n\n https://savannah.gnu.org/bugs/?group=nano\n\n"
},
{
"path": "autogen.sh",
"chars": 908,
"preview": "#!/bin/sh\n# Generate configure & friends for GIT users.\n\ngnulib_url=\"git://git.sv.gnu.org/gnulib.git\"\ngnulib_hash=\"b7513"
},
{
"path": "configure.ac",
"chars": 18124,
"preview": "# Configuration for GNU nano - a small and user-friendly text editor\n#\n# Copyright (C) 1999-2011, 2013-2026 Free Softwar"
},
{
"path": "doc/.gitignore",
"chars": 94,
"preview": "nano.1.html\nrnano.1.html\nnanorc.5.html\ntexinfo.tex\nnano.info\nnano.html\nnano.pdf\nsample.nanorc\n"
},
{
"path": "doc/Makefile.am",
"chars": 633,
"preview": "SUBDIRS =\nBUILT_SOURCES =\n\ndist_html_DATA = faq.html\n\ndist_man_MANS = nano.1 rnano.1\nhtml_pages = nano.1.html rnano.1.ht"
},
{
"path": "doc/cheatsheet.html",
"chars": 5566,
"preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html lang=\"en\">\n"
},
{
"path": "doc/faq.html",
"chars": 30306,
"preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html lang=\"en\">\n"
},
{
"path": "doc/nano.1",
"chars": 23623,
"preview": ".\\\" Copyright (C) 1999-2011, 2013-2026 Free Software Foundation, Inc.\n.\\\"\n.\\\" This document is dual-licensed. You may d"
},
{
"path": "doc/nano.texi",
"chars": 83558,
"preview": "\\input texinfo\n\n@c %**start of header\n@setfilename nano.info\n@settitle The GNU nano text editor\n@c %**end of header\n\n@do"
},
{
"path": "doc/nanorc.5",
"chars": 44034,
"preview": ".\\\" Copyright (C) 2003-2011, 2013-2026 Free Software Foundation, Inc.\n.\\\"\n.\\\" This document is dual-licensed. You may d"
},
{
"path": "doc/rnano.1",
"chars": 2494,
"preview": ".\\\" Copyright (C) 2002-2007, 2014-2026 Free Software Foundation, Inc.\n.\\\"\n.\\\" This document is dual-licensed. You may d"
},
{
"path": "doc/sample.nanorc.in",
"chars": 12129,
"preview": "## Sample initialization file for GNU nano.\n##\n## For the options that take parameters, the default value is shown.\n## O"
},
{
"path": "m4/Makefile.am",
"chars": 530,
"preview": "EXTRA_DIST = \\\n\tac_define_dir.m4 \\\n\tax_check_compile_flag.m4 \\\n\tcodeset.m4 \\\n\textern-inline.m4 \\\n\tfcntl-o.m4 \\\n\tgettext."
},
{
"path": "m4/ac_define_dir.m4",
"chars": 1186,
"preview": "dnl @synopsis AC_DEFINE_DIR(VARNAME, DIR [, DESCRIPTION])\ndnl\ndnl This macro sets VARNAME to the expansion of the DIR va"
},
{
"path": "m4/ax_check_compile_flag.m4",
"chars": 3337,
"preview": "# ===========================================================================\n# http://www.gnu.org/software/autoconf-a"
},
{
"path": "nano-regress",
"chars": 828,
"preview": "#!/usr/bin/perl\nuse strict;\n\nsub combinations {\n return [] unless @_;\n my $first = shift;\n my @rest = combinations(@_"
},
{
"path": "po/.gitignore",
"chars": 196,
"preview": "/*.gmo\n\n/Makefile.in.in\n/Makevars.template\n/Rules-quot\n/boldquot.sed\n/en@boldquot.header\n/en@quot.header\n/insert-header."
},
{
"path": "po/LINGUAS",
"chars": 160,
"preview": "# List of available languages.\nar bg ca cs da de eo es eu fi fr ga gl hr hu id is it ja ka kk ko ms nb nl pl pt pt_BR ro"
},
{
"path": "po/Makevars",
"chars": 825,
"preview": "# Makefile variables for PO directory in any package using GNU gettext.\n\n# Usually the message domain is the same as the"
},
{
"path": "po/POTFILES.in",
"chars": 267,
"preview": "# List of source files containing translatable strings.\n\nsrc/browser.c\nsrc/color.c\nsrc/cut.c\nsrc/files.c\nsrc/global.c\nsr"
},
{
"path": "po/ar.po",
"chars": 78113,
"preview": "# Translation of nano to Arabic\n# Copyright (C) 2026 Free Software Foundation, Inc.\n# This file is distributed under the"
},
{
"path": "po/bg.po",
"chars": 67380,
"preview": "# Bulgarian translation of nano.\n# Copyright (C) 2005 Free Software Foundation, Inc.\n# This file is distributed under th"
},
{
"path": "po/ca.po",
"chars": 83353,
"preview": "# Catalan messages for the GNU nano editor.\n# Copyright © 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2008, 2009, 2014, 20"
},
{
"path": "po/cs.po",
"chars": 81895,
"preview": "# Czech translation for nano.\n# Copyright (C) 2010 Free Software Foundation, Inc.\n# This file is distributed under the s"
},
{
"path": "po/da.po",
"chars": 80582,
"preview": "# Danish messages for nano.\n# Copyright (C) 2001, 2016, 2017, 2018, 2019, 2020, 2022, 2023 Free Software Foundation, Inc"
},
{
"path": "po/de.po",
"chars": 84013,
"preview": "# German messages for the nano editor.\n# Copyright (C) 2000, 2001 Free Software Foundation, Inc.\n# This file is distribu"
},
{
"path": "po/eo.po",
"chars": 79648,
"preview": "# Esperanto translations for GNU nano.\n# Copyright (C) 2026 Free Software Foundation, Inc.\n# This file is distributed un"
},
{
"path": "po/es.po",
"chars": 84555,
"preview": "# Mensajes en español para GNU nano.\n# Copyright (C) 2026 Free Software Foundation, Inc.\n# This file is distributed unde"
},
{
"path": "po/eu.po",
"chars": 65373,
"preview": "# GNU nano-rentzat egindako hitzulpena.\n# Copyright (C) 2006 Free Software Foundation, Inc.\n# This file is distributed u"
},
{
"path": "po/fi.po",
"chars": 73639,
"preview": "# GNU nano Finnish Translation.\n# Copyright © 2022 Free Software Foundation, Inc.\n# This file is distributed under the s"
},
{
"path": "po/fr.po",
"chars": 84257,
"preview": "# Translation of the nano editor to French.\n# Messages en langue française pour l'éditeur nano.\n# Copyright (C) 2000, 20"
},
{
"path": "po/ga.po",
"chars": 75093,
"preview": "# Irish translations for nano.\n# Copyright (C) 2006 Free Software Foundation, Inc.\n# This file is distributed under the "
},
{
"path": "po/gl.po",
"chars": 80463,
"preview": "# Galician translation of nano\n# Copyright (C) 2001, 2002, 2003, 2006, 2008, 2011, 2012, 2015, 2016, 2019 Free Software "
},
{
"path": "po/hr.po",
"chars": 81770,
"preview": "# Croatian translations for GNU nano.\n# Copyright (C) 2026 Free Software Foundation, Inc.\n# This file is distributed und"
},
{
"path": "po/hu.po",
"chars": 74327,
"preview": "# Hungarian translation for nano.\n# Copyright (C) 2001, 2002, 2006, 2008, 2009, 2010, 2015, 2016, 2017, 2018 Free Softwa"
},
{
"path": "po/id.po",
"chars": 80942,
"preview": "# Indonesian translation of nano.\n# Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.\n# This file is d"
},
{
"path": "po/is.po",
"chars": 69463,
"preview": "# translation of nano-8.1-pre1.po to Icelandic\n# Copyright (C) 2021 Free Software Foundation, Inc.\n# This file is distri"
},
{
"path": "po/it.po",
"chars": 83309,
"preview": "# Italian messages for nano.\n# Copyright (C) 2001-2006, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.\n# This fil"
},
{
"path": "po/ja.po",
"chars": 69768,
"preview": "# Japanese messages for nano\n# Copyright (C) 2021 Free Software Foundation, Inc.\n# This file is distributed under the sa"
},
{
"path": "po/ka.po",
"chars": 62040,
"preview": "# Georgian translation for nano.\n# Copyright (C) 2022 Free Software Foundation, Inc.\n# This file is distributed under th"
},
{
"path": "po/kk.po",
"chars": 79940,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) 2026 Free Software Foundation, Inc.\n# This file is distributed under the same "
},
{
"path": "po/ko.po",
"chars": 70773,
"preview": "# Korean translation for the nano package.\n# Copyright (C) 2019 Free Software Foundation, Inc.\n# This file is distribute"
},
{
"path": "po/ms.po",
"chars": 76695,
"preview": "# Nano Editor Bahasa Melayu (Malay) (ms).\n# Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2008, 2010, 2011, 20"
},
{
"path": "po/nano.pot",
"chars": 57540,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR Free Software Foundation, Inc.\n# This file is distributed under the same "
},
{
"path": "po/nb.po",
"chars": 79504,
"preview": "# Norwegian Bokmål message catalog for GNU nano.\n# Copyright (C) 2001 - 2025 Free Software Foundation, Inc.\n# This file "
},
{
"path": "po/nl.po",
"chars": 82123,
"preview": "# Dutch translations for GNU nano.\n# Copyright (C) 2026 Free Software Foundation, Inc.\n# This file is distributed under "
},
{
"path": "po/pl.po",
"chars": 82206,
"preview": "# Polish translations for the nano editor messages\n# Copyright (C) 2026 Free Software Foundation, Inc.\n# This file is di"
},
{
"path": "po/pt.po",
"chars": 80642,
"preview": "# Portuguese (Portugal) Translation for the nano Package.\n# Copyright (C) 2022 Free Software Foundation, Inc.\n# This fil"
},
{
"path": "po/pt_BR.po",
"chars": 82802,
"preview": "# Brazilian Portuguese translation for the nano\n# Traduções em português brasileiro para o pacote nano\n# Copyright (C) 2"
},
{
"path": "po/ro.po",
"chars": 84290,
"preview": "# Translation of the nano editor to Romanian.\n# Mesajele în limba română pentru pachetul nano.\n# Copyright © 2025, 2026 "
},
{
"path": "po/ru.po",
"chars": 80098,
"preview": "# Translation of nano to Russian\n# Copyright (C) 2001, 2006, 2007, 2008 Free Software Foundation, Inc.\n# This file is di"
},
{
"path": "po/sk.po",
"chars": 81836,
"preview": "# Slovak translation of nano\n# Copyright (C) 2021 Free Software Foundation, Inc.\n# This file is distributed under the sa"
},
{
"path": "po/sl.po",
"chars": 68923,
"preview": "# Slovenian translation of nano.\n# Copyright (C) 2009 - 2013 Free Software Foundation, Inc.\n# This file is distributed u"
},
{
"path": "po/sq.po",
"chars": 82589,
"preview": "# Albanian translation for nano editor.\n# Copyright (C) 2022 Free Software Foundation, Inc.\n# This file is distributed u"
},
{
"path": "po/sr.po",
"chars": 80740,
"preview": "# Serbian translation of nano.\n# Copyright © 2020 Free Software Foundation, Inc.\n# This file is distributed under the sa"
},
{
"path": "po/sv.po",
"chars": 80499,
"preview": "# Swedish messages for nano.\n# Copyright © 2001 - 2025 Free Software Foundation, Inc.\n# This file is distributed under t"
},
{
"path": "po/tr.po",
"chars": 79084,
"preview": "# translation of nano to Turkish.\n# Copyright (C) 2003 Free Software Foundation, Inc.\n# This file is distributed under t"
},
{
"path": "po/uk.po",
"chars": 82637,
"preview": "# Ukrainian translation for nano.\n# Copyright (C) 2001 Free Software Foundation, Inc.\n# This file is distributed under t"
},
{
"path": "po/update_linguas.sh",
"chars": 1271,
"preview": "#!/bin/sh\n\n# Let this be executed in the po/ subdir.\ncd \"$(dirname \"$0\")\" || exit 1\n\necho \"Updating translations via T"
},
{
"path": "po/vi.po",
"chars": 79842,
"preview": "# Vietnamese translation for Nano.\n# Bản dịch tiếng Việt dành cho nano.\n# Copyright © 2016 Free Software Foundation, Inc"
},
{
"path": "po/zh_CN.po",
"chars": 66111,
"preview": "# Simplified Chinese Messages for the nano editor\n# Copyright (C) 2004, 2005, 2009, 2010, 2011 Free Software Foundation,"
},
{
"path": "po/zh_TW.po",
"chars": 66023,
"preview": "# Traditional Chinese Translation for the nano editor.\n# Copyright (C) 2004, 05, 13, 18, 19, 21 Free Software Foundation"
},
{
"path": "roll-a-release.sh",
"chars": 934,
"preview": "#!/bin/bash\n\nVERSION=\"9.0\"\n\n./configure -C --enable-tiny && make && ./configure -C &&\n\necho \"Running autogen...\" && ."
},
{
"path": "src/Makefile.am",
"chars": 1107,
"preview": "AM_CPPFLAGS = -DLOCALEDIR=\\\"$(localedir)\\\" -DSYSCONFDIR=\\\"$(sysconfdir)\\\" \\\n\t-I$(top_builddir)/lib -I$(top_srcdir)/lib\n\n"
},
{
"path": "src/browser.c",
"chars": 22304,
"preview": "/**************************************************************************\n * browser.c -- This file is part of GNU"
},
{
"path": "src/chars.c",
"chars": 15741,
"preview": "/**************************************************************************\n * chars.c -- This file is part of GNU n"
},
{
"path": "src/color.c",
"chars": 12355,
"preview": "/**************************************************************************\n * color.c -- This file is part of GNU n"
},
{
"path": "src/cut.c",
"chars": 23769,
"preview": "/**************************************************************************\n * cut.c -- This file is part of GNU nan"
},
{
"path": "src/definitions.h",
"chars": 19064,
"preview": "/**************************************************************************\n * definitions.h -- This file is part of"
},
{
"path": "src/files.c",
"chars": 78260,
"preview": "/**************************************************************************\n * files.c -- This file is part of GNU n"
},
{
"path": "src/global.c",
"chars": 61659,
"preview": "/**************************************************************************\n * global.c -- This file is part of GNU "
},
{
"path": "src/help.c",
"chars": 19970,
"preview": "/**************************************************************************\n * help.c -- This file is part of GNU na"
},
{
"path": "src/history.c",
"chars": 17910,
"preview": "/**************************************************************************\n * history.c -- This file is part of GNU"
},
{
"path": "src/move.c",
"chars": 22720,
"preview": "/**************************************************************************\n * move.c -- This file is part of GNU na"
},
{
"path": "src/nano.c",
"chars": 73301,
"preview": "/**************************************************************************\n * nano.c -- This file is part of GNU na"
},
{
"path": "src/prompt.c",
"chars": 24185,
"preview": "/**************************************************************************\n * prompt.c -- This file is part of GNU "
},
{
"path": "src/prototypes.h",
"chars": 20955,
"preview": "/**************************************************************************\n * prototypes.h -- This file is part of "
},
{
"path": "src/rcfile.c",
"chars": 49221,
"preview": "/**************************************************************************\n * rcfile.c -- This file is part of GNU "
},
{
"path": "src/search.c",
"chars": 32191,
"preview": "/**************************************************************************\n * search.c -- This file is part of GNU "
},
{
"path": "src/text.c",
"chars": 95504,
"preview": "/**************************************************************************\n * text.c -- This file is part of GNU na"
},
{
"path": "src/utils.c",
"chars": 14456,
"preview": "/**************************************************************************\n * utils.c -- This file is part of GNU n"
},
{
"path": "src/winio.c",
"chars": 114818,
"preview": "/**************************************************************************\n * winio.c -- This file is part of GNU n"
},
{
"path": "syntax/Makefile.am",
"chars": 856,
"preview": "pkgdata_DATA =\tasm.nanorc \\\n\t\tautoconf.nanorc \\\n\t\tawk.nanorc \\\n\t\tchangelog.nanorc \\\n\t\tcmake.nanorc \\\n\t\tc.nanorc \\\n\t\tcss."
},
{
"path": "syntax/asm.nanorc",
"chars": 801,
"preview": "## Syntax highlighting for assembler.\n\n## Original author: Mike Frysinger\n## License: GPL version 3 or newer\n\nsyntax a"
},
{
"path": "syntax/autoconf.nanorc",
"chars": 649,
"preview": "## Syntax highlighting for Autoconf.\n\n## Original author: Benno Schulenberg\n## License: GPL version 3 or newer\n\nsyntax"
},
{
"path": "syntax/awk.nanorc",
"chars": 1487,
"preview": "## Syntax highlighting for AWK scripts.\n\n## Original author: Donnie Berkholz\n\nsyntax awk \"\\.awk$\"\nheader \"^#!.*awk\"\nmag"
},
{
"path": "syntax/c.nanorc",
"chars": 1971,
"preview": "## Syntax highlighting for C and C++ files.\n\nsyntax c \"\\.([ch](pp|xx)?|C|cc|c\\+\\+|cu|H|hh|ii?)$\"\nheader \"-\\*-.*\\<C(\\+\\+)"
},
{
"path": "syntax/changelog.nanorc",
"chars": 857,
"preview": "## Syntax highlighting for Changelogs.\n\n## Original author: Benno Schulenberg\n## License: GPL version 3 or newer\n\nsynt"
},
{
"path": "syntax/cmake.nanorc",
"chars": 859,
"preview": "## Syntax highlighting for CMake files.\n\n## Original author: Felipe Bugno\n\nsyntax cmake \"(CMakeLists\\.txt|\\.cmake)$\"\nco"
},
{
"path": "syntax/css.nanorc",
"chars": 518,
"preview": "## Syntax highlighting for CSS files.\n\n## Original author: Simon Rupf\n\nsyntax css \"\\.css$\"\ncomment \"/*|*/\"\n\n# First mak"
},
{
"path": "syntax/default.nanorc",
"chars": 838,
"preview": "## This is an example of a default syntax. The default syntax is used for\n## files that do not match any other syntax.\n"
},
{
"path": "syntax/email.nanorc",
"chars": 340,
"preview": "## Syntax highlighting for emails.\n\nsyntax email \"\\.eml$\"\n\n# Quoted lines.\ncolor green \"^>.*\"\ncolor cyan \"^> ?>.*\"\ncolor"
},
{
"path": "syntax/extra/ada.nanorc",
"chars": 1263,
"preview": "## Syntax highlighting for Ada.\n\n## Original author: Andreas K. Foerster\n## License: GPL version 3 or newer\n\n## Langua"
},
{
"path": "syntax/extra/fortran.nanorc",
"chars": 1996,
"preview": "## Syntax highlighting for Fortran 90/95.\n\n## Original author: Pascal Gentil\n\nsyntax fortran \"\\.(f|for|f90|f95)$\"\ncomme"
},
{
"path": "syntax/extra/haskell.nanorc",
"chars": 1009,
"preview": "## Syntax highlighting for Haskell files.\n\n## Original author: Alex Taber\n## License: GPL version 3\n\nsyntax \"haskell\" "
},
{
"path": "syntax/extra/povray.nanorc",
"chars": 675,
"preview": "## Syntax highlighting for POV-Ray files.\n\n## Original author: Donnie Berkholz\n\nsyntax pov \"\\.(pov|POV|povray|POVRAY)$\""
},
{
"path": "syntax/extra/spec.nanorc",
"chars": 2194,
"preview": "## Syntax highlighting for RPM spec files.\n\n## Original author: Asterios Dramis\n\nsyntax spec \"\\.spec(\\.[^/]+)?$\"\ncommen"
},
{
"path": "syntax/go.nanorc",
"chars": 1446,
"preview": "## Syntax highlighting for Go.\n\n## Original author: Robert Clausecker\n## License: CC0 (public domain)\n\nsyntax go \"\\.go"
},
{
"path": "syntax/groff.nanorc",
"chars": 800,
"preview": "## Syntax highlighting for groff.\n\n## Original author: Robert D. Goulding\n\nsyntax groff \"\\.(me|mm|mom|ms|roff|tmac)$|/t"
},
{
"path": "syntax/guile.nanorc",
"chars": 1226,
"preview": "## Syntax highlighting for Guile Scheme.\n\n## Original authors: Mark Oteiza and Benno Schulenberg\n## License: GPL versi"
},
{
"path": "syntax/html.nanorc",
"chars": 1286,
"preview": "## Syntax highlighting for HTML.\n\nsyntax html \"\\.html?$\"\nmagic \"HTML document\"\ncomment \"<!--|-->\"\n\nformatter tidy -m -q\n"
},
{
"path": "syntax/java.nanorc",
"chars": 654,
"preview": "## Syntax highlighting for Java.\n\nsyntax java \"\\.java$\"\nmagic \"Java \"\ncomment \"//\"\n\ncolor green \"\\<(boolean|byte|char|do"
},
{
"path": "syntax/javascript.nanorc",
"chars": 850,
"preview": "## Syntax highlighting for Javascript.\n\nsyntax javascript \"\\.m?js$\"\nmagic \"JavaScript source\"\ncomment \"//\"\n\n# Declaratio"
},
{
"path": "syntax/json.nanorc",
"chars": 805,
"preview": "## Syntax highlighting for JSON files.\n\n## Original author: Aapo Rantalainen\n## License: GPL version 3 or newer\n\nsynta"
},
{
"path": "syntax/lua.nanorc",
"chars": 2461,
"preview": "## Syntax highlighting for Lua.\n\n## Original author: Matthew Wild\n## License: GPL version 3 or newer\n\nsyntax lua \"\\.lu"
},
{
"path": "syntax/makefile.nanorc",
"chars": 552,
"preview": "## Syntax highlighting for Makefiles.\n\nsyntax makefile \"(^|/)((GNU)?m|M)akefile[^/]*$|\\.(make|mk)$\"\nmagic \"makefile scri"
},
{
"path": "syntax/man.nanorc",
"chars": 926,
"preview": "## Syntax highlighting for man pages.\n\n## Original author: Mike Frysinger\n## License: GPL version 3 or newer\n\nsyntax m"
},
{
"path": "syntax/markdown.nanorc",
"chars": 947,
"preview": "## Syntax highlighting for Markdown files.\n\n## Original authors: Ryan Westlund and Benno Schulenberg\n## License: GPL v"
},
{
"path": "syntax/nanohelp.nanorc",
"chars": 568,
"preview": "## This is meant for highlighting key combos in a nano help text.\n\n# It should not apply to any normal file, so no filer"
},
{
"path": "syntax/nanorc.nanorc",
"chars": 4459,
"preview": "## Syntax highlighting for nanorc files.\n\nsyntax nanorc \"[/.]nanorc(\\.in)?$\"\ncomment \"#\"\n\n# Everything that does not get"
},
{
"path": "syntax/nftables.nanorc",
"chars": 906,
"preview": "## Syntax highlighting for the packet-filtering rules of Netfilter.\n\n## Original author: Arturo Borrero González\n## Lic"
},
{
"path": "syntax/objc.nanorc",
"chars": 1540,
"preview": "## Syntax highlighting for C/C++/Obj-C files.\n\n## Original author: Dave Geering\n\nsyntax m \"\\.m$\"\nmagic \"Objective-C sou"
},
{
"path": "syntax/ocaml.nanorc",
"chars": 849,
"preview": "## Syntax highlighting for OCaml.\n\nsyntax ocaml \"\\.mli?$\"\nmagic \"OCaml\"\ncomment \"(*|*)\"\n\n# Uid:\ncolor red \"\\<[[:upper:]]"
},
{
"path": "syntax/patch.nanorc",
"chars": 677,
"preview": "## Syntax highlighting for patch and diff files.\n\n## Original author: Mike Frysinger\n## License: GPL version 3 or newe"
},
{
"path": "syntax/perl.nanorc",
"chars": 2143,
"preview": "## Syntax highlighting for Perl.\n\nsyntax perl \"\\.p[lm]$\"\nheader \"^#!.*perl\"\nmagic \"Perl script\"\ncomment \"#\"\n\n# Functions"
},
{
"path": "syntax/php.nanorc",
"chars": 1160,
"preview": "## Syntax highlighting for PHP.\n\n## Original author: Mike Frysinger\n## License: GPL version 3 or newer\n\nsyntax php \"\\."
},
{
"path": "syntax/po.nanorc",
"chars": 1370,
"preview": "## Syntax highlighting for PO files.\n\n## Original author: Benno Schulenberg\n## License: GPL version 3 or newer\n\nsyntax"
},
{
"path": "syntax/python.nanorc",
"chars": 1549,
"preview": "## Syntax highlighting for Python.\n\nsyntax python \"\\.py$\"\nheader \"^#!.*python\"\nmagic \"Python script\"\ncomment \"#\"\n\n# Alte"
},
{
"path": "syntax/ruby.nanorc",
"chars": 1388,
"preview": "## Syntax highlighting for Ruby.\n\n## Original author: John M. Gabriele\n\nsyntax ruby \"\\.rb$\"\nheader \"^#!.*ruby\"\nmagic \"R"
},
{
"path": "syntax/rust.nanorc",
"chars": 1078,
"preview": "## Syntax highlighting for Rust.\n\n## Copyright 2015 Luke Francl.\n## Licensed under GPL version 3 or newer.\n\nsyntax rust "
},
{
"path": "syntax/sh.nanorc",
"chars": 1611,
"preview": "## Syntax highlighting for Bourne shell scripts.\n\n## Original author: Mike Frysinger\n## License: GPL version 3 or newe"
},
{
"path": "syntax/sql.nanorc",
"chars": 2442,
"preview": "## Syntax highlighting for (Postgres) SQL scripts.\n\n## Original author: Devrim Gündüz\n\nsyntax sql \"\\.sql$\"\ncomment \"-- "
},
{
"path": "syntax/tcl.nanorc",
"chars": 2206,
"preview": "## Syntax highlighting for Tcl and Expect scripts.\n\n## Original author: Mike Frysinger\n## License: GPL version 3 or ne"
},
{
"path": "syntax/tex.nanorc",
"chars": 202,
"preview": "## Syntax highlighting for TeX files.\n\nsyntax tex \"\\.tex$\"\nmagic \"(La)?TeX document\"\ncomment \"%\"\n\nlinter chktex -v0 -q -"
},
{
"path": "syntax/texinfo.nanorc",
"chars": 864,
"preview": "## Syntax highlighting for Texinfo files.\n\n## Original author: Benno Schulenberg\n## License: GPL version 3 or newer\n\ns"
},
{
"path": "syntax/xml.nanorc",
"chars": 721,
"preview": "## Syntax highlighting for XML files.\n\n## Original author: Josef Schugt\n\nsyntax xml \"\\.([jrsx]html?|jnlp|mml|pom|rng|sg"
},
{
"path": "syntax/yaml.nanorc",
"chars": 1368,
"preview": "## Syntax highlighting for YAML files.\n\n## Original author: Benno Schulenberg\n## License: GPL version 3 or newer\n\nsynt"
}
]
About this extraction
This page contains the full source code of the madnight/nano GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 141 files (4.8 MB), approximately 1.3M tokens, and a symbol index with 447 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.