Compare commits

..

191 Commits

Author SHA1 Message Date
David Lawrence Ramsey
c6718cf209 GNU nano 1.3.4
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1906 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-08-17 20:38:44 +00:00
David Lawrence Ramsey
a88347069c add missing #ifdefs
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1905 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-08-17 20:34:57 +00:00
David Lawrence Ramsey
35fb55aba2 and add last missing bit
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1904 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-08-17 19:28:54 +00:00
David Lawrence Ramsey
c08368bd19 fix the last ngetdelim() tweak
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1903 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-08-17 19:20:05 +00:00
David Lawrence Ramsey
b4041d6821 better document the ngetdelim() tweaks
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1902 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-08-17 16:04:48 +00:00
David Lawrence Ramsey
95f3812db1 add a few last tweaks to ngetdelim()
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1901 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-08-17 16:00:29 +00:00
David Lawrence Ramsey
a27bd65057 per DB's patch, overhaul the rcfile and history file reading and writing
routines to fix a few fundamental problems and limitations; also add
getline() and getdelim() equivalents adapted from GNU mailutils 0.5 (and
tweaked to better integrate with nano), since the patch uses getline()


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1900 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-08-17 05:23:38 +00:00
David Lawrence Ramsey
bb50b305d5 a few more #ifdef tweaks, plus a few cosmetic fixes
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1899 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-08-12 21:43:00 +00:00
David Lawrence Ramsey
7e8dd19a72 more #ifdef tweaks
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1898 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-08-12 20:06:20 +00:00
David Lawrence Ramsey
df13e3beef tweak some #ifdefs to avoid warnings when compiling with
--disable-wrapping, --disable-justify, or a combination of the two


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1897 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-08-12 19:48:21 +00:00
David Lawrence Ramsey
7dfec43f42 per DB's patch, show the "Press Return To Continue" prompt if we can't
read the .nano_history file while starting nano


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1896 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-08-12 15:20:14 +00:00
David Lawrence Ramsey
69a28122c1 make sure that the shortcut list properly displays "Close" when reading
in multiple files on the command line


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1895 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-08-12 04:34:00 +00:00
David Lawrence Ramsey
76356bd05b and do int -> bool conversions for the prototypes too
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1894 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-08-12 04:30:22 +00:00
David Lawrence Ramsey
82dc1c17f2 add more int -> bool conversions
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1893 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-08-12 03:27:54 +00:00
David Lawrence Ramsey
95e39e5f46 add missing error message simplifications from before
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1892 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-08-12 02:52:14 +00:00
David Lawrence Ramsey
1e7f1ea1e8 indentation fix
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1891 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-08-12 02:11:35 +00:00
David Lawrence Ramsey
6420d445c2 add a bunch of DB's miscellaneous fixes, plus a few of mine
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1890 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-08-11 05:13:08 +00:00
David Lawrence Ramsey
049e4a5db3 per DB's patch, simplify the saving of emergency files in die(),
die_save_file(), and get_next_filename()


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1889 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-08-10 23:05:59 +00:00
David Lawrence Ramsey
6b24856c2f add titlebar() calls before all open_file() calls and remove the
titlebar() call after them, so that the titlebar is displayed properly
for all file(s) loaded; also add missing int -> bool conversion


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1888 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-08-07 22:33:14 +00:00
David Lawrence Ramsey
c7b6ac5afe cosmetic fixes for the getopt_(long)?() calls and the switch block
dealing with the command line options


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1887 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-08-07 22:00:02 +00:00
David Lawrence Ramsey
00d7798756 per DB's patch, convert a few parts of files.c to use bool so that
open_pipe()'s failure is handled properly again, and add various
#ifdefs to fix a few warnings and compilation problems that occur when
everything is enabled manually including NANO_SMALL


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1886 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-08-07 21:27:37 +00:00
David Lawrence Ramsey
ce62e82a93 per DB's patch, convert nano.c to use bools wherever needed, add a few
efficiency tweaks, and fix a few minor bugs in help_init() where "Up"
and "Space" might not be displayed properly and the help browser
wouldn't work if fewer than 24 columns were available


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1885 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-08-05 22:10:22 +00:00
David Lawrence Ramsey
73cd1a5ded document DB's warning fixes when ENABLE_NLS is undefined and the
-fwritable-strings option is used, which were part of his last patch to
convert more translated strings to use N_()


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1884 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-08-05 21:57:48 +00:00
David Lawrence Ramsey
76f63ff58d per DB's patch, convert more of nano to use N_() when possible; also add
a few more minor cosmetic fixes of mine


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1883 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-08-05 15:45:09 +00:00
David Lawrence Ramsey
22fac783f5 per DB's patch, don't translate the option strings for -Z/--restricted;
also add a few more minor cosmetic fixes of mine


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1882 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-08-05 15:16:19 +00:00
David Lawrence Ramsey
c53ab2a854 tweak parse_num() to return a bool, and fix backwards test of its value
so that numeric values will be preserved when switching to the "Go To
Line" prompt again


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1881 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-08-04 18:24:53 +00:00
David Lawrence Ramsey
4d44d2de0e make lastwastab and list use TRUE and FALSE instead of 1 and 0, make
them bools in the process, and make a few other minor cosmetic cleanups


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1880 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-08-01 22:35:31 +00:00
David Lawrence Ramsey
8bf9ba0c16 tweak the spec file to properly package the "rnano" symlink
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1879 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-08-01 22:00:29 +00:00
David Lawrence Ramsey
76fb3eccda automatically install a symlink "rnano" pointing to nano
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1878 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-08-01 16:09:15 +00:00
David Lawrence Ramsey
b8c479a9e9 add DB's fix for a problem where quoted justify wouldn't work if
HAVE_REGEX_H wasn't set, and don't treat the return values of the string
comparison functions as boolean anymore


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1877 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-07-31 14:10:23 +00:00
David Lawrence Ramsey
a6d26d04fd rcfile tweaks: prompt only once for all rcfile errors instead of once
for each separate error, make sure all the messages end in newlines,
etc.


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1876 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-07-30 22:52:44 +00:00
David Lawrence Ramsey
906257932f add my display tweak to do_replace(), my efficiency tweaks to
do_gotoline(), and DB's efficiency tweaks to do_gotopos()


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1875 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-07-30 20:21:34 +00:00
David Lawrence Ramsey
9ef3adbc1d add a consistency fix for do_enter() and a few minor cosmetic fixes
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1874 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-07-30 17:30:17 +00:00
David Lawrence Ramsey
819c7f0327 add DB's overhaul of the paragraph searching code and some of the
justify code, as it makes some code much more understandable and fixes a
bug where searching for the previous paragraph would move the cursor too
high in one case


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1873 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-07-30 03:54:34 +00:00
David Lawrence Ramsey
f56cc9e0e9 in do_replace_loop(), make sure old_pww is updated to the current value
of placewewant when a new match is found, so that edit_redraw() will
redraw the screen properly when only placewewant changes


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1872 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-07-29 14:32:17 +00:00
David Lawrence Ramsey
360093a652 add a few missing placewewant size_t conversions
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1871 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-07-28 20:53:55 +00:00
David Lawrence Ramsey
86e851b4e7 per DB's patch, convert placewewant to a size_t; also add a few
miscellaneous fixes of mine


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1870 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-07-28 20:46:25 +00:00
David Lawrence Ramsey
2d140c2980 add various improvements to the "c-file" regexes by Mike Frysinger, with
a few additions of mine


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1869 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-07-28 13:50:43 +00:00
David Lawrence Ramsey
7d3817fb3e add Mike Frysinger's sample regexes for patch files
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1868 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-07-28 13:03:06 +00:00
David Lawrence Ramsey
331e659e98 minor cosmetic fix
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1867 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-07-27 19:40:39 +00:00
David Lawrence Ramsey
8aaf03000b move the main terminal initialization functions, aside from initscr(),
into a new terminal_init() function, and convert nano to use it; also,
when reloading the newly spell-checked temporary file in
do_alt_speller(), call terminal_init() to make sure that all the
original terminal settings are restored, as a curses-based alternative
spell checker (e.g. aspell) can change them


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1866 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-07-27 16:46:35 +00:00
David Lawrence Ramsey
ad1fd0d968 per Junichi Uekawa's patch in Debian's version of nano, call setlocale()
outside the ENABLE_NLS #ifdef, since UTF-8 support (specifically, the
wide character handling functions it needs) won't work properly if the
locale isn't set, whether NLS is enabled or not


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1865 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-07-27 15:46:58 +00:00
David Lawrence Ramsey
1536f8613d fix spacing problem in the "Save Under Different Name" prompt
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1864 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-07-24 16:50:20 +00:00
David Lawrence Ramsey
c41d428b41 fix variable names
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1863 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-07-23 12:51:40 +00:00
David Lawrence Ramsey
8037fe076b a few miscellaneous Pico compatibility tweaks and bugfixes (most
importantly, a fix for a segfault when trying to full-justify a file
with no paragraphs)


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1862 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-07-23 12:30:40 +00:00
David Lawrence Ramsey
94b975ce7c restore erroneously removed toggle* casts
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1861 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-07-20 12:57:34 +00:00
David Lawrence Ramsey
04419b9702 and reset tabsize and wrap_at to their default values if invalid rcfile
entries are specified for them


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1860 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-07-18 18:13:54 +00:00
David Lawrence Ramsey
36dd87b1fb properly handle invalid tab sizes in nanorc files and make a few more
cosmetic cleanups


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1859 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-07-18 17:43:43 +00:00
David Lawrence Ramsey
24f10c30c3 revert change to debugging statement that shouldn't be there yet
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1858 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-07-17 20:01:45 +00:00
David Lawrence Ramsey
fd3039a8e7 cut down on redundant inclusions of <sys/types.h>, include it in proto.h
per DB's patch, and make a few more minor cosmetic cleanups


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1857 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-07-17 19:49:12 +00:00
David Lawrence Ramsey
fb8bf40efb further clarify one toggle description
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1856 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-07-13 17:43:08 +00:00
David Lawrence Ramsey
aea4dabf59 per DB's patch, remove some unneeded reset_cursor() calls, move the one
in the main input loop to the top, and remove the apparently unneeded
wrefresh() call in the main input loop


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1855 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-07-13 17:09:24 +00:00
David Lawrence Ramsey
300b87fda6 add missing part of the variable type changes in do_gotoline()
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1854 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-07-12 16:26:55 +00:00
David Lawrence Ramsey
49c3f2406d port over DB's number parsing code and related bits, with a few minor
changes of mine, and add a few related variable type changes


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1853 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-07-12 16:07:14 +00:00
David Lawrence Ramsey
576bf331ef various changes to cut down on binary size: per DB's patch, add new N_()
macro to mark strings that aren't translated immediately and convert
nano to use it where needed, overhaul the shortcut list and toggle list
initialization code for efficiency, and replace rcfile_msg() with
rcfile_error(); also add a few minor miscellaneous cleanups by DB and
myself


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1852 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-07-12 03:10:30 +00:00
David Lawrence Ramsey
d717d4bac6 add another missing part of DB's patch (read_file() should be returning
void instead of int), and rearrange one NANO_SMALL #ifdef for better
readability


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1851 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-07-10 16:53:17 +00:00
David Lawrence Ramsey
0273829353 add one last spacing fix
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1850 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-07-08 17:29:27 +00:00
David Lawrence Ramsey
f708037715 add another prototype fix and a few spacing fixes
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1849 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-07-08 17:15:10 +00:00
David Lawrence Ramsey
a5dda84a07 per DB's patch, remove unused global variable search_offscreen
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1848 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-07-08 15:27:04 +00:00
David Lawrence Ramsey
0af8604ec9 more comment fixes
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1847 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-07-07 23:26:08 +00:00
David Lawrence Ramsey
ec721c8e80 another missing piece of DB's patch: the toggle and rcoption structs
should use longs to store their flags too


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1846 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-07-07 15:20:52 +00:00
David Lawrence Ramsey
2ad320926f add another missing part of DB's patch to convert flags and related
variables into longs: toggle_init_one() should take a long instead of an
int for its flag parameter


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1845 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-07-07 14:36:44 +00:00
David Lawrence Ramsey
962cc74620 add missing part of DB's patch to convert flags and related variables
into longs: file_flags should be declared as a long instead of an int


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1844 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-07-07 13:57:52 +00:00
David Lawrence Ramsey
25529074d3 put back erroneously removed initialization of original_umask
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1843 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-07-06 14:02:44 +00:00
David Lawrence Ramsey
f7b5d930a9 if we're in restricted mode and the filename isn't blank, disable tab
completion at the "Write File" prompt, since we can't change the
filename in that case; also remove an unneeded trailing space


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1842 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-07-05 14:27:29 +00:00
David Lawrence Ramsey
309fbcbddf fix inaccurate comment
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1841 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-07-03 14:34:03 +00:00
David Lawrence Ramsey
4693864a78 fix bug in do_justify() in a better way: add on_next_line flag, used to
indicate when we've moved to the next line after justifying the current
line, and only run the respacing routine when it's true; this keeps the
respacing routine from erroneously being run more than once on the same
line


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1840 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-07-03 14:15:58 +00:00
David Lawrence Ramsey
01a6bf4f9a fix bug in do_justify(): if all the text from the next line has been
moved to the current line and the next line has been deleted, continue
the justification loop from there and skip the respacing routine in
order to avoid running it more than once on the same line (since it
assumes that we've moved to the next line, which isn't true in that
case)


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1839 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-07-03 05:23:19 +00:00
David Lawrence Ramsey
c8c69d5449 for consistency with nano 1.2.x and with other editors, make the mode of
newly created files 666 instead of 600 before it's modified by the
umask; also add a few more minor comment fixes


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1838 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-07-03 03:22:23 +00:00
David Lawrence Ramsey
edab0cc0a5 a few cleanups and consistency fixes
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1837 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-07-03 03:09:12 +00:00
David Lawrence Ramsey
72e51ab037 per DB's patch (with a few updates of mine), convert the shortcut list
functions and most related functions to return void instead of int, as
the return values of all those functions are essentially unused; also
add a few related miscellaneous cleanups


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1836 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-07-02 14:31:03 +00:00
David Lawrence Ramsey
74912c6090 add missing cosmetic fix from before
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1835 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-07-01 19:41:09 +00:00
David Lawrence Ramsey
ebd0d7c859 more minor cosmetic fixes
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1834 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-07-01 18:59:52 +00:00
David Lawrence Ramsey
0fb841a78a per DB's patch, tweak the code to update the edit window just before
getting statusbar input for efficiency, and update bottomwin just before
then too


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1833 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-07-01 17:04:23 +00:00
David Lawrence Ramsey
cff5558394 per Jon Oberheide's patch, fix erroneous debugging statement so that
nano compiles with --enable-debug again


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1832 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-06-30 12:28:15 +00:00
David Lawrence Ramsey
db357a1ece per Mike Frysinger's patch, have whitespace display default to off
instead of on


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1831 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-06-29 12:36:25 +00:00
David Lawrence Ramsey
a539fce4ad fix erroneous #ifdef so that nano compiles with --disable-justify again
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1830 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-06-29 00:43:56 +00:00
David Lawrence Ramsey
d36715e8ac Back to CVS
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1829 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-06-28 13:23:37 +00:00
David Lawrence Ramsey
e1151561ad GNU nano 1.3.3
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1827 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-06-28 13:17:33 +00:00
David Lawrence Ramsey
dbde9d7577 refactor the code to search for the beginning of a paragraph a bit to
fix some inaccuracies and eliminate the need for recursion; it now uses
almost the same logic as the code to search for the end of a paragraph,
which makes it somewhat easier to understand


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1823 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-06-27 00:54:08 +00:00
David Lawrence Ramsey
524534405b a few last minor cosmetic fixes
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1822 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-06-26 15:24:16 +00:00
Jordi Mallach
21ad762998 Add a translation comment so translators use both their shortcuts as well as the English ones.
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1818 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-06-25 22:43:09 +00:00
Jordi Mallach
d350727726 Fix XSI:ism in config.rpath.
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1817 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-06-25 22:34:18 +00:00
David Lawrence Ramsey
91bc83a97a call justify_format() just after backup_lines() instead of inside it, so
that full justification doesn't erroneously justify non-paragraph lines
in the file


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1815 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-06-25 01:52:10 +00:00
David Lawrence Ramsey
537a880856 minor cosmetic fixes
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1814 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-06-24 22:39:24 +00:00
David Lawrence Ramsey
85529b37c6 make the former flag same_line_wrap use TRUE and FALSE, add missing part
of DB's do_wrap() tweaks (the initialization of new_line_wrap to 0), and
wrap a few overly long comments


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1813 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-06-22 15:38:47 +00:00
David Lawrence Ramsey
973a96be62 add minor comment fixes, and also fix a problem where the escape
sequence for F3 on the FreeBSD console wasn't interpreted properly


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1812 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-06-22 14:30:18 +00:00
David Lawrence Ramsey
4e1a98c9c3 fix inaccurate comment
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1810 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-06-15 01:48:51 +00:00
David Lawrence Ramsey
45eda52d7e do_yesno() comment fixes
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1809 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-06-12 21:20:33 +00:00
David Lawrence Ramsey
74af3a7419 clean up main() a bit
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1808 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-06-12 21:03:14 +00:00
David Lawrence Ramsey
3b0729cf5d fix slightly misplaced break
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1807 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-06-12 02:10:07 +00:00
David Lawrence Ramsey
2b6c3018b0 remove unneeded justify_format() call from do_justify() which caused
problems if the original paragraph was one line long and ended with a
tab or tabs; unjustification would restore the justify_format()ted line
instead of the original line


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1806 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-06-10 01:35:02 +00:00
David Lawrence Ramsey
452513750b per CHAO Wei-Lun's patch, add missing "[dir]" and missing _()'s to the
"-E [dir]/--backupdir=[dir]" strings in usage()


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1805 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-06-09 08:36:46 +00:00
David Lawrence Ramsey
a9a6ce09d6 justification fix: if the last line of a justified paragraph has a space
on the end of it, the space should be removed


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1804 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-06-05 22:09:56 +00:00
David Lawrence Ramsey
7ea39efdbd document the functions that were removed when the input routines were
converted to use state machines


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1803 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-06-04 22:36:42 +00:00
David Lawrence Ramsey
d8974451f0 add an extra break and move an #endif down to fix a potential problem
when NANO_SMALL is defined or KEY_RESIZE isn't, and when PDCURSES isn't
defined


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1802 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-06-04 22:28:55 +00:00
David Lawrence Ramsey
e65e639465 properly handle it when get_escape_seq_kbinput() returns ERR for an
escape sequence that is recognized but which should be ignored


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1801 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-06-04 18:18:17 +00:00
David Lawrence Ramsey
16eb518dcd support KEY_A1, KEY_A3, KEY_C1, and KEY_C3 on the numeric keypad
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1800 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-06-03 20:26:12 +00:00
David Lawrence Ramsey
498e13df30 document the use of the SPELL environment variable
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1799 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-06-01 22:56:34 +00:00
David Lawrence Ramsey
ae064bf255 don't rely on the return value of curs_set(), as it's broken on e.g.
slang; instead, explicitly turn the cursor off where we need to


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1798 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-06-01 20:38:00 +00:00
David Lawrence Ramsey
e7638ea75f cosmetic fixes
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1797 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-06-01 19:49:38 +00:00
David Lawrence Ramsey
ce1d7652f3 edit_redraw() should update when we're not on the first page and/or when
we're not on the same page as before, not just in the former case


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1796 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-06-01 18:32:36 +00:00
Jordi Mallach
0675c2f355 Update docs about Chinese contributor.
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1795 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-06-01 15:29:31 +00:00
Jordi Mallach
18b583d55b 2004-06-01 Jordi Mallach <jordi@gnu.org>
* zh_TW.po: Added Chinese (Taiwan) translation by
	CHAO Wei-Lun <chaoweilun@pcmail.com.tw>.
	* LINGUAS: Added "zh_TW".


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1794 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-06-01 15:13:19 +00:00
David Lawrence Ramsey
9a527f5a17 add DB's tweaks to do_wrap(), plus a few minor bits of mine (convert
some ints to size_t's and convert the int wrapping to use TRUE and FALSE
since it's used as a boolean)


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1793 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-31 14:58:59 +00:00
David Lawrence Ramsey
684b19380e fix comment inaccuracies
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1792 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-31 14:47:12 +00:00
David Lawrence Ramsey
4a80fcff4e oops; for consistency with e.g. color syntax highlighting (which, like
whitespace display, is specified in the rcfile), whitespace display
should be on by default


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1791 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-30 04:19:27 +00:00
David Lawrence Ramsey
f521b60f52 for consistency, whitespace display should be off by default, not on
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1790 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-30 03:56:52 +00:00
David Lawrence Ramsey
28260475bb add spaces to the ends of the "Overwrite" and "Different Name" prompts,
for consistency


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1789 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-30 03:23:39 +00:00
David Lawrence Ramsey
c21790d6d9 edit_redraw() fixes
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1788 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-30 03:19:52 +00:00
David Lawrence Ramsey
be26561620 add DB's changes to allow scrolling through the help browser text with
the arrow keys as well as the paging keys


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1787 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-29 20:38:08 +00:00
David Lawrence Ramsey
b6a4b10daf document cosmetic reorganization of rcfile.c, and readd an "else" I
accidentally removed while doing it


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1786 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-29 17:20:01 +00:00
David Lawrence Ramsey
8d911991a3 add a few comment fixes and an explicit check in rcfile.c for
rcopts[i].name's being "tabsize" (to avoid a spurious error under some
circumstances about tabsize's being 0 when there's no tabsize entry in
the rcfile)


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1785 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-29 17:05:52 +00:00
David Lawrence Ramsey
89bb93733a a few last cosmetic reorderings and fixes
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1784 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-29 16:47:52 +00:00
David Lawrence Ramsey
2c62b07d2b allow the changing of closing punctuation and closing brackets (used in
justification) via the rcfile


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1783 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-29 16:38:57 +00:00
David Lawrence Ramsey
483ea32c75 add Mike Frysinger's patch (with minor modifications) to allow
displaying other characters, specified in the rcfile, for the first
characters of tabs and spaces


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1782 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-29 16:25:30 +00:00
David Lawrence Ramsey
c833d9e80f since KEEP_CUTBUFFER is only used in cut.c, make it a static variable in
cut.c instead of a flag, and unset it in other files via the new
function cutbuffer_reset()


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1781 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-29 15:36:58 +00:00
David Lawrence Ramsey
12e066f9d4 fix minor omission: the smarthome option was documented in nanorc.5 as
well as nano.1


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1780 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-29 14:13:02 +00:00
David Lawrence Ramsey
9d325a03d9 cosmetic fixes
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1779 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-29 03:03:52 +00:00
David Lawrence Ramsey
32e3b88e09 add some comments better explaining what is disabled in restricted mode
and why


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1778 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-29 01:20:17 +00:00
David Lawrence Ramsey
dd7cc7230e don't bother initializing the backup directory or reading $SPELL for the
alternative spell checker if we're in restricted mode, since both
backups and spell checking are disabled then


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1777 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-28 23:45:25 +00:00
David Lawrence Ramsey
3aedb36e68 check $SPELL for an alternative spell checker if we didn't get one from
the command line and/or rcfile, as Pico does


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1776 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-28 22:42:41 +00:00
David Lawrence Ramsey
570ea8969b add missing cast to char
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1775 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-28 21:02:32 +00:00
David Lawrence Ramsey
2ed225f78d overhaul the routines for movement and related things to eliminate
unneeded screen redraws


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1774 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-28 20:44:09 +00:00
David Lawrence Ramsey
48ae986730 refactor the low-level input routines into main routines that get the
input and state machines that interpret the input


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1773 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-28 17:23:33 +00:00
David Lawrence Ramsey
d12fd4b1fb add code to statusq() to *really* not allow "Full Justify" while in view
mode


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1772 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-28 15:05:56 +00:00
David Lawrence Ramsey
0aa2264687 fix problems caused by cut and paste of the do_para_end() shortcut for
the do_full_justify() shortcut: don't allow the latter to work in view
mode, and have it display its own message instead of the do_para_end()
shortcut's message


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1771 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-28 14:42:50 +00:00
David Lawrence Ramsey
2f0d03b4a2 make write_marked() always call write_file() with nonamechange set to
TRUE (and hence no longer take a namechange parameter itself) to fix a
bug where writing a selection would change the current filename, and
make die_save_file() do the same since we don't need to change the
current filename if we're writing emergency backup files


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1770 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-28 00:15:28 +00:00
David Lawrence Ramsey
228148b87a add DB's tweaks to do_enter() and remove the now-unused center_cursor()
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1769 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-27 20:09:52 +00:00
David Lawrence Ramsey
c372488179 treat search_last_line as a boolean everywhere, and remove some unneeded
trailing spaces


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1768 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-27 18:39:16 +00:00
David Lawrence Ramsey
8328fc2439 properly account for padding in titlebar()
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1767 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-25 23:34:43 +00:00
David Lawrence Ramsey
da141063e3 per DB's patch, make finish() accept and return void, since none of the
calls to finish() set sigage to anything other than 0 or use its return
value


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1766 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-25 19:41:11 +00:00
David Lawrence Ramsey
0d29555a13 cosmetic fix: reorder enums
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1765 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-25 02:33:27 +00:00
David Lawrence Ramsey
c279a63100 per DB's patch, also remove the now-unused center_cursor()
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1764 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-25 01:49:58 +00:00
David Lawrence Ramsey
5a8995a097 per DB's patch, remove the now-unused edit_refresh_clearok()
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1763 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-24 19:47:08 +00:00
David Lawrence Ramsey
32613fa3f6 comment fixes for consistency: "Meta" -> "meta"
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1762 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-24 18:40:41 +00:00
David Lawrence Ramsey
2e3aeae5bc convert do_para_search() to use an enum to specify its search type
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1761 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-24 05:52:35 +00:00
David Lawrence Ramsey
32d19ce47c comment fix for consistency: "magic line" -> "magicline"
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1760 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-24 05:05:07 +00:00
David Lawrence Ramsey
a9fcaa589a comment fix
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1759 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-24 02:58:05 +00:00
David Lawrence Ramsey
1b525e9ad6 switch test around in do_prev_word() for consistency with do_next_word()
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1758 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-24 02:35:02 +00:00
David Lawrence Ramsey
4be15f0158 move do_(first|last)_line() to move.c
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1757 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-23 21:33:23 +00:00
David Lawrence Ramsey
4178db0328 comment fixes
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1756 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-23 21:23:23 +00:00
David Lawrence Ramsey
1dcf36a370 add missing bit
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1755 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-23 21:17:56 +00:00
David Lawrence Ramsey
fa394047ba add DB's changes to titlebar() (with a few tweaks of mine) to make it
handle shorter screen widths better and display the filename using
display_string(), my strnlen() equivalent so the new titlebar() will
work on systems without strnlen(), and a few of DB's other minor changes
to make other display-related functions handle shorter screen widths
better, among other things


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1754 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-23 21:11:14 +00:00
David Lawrence Ramsey
bcebe325f0 cosmetic fix
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1753 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-22 20:38:33 +00:00
David Lawrence Ramsey
14bf80399f add missing #ifdefs around prototypes
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1752 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-22 20:19:15 +00:00
David Lawrence Ramsey
c7acf69cb2 add smart home key
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1751 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-22 20:15:20 +00:00
David Lawrence Ramsey
684e7ebd37 comment fix: justify_format() could have just left out a space at the
end of the line instead of removing it


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1750 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-20 14:31:15 +00:00
David Lawrence Ramsey
8e4adcdac3 comment fix
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1749 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-20 03:29:33 +00:00
David Lawrence Ramsey
e608f94a6f go back to cbreak mode and disable_signals() instead of raw mode, as
disable_signals() doesn't take up much space and we need one fewer slang
workaround that way


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1748 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-19 16:04:27 +00:00
David Lawrence Ramsey
fd462b164e comment fix: ^J should be Ctrl-J
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1747 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-19 15:41:17 +00:00
David Lawrence Ramsey
837a02b256 add missing bit from DB's refactoring of do_credits(): translate the
messages in xlcredits[] after they're initialized in order to avoid an
error when compiling with -pedantic


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1746 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-18 15:23:31 +00:00
David Lawrence Ramsey
d7fd200a6a minor overhaul of terminal-related things
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1745 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-18 01:20:36 +00:00
David Lawrence Ramsey
36e363f525 and remove unneccessary initialization
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1744 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-17 20:38:00 +00:00
David Lawrence Ramsey
1cadddd111 tweak justification so that it works the same way as the current version
of Pico does


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1743 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-17 20:32:51 +00:00
David Lawrence Ramsey
7097d7b6d2 remove some unneeded edit_update()s in do_para_search() and do_justify()
per DB's patch, and simplify an if statement in do_justify()


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1742 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-17 16:11:18 +00:00
David Lawrence Ramsey
1d43db879e if multibuffer support is compiled in, properly read in multiple files
at the command line even if multibuffer mode isn't turned on


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1740 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-14 17:57:00 +00:00
David Lawrence Ramsey
97133f5963 in main(), don't open the first file in quiet mode, since if we do, an
error message won't be shown if it's unreadable


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1739 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-14 17:39:19 +00:00
David Lawrence Ramsey
fda18c3935 one last comment fix
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1738 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-14 03:50:49 +00:00
David Lawrence Ramsey
d4693cb0be the last of the minor fixes
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1737 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-14 01:17:25 +00:00
David Lawrence Ramsey
021960dfb7 comment fix
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1736 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-13 23:19:01 +00:00
David Lawrence Ramsey
68a44a4905 one last minor cosmetic change
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1735 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-13 23:05:14 +00:00
David Lawrence Ramsey
f613ca78c6 minor cosmetic fixes
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1734 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-13 22:23:58 +00:00
David Lawrence Ramsey
94e7094cee minor cosmetic fixes
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1733 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-13 18:04:31 +00:00
David Lawrence Ramsey
1122c85e34 reformat the test programs in configure.ac to be on multiple lines for
greater readability, and remove unnecessary inclusion of stdio.h in the
slang tests


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1732 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-13 17:46:57 +00:00
David Lawrence Ramsey
8d3e7f3217 add support for Pico's ability to justify the entire file at once ("full
justify", accessible via ^W^J)


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1731 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-13 17:28:03 +00:00
David Lawrence Ramsey
9830d7500f add isblank() equivalent and use it instead of checking for (tab or
space) all over the code, properly detect whether we have strcasestr()
and only use nstristr() if we don't, and bump up CVS build requirements
to account for setting _GNU_SOURCE when running the test programs for
both


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1730 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-13 17:19:54 +00:00
David Lawrence Ramsey
71d0a1fab3 nanorc.sample updates: add missing mouse entry, and add backupdir and
mouse entries to the nanorc sample regexes


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1729 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-08 00:06:15 +00:00
David Lawrence Ramsey
2c4c788477 fix more info page inaccuracies
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1728 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-07 18:00:20 +00:00
David Lawrence Ramsey
5aa39834aa disable "Where Is Next" in tiny mode
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1727 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-05 21:36:50 +00:00
David Lawrence Ramsey
a849ab12ea fix minor inconsistency
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1726 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-01 04:13:06 +00:00
David Lawrence Ramsey
0381c2199d clarifications to comments explaining exactly what control characters
and escape sequences are supported


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1725 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-05-01 01:21:38 +00:00
David Lawrence Ramsey
4b741b9c7b add DB's overhaul of regexp_init() and a few other regex-related bits,
and convert REGEXP_COMPILED to a static int in search.c, since it's only
used there


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1724 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-04-30 19:40:03 +00:00
David Lawrence Ramsey
d893fa946d add restricted mode, per IO ERROR's patch
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1723 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-04-30 04:49:02 +00:00
David Lawrence Ramsey
e5b2f83031 in edit_add(), do minor cosmetic reformatting and remove unused int
searched_later_lines


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1722 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-04-29 06:30:36 +00:00
David Lawrence Ramsey
d62b63492a remove another unused prototype
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1721 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-04-28 21:49:30 +00:00
David Lawrence Ramsey
b88234049d spell Christian Weisgerber's name right
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1720 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-04-27 21:06:11 +00:00
David Lawrence Ramsey
dc35cb8e16 use napms() instead of nanosleep(), as it does the same thing (aside
from taking an argument in milliseconds instead of microseconds) and
curses includes it


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1719 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-04-24 18:30:23 +00:00
David Lawrence Ramsey
0a25808f34 work around the NumLock glitch
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1718 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-04-23 18:02:37 +00:00
David Lawrence Ramsey
805547fed0 make the verbatim and escape sequence input routines use size_t's to
hold lengths, and use a properly cast nrealloc() instead of an uncast
realloc() in the former


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1717 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-04-22 03:41:04 +00:00
David Lawrence Ramsey
45108343c8 cosmetic changelog fix
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1716 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-04-21 23:04:55 +00:00
David Lawrence Ramsey
f38230ae6d a few more minor cleanups
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1715 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-04-21 22:25:16 +00:00
David Lawrence Ramsey
9be546b2f3 fix info page inaccuracies
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1714 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-04-20 19:19:21 +00:00
David Lawrence Ramsey
604caf3d6c DB's changes to do_delete(), and a few more minor bits
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1713 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-04-19 02:44:13 +00:00
David Lawrence Ramsey
07d3febe1b remove apparently unneeded leaveok() calls per DB's patch, and make a
few cosmetic cleanups


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1712 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-04-16 05:15:11 +00:00
David Lawrence Ramsey
e1e7cb250e fix debugging output in get_verbatim_kbinput()
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1711 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-04-15 06:15:55 +00:00
David Lawrence Ramsey
edc1ea4c16 wrong place; signal_init() should be called after the input mode (cbreak
or raw) is set in order to work properly; also clarify related comments


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1710 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-04-07 01:07:50 +00:00
David Lawrence Ramsey
d7db0a6dbf the signal_init() should be called before the other input mode-changing
code in handle_sigwinch()


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1709 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-04-07 00:51:41 +00:00
David Lawrence Ramsey
5520e85ee4 make sure the special control keys are handled the same way after a
continue or a window resize


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1708 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-04-07 00:44:35 +00:00
David Lawrence Ramsey
a3370c4232 miscellaneous fixes
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1707 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-04-05 01:08:14 +00:00
David Lawrence Ramsey
befb25a4e6 Back to CVS
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1706 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2004-03-31 18:53:07 +00:00
30 changed files with 7522 additions and 3909 deletions

760
ChangeLog
View File

@@ -1,3 +1,751 @@
GNU nano 1.3.4 - 2004.08.17
- General:
- More minor comment cleanups. (DLR)
- Convert more ints and functions using 0 and 1 to bools using
TRUE and FALSE. (David Benbennick and DLR)
- Change more instances of ints that have large enough upper
bounds and which can never be negative to size_t's, and
convert nano to handle them properly. (DLR)
- Convert the shortcut list functions and most related functions
to return void instead of int, as the return values of all
those functions are essentially unused. Changes to
sc_init_one(), shortcut_init(), etc. (David Benbennick and
DLR)
- Make flags and all variables meant to store the value of flags
longs for consistency. (David Benbennick)
- Rename the TEMP_OPT flags to TEMP_FILE, as it's more
descriptive. (DLR)
- Remove unused global variable search_offscreen. (David
Benbennick)
- Add new N_() macro to mark strings that aren't translated
immediately, and convert nano to use it in cases where the
translated string is stored in a const char*. Changes
to sc_init_one(), print1opt(), help_init(), rcfile_error(),
do_credits(), etc. (David Benbennick) DLR: Do this for
toggle_init_one() too.
- Minor tweaks and clarifications to some option descriptions.
(DLR)
- Overhaul the shortcut list and toggle list initialization
code for efficiency. Changes to shortcut_init() and
toggle_init(). (David Benbennick) DLR: Move "Cancel" to just
after "Get Help" in the file browser list, for consistency
with all the other lists, have the replace list accept all the
same function keys as the search list, and clarify a few
shortcut descriptions.
- Convert nano to use the new parse_num() function to read in
numeric values at the command line and in the rcfile, and
duplicate the messages used in the rcfile in the command line
for consistency. (David Benbennick) DLR: Tweak parse_num() to
parse ssize_t values instead of ints and to return a bool
indicating whether parsing succeeded. Convert tabsize,
wrap_at, and fill to ssize_t in order to work with
parse_num() properly and also to increase their capacity
while keeping the ability to hold negative numbers in case of
errors. Also exit instead of calling usage() in the event of
an invalid fill value, for consistency with how an invalid
tabsize value is handled. Finally, handle invalid tabsize
entries in the rcfile the same way as on the command line,
and reset tabsize and wrap_at to their default values if
invalid rcfile entries are specified for them.
- Remove several unnecessary reset_cursor() calls. (David
Benbennick)
- Include <sys/types.h> in proto.h. (David Benbennick) DLR:
Remove some redundant inclusions of <sys/types.h> elsewhere.
- Move the main terminal initialization functions, aside from
initscr(), into a new terminal_init() function, and convert
nano to use it. (DLR)
- Convert placewewant to a size_t, and convert some functions
that use it as a parameter to use size_t as well. (David
Benbennick and DLR)
- Overhaul the paragraph searching code and some of the justify
code to clarify it and fix a bug where searches from the
previous paragraph would move up too far. Also make
quotestr-related variables global so that they only have to be
compiled once, and remove the no-longer-needed IFREG() macro.
New functions begpar() and inpar(); changes to quote_length(),
quotes_match(), do_para_search(), do_para_begin(),
do_para_end(), and do_justify(). (David Benbennick)
- Readded the errors flag and moved the ending prompt from
rcfile_error() to parse_rcfile() so that we only get prompted
once for all errors instead of separately for each error.
(DLR) David Benbennick: Make sure that no rcfile error
messages end in newlines, and show the ending prompt if we
can't read the .nano_history file while starting nano.
- Don't treat the return value of strn?(case)?cmp() as boolean.
(DLR and David Benbennick)
- Automatically install a symlink "rnano" pointing to nano.
Changes to src/Marefile.am. (DLR)
- Move the static int pid to the beginning of nano.c with all
the other static variables. (DLR)
- Consolidate some if blocks to remove some redundant code.
(David Benbennick)
- Fix warnings when compiling with ENABLE_NLS undefined and with
-the fwritable-strings option. (David Benbennick)
- Add various #ifdefs to fix warnings and compilation problems
when compiling with every option manually turned on, including
NANO_SMALL. (David Benbennick)
- Simplify some of the rcfile and statusbar error messages, and
make some of them more consistent. (David Benbennick and DLR)
- Change some functions to take const char*'s instead of char*'s
where possible. (David Benbennick)
- Tweak some #ifdefs around indent_length() and references to
fill_flag_used to avoid warnings when compiling with
--disable-wrapping, --disable-justify, or a combination of the
two. (DLR)
- Overhaul the routines used to read the rcfiles and history
files for efficiency, make them work properly on lines over
1023 characters long and on lines containing nulls, and make
them properly handle the case where the user's home directory
changes in the middle of a session. New functions
histfilename() and writehist(); changes to
thanks_for_all_the_fish(), load_history(), save_history(), and
do_rcfile(). (David Benbennick)
- files.c:
get_next_filename()
- Tweak for efficiency, and add the ".save" suffix to the file
here. (David Benbennick)
close_open_file()
- Tweak to no longer rely on the return values of
open_(prev|next)file(). (DLR)
write_file()
- For consistency with nano 1.2.x and with other editors, make
the mode of newly created files 666 instead of 600 before
it's modified by the umask. (DLR)
do_writeout()
- If we're in restricted mode and the current filename isn't
blank, we can't change it, so disable tab completion in that
case. (DLR)
- Fix spacing problem in the "Save Under Different Name"
prompt. (DLR)
- global.c:
shortcut_init()
- Fix erroneous #ifdef so that nano compiles with
--disable-justify again. (DLR, found by Mike Frysinger)
- Change the Cancel shortcut in the file browser to an Exit
shortcut, to be more compatible with the current version of
Pico. (DLR)
thanks_for_all_the_fish()
- Delete topwin, edit, and bottomwin. (David Benbennick)
- nano.c:
die()
- Don't add the ".save" suffix to a saved file here anymore,
since get_next_filename() does that now. (David Benbennick)
die_save_file()
- Tweak for efficiency. (David Benbennick)
help_init()
- Fix the display of the translated key descriptions "Up" and
"Space" under all circumstances, and make the help browser
work properly when there are fewer than 24 columns available.
(David Benbennick)
usage()
- Don't translate the option strings for -Z/--restricted.
(David Benbennick)
do_enter()
- Don't treat it as a special case when the user presses Enter
on the last line of the screen and smooth scrolling is on, for
consistency. (DLR)
do_alt_speller()
- When reloading the newly spell-checked temporary file, call
terminal_init() to make sure that all the original terminal
settings are restored, as a curses-based alternative spell
checker (e.g. aspell) can change them. (DLR)
quote_length()
- Fix problem where quoted justify wouldn't work if HAVE_REGEX_H
wasn't set. (David Benbennick)
do_justify()
- Add allow_respacing flag, used to indicate when we've moved to
the next line after justifying the current line, and only run
the respacing routine when it's true. This keeps the
respacing routine from erroneously being run more than once on
the same line. (DLR)
- Check for first_par_line's not being NULL and only run the
renumbering and cutbuffer-splicing routines depending on that
if that's the case. This fixes a segfault occurring when
trying to do full justification on a file with no paragraphs
(in which case there are no normal lines to renumber and no
backed-up lines to be stored in the cutbuffer or spliced back
in during unjustify). (DLR)
do_exit()
- Tweak for efficiency. (David Benbennick)
main()
- Move the reset_cursor() call to the beginning of the main
input loop, and remove the apparently unnecessary wrefresh()
call. (David Benbennick)
- Call setlocale() outside the ENABLE_NLS #ifdef, since UTF-8
support won't work properly if the locale isn't set, whether
NLS is enabled or not. (Junichi Uekawa)
- Add titlebar() calls before all open_file() calls and remove
the titlebar() call after them, so that the titlebar is
displayed properly for all file(s) loaded. Also call
display_main_list() after adding the first file to open_files,
so that "Close" is properly displayed then instead of "Exit".
(DLR)
- nano.h:
- Reassign the key for full justification to Ctrl-U, for
compatibility with the current version of Pico. (DLR)
- Remove justbegend enum, as it's no longer needed. (DLR)
- proto.h:
- Change the variables in the prototypes for do_justify(),
get_verbatim_kbinput(), and get_mouseinput() to match the ones
used in the actual functions. (DLR)
- Remove unused declaration of temp_opt. (David Benbennick)
- Add missing copy_file() prototype. (David Benbennick)
- Move the load_history() and save_history() prototypes up to
match their corresponding location in files.c. (DLR)
- rcfile.c:
rcfile_msg()
- Removed and replaced with calls to rcfile_error(). (David
Benbennick)
- Removed the reference to "starting nano" in the statusbar
message, as it may be called when we exit if the history file
can't be saved. (DLR)
parse_rcfile()
- Have whitespace display default to off instead of on. (Mike
Frysinger)
nregcomp()
- Rename the variable flags to eflags so as not to conflict with
the global flags. (DLR)
- search.c:
do_replace_loop()
- Make sure old_pww is updated to the current value of
placewewant when a new match is found, so that edit_redraw()
will redraw the screen properly when only placewewant changes.
(DLR, found by Mike Frysinger)
do_replace()
- Instead of using edit_update() to redraw the screen with
edittop at the top, set edittop beforehand and call
edit_refresh(). (DLR)
do_gotoline()
- Use parse_num() to interpret a line entered by the user, and
start the search for a line from current instead of fileage.
(DLR)
do_gotopos(), find_node(), free_history()
- Tweak for efficiency. (David Benbennick)
free_history()
- Only include when DEBUG is defined. (David Benbennick)
- utils.c:
parse_num()
- New function to parse numeric values, so that we don't have to
duplicate code that calls strtol() all over the place. (David
Benbennick) DLR: Renamed from parse_int() to parse_num() and
converted to use ssize_t instead of int.
nstrnicmp()
- Remove code chacking for n's being less than 0 that will never
be run, since n is a size_t and is hence unsigned. (David
Benbennick)
ngetdelim(), ngetline()
- New functions equivalent to getdelim() and getline(), which
are both GNU extensions. (DLR, adapted from GNU mailutils
0.5 with minor changes to better integrate with nano and
increase efficiency)
- winio.c:
get_kbinput()
- Since the only valid values for escapes are 0, 1, and 2,
convert it to an int. (DLR)
get_control_kbinput()
- Fix erroneous debugging statement so that nano compiles with
--enable-debug again. (Jon Oberheide)
nanogetstr()
- Tweak the code to update the edit window just before getting
statusbar input for efficiency, and update bottomwin just
before then too. (David Benbennick)
- Don't delete the statusbar line on UnCut, since the current
version of Pico doesn't. (DLR)
do_cursorpos()
- Add assert to check whether totsize is correct. (David
Benbennick)
line_len()
- Rename to help_line_len() so as not to conflict with the
line_len variable used elsewhere, and move inside the
DISABLE_HELP #ifdef surrounding do_help() since it's only
called in do_help(). (DLR)
do_help()
- Have help_line_len() properly return an int again, since its
value can't be larger than COLS. (DLR)
- Allow the user to exit the help browser via Ctrl-C as well as
Ctrl-X, for consistency with the file browser. (DLR)
- configure.ac:
- Add AC_PROG_LN_S, so that we can portably create symlinks.
(DLR)
- Check for getdelim() and getline(), which are both GNU
extensions. (DLR)
- nanorc.sample:
- Add sample regexes for patch files. (Mike Frysinger)
- Various improvements to the "c-file" regexes. Add double,
typedef, extern, union, unsigned, inline, and long to the
green list. (Mike Frysinger) DLR: Also add signed, short, and
enum to the green list.
- nano.spec.in:
- Tweak to include all files in %{_bindir} instead of just nano,
so that the "rnano" symlink will be properly packaged. (DLR)
GNU nano 1.3.3 - 2004.06.28
- General:
- Minor comment cleanups. (DLR)
- Convert more ints used as boolean values to use TRUE and
FALSE. (David Benbennick)
- Make sure the special control keys are handled the same way
after the window is resized or we come out of suspend mode.
Changes to do_cont() and handle_sigwinch(). (DLR)
- Change some instances of ints that can never be negative to
size_t's. (DLR)
- Add better explanations for and in the "Terminal breakage"
comments, and handle missing key #ifdefs inside the functions
that use those keys. (DLR)
- Add restricted mode, accessible via the -Z/--restricted
command line option or by invoking nano with any name
beginning with 'r' (e.g. "rnano"). In restricted mode, nano
will not read or write to any file not specified on the
command line, read any nanorc files, allow suspending, or
allow a file to be appended to, prepended to, or saved under a
different name if it already has one. (IO ERROR) DLR: Also
disable backup files and spell checking (since the latter can
leave a pre-spell-checked version of the file in a temporary
directory), use tail() to get the program name so that the
check for its beginning with 'r' will work when a path is
specified, disable toggles that are only useful with options
that are disabled in restricted mode, call nano_disabled_msg()
when trying to read or spell check a file instead of leaving
the shortcuts out of the main list, and instead of acting as
though TEMP_OPT is enabled when exiting with a modified file
(which caused problems if the filename was blank), only allow
a filename to be modified at the writeout prompt if it's blank
beforehand. Changes to do_writeout(), toggle_init(),
shortcut_init(), die_save_file(), and nanogetstr().
- Call nano_disabled_msg() directly from the shortcut list
instead of inside the disabled functions. (David Benbennick)
- Clarifications to comments explaining exactly what control
characters and escape sequences are supported. (DLR)
- Disable "Where Is Next" in tiny mode. (DLR)
- Added the ability to justify the entire file at once, which
Pico has via ^W^J. Changes to backup_lines() and
do_justify(); new functions do_justify_void() and
do_full_justify(). (DLR)
- Modify the justification algorithm to work the same way as in
the current version of Pico, i.e, add a space at the end of
each line of the justified paragraph except for the last one,
and if there was a space at the end of the last one, remove
it. Changes to justify_format() and do_justify(). Note that
we can no longer reliably detect the first modified line in a
paragraph, since a line unmodified by justify_format() may get
a space tacked onto the end of it or removed from the end of
it later. The entire original paragraph is now always backed
up, and justify_format() no longer has a non-modifying mode,
so it's now only called in backup_lines(). (DLR)
- Wrap the long jump code in NANO_SMALL #ifdefs, since we only
use it if we're resizing the window, which is disabled when
NANO_SMALL is defined. (DLR)
- Add smart home key option, accessible via -A/--smarthome on
the command line, "set smarthome" in the rcfile, and the
Meta-H toggle in the edit window. Smart home works as
follows: When Home is pressed anywhere but at the very
beginning of non-whitespace characters on a line, the cursor
will jump to that beginning (either forwards or backwards).
If the cursor is already at that position, it will jump to the
true beginning of the line. This option is disabled in tiny
mode. Changes to do_home(), nanogetstr(), etc. (DLR;
suggested by Stephan T. Lavavej)
- Minor tweaks to the punctuation in some statusbar messages.
(DLR)
- Overhaul the low-level input routines into main routines that
actually get the input and state machines that interpret the
input. This allows better handling of the input (e.g. ignored
keys are now always ignored instead of just being ignored when
there are no escapes prefixing them) and will make it easier
to port to interfaces that don't have blocking input. New
functions reset_kbinput(), get_translated_kbinput(),
get_control_kbinput(), and get_untranslated_kbinput(); changes
to do_verbatim_input(), handle_sigwinch(), get_kbinput(),
get_ascii_kbinput(), get_escape_seq_kbinput(), and
get_verbatim_kbinput(); removal of get_ignored_kbinput() and
get_accepted_kbinput(). (DLR)
- Overhaul all the movement functions in order to avoid
redundant screen redraws (and regexec()s when color support is
available) whenever possible during ordinary cursor movement
when the text doesn't change. Do the same for moving in
do_char(), do_delete(), do_next_word(), do_prev_word(),
do_search(), do_research(), and do_replace_loop. Changes to
do_first_line(), do_last_line(), do_home(), do_end(),
do_page_up(), do_page_down(), do_up(), do_down(), do_left(),
do_right(), do_delete(), do_backspace(), do_search(),
do_research(), do_replace_loop(), do_find_bracket(), and
edit_refresh(). New functions do_left_void(),
do_right_void(), need_horizontal_update(),
need_vertical_update(), edit_scroll(), and edit_redraw(). All
of these functions but the first two require the previous
versions of current and/or placewewant as parameters, so that
they can redraw properly when the location has changed. Also
rename the int refresh in do_delete() and do_backspace() to
do_refresh so as not to conflict with refresh(). (DLR)
- Add some comments better explaining what is disabled in
restricted mode and why. (DLR)
- Since KEEP_CUTBUFFER is only used in cut.c, make it a static
variable in cut.c instead of a flag, and unset it in other
files via the new function cutbuffer_reset(). (DLR)
- Add the ability to change the characters used to display the
beginning characters of tabs and spaces via the rcfile entry
"whitespace". This is disabled if nanorc support is disabled
or if we're in tiny mode. Displaying the new characters is
toggled on and off by Meta-P; the default is on. (Mike
Frysinger; minor changes and adaptations by DLR)
- Add the ability to change the closing punctuation and closing
brackets used to control justification, via the rcfile
entries "punct" and "brackets". (DLR)
- Translation updates (see po/ChangeLog for details).
- Make the former flag same_line_wrap use TRUE and FALSE
instead of 1 and 0. (DLR)
- files.c:
add_open_file()
- Rearrange the NANO_SMALL #ifdef so that the code to set the
MODIFIED flag in open_files->flags is included only once.
(DLR)
write_marked()
- Call write_file() with nonamechange set to TRUE so that we
don't erroneously change the current filename when writing a
selection, and don't take a nonamechange parameter anymore
since we don't use it. (DLR)
do_writeout()
- Refactor so that no recursion is needed if we try to exit with
a modified file that has no name when TEMP_OPT is set. (DLR)
- Add spaces to the ends of the "Overwrite" and "Different Name"
prompts, for consistency. (DLR)
do_browser()
- Call check_statblank() instead of blanking the statusbar
unconditionally, for consistency. (David Benbennick)
- global.c:
shortcut_init()
- Don't assign any handler functions to the help browser keys,
as the help browser handles them all internally. (David
Benbennick)
- move.c:
do_first_line(), do_last_line()
- Move these functions here from winio.c. (DLR)
- nano.c:
finish()
- Call blank_statusbar() and blank_bottombars() to blank out
the statusbar and shortcut list in bottomwin. (DLR)
- Since all of the calls to finish() use 0 for the value of
sigage, and the return value of finish() is never used, make
it accept and return void. (David Benbennick)
die_save_file()
- Call write_file() with nonamechange set to TRUE since we don't
need to change the current filename if we're writing emergency
backup files. (DLR)
do_early_abort()
- Removed, as it's no longer called anywhere. (David Benbennick)
usage()
- Add missing "[dir]" and two missing _()'s around the strings
describing the -E [dir]/--backupdir=[dir]" option. (CHAO
Wei-Lun)
open_pipe()
- Call enable_signals() at the beginning and disable_signals()
at the end, so that we get a SIGINT when Ctrl-C is pressed
during wait() and can then call cancel_fork() properly. (DLR)
do_delete(), do_enter()
- Tweak for efficiency. (David Benbennick)
do_prev_word()
- Switch the last test (current != NULL or not) around to match
the order of the same test in do_next_word() (current ==
NULL). The results are the same either way. (DLR)
do_wrap()
- Tweak for efficiency. (David Benbennick)
do_spell()
- Tweak for efficiency. (David Benbennick)
- Change the statusbar entries used in cases of failure so that
they all display the actual error that occurred. (David
Benbennick and DLR)
do_int_speller(), do_alt_speller()
- Make these functions return const char*'s instead of char*'s.
(David Benbennick)
justify_format()
- Remove redundant assignment. (DLR)
do_para_search()
- Remove unneeded edit_update() calls. (David Benbennick)
- Convert to use an enum to specify the search type: JUSTIFY,
BEGIN, or END. (DLR)
- Refactor to properly do searches for beginnings of paragraphs
in the same way as searches for endings of paragraphs, without
needing the old (and somewhat inaccurate) recursive approach.
(DLR)
do_justify()
- Remove unneeded edit_update() calls, and add a few minor
efficiency tweaks. (David Benbennick)
- Simplify an if statement. (DLR)
do_exit()
- Refactor so that no recursion is needed if we try to exit with
a modified file that has no name when TEMP_OPT is set. (DLR)
print_numlock_warning()
- Removed, as it's no longer needed and was never called
anywhere after the input overhaul. (DLR)
signal_init()
- Don't use termios and _POSIX_VDISABLE to disable keys anymore,
as there's no real equivalent of it when the latter isn't
defined. (DLR)
handle_sigwinch()
- Call resetty() to get the original terminal settings back.
(DLR)
- Rework so that nano properly redraws the screen on systems
that don't have resizeterm() and/or wresize(). In curses, we
now leave and immediately reenter curses mode via endwin() and
refresh(), and then reinitialize all windows via
window_init(). In slang, the above routine will only work if
the resize made the window smaller, so we now leave and
immediately reenter screen management mode via
SLsmg_reset_smg() and SLsmg_init_smg(), and then reinitialize
all windows via window_init(). (DLR, adapted from code in
Minimum Profit 3.3.0 and mutt 1.4.2.1, respectively)
do_toggle()
- Call blank_statusbar() and blank_bottombars() to blank out
the statusbar and shortcut list in bottomwin. (DLR)
do_verbatim_input()
- If PRESERVE is set, disable flow control characters before
getting input and reenable them after getting input. (DLR)
disable_signals(), enable_signals(), disable_flow_control(),
enable_flow_control()
- New functions that allow more fine-grained control of the
terminal: disabling and enabling signals without having to use
_POSIX_VDISABLE and disabling and enabling flow control
characters. (DLR)
main()
- Don't open the first file in quiet mode, since if we do, an
error message won't be shown if it's unreadable. (DLR; found
by Jaap Eldering)
- If we've specified multiple files on the command line and
multibuffer support is compiled in, turn multibuffer mode on
when reading those files and turn it off afterward if it was
off before. This allows us to open multiple files without
having to turn multibuffer mode on at the command line or in
the nanorc first, both of which are unintuitive. Multibuffer
mode should only affect how the "Read File" command behaves
anyway. (DLR)
- Remove the disabling of implementation-defined input
processing, as cbreak mode appears to turn it off anyway.
(DLR)
- After noecho(), call disable_signals() and
disable_flow_control(), the latter only if PRESERVE is not
set. (DLR)
- Move the savetty() call down from just after initscr() to just
after the terminal is properly set up, so that we can restore
it easily after a resize. (DLR)
- Add missing cast to char when calling do_char(). (DLR)
- Don't initialize the backup directory if we're in restricted
mode, since backups are disabled then. (DLR)
- Check $SPELL for an alternative spell checker if we didn't get
one from the command line and/or rcfile, as Pico does. Don't
do this if we're in restricted mode, since spell checking is
disabled then. (DLR)
- Add some cleanups for greater readability, and remove a few
bits of redundant code. (DLR and David Benbennick)
- nano.h:
- Since REGEXP_COMPILED is only used in search.c, convert it
from a flag to a static int there. (DLR)
- Add justbegend enum, used in do_para_search(). (DLR)
- Add updown enum, used in edit_scroll(). (DLR)
- proto.h:
- Remove unused xpt() and add_marked_sameline() prototypes.
(DLR)
- Add missing #ifdefs around the nstristr() and get_mouseinput()
prototypes. (DLR)
- rcfile.c:
- Move "rebinddelete" up in the list of options so that the list
is in alphabetical order. (DLR)
- Cosmetic reorganization of the order in which some options are
interpreted. (DLR)
- Explicitly check for rcopts[i].name's being "tabsize" to avoid
a spurious error under some circumstances about tabsize's
being 0 when there's no tabsize entry in the rcfile. (DLR)
- search.c:
regexp_init()
- Overhaul for efficiency. Also check if regcomp() failed, and
if so, display "Bad regex" message on the statusbar, so that
we don't have to display it separately after every call to
this function. (David Benbennick)
search_init()
- Only check whether USE_REGEXP is set, and hence whether or not
to display "[Regexp]" on the search prompt, if HAVE_REGEX_H is
defined. (DLR)
not_found_msg()
- Convert to properly handle strings generated by
display_string() that have been used in the search prompt
since 1.3.0. (David Benbennick)
- Use display_string() directly to display the text that we
didn't find instead of relying on statusbar() to do it
indirectly, since the latter won't display its text with the
user-specified whitespace characters and the former will.
(DLR)
- utils.c:
is_blank_char()
- New function used as an isblank() equivalent, since isblank()
is a GNU extension. (DLR)
nstricmp(), nstrnicmp()
- Add extra blank lines for greater readability, and remove
unneeded test for n's being less than zero (since it's already
been tested for being greater than zero or equal to zero at
that point) from nstrnicmp(). (DLR)
stristr()
- Rename to nstristr() to avoid a potential conflict with an
existing stristr() function, and move up to just after
nstrnicmp(). (DLR) David Benbennick: Tweak for efficiency.
- Include and use only when strcasestr() is unavailable, since
strcasestr() is a GNU extension. (DLR)
nstrnlen()
- New function used as a strnlen() equivalent, since strnlen()
is a GNU extension. (DLR)
- winio.c:
get_verbatim_kbinput()
- Refactor the output in the DEBUG #ifdef. It didn't work
properly ever since this function was changed to use an int*
instead of a char*. (DLR)
- When reading characters from input, properly reallocate
verbatim_kbinput via (int*)nrealloc() instead of an uncast
realloc(). (DLR)
get_accepted_kbinput()
- Add proper support for the keypad values and escape sequences
generated by the NumLock glitch and by certain keys on the
numeric keypad. (DLR)
- Add an extra break and move an #endif down to fix a potential
problem when NANO_SMALL is defined or KEY_RESIZE isn't, and
when PDCURSES isn't defined. (DLR)
get_escape_seq_kbinput()
- Add proper support for the keypad values and escape sequences
generated by the NumLock glitch. (DLR)
- Add ignore_seq parameter. If a sequence is recognized but
ignored, we will now return ERR and set ignore_seq to TRUE, and
if a sequence is unrecognized, we will now return ERR and set
ignore_seq to FALSE. Also, here and elsewhere, don't bother
assigning ERR to retval when that's its initial value. (DLR)
- Fix problem where the escape sequence for F3 on the FreeBSD
console would not be interpreted properly. (DLR)
get_mouseinput()
- Don't ungetch() anything if there's no control key and no meta
key defined in the shortcut we clicked. (DLR)
bottombars()
- Don't display any more than MAIN_VISIBLE shortcuts. Adding
justification of the entire file above made the search
shortcut list longer than this and hence made the shortcuts in
it so short as to be almost incomprehensible. (DLR)
- Tweak for efficiency and to better handle shorter screen
widths. (David Benbennick)
- Restructure the if block used for the sentinel key values,
dynamically allocate keystr based on the number of columns
available, and make sure we can display shortcuts even when
the number of available columns is too short for any complete
one. (DLR)
onekey()
- Don't bother padding the displayed shortcuts with spaces.
(David Benbennick)
- Convert len to a size_t. (DLR)
edit_add()
- Minor cosmetic reformatting. Also remove unused int
searched_later_lines. (DLR)
blank_bottomwin()
- Removed, as it does the same thing as blank_bottombars().
(David Benbennick)
blank_titlebar()
- New function used to blank the titlebar in topwin. (DLR)
blank_statusbar_refresh()
- Removed, as it's now unnecessary. (David Benbennick)
titlebar()
- Overhaul to use display_string() to display the filename, and
to better handle shorter screen widths. Also remove
now-unneeded wrefresh(topwin) calls. (David Benbennick)
DLR: Tweak to reserve enough space for "Modified", plus
padding, in all cases, to make sure that the version message
takes up no more more than 1/3 of the available width, minus
padding, and to include a reset_cursor() call so that the
cursor is always in the right place.
bottombars()
- Call blank_bottombars() instead of blank_bottomwin(). (David
Benbennick)
check_statblank()
- Overhaul for efficiency, (David Benbennick) DLR: Add
reset_cursor() call to ensure that the cursor is always in the
right place.
update_cursor()
- Removed, as it's no longer called anywhere. (David Benbennick)
edit_refresh()
- Remove apparently unneeded leaveok() calls. (David Benbennick)
edit_refresh_clearok(), center_cursor()
- Removed, as they are now unnecessary. (David Benbennick)
statusq()
- Don't allow "Full Justify" when in view mode. (DLR)
statusbar()
- Call reset_cursor() just before refreshing the edit window, so
that slang and other non-ncurses versions of curses will
properly place the cursor back in the edit window instead of
leaving it at the end of the statusbar. (DLR)
do_help()
- Overhaul for efficiency, and allow scrolling through the help
via the arrow keys as well as the paging keys. (David
Benbennick) DLR: Revert the use of the return value of
curs_set() to restore the previous state of the cursor, as
some curses implementations (including slang) get it wrong,
and explicitly turn the cursor off where needed instead.
do_credits()
- Use napms() instead of nanosleep(), as it does the same thing
(aside from taking an argument in milliseconds instead of
microseconds) and curses includes it. (DLR)
- Overhaul for efficiency, and make sure the xlcredits
translations are done after initialization in order to avoid
an error when compiling with -pedantic. (David Benbennick)
do_yesno()
- Add a comment to encourage translators to use both native and
English shortcuts, if possible. (Jordi)
- configure.ac:
- Add tests for isblank(), strcasestr(), and strnlen(), and
define _GNU_SOURCE so that the tests work properly. Increase
the minimum required autoconf version to 2.54. (DLR)
- Reformat the test programs so that they aren't packed into
fewer lines than usual, so as to make them easier to read, and
remove unnecessary inclusion of stdio.h in the slang test
programs. (DLR)
- Remove the checks for resizeterm() and wresize(), as they're
no longer needed. (DLR)
- config.rpath:
- Replace usage of egrep with grep -E, avoiding a XSI:ism (David
Weinehall)
- faq.html:
- Removed question about the NumLock glitch, as it's no longer
needed. (DLR)
- nano.1:
- Document restricted mode. (IO ERROR) DLR: Add minor
modifications to account for the above changes.
- Document the smart home key option. (DLR)
- Document the use of the SPELL environment variable. (DLR)
- nanorc.5:
- Document the smart home key option. (DLR)
- Document the whitespace option. (DLR, adapted from
documentation by Mike Frysinger)
- Document the punct and brackets options. (DLR)
- nano.texi:
- Fix toggle inaccuracies: Meta-L now toggles line wrapping, and
Meta-< and Meta-> aren't toggles. (DLR)
- Document restricted mode. (IO ERROR) DLR: Add minor
modifications to account for the above changes.
- Fix version number inaccuracies: Search/replace history and
sorting/uniqueness filtering for the internal spell chacker
were added in nano 1.1.99pre1. (DLR)
- Document the smart home key option. (DLR)
- Document the use of the SPELL environment variable. (DLR)
- nanorc.sample:
- Add missing mouse entry, and update the nanorc sample regexes
to account for the backupdir and mouse options. (DLR)
- Add smarthome description. (DLR)
- Document the whitespace option. (DLR, adapted from
documentation by Mike Frysinger)
- README.CVS:
- Increase the minimum required autoconf version to 2.54, and
change the recommended automake version 1.7 to the minimum
required automake version. Note that autoconf 2.54 will
technically also work with automake 1.6c, but that is a CVS
version as opposed to a stable release version, and automake
1.7 requires at least autoconf 2.54 in any case. (DLR)
- TODO:
- Added entry for justifying the entire file at once, since Pico
can do it, and with "[DONE]" since it's already been
implemented. (DLR)
GNU nano 1.3.2 - 2004.03.31
- General:
- Change instances in the code that refresh the entire edit
@@ -37,7 +785,7 @@ GNU nano 1.3.2 - 2004.03.31
the value of def; if the realloc() of answer leads to its
pointing to a different memory block, there will be a segfault
when the value of def is copied into it via strcpy().
(bort@alltel.net, Christian Weisgarber, David Benbennick, and
(bort@alltel.net, Christian Weisgerber, David Benbennick, and
DLR)
- Remove the last editbot references, to avoid any potential
segfaults related to them. Also remove fix_editbot(), as it's
@@ -174,9 +922,9 @@ GNU nano 1.3.2 - 2004.03.31
- Fix segfault when doing a regex replace of a string that
matches inside a line (e.g. replace the "b" in "abc" with
anything). (David Benbennick)
- If the mark is on at the beginning of the functio, turn it off
and turn it back on just before returning. Also overhaul to
rely on the return value of findnextstr() instead of a loop
- If the mark is on at the beginning of the function, turn it
off and turn it back on just before returning. Also overhaul
to rely on the return value of findnextstr() instead of a loop
invariant, to not need to take an int* parameter, and store
the beginning x-coordinate in a size_t instead of an int.
(David Benbennick)
@@ -469,8 +1217,8 @@ GNU nano 1.3.0 - 2003.10.22
function do_research(). (Wouter van Hemel)
- Added the ability to move to the beginning or end of the
paragraph, which Pico has via ^W^W (previous paragraph)
and ^W^O (next paragraph). Modifications to do_justify(),
new functions do_para_operation(), do_para_begin(), and
and ^W^O (next paragraph). Changes to do_justify(); new
functions do_para_operation(), do_para_begin(), and
do_para_end(). Note that the last three functions are
disabled if justification is disabled. (DLR)
- Make sure the "historylog" option isn't included at all if

42
NEWS
View File

@@ -1,3 +1,45 @@
2004.08.17 - GNU nano 1.3.4 marches forth after a false start. This
release mainly features fixes for the bugs that crept
into the last release. Among other things, nano now
compiles again with certain options, quoted justify now
works properly on systems without regex.h, full justify
no longer segfaults when used on a file with no
paragraphs, previous paragraph searching works properly
again, tab completion is properly disabled when needed
in restricted mode, Ctrl-C is no longer disabled after
using the alternate spell checker, the permissions of a
newly created file now match those of nano 1.2.x again,
and replacing all text in a file now properly updates
the screen in all cases. New features include sample
regexes for patch files, improvements to the sample
regexes for C files, and support for strings
greater than 1023 characters and/or containing nulls in
.nano_history. Additionally, the full justify keystroke
has been changed to match current Pico, and whitespace
display mode is now turned off by default. Enjoy.
2004.06.28 - GNU nano 1.3.3 marches forth. There are several new
features in this release, including a restricted mode
that provides better security than just setting an
operating directory, the ability to justify the entire
file at once, support for a "smart" home key that can
leap from the beginning of text on a line to the true
beginning of the line (or the reverse) in one stroke,
support for specifying an alternative spell checker in
$SPELL, the ability to specify the characters used to
display spaces and tabs so that they can easily be told
apart, and the ability to specify the characters marking
the ends of sentences as used in justification. There
are also several bug fixes; among other things,
justification now keeps spaces at the ends of all but
the last line of a paragraph as Pico does, saving a
marked selection no longer changes the current filename
to the filename the selection was saved under, resizing
now works better and no longer corrupts the screen under
slang, and the movement functions now avoid doing
unnecessary redraws and hence work faster. In short,
there are a lot of new things to play with. Enjoy.
2004.03.31 - GNU nano 1.3.2 is prepared for the void. New features in
this release include the ability to spell-check only
marked text and the ability to save all backup files in

View File

@@ -7,8 +7,8 @@ more care than the official stable and unstable tarballs.
To successfully compile GNU nano from CVS, you'll need the
following packages:
- autoconf (version >= 2.52)
- automake (version >= 1.6, 1.7.x recommended)
- autoconf (version >= 2.54)
- automake (version >= 1.7)
- gettext (version >= 0.11.5)
- texinfo
- cvs

1
THANKS
View File

@@ -4,6 +4,7 @@ If we missed you here, let us know!
Sharuzzaman Ahmat Raslan <sharuzzaman@excite.com>
Malay translator
Laurentiu Buzdugan <buzdugan@voyager.net> Romanian translator
CHAO Wei-Lun <chaoweilun@pcmail.com.tw> Traditional Chinese translator
Ricardo Cárdenes Medina <ricardo@conisys.com> Spanish translator
Marco Colombo <magicdice@inwind.it> Italian translator
Karl Eichwalder <keichwa@gmx.net> German translator

1
TODO
View File

@@ -4,6 +4,7 @@ TODO file (? means the feature may be implemented, but not definitely)
For version 1.4:
- UTF-8 support.
- Support for paragraph searches. [DONE]
- Support for justifying the entire file at once. [DONE]
- Support for filename searches in the file browser.
- Undo/Redo key?
- Rebindable keys?

View File

@@ -125,7 +125,7 @@ if test "$with_gnu_ld" = yes; then
ld_shlibs=no
;;
beos*)
if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
if $LD --help 2>&1 | grep -E ': supported targets:.* elf' > /dev/null; then
:
else
ld_shlibs=no
@@ -137,9 +137,9 @@ if test "$with_gnu_ld" = yes; then
hardcode_libdir_flag_spec='-L$libdir'
;;
solaris* | sysv5*)
if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then
if $LD -v 2>&1 | grep -E 'BFD 2\.8' > /dev/null; then
ld_shlibs=no
elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
elif $LD --help 2>&1 | grep -E ': supported targets:.* elf' > /dev/null; then
:
else
ld_shlibs=no
@@ -149,7 +149,7 @@ if test "$with_gnu_ld" = yes; then
hardcode_direct=yes
;;
*)
if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
if $LD --help 2>&1 | grep -E ': supported targets:.* elf' > /dev/null; then
:
else
ld_shlibs=no

View File

@@ -19,15 +19,17 @@
#
# $Id$
AC_INIT([GNU nano], [1.3.2], [nano-devel@gnu.org], [nano])
AC_INIT([GNU nano], [1.3.4], [nano-devel@gnu.org], [nano])
AC_CONFIG_SRCDIR([src/nano.c])
AM_INIT_AUTOMAKE
AM_CONFIG_HEADER([config.h:config.h.in])
AC_PREREQ(2.52)
AC_PREREQ(2.54)
dnl Checks for programs.
AC_GNU_SOURCE
AC_PROG_CC
AC_PROG_LN_S
AC_ISC_POSIX
AC_SYS_LARGEFILE
@@ -43,7 +45,16 @@ AC_CHECK_HEADER(regex.h,
AC_TRY_RUN([
#include <sys/types.h>
#include <regex.h>
int main(void) { regex_t reg; size_t n = 1; regmatch_t r; regcomp(&reg, "\\<", 0); regexec(&reg, "", n, &r, 0); regfree(&reg); return 0; }],
int main(void)
{
regex_t reg;
size_t n = 1;
regmatch_t r;
regcomp(&reg, "\\<", 0);
regexec(&reg, "", n, &r, 0);
regfree(&reg);
return 0;
}],
AC_MSG_RESULT(no),
AC_MSG_RESULT(yes); AC_DEFINE(BROKEN_REGEXEC, 1, [Define this if your regexec() function segfaults when passed an empty string under certain conditions.])
)
@@ -199,9 +210,12 @@ AC_ARG_WITH(slang,
_libs=$LIBS
LIBS="$LIBS -lslang"
AC_TRY_RUN([
#include <stdio.h>
#include <slcurses.h>
int main(void) { SLtt_initialize(NULL); return 0; }],
int main(void)
{
SLtt_initialize(NULL);
return 0;
}],
[AC_MSG_RESULT(yes)
AC_DEFINE(USE_SLANG, 1, [Define to use the slang wrappers for curses instead of native curses.])
slang_support=yes
@@ -221,9 +235,12 @@ int main(void) { SLtt_initialize(NULL); return 0; }],
AC_MSG_CHECKING([for SLtt_initialize in -lslang $tcap])
LIBS="$LIBS $tcap"
AC_TRY_RUN([
#include <stdio.h>
#include <slcurses.h>
int main(void) { SLtt_initialize(NULL); return 0; }],
int main(void)
{
SLtt_initialize(NULL);
return 0;
}],
[AC_MSG_RESULT(yes)
AC_DEFINE(USE_SLANG, 1, [Define to use the slang wrappers for curses instead of native curses.])
slang_support=yes
@@ -238,9 +255,12 @@ int main(void) { SLtt_initialize(NULL); return 0; }],
AC_MSG_CHECKING([for SLtt_initialize in -lslang $tcap -lm])
LIBS="$LIBS -lm"
AC_TRY_RUN([
#include <stdio.h>
#include <slcurses.h>
int main(void) { SLtt_initialize(NULL); return 0; }],
int main(void)
{
SLtt_initialize(NULL);
return 0;
}],
[AC_MSG_RESULT(yes)
AC_DEFINE(USE_SLANG, 1, [Define to use the slang wrappers for curses instead of native curses.])
slang_support=yes
@@ -270,7 +290,7 @@ AC_MSG_WARN([*** Can not use slang when cross-compiling])),
esac], [AC_MSG_RESULT(no)])
dnl Checks for functions
AC_CHECK_FUNCS(snprintf vsnprintf strcasecmp strncasecmp)
AC_CHECK_FUNCS(snprintf vsnprintf isblank strcasecmp strncasecmp strcasestr strnlen getline getdelim)
if test "x$ac_cv_func_snprintf" = "xno" -o "xac_cv_func_vsnprintf" = "xno"
then
AM_PATH_GLIB_2_0(2.0.0,,
@@ -326,10 +346,6 @@ fi
AC_CHECK_LIB([$CURSES_LIB_NAME], use_default_colors, AC_DEFINE(HAVE_USE_DEFAULT_COLORS, 1, [Define this if your curses library has the use_default_colors command.]))
if test x$slang_support != xyes; then
AC_CHECK_LIB([$CURSES_LIB_NAME], wresize, AC_DEFINE(HAVE_WRESIZE, 1, [Define this if you have the wresize function in your ncurses-type library.]))
AC_CHECK_LIB([$CURSES_LIB_NAME], resizeterm, AC_DEFINE(HAVE_RESIZETERM, 1, [Define this if you have the resizeterm function in your ncurses-type library.]))
fi
dnl Parse any configure options

View File

@@ -38,9 +38,8 @@
<a href="#4.4">4.4. [version 1.1.12 and earlier] Why does nano show ^\ in the shortcut list instead of ^J?</a><br>
<a href="#4.5a">4.5a. [version 1.1.12 and earlier] When I type in a search string, the string I last searched for is already in front of my cursor! What happened?!</a><br>
<a href="#4.5b">4.5b. [version 1.2.2 and later] Hey, the search string behavior has reverted, it's now like Pico, what happened to the consistency?</a><br>
<a href="#4.6">4.6. I get the message &quot;NumLock glitch detected. Keypad will malfunction with NumLock off.&quot; What gives?</a><br>
<a href="#4.7">4.7. How do I make nano my default editor (in Pine, mutt, etc.)?</a><br>
<a href="#4.8">4.8. I've compiled nano with color support, but I don't see any color when I run it!</a></p></blockquote>
<a href="#4.6">4.6. How do I make nano my default editor (in Pine, mutt, etc.)?</a><br>
<a href="#4.7">4.7. I've compiled nano with color support, but I don't see any color when I run it!</a></p></blockquote>
<h2><a href="#5">5. Internationalization</a></h2>
<blockquote><p><a href="#5.1">5.1. There's no translation for my language!</a><br>
<a href="#5.2">5.2. I don't like the translation for &lt;x&gt; in my language. How can I fix it?</a></p></blockquote>
@@ -79,7 +78,7 @@
<h2><a name="1.5"></a>1.5. Why the name change from TIP?</h2>
<blockquote><p>On January 10, 2000, TIP was officially renamed to nano because of a namespace conflict with another program called 'tip'. The original 'tip' program &quot;establishes a full duplex terminal connection to a remote host&quot;, and was included with many older Unix systems (and newer ones like Solaris). The conflict was not noticed at first because there is no 'tip' utility included with most GNU/Linux distributions (where nano was developed).</p></blockquote>
<h2><a name="1.6"></a>1.6. What is the current version of nano?</h2>
<blockquote><p>The current version of nano *should* be 1.3.2. Of course you should always check the nano homepage to see what the latest and greatest version is.</p></blockquote>
<blockquote><p>The current version of nano *should* be 1.3.4. Of course you should always check the nano homepage to see what the latest and greatest version is.</p></blockquote>
<h2><a name="1.7"></a>1.7. I want to read the man page without having to download the program!</h2>
<blockquote><p>Jeez, demanding, aren't we? Okay, look <a href="http://www.nano-editor.org/dist/v1.2/nano.1.html">here</a>.</p></blockquote>
<hr width="100%">
@@ -183,10 +182,7 @@
<blockquote><p>In nano version 0.9.20, the default is to have a completely consistent user interface across all user input functions. This means that regardless of whether you're being asked for a filename to insert or write, or a string to search for, the previous value is already inserted before the cursor. If you prefer the old behavior, use the Pico emulation mode (-p or --pico) or just hit Meta-P while in nano (see the ^G help text for more details).</p></blockquote>
<h2><a name="4.5b"></a>4.5b. [version 1.2.2 and later] Hey, the search string behavior has reverted, it's now like Pico, what happened to the consistency?</h2>
<blockquote><p>It was decided that consistency was nice, but people are used to Pico's inconsistent behavior. Also, in version 1.1.99pre1, search and replace history was introduced. If you wish to edit your previous search/replace entry (or any previous entry), you can do so by hitting the up arrow to cycle through your history. This method allows the best of both worlds: You don't need to erase the previous string if you want to enter a new one, but you can with one keystroke recall previous entries for editing. Therefore there is now no "Pico mode", nano is and has always been a Pico <b>clone</b>, and clones by default should be compatible.</p></blockquote>
<h2><a name="4.6"></a>4.6. I get the message &quot;NumLock glitch detected. Keypad will malfunction with NumLock off.&quot; What gives?</h2>
<blockquote><p>Nano (and actually almost all console editors) has issues when cycling the NumLock key in certain X terminals (rxvt, aterm, wterm, etc...). When you switch NumLock from on to off, you put the terminal into an &quot;application mode&quot; that changes what sequences are sent by the keypad. These sequences vary sufficiently from terminal to terminal that it is nearly impossible to work around them from within nano.</p>
<p>In a nutshell, if you want to be able to use the keypad with the arrow and page up/down functionality, you have to exit nano and reset your terminal (presumably with &quot;reset&quot; or &quot;stty sane&quot; or similar) and then run nano again with NumLock off. If you know an easier way to restore &quot;normal mode&quot;, please mail <a href="mailto:nano@nano-editor.org">nano@nano-editor.org</a>.</p></blockquote>
<h2><a name="4.7"></a>4.7. How do I make nano my default editor (in Pine, mutt, etc.)?</h2>
<h2><a name="4.6"></a>4.6. How do I make nano my default editor (in Pine, mutt, etc.)?</h2>
<blockquote><p>You need to make nano your $EDITOR. If you want this to be saved, you should put a line like this in your <b>.bashrc</b> if you use bash (or <b>.zshrc</b> if you believe in zsh):</p>
<p><b>export EDITOR=/usr/local/bin/nano</b></p>
<p>or if you use tcsh put this in your <b>.cshrc</b> file:</p>
@@ -199,7 +195,7 @@
<p>Mutt users should see an effect immediately the next time you log in, no further configuration is needed. However, if you want to let people know you use nano to compose your email messages, you can put a line like this in your <b>.muttrc</b>:</p>
<p><b>my_hdr X-Composer: nano x.y.z</b></p>
<p>Again, replace x.y.z with the version of nano you use.</p></blockquote>
<h2><a name="4.8"></a>4.8. I've compiled nano with color support, but I don't see any color when I run it!</h2>
<h2><a name="4.7"></a>4.7. I've compiled nano with color support, but I don't see any color when I run it!</h2>
<blockquote><p>If you want nano to actually use color, you have to specify the color configurations you want it to use in your .nanorc. Some example configurations are in the <b>nanorc.sample</b> that comes with the nano source or your nano package. See Section <a href="#3.9">3.9</a>.</p></blockquote>
<hr width="100%">
<h1><a name="5"></a>5. Internationalization</h1>
@@ -241,6 +237,7 @@
<h2><a name="8"></a>8. ChangeLog</h2>
<blockquote>
<p>
2004/04/07 - Removed NumLock glitch question, as it's no longer needed. (DLR)<br>
2004/01/30 - Fixed inaccuracy: multibuffer mode was first in nano 1.1.0, not 1.1.12. (DLR)<br>
2003/12/31 - Added question about the new verbatim input function, and a few minor fixes. Removed reference to &quot;set pico&quot; (DLR).<br>
2003/07/02 - Added question about nano's not showing color when it's compiled with color support (DLR; suggested by Jordi).<br>

View File

@@ -6,7 +6,7 @@
.\" Public License for copying conditions. There is NO warranty.
.\"
.\" $Id$
.TH NANO 1 "version 1.3.2" "March 31, 2004"
.TH NANO 1 "version 1.3.4" "August 17, 2004"
.\" Please adjust this date whenever revising the manpage.
.\"
@@ -35,6 +35,13 @@ replace" and "go to line number".
.B \+\fILINE\fP
Places cursor at \fILINE\fP on startup.
.TP
.B \-A (\-\-smarthome)
Make the Home key smarter. When Home is pressed anywhere but at the
very beginning of non-whitespace characters on a line, the cursor will
jump to that beginning (either forwards or backwards). If the cursor is
already at that position, it will jump to the true beginning of the
line.
.TP
.B \-B (\-\-backup)
When saving a file, back up the previous version of it to the current
filename suffixed with a ~.
@@ -89,9 +96,16 @@ Show the current version number and author.
.TP
.B \-Y \fIstr\fP (\-\-syntax=\fIstr\fP)
Specify a specific syntax highlighting from the
.I .nanorc
.I nanorc
to use, if available.
.TP
.B \-Z (\-\-restricted)
Restricted mode: Don't read or write to any file not specified on the
command line, read any nanorc files, allow suspending, or allow a file
to be appended to, prepended to, or saved under a different name if it
already has one. Also accessible by invoking \fBnano\fP with any name
beginning with 'r' (e.g. "rnano").
.TP
.B \-c (\-\-const)
Constantly show the cursor position.
.TP
@@ -165,6 +179,10 @@ and the example file \fBnanorc.sample\fP which should be provided with
\fBnano\fP.
.SH NOTES
If no alternative spell checker command is specified on the command
line or in one of the nanorc files, \fBnano\fP will check the
\fBSPELL\fP environment variable for one.
\fBnano\fP will try to dump the buffer into an emergency file in some
cases. Mainly, this will happen if \fBnano\fP receives a SIGHUP or
SIGTERM or runs out of memory, when it will write the buffer into a file

View File

@@ -5,7 +5,7 @@
.\" Public License for copying conditions. There is NO warranty.
.\"
.\" $Id$
.TH NANORC 5 "version 1.3.2" "March 31, 2004"
.TH NANORC 5 "version 1.3.4" "August 17, 2004"
.\" Please adjust this date whenever revising the manpage.
.\"
.SH NAME
@@ -50,6 +50,10 @@ Create backup files in
\fBset backupdir "\fIdirectory\fP"\fP
Set the directory where \fBnano\fP puts the backup files if file backups
are enabled.
\fBset brackets "\fIstring\fP"\fP
Set the characters treated as closing brackets. They cannot contain
tabs or spaces. Only closing punctuation, optionally followed by
closing brackets, can end sentences.
.TP
\fBset/unset const\fP
Constantly display the cursor position in the status bar.
@@ -90,6 +94,11 @@ feature is turned off.
\fBset/unset preserve\fP
Preserve the XON and XOFF keys (^Q and ^S).
.TP
\fBset punct "\fIstring\fP"\fP
Set the characters treated as closing punctuation. They cannot contain
tabs or spaces. Only closing punctuation, optionally followed by
closing brackets, can end sentences.
.TP
\fBset quotestr "\fIstring\fP"\fP
The email-quote string, used to justify email-quoted paragraphs. This
is an "extended regular expression" if your system supports them,
@@ -108,6 +117,13 @@ acts like Delete on your system.
\fBset/unset regexp\fP
Do regular expression searches by default.
.TP
\fBset/unset smarthome\fP
Make the Home key smarter. When Home is pressed anywhere but at the
very beginning of non-whitespace characters on a line, the cursor will
jump to that beginning (either forwards or backwards). If the cursor is
already at that position, it will jump to the true beginning of the
line.
.TP
\fBset/unset smooth\fP
Use smooth scrolling by default.
.TP
@@ -128,6 +144,10 @@ Save automatically on exit, don't prompt.
\fBset/unset view\fP
Disallow file modification.
.TP
\fBset whitespace "\fIstring\fP"\fP
Set the two characters used to display the first characters of tabs and
spaces. They cannot be control characters.
.TP
.B syntax "\fIstr\fP" ["\fIfileregex\fP" ... ]
Defines a syntax named \fIstr\fP which can be activated via the \fB-Y\fP
flag, or will be automatically activated if the current filename matches

View File

@@ -8,19 +8,25 @@
## For the options that take parameters, the default value is given.
## Other options are unset by default.
## Use auto-indentation
## Use auto-indentation.
# set autoindent
## Backup files to filename~
## Backup files to filename~.
# set backup
## The directory to put the backup files in.
# set backupdir ""
## The characters treated as closing brackets. They cannot contain tabs
## or spaces. Only closing punctuation, optionally followed by closing
## brackets, can end sentences.
##
# set brackets "'")}]>"
## Constantly display the cursor position in the status bar.
# set const
## Use cut to end of line with ^K by default
## Use cut to end of line with ^K by default.
# set cut
## Set the line length for wrapping text and justifying paragraphs.
@@ -32,22 +38,26 @@
## Enable ~/.nano_history for saving and reading search/replace strings.
# set historylog
## Allow multiple file buffers (using ^R inserts into separate buffer).
## You must have configured with --enable-multibuffer or --enable-extra
## for this to work.
##
## set multibuffer
## Enable mouse support so that mouse clicks can be used to set the mark
## and run shortcuts.
# set mouse
## Don't convert files from DOS/Mac format
## Allow multiple file buffers (using ^R will insert into a separate
## buffer). You must have configured with --enable-multibuffer or
## --enable-extra for this to work.
##
# set multibuffer
## Don't convert files from DOS/Mac format.
# set noconvert
## Don't follow symlinks when writing files
## Don't follow symlinks when writing files.
# set nofollow
## Don't display the help lists at the bottom of the screen
## Don't display the helpful shortcut lists at the bottom of the screen.
# set nohelp
## Don't wrap text at all
## Don't wrap text at all.
# set nowrap
## Set operating directory. nano will not read or write files outside
@@ -57,9 +67,15 @@
##
# set operatingdir ""
## Preserve the XON and XOFF keys (^Q and ^S)
## Preserve the XON and XOFF keys (^Q and ^S).
# set preserve
## The characters treated as closing punctuation. They cannot contain
## tabs or spaces. Only closing punctuation, optionally followed by
## closing brackets, can end sentences.
##
# set punct ".?!"
## The email-quote string, used to justify email-quoted paragraphs.
## This is an extended regular expression if your system supports them,
## otherwise a literal string. Default:
@@ -69,13 +85,20 @@
## You can get old nano quoted-justify behavior via:
# set quotestr "(> )+"
## Fix Backspace/Delete confusion problem
## Fix Backspace/Delete confusion problem.
# set rebinddelete
## Do extended regular expression searches by default
## Do extended regular expression searches by default.
# set regexp
## Use smooth scrolling as the default
## Make the Home key smarter. When Home is pressed anywhere but at the
## very beginning of non-whitespace characters on a line, the cursor
## will jump to that beginning (either forwards or backwards). If the
## cursor is already at that position, it will jump to the true
## beginning of the line.
# set smarthome
## Use smooth scrolling as the default.
# set smooth
## Use this spelling checker instead of the internal one. This option
@@ -83,18 +106,22 @@
##
# set speller "aspell -c"
## Allow nano to be suspended with ^Z
## Allow nano to be suspended with ^Z.
# set suspend
## Use this tab size instead of the default; it must be greater than 0
## Use this tab size instead of the default; it must be greater than 0.
# set tabsize 8
## Save automatically on exit, don't prompt
## Save automatically on exit, don't prompt.
# set tempfile
## Disallow file modification, why would you want this in an rc file? ;)
# set view
## The two characters used to display the first characters of tabs and
## spaces. ASCII 187 and ASCII 183 seem to be good values for these.
# set whitespace " "
## Color setup
## Format:
## syntax "short description" ["filename regex" ...]
@@ -111,9 +138,9 @@
##
# syntax "c-file" "\.(c|h)$"
# color red "\<[A-Z_]{2,}\>"
# color green "\<(float|char|int|void|static|const|struct)\>"
# color brightyellow "\<(if|while|do|else|case|switch)\>"
# color brightcyan "^ *# *(define|include|ifn?def|endif|elif|else|if)"
# color green "\<(float|double|char|int|short|long|enum|void|static|const|struct|union|typedef|extern|signed|unsigned|inline)\>"
# color brightyellow "\<(for|if|while|do|else|case|switch|break)\>"
# color brightcyan "^ *# *(define|undef|include|ifn?def|endif|elif|else|if)"
##
## You will in general want your comments and strings to come last,
## because syntax highlighting rules will be applied in the order they
@@ -198,13 +225,24 @@
# color brightblue start="/\*\*" end="\*/"
# color brightgreen,green " +$"
## Here is an example for patch files
##
# syntax "patch" "\.(patch|diff)$"
# color brightgreen "^\+.*"
# color green "^\+\+\+.*"
# color brightblue "^ .*"
# color brightred "^-.*"
# color red "^---.*"
# color brightyellow "^@@.*"
# color magenta "^diff.*"
## Here is an example for your .nanorc
##
#syntax "nanorc" "(\.|/|)nanorc$"
## highlight possible errors and parameters
#color brightwhite "^ *(set|unset|syntax|color).*$"
## set, unset and syntax
#color cyan "^ *(set|unset) +(autoindent|backup|const|cut|fill|historylog|multibuffer|noconvert|nofollow|nohelp|nowrap|operatingdir|preserve|quotestr|rebinddelete|regexp|smooth|speller|suspend|tabsize|tempfile|view)"
#color cyan "^ *(set|unset) +(autoindent|backup|backupdir|brackets|const|cut|fill|historylog|mouse|multibuffer|noconvert|nofollow|nohelp|nowrap|operatingdir|preserve|punct|quotestr|rebinddelete|regexp|smarthome|smooth|speller|suspend|tabsize|tempfile|view|whitespace)"
#color green "^ *(set|unset|syntax)\>"
## colors
#color yellow "^ *color +(bright)?(white|black|red|blue|green|yellow|magenta|cyan)(,(white|black|red|blue|green|yellow|magenta|cyan))?\>"

View File

@@ -1,4 +1,3 @@
info_TEXINFOS = nano.texi
MAKEINFO = makeinfo --no-split

View File

@@ -8,8 +8,8 @@
@c Run `makeinfo' rather than `texinfo-format-buffer'.
@smallbook
@set EDITION 0.1
@set VERSION 1.3.2
@set UPDATED 31 Mar 2004
@set VERSION 1.3.4
@set UPDATED 17 Aug 2004
@dircategory Editors
@direntry
@@ -23,7 +23,7 @@
@titlepage
@title GNU @code{nano}
@subtitle a small and friendly text editor.
@subtitle version 1.3.2
@subtitle version 1.3.4
@author Chris Allegretta
@page
@@ -107,6 +107,13 @@ Email bug reports to @email{nano@@nano-editor.org}.
@table @code
@item -A, --smarthome
Make the Home key smarter. When Home is pressed anywhere but at the
very beginning of non-whitespace characters on a line, the cursor will
jump to that beginning (either forwards or backwards). If the cursor is
already at that position, it will jump to the true beginning of the
line.
@item -B, --backup
When saving a file, back up the previous version of it to the current
filename suffixed with a ~.
@@ -157,6 +164,13 @@ Print the version number and copyright and quit.
Specify a specific syntax highlighting from the .nanorc to use, if
available.
@item -Z, --restricted
Restricted mode: Don't read or write to any file not specified on the
command line, read any nanorc files, allow suspending, or allow a file
to be appended to, prepended to, or saved under a different name if it
already has one. Also accessible by invoking @code{nano} with any name
beginning with 'r' (e.g. "rnano").
@item -c, --const
Constantly display the cursor position and line number on the statusbar.
@@ -199,9 +213,10 @@ from the right of the screen, allowing it to vary along with the screen
width if the screen is resized.
@item -s [prog], --speller=[prog]
Invoke [prog] as the spell checker. By default, @code{nano} uses its
own interactive spell checker that requires the @code{spell} program be
installed on your system.
Invoke [prog] as the spell checker. By default, @code{nano} uses the
command specified in the SPELL environment variable, or, if SPELL is not
set, its own interactive spell checker that requires the @code{spell}
program to be installed on your system.
@item -t, --tempfile
Do not ask whether or not to save the current contents of the file when
@@ -339,12 +354,18 @@ toggles the -D (@code{--dos}) command line flag.
@item Multiple Files Toggle (Meta-F)
toggles the -F (@code{--multibuffer}) command line flag.
@item Backup File Toggle (Meta-H)
toggles the -A (@code{--smarthome}) command line flag.
@item AutoIndent Toggle (Meta-I)
toggles the -i (@code{--autoindent}) command line flag.
@item Cut To End Toggle (Meta-K)
toggles the -k (@code{--cut}) command line flag.
@item Auto Line Wrap Toggle (Meta-L)
toggles the -w (@code{--nowrap}) command line flag.
@item Mouse Toggle (Meta-M)
toggles the -m (@code{--mouse}) command line flag.
@@ -354,21 +375,12 @@ toggles the -M (@code{--mac}) command line flag.
@item Smooth Scrolling Toggle (Meta-S)
toggles the -S (@code{--smooth}) command line flag.
@item AutoWrap Toggle (Meta-W)
toggles the -w (@code{--nowrap}) command line flag.
@item Expert/Nohelp Toggle (Meta-X)
toggles the -x (@code{--nohelp}) command line flag.
@item Suspend Toggle (Meta-Z)
toggles the -z (@code{--suspend}) command line flag.
@item Open Previous File Toggle (Meta-<)
changes buffer to previously loaded file.
@item Open Next File Toggle (Meta->)
changes buffer to next loaded file.
@end table
@@ -394,17 +406,18 @@ are certain differences between the editors:
@table @code
@item Search and Replace History
As of version 1.2.2 of @code{nano}, text entered as search or replace
strings will be stored and can be accessed with the up/down arrow keys.
Previously, @code{nano} offered a more consistent, but incompatible with
Pico, method for entering search and replace strings. In the old
method, previous entries would be displayed by default as editable text
in front of the cursor, as opposed to being bracketed and uneditable as
it is in Pico. The old behavior could be made compatible with Pico via
the @code{-p} flag, but recent versions of Pico use the @code{-p} flag
to preserve the XON and XOFF sequences within the editor. Since with
the new method search and replace strings can still be edited by simply
hitting the up arrow key once, the old method was removed completely.
As of version 1.1.99pre1 of @code{nano}, text entered as search or
replace strings will be stored and can be accessed with the up/down
arrow keys. Previously, @code{nano} offered a more consistent, but
incompatible with Pico, method for entering search and replace strings.
In the old method, previous entries would be displayed by default as
editable text in front of the cursor, as opposed to being bracketed and
uneditable as it is in Pico. The old behavior could be made compatible
with Pico via the @code{-p} flag, but recent versions of Pico use the
@code{-p} flag to preserve the XON and XOFF sequences within the editor.
Since with the new method search and replace strings can still be edited
by simply hitting the up arrow key once, the old method was removed
completely.
@item Writing or Appending Selected Text to Files
@@ -431,9 +444,9 @@ replace it. The @code{nano} implementation will stop at each search
string found and query whether to replace this instance or not. The
internal spell checker operates similarly. Note that these is no way to
force these functions to behave in the Pico fashion. As of version
1.2.2, misspelled words are sorted and trimmed for uniqueness in the
internal spell checker such that the words 'apple' and 'Apple' will be
prompted for correction separately.
1.1.99pre1, misspelled words are sorted and trimmed for uniqueness in
the internal spell checker such that the words 'apple' and 'Apple' will
be prompted for correction separately.
@end table
@node Building and Configure Options, , Pico Compatibility, Top

View File

@@ -31,7 +31,7 @@ make DESTDIR="$RPM_BUILD_ROOT" install
%files
%defattr(-,root,root)
%doc AUTHORS BUGS COPYING ChangeLog INSTALL NEWS README THANKS TODO doc/faq.html doc/nanorc.sample
%{_bindir}/nano
%{_bindir}/*
%{_mandir}/*/*
%{_datadir}/locale/*/LC_MESSAGES/nano.mo
%{_infodir}/nano.info*

View File

@@ -1,3 +1,9 @@
2004-06-01 Jordi Mallach <jordi@gnu.org>
* zh_TW.po: Added Traditional Chinese translation by
CHAO Wei-Lun <chaoweilun@pcmail.com.tw>.
* LINGUAS: Added "zh_TW".
2004-02-24 Jordi Mallach <jordi@gnu.org>
* ms.po: Updated Malay translation by Sharuzzaman Ahmat Raslan.

View File

@@ -1,2 +1,2 @@
# List of available languages.
ca cs da de es eu fi fr gl hu id it ms nb nl nn pl pt_BR ro ru sr sv tr uk
ca cs da de es eu fi fr gl hu id it ms nb nl nn pl pt_BR ro ru sr sv tr uk zh_TW

1603
po/zh_TW.po Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,3 @@
DEFS= -DSYSCONFDIR=\"$(sysconfdir)\"
localedir = $(datadir)/locale
INCLUDES = -Iintl -DLOCALEDIR=\"$(localedir)\" -I@includedir@
@@ -20,3 +19,6 @@ nano_SOURCES = color.c \
winio.c
nano_LDADD = @GLIB_LIBS@ @LIBINTL@
install-exec-hook:
cd $(DESTDIR)$(bindir) && $(LN_S) nano rnano

View File

@@ -25,7 +25,6 @@
#include <string.h>
#include <stdio.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include "proto.h"
@@ -119,9 +118,9 @@ void update_color(void)
/* if we haven't found a match, use the override string */
if (colorstrings == NULL && syntaxstr != NULL) {
for (tmpsyntax = syntaxes; tmpsyntax != NULL;
for (tmpsyntax = syntaxes; tmpsyntax != NULL;
tmpsyntax = tmpsyntax->next) {
if (!strcasecmp(tmpsyntax->desc, syntaxstr))
if (strcasecmp(tmpsyntax->desc, syntaxstr) == 0)
colorstrings = tmpsyntax->color;
}
}

View File

@@ -28,24 +28,29 @@
#include "proto.h"
#include "nano.h"
static int marked_cut; /* Is the cutbuffer from a mark?
* 0 means whole-line cut, 1 means mark,
* 2 means cut-from-cursor. */
static bool keep_cutbuffer = FALSE;
/* Should we keep the contents of the cutbuffer? */
static int marked_cut;
/* Is the cutbuffer from a mark? 0 means whole-line cut, 1
* means mark, and 2 means cut-from-cursor. */
#ifndef NANO_SMALL
static int concatenate_cut; /* Should we add this cut string to the
* end of the last one? */
static bool concatenate_cut;
/* Should we add this cut string to the end of the last one? */
#endif
static filestruct *cutbottom = NULL;
/* Pointer to end of cutbuffer. */
/* Pointer to end of cutbuffer. */
void cutbuffer_reset(void)
{
keep_cutbuffer = FALSE;
}
filestruct *get_cutbottom(void)
{
return cutbottom;
}
void add_to_cutbuffer(filestruct *inptr, int allow_concat)
void add_to_cutbuffer(filestruct *inptr, bool allow_concat)
{
#ifdef DEBUG
fprintf(stderr, "add_to_cutbuffer(): inptr->data = %s\n", inptr->data);
@@ -56,7 +61,7 @@ void add_to_cutbuffer(filestruct *inptr, int allow_concat)
#ifndef NANO_SMALL
else if (allow_concat && concatenate_cut) {
/* Just tack the text in inptr onto the text in cutbottom,
* unless allow_concat is false. */
* unless allow_concat is FALSE. */
cutbottom->data = charealloc(cutbottom->data,
strlen(cutbottom->data) + strlen(inptr->data) + 1);
strcat(cutbottom->data, inptr->data);
@@ -194,7 +199,7 @@ void cut_marked_segment(void)
}
#endif
int do_cut_text(void)
void do_cut_text(void)
{
filestruct *fileptr;
@@ -202,7 +207,7 @@ int do_cut_text(void)
check_statblank();
if (!ISSET(KEEP_CUTBUFFER)) {
if (!keep_cutbuffer) {
free_filestruct(cutbuffer);
cutbuffer = NULL;
marked_cut = 0;
@@ -215,15 +220,15 @@ int do_cut_text(void)
}
/* You can't cut the magicline except with the mark. But trying
* does clear the cutbuffer if KEEP_CUTBUFFER is not set. */
* does clear the cutbuffer if keep_cutbuffer is FALSE. */
if (current == filebot
#ifndef NANO_SMALL
&& !ISSET(MARK_ISSET)
#endif
)
return 0;
return;
SET(KEEP_CUTBUFFER);
keep_cutbuffer = TRUE;
#ifndef NANO_SMALL
if (ISSET(CUT_TO_END) && !ISSET(MARK_ISSET)) {
@@ -246,7 +251,7 @@ int do_cut_text(void)
do_delete();
marked_cut = 2;
return 1;
return;
} else {
SET(MARK_ISSET);
@@ -269,8 +274,7 @@ int do_cut_text(void)
marked_cut = 1;
edit_refresh();
set_modified();
return 1;
return;
}
#endif /* !NANO_SMALL */
@@ -300,10 +304,9 @@ int do_cut_text(void)
#ifndef NANO_SMALL
concatenate_cut = FALSE;
#endif
return 1;
}
int do_uncut_text(void)
void do_uncut_text(void)
{
filestruct *tmp = current;
filestruct *newbuf = NULL;
@@ -314,7 +317,7 @@ int do_uncut_text(void)
#endif
check_statblank();
if (cutbuffer == NULL || current == NULL)
return 0; /* AIEEEEEEEEEEEE */
return; /* AIEEEEEEEEEEEE */
/* If we're uncutting a previously non-marked block, uncut to end if
* we're not at the beginning of the line. If we are at the
@@ -405,11 +408,9 @@ int do_uncut_text(void)
current = newend;
}
/* If marked cut == 2, that means that we're doing a cut to end
/* If marked cut == 2, it means that we're doing a cut to end
* and we don't want anything else on the line, so we have to
* screw up all the work we just did and separate the line.
* There must be a better way to do this, but not at 1 AM on a
* work night. */
* screw up all the work we just did and separate the line. */
if (marked_cut == 2) {
tmp = make_new_node(current);
tmp->data = mallocstrcpy(NULL, current->data + current_x);
@@ -432,7 +433,7 @@ int do_uncut_text(void)
#endif
set_modified();
edit_refresh();
return 0;
return;
}
if (current != fileage) {
@@ -463,5 +464,4 @@ int do_uncut_text(void)
#endif
set_modified();
return 1;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -23,53 +23,95 @@
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <assert.h>
#include "proto.h"
#include "nano.h"
int do_home(void)
void do_first_line(void)
{
current_x = 0;
size_t old_pww = placewewant;
current = fileage;
placewewant = 0;
check_statblank();
update_line(current, current_x);
return 1;
current_x = 0;
if (edittop != fileage || need_vertical_update(old_pww))
edit_update(current, TOP);
}
int do_end(void)
void do_last_line(void)
{
size_t old_pww = placewewant;
current = filebot;
placewewant = 0;
current_x = 0;
if (edittop->lineno + (editwinrows / 2) != filebot->lineno ||
need_vertical_update(old_pww))
edit_update(current, CENTER);
}
void do_home(void)
{
size_t old_pww = placewewant;
#ifndef NANO_SMALL
if (ISSET(SMART_HOME)) {
int old_current_x = current_x;
for (current_x = 0; isblank(current->data[current_x]) &&
current->data[current_x] != '\0'; current_x++)
;
if (current_x == old_current_x || current->data[current_x] == '\0')
current_x = 0;
placewewant = xplustabs();
} else {
#endif
current_x = 0;
placewewant = 0;
#ifndef NANO_SMALL
}
#endif
check_statblank();
if (need_horizontal_update(old_pww))
update_line(current, current_x);
}
void do_end(void)
{
size_t old_pww = placewewant;
current_x = strlen(current->data);
placewewant = xplustabs();
check_statblank();
update_line(current, current_x);
return 1;
if (need_horizontal_update(old_pww))
update_line(current, current_x);
}
int do_page_up(void)
void do_page_up(void)
{
int i;
size_t old_pww = placewewant;
const filestruct *old_current = current;
#ifndef DISABLE_WRAPPING
wrap_reset();
#endif
/* If edittop is the first line of the file, move current up there
/* If the first line of the file is onscreen, move current up there
* and put the cursor at the beginning of the line. */
if (edittop == fileage) {
current = fileage;
placewewant = 0;
} else {
/* Move the top line of the edit window up a page. */
for (i = 0; i < editwinrows - 2 && edittop->prev != NULL; i++)
edittop = edittop->prev;
edit_scroll(UP, editwinrows - 2);
#ifndef NANO_SMALL
/* If we're in smooth scrolling mode and there was at least one
/* If we're in smooth scrolling mode and there's at least one
* page of text left, move the current line of the edit window
* up a page. */
if (ISSET(SMOOTHSCROLL) && current->lineno > editwinrows - 2)
if (ISSET(SMOOTHSCROLL) && current->lineno > editwinrows - 2) {
int i;
for (i = 0; i < editwinrows - 2; i++)
current = current->prev;
/* If we're not in smooth scrolling mode and there was at least
}
/* If we're not in smooth scrolling mode or there isn't at least
* one page of text left, put the cursor at the beginning of the
* top line of the edit window, as Pico does. */
else {
@@ -80,19 +122,20 @@ int do_page_up(void)
}
#endif
}
/* Get the equivalent x-coordinate of the new line. */
current_x = actual_x(current->data, placewewant);
edit_refresh();
/* Update all the lines that need to be updated. */
edit_redraw(old_current, old_pww);
check_statblank();
return 1;
}
int do_page_down(void)
void do_page_down(void)
{
int i;
size_t old_pww = placewewant;
const filestruct *old_current = current;
#ifndef DISABLE_WRAPPING
wrap_reset();
#endif
@@ -103,17 +146,19 @@ int do_page_down(void)
current = filebot;
placewewant = 0;
} else {
/* Move the top line of the edit window down a page. */
for (i = 0; i < editwinrows - 2; i++)
edittop = edittop->next;
edit_scroll(DOWN, editwinrows - 2);
#ifndef NANO_SMALL
/* If we're in smooth scrolling mode and there was at least one
/* If we're in smooth scrolling mode and there's at least one
* page of text left, move the current line of the edit window
* down a page. */
if (ISSET(SMOOTHSCROLL) && current->lineno + editwinrows - 2 <= filebot->lineno)
if (ISSET(SMOOTHSCROLL) && current->lineno + editwinrows - 2 <=
filebot->lineno) {
int i;
for (i = 0; i < editwinrows - 2; i++)
current = current->next;
/* If we're not in smooth scrolling mode and there was at least
}
/* If we're not in smooth scrolling mode or there isn't at least
* one page of text left, put the cursor at the beginning of the
* top line of the edit window, as Pico does. */
else {
@@ -124,16 +169,17 @@ int do_page_down(void)
}
#endif
}
/* Get the equivalent x-coordinate of the new line. */
current_x = actual_x(current->data, placewewant);
edit_refresh();
/* Update all the lines that need to be updated. */
edit_redraw(old_current, old_pww);
check_statblank();
return 1;
}
int do_up(void)
void do_up(void)
{
#ifndef DISABLE_WRAPPING
wrap_reset();
@@ -141,29 +187,32 @@ int do_up(void)
check_statblank();
if (current->prev == NULL)
return 0;
return;
assert(current_y == current->lineno - edittop->lineno);
current = current->prev;
current_x = actual_x(current->data, placewewant);
if (current_y > 0) {
update_line(current->next, 0);
/* It was necessary to change current first, so that the
* mark display will change! */
update_line(current, current_x);
} else
/* If we're on the first row of the edit window, scroll up one line
* if we're in smooth scrolling mode, or up half a page if we're
* not. */
if (current_y == 0)
edit_scroll(UP,
#ifndef NANO_SMALL
if (ISSET(SMOOTHSCROLL))
edit_update(current, TOP);
else
ISSET(SMOOTHSCROLL) ? 1 :
#endif
edit_update(current, CENTER);
return 1;
editwinrows / 2);
/* Update the lines left alone by edit_scroll(): the line we were on
* before and the line we're on now. The former needs to be redrawn
* if we're not on the first page, and the latter needs to be
* drawn. */
if (need_vertical_update(0))
update_line(current->next, 0);
update_line(current, current_x);
}
/* Return value 1 means we moved down, 0 means we were already at the
* bottom. */
int do_down(void)
void do_down(void)
{
#ifndef DISABLE_WRAPPING
wrap_reset();
@@ -171,31 +220,34 @@ int do_down(void)
check_statblank();
if (current->next == NULL)
return 0;
return;
assert(current_y == current->lineno - edittop->lineno);
current = current->next;
current_x = actual_x(current->data, placewewant);
/* Note that current_y is zero-based. This test checks for the
* cursor's being not on the last row of the edit window. */
if (current_y != editwinrows - 1) {
update_line(current->prev, 0);
update_line(current, current_x);
} else
/* If we're on the last row of the edit window, scroll down one line
* if we're in smooth scrolling mode, or down half a page if we're
* not. */
if (current_y == editwinrows - 1)
edit_scroll(DOWN,
#ifndef NANO_SMALL
if (ISSET(SMOOTHSCROLL))
/* In this case current_y does not change. The cursor remains
* at the bottom of the edit window. */
edit_update(edittop->next, TOP);
else
ISSET(SMOOTHSCROLL) ? 1 :
#endif
edit_update(current, CENTER);
return 1;
editwinrows / 2);
/* Update the lines left alone by edit_scroll(): the line we were on
* before and the line we're on now. The former needs to be redrawn
* if we're not on the first page, and the latter needs to be
* drawn. */
if (need_vertical_update(0))
update_line(current->prev, 0);
update_line(current, current_x);
}
int do_left(void)
void do_left(int allow_update)
{
size_t old_pww = placewewant;
if (current_x > 0)
current_x--;
else if (current != fileage) {
@@ -204,12 +256,18 @@ int do_left(void)
}
placewewant = xplustabs();
check_statblank();
update_line(current, current_x);
return 1;
if (allow_update && need_horizontal_update(old_pww))
update_line(current, current_x);
}
int do_right(void)
void do_left_void(void)
{
do_left(TRUE);
}
void do_right(int allow_update)
{
size_t old_pww = placewewant;
assert(current_x <= strlen(current->data));
if (current->data[current_x] != '\0')
@@ -220,6 +278,11 @@ int do_right(void)
}
placewewant = xplustabs();
check_statblank();
update_line(current, current_x);
return 1;
if (allow_update && need_horizontal_update(old_pww))
update_line(current, current_x);
}
void do_right_void(void)
{
do_right(TRUE);
}

2538
src/nano.c

File diff suppressed because it is too large Load Diff

View File

@@ -34,7 +34,7 @@
#include <limits.h>
#endif
/* Macros for the flags int... */
/* Macros for the flags long... */
#define SET(bit) flags |= bit
#define UNSET(bit) flags &= ~bit
#define ISSET(bit) ((flags & bit) != 0)
@@ -54,9 +54,10 @@
#endif
#ifdef USE_SLANG
/* Slang support enabled. Work around Slang's not defining KEY_DC or
* KEY_IC. */
/* Slang support enabled. */
#include <slcurses.h>
/* Slang curses emulation brain damage, part 2: Slang doesn't define the
* curses equivalents of the Insert or Delete keys. */
#define KEY_DC SL_KEY_DELETE
#define KEY_IC SL_KEY_IC
#elif defined(HAVE_NCURSES_H)
@@ -75,6 +76,9 @@
# define _(string) (string)
# define P_(singular, plural, number) (number == 1 ? singular : plural)
#endif
#define gettext_noop(string) (string)
#define N_(string) gettext_noop(string)
/* Mark a string that will be sent to gettext later. */
#include <sys/types.h>
#include <sys/stat.h>
@@ -91,7 +95,12 @@
# endif
#endif
/* If no strcasecmp()/strncasecmp(), use the versions we have. */
/* If no isblank(), strcasecmp(), strncasecmp(), strcasestr(),
* strnlen(), getdelim(), or getline(), use the versions we have. */
#ifndef HAVE_ISBLANK
#define isblank is_blank_char
#endif
#ifndef HAVE_STRCASECMP
#define strcasecmp nstricmp
#endif
@@ -100,39 +109,27 @@
#define strncasecmp nstrnicmp
#endif
#ifndef HAVE_STRCASESTR
#define strcasestr nstristr
#endif
#ifndef HAVE_STRNLEN
#define strnlen nstrnlen
#endif
#ifndef HAVE_GETDELIM
#define getdelim ngetdelim
#endif
#ifndef HAVE_GETLINE
#define getline ngetline
#endif
/* Assume ERR is defined as -1. To avoid duplicate case values when
* some key definitions are missing, we have to set all of these, and
* all of the special sentinel values below, to different negative
* values other than -1. */
/* HP-UX 10 & 11 do not seem to support KEY_HOME and KEY_END. */
#ifndef KEY_HOME
#define KEY_HOME -2
#endif
#ifndef KEY_END
#define KEY_END -3
#endif
/* Slang and SunOS 5.7-5.9 do not seem to support KEY_RESIZE. */
#ifndef KEY_RESIZE
#define KEY_RESIZE -4
#endif
/* Slang does not seem to support KEY_SUSPEND, KEY_SLEFT, or
* KEY_SRIGHT. */
#ifndef KEY_SUSPEND
#define KEY_SUSPEND -5
#endif
#ifndef KEY_SLEFT
#define KEY_SLEFT -6
#endif
#ifndef KEY_SRIGHT
#define KEY_SRIGHT -7
#endif
#define VERMSG "GNU nano " VERSION
/* If we aren't using ncurses, turn the mouse support off, as it's
@@ -174,10 +171,10 @@ typedef struct openfilestruct {
* position. */
int file_current_y; /* Current file's y-coordinate
* position. */
int file_flags; /* Current file's flags: modification
long file_flags; /* Current file's flags: modification
* status (and marking status, if
* available). */
int file_placewewant; /* Current file's place we want. */
size_t file_placewewant; /* Current file's place we want. */
int file_totlines; /* Current file's total number of
* lines. */
long file_totsize; /* Current file's total size. */
@@ -193,7 +190,7 @@ typedef struct shortcut {
int funcval; /* Function key we want bound. */
int miscval; /* Other Meta key we want bound. */
int viewok; /* Is this function legal in view mode? */
int (*func) (void); /* Function to call when we catch this key. */
void (*func)(void); /* Function to call when we catch this key. */
const char *desc; /* Description, e.g. "Page Up". */
#ifndef DISABLE_HELP
const char *help; /* Help file entry text. */
@@ -208,7 +205,7 @@ typedef struct toggle {
const char *desc; /* Description for when toggle is, uh, toggled,
* e.g. "Cut to end"; we'll append Enabled or
* Disabled. */
int flag; /* What flag actually gets toggled. */
long flag; /* What flag actually gets toggled. */
struct toggle *next;
} toggle;
#endif /* !NANO_SMALL */
@@ -216,7 +213,7 @@ typedef struct toggle {
#ifdef ENABLE_NANORC
typedef struct rcoption {
const char *name;
int flag;
long flag;
} rcoption;
#endif /* ENABLE_NANORC */
@@ -267,35 +264,36 @@ typedef struct historyheadtype {
/* Bitwise flags so we can save space (or more correctly, not waste
* it). */
#define MODIFIED (1<<0)
#define KEEP_CUTBUFFER (1<<1)
#define CASE_SENSITIVE (1<<2)
#define MARK_ISSET (1<<3)
#define CONSTUPDATE (1<<4)
#define NO_HELP (1<<5)
#define NOFOLLOW_SYMLINKS (1<<6)
#define SUSPEND (1<<7)
#define NO_WRAP (1<<8)
#define AUTOINDENT (1<<9)
#define VIEW_MODE (1<<10)
#define USE_MOUSE (1<<11)
#define USE_REGEXP (1<<12)
#define REGEXP_COMPILED (1<<13)
#define TEMP_OPT (1<<14)
#define CUT_TO_END (1<<15)
#define REVERSE_SEARCH (1<<16)
#define MULTIBUFFER (1<<17)
#define DOS_FILE (1<<18)
#define MAC_FILE (1<<19)
#define SMOOTHSCROLL (1<<20)
#define DISABLE_CURPOS (1<<21) /* Damn, we still need it. */
#define REBIND_DELETE (1<<22)
#define NO_CONVERT (1<<23)
#define BACKUP_FILE (1<<24)
#define NO_RCFILE (1<<25)
#define COLOR_SYNTAX (1<<26)
#define PRESERVE (1<<27)
#define HISTORY_CHANGED (1<<28)
#define HISTORYLOG (1<<29)
#define CASE_SENSITIVE (1<<1)
#define MARK_ISSET (1<<2)
#define CONSTUPDATE (1<<3)
#define NO_HELP (1<<4)
#define NOFOLLOW_SYMLINKS (1<<5)
#define SUSPEND (1<<6)
#define NO_WRAP (1<<7)
#define AUTOINDENT (1<<8)
#define VIEW_MODE (1<<9)
#define USE_MOUSE (1<<10)
#define USE_REGEXP (1<<11)
#define TEMP_FILE (1<<12)
#define CUT_TO_END (1<<13)
#define REVERSE_SEARCH (1<<14)
#define MULTIBUFFER (1<<15)
#define DOS_FILE (1<<16)
#define MAC_FILE (1<<17)
#define SMOOTHSCROLL (1<<18)
#define DISABLE_CURPOS (1<<19) /* Damn, we still need it. */
#define REBIND_DELETE (1<<20)
#define NO_CONVERT (1<<21)
#define BACKUP_FILE (1<<22)
#define NO_RCFILE (1<<23)
#define COLOR_SYNTAX (1<<24)
#define PRESERVE (1<<25)
#define HISTORY_CHANGED (1<<26)
#define HISTORYLOG (1<<27)
#define RESTRICTED (1<<28)
#define SMART_HOME (1<<29)
#define WHITESPACE_DISPLAY (1<<30)
/* Control key sequences, changing these would be very very bad. */
#define NANO_CONTROL_SPACE 0
@@ -366,15 +364,17 @@ typedef struct historyheadtype {
#define NANO_ALT_SPACE ' '
/* Some semi-changeable keybindings; don't play with these unless you're
* sure you know what you're doing. */
* sure you know what you're doing. Assume ERR is defined as -1. */
/* No key at all. */
#define NANO_NO_KEY -8
#define NANO_NO_KEY -2
/* Special sentinel key used for search string history. */
#define NANO_HISTORY_KEY -9
/* Special sentinel key used for search/replace history. */
#define NANO_HISTORY_KEY -3
/* Normal keys. */
#define NANO_XON_KEY NANO_CONTROL_Q
#define NANO_XOFF_KEY NANO_CONTROL_S
#define NANO_INSERTFILE_KEY NANO_CONTROL_R
#define NANO_INSERTFILE_FKEY KEY_F(5)
#define NANO_EXIT_KEY NANO_CONTROL_X
@@ -442,6 +442,7 @@ typedef struct historyheadtype {
#define NANO_PREVWORD_KEY NANO_ALT_SPACE
#define NANO_PARABEGIN_KEY NANO_CONTROL_W
#define NANO_PARAEND_KEY NANO_CONTROL_O
#define NANO_FULLJUSTIFY_KEY NANO_CONTROL_U
#define NANO_VERBATIM_KEY NANO_ALT_V
#ifndef NANO_SMALL
@@ -463,12 +464,18 @@ typedef struct historyheadtype {
#define TOGGLE_NOCONVERT_KEY NANO_ALT_N
#define TOGGLE_BACKUP_KEY NANO_ALT_B
#define TOGGLE_SYNTAX_KEY NANO_ALT_Y
#define TOGGLE_SMARTHOME_KEY NANO_ALT_H
#define TOGGLE_WHITESPACE_KEY NANO_ALT_P
#endif /* !NANO_SMALL */
#define MAIN_VISIBLE 12
#define VIEW 1
#define NOVIEW 0
#define VIEW TRUE
#define NOVIEW FALSE
typedef enum {
UP, DOWN
} updown;
typedef enum {
TOP, CENTER, NONE

View File

@@ -22,39 +22,49 @@
/* Externs. */
#include <sys/stat.h>
#include <sys/types.h>
#ifdef HAVE_REGEX_H
#include <regex.h>
#endif
#include "nano.h"
#ifndef DISABLE_WRAPJUSTIFY
extern int wrap_at;
extern ssize_t wrap_at;
#endif
extern int editwinrows;
extern int current_x, current_y, totlines;
extern int placewewant;
extern size_t placewewant;
#ifndef NANO_SMALL
extern int mark_beginx;
#endif
extern long totsize;
extern int temp_opt;
extern int flags;
extern int tabsize;
extern long flags;
extern ssize_t tabsize;
extern int search_last_line;
extern int search_offscreen;
extern int currslen;
#if !defined(NANO_SMALL) && defined(ENABLE_NANORC)
extern char *whitespace;
#endif
#ifndef DISABLE_JUSTIFY
extern char *punct;
extern char *brackets;
extern char *quotestr;
#ifdef HAVE_REGEX_H
extern regex_t quotereg;
extern int quoterc;
extern char *quoteerr;
#else
extern size_t quotelen;
#endif
#endif
#ifndef NANO_SMALL
extern char *backup_dir;
#endif
extern WINDOW *edit, *topwin, *bottomwin;
extern WINDOW *topwin, *edit, *bottomwin;
extern char *filename;
extern struct stat originalfilestat;
extern char *answer;
@@ -114,10 +124,10 @@ extern const shortcut *currshortcut;
#ifdef HAVE_REGEX_H
extern regex_t search_regexp;
extern regmatch_t regmatches[10];
extern regmatch_t regmatches[10];
#ifdef ENABLE_COLOR
extern regex_t syntaxfile_regexp;
extern regmatch_t synfilematches[1];
extern regmatch_t synfilematches[1];
#endif /* ENABLE_COLOR */
#endif /* HAVE_REGEX_H */
@@ -130,7 +140,11 @@ extern historyheadtype search_history;
extern historyheadtype replace_history;
#endif
extern int curses_ended;
extern bool curses_ended;
#ifdef ENABLE_NANORC
extern char *homedir;
#endif
/* Functions we want available. */
@@ -142,33 +156,36 @@ void update_color(void);
#endif /* ENABLE_COLOR */
/* Public functions in cut.c */
void cutbuffer_reset(void);
filestruct *get_cutbottom(void);
void add_to_cutbuffer(filestruct *inptr, int allow_concat);
void add_to_cutbuffer(filestruct *inptr, bool allow_concat);
void cut_marked_segment(void);
int do_cut_text(void);
int do_uncut_text(void);
void do_cut_text(void);
void do_uncut_text(void);
/* Public functions in files.c */
void load_file(int update);
void new_file(void);
filestruct *read_line(char *buf, filestruct *prev, int *line1ins, int len);
int read_file(FILE *f, const char *filename, int quiet);
int open_file(const char *filename, int insert, int quiet);
filestruct *read_line(char *buf, filestruct *prev, int *line1ins, size_t
len);
void read_file(FILE *f, const char *filename, int quiet);
bool open_file(const char *filename, int insert, int quiet);
char *get_next_filename(const char *name);
int do_insertfile(int loading_file);
int do_insertfile_void(void);
void do_insertfile(int loading_file);
void do_insertfile_void(void);
#ifdef ENABLE_MULTIBUFFER
openfilestruct *make_new_opennode(openfilestruct *prevnode);
void splice_opennode(openfilestruct *begin, openfilestruct *newnode, openfilestruct *end);
void splice_opennode(openfilestruct *begin, openfilestruct *newnode,
openfilestruct *end);
void unlink_opennode(const openfilestruct *fileptr);
void delete_opennode(openfilestruct *fileptr);
void free_openfilestruct(openfilestruct *src);
int add_open_file(int update);
int load_open_file(void);
int open_prevfile(int closing_file);
int open_prevfile_void(void);
int open_nextfile(int closing_file);
int open_nextfile_void(void);
void add_open_file(int update);
void load_open_file(void);
void open_prevfile(int closing_file);
void open_prevfile_void(void);
void open_nextfile(int closing_file);
void open_nextfile_void(void);
int close_open_file(void);
#endif
#if !defined(DISABLE_SPELLER) || !defined(DISABLE_OPERATINGDIR)
@@ -185,71 +202,80 @@ int check_operating_dir(const char *currpath, int allow_tabcomp);
#ifndef NANO_SMALL
void init_backup_dir(void);
#endif
int copy_file(FILE *inn, FILE *out);
int write_file(const char *name, int tmp, int append, int nonamechange);
#ifndef NANO_SMALL
int write_marked(const char *name, int tmp, int append, int
nonamechange);
int write_marked(const char *name, int tmp, int append);
#endif
int do_writeout(int exiting);
int do_writeout_void(void);
void do_writeout_void(void);
char *real_dir_from_tilde(const char *buf);
#ifndef DISABLE_TABCOMP
int append_slash_if_dir(char *buf, int *lastwastab, int *place);
int append_slash_if_dir(char *buf, bool *lastwastab, int *place);
char **username_tab_completion(char *buf, int *num_matches);
char **cwd_tab_completion(char *buf, int *num_matches);
char *input_tab(char *buf, int place, int *lastwastab, int *newplace, int *list);
char *input_tab(char *buf, int place, bool *lastwastab, int *newplace,
bool *list);
#endif
#if !defined(DISABLE_BROWSER) || !defined(NANO_SMALL)
const char *tail(const char *foo);
#endif
#ifndef DISABLE_BROWSER
int diralphasort(const void *va, const void *vb);
void free_charptrarray(char **array, int len);
void free_charptrarray(char **array, size_t len);
void striponedir(char *foo);
int readable_dir(const char *path);
char **browser_init(const char *path, int *longest, int *numents);
char *do_browser(const char *inpath);
char *do_browse_from(const char *inpath);
#endif
#if !defined(NANO_SMALL) && defined(ENABLE_NANORC)
char *histfilename(void);
void load_history(void);
bool writehist(FILE *hist, historyheadtype *histhead);
void save_history(void);
#endif
/* Public functions in global.c */
int length_of_list(const shortcut *s);
void sc_init_one(shortcut **shortcutage, int key, const char *desc,
#ifndef DISABLE_HELP
const char *help,
#endif
int metaval, int funcval, int miscval, int view, int
(*func)(void));
size_t length_of_list(const shortcut *s);
#ifndef NANO_SMALL
void toggle_init_one(int val, const char *desc, int flag);
void toggle_init_one(int val, const char *desc, long flag);
void toggle_init(void);
#ifdef DEBUG
void free_toggles(void);
#endif
#endif
void free_shortcutage(shortcut **shortcutage);
void sc_init_one(shortcut **shortcutage, int key, const char *desc,
#ifndef DISABLE_HELP
const char *help,
#endif
int metaval, int funcval, int miscval, int view, void
(*func)(void));
void shortcut_init(int unjustify);
void free_shortcutage(shortcut **shortcutage);
#ifdef DEBUG
void thanks_for_all_the_fish(void);
#endif
/* Public functions in move.c */
int do_home(void);
int do_end(void);
int do_page_up(void);
int do_page_down(void);
int do_up(void);
int do_down(void);
int do_left(void);
int do_right(void);
void do_first_line(void);
void do_last_line(void);
void do_home(void);
void do_end(void);
void do_page_up(void);
void do_page_down(void);
void do_up(void);
void do_down(void);
void do_left(int allow_update);
void do_left_void(void);
void do_right(int allow_update);
void do_right_void(void);
/* Public functions in nano.c */
RETSIGTYPE finish(int sigage);
void finish(void);
void die(const char *msg, ...);
void die_save_file(const char *die_filename);
void die_too_small(void);
void print_view_warning(void);
void global_init(int save_cutbuffer);
void global_init(bool save_cutbuffer);
void window_init(void);
#ifndef DISABLE_MOUSE
void mouse_init(void);
@@ -259,103 +285,100 @@ void help_init(void);
#endif
filestruct *make_new_node(filestruct *prevnode);
filestruct *copy_node(const filestruct *src);
void splice_node(filestruct *begin, filestruct *newnode, filestruct *end);
void splice_node(filestruct *begin, filestruct *newnode, filestruct
*end);
void unlink_node(const filestruct *fileptr);
void delete_node(filestruct *fileptr);
filestruct *copy_filestruct(const filestruct *src);
void free_filestruct(filestruct *src);
void renumber_all(void);
void renumber(filestruct *fileptr);
void print1opt(const char *shortflag, const char *longflag,
const char *desc);
void print1opt(const char *shortflag, const char *longflag, const char
*desc);
void usage(void);
void version(void);
void do_early_abort(void);
int no_help(void);
#if defined(DISABLE_JUSTIFY) || defined(DISABLE_SPELLER) || defined(DISABLE_HELP) || defined(NANO_SMALL)
void nano_disabled_msg(void);
#endif
#ifndef NANO_SMALL
RETSIGTYPE cancel_fork(int signal);
int open_pipe(const char *command);
bool open_pipe(const char *command);
#endif
#ifndef DISABLE_MOUSE
void do_mouse(void);
#endif
void do_char(char ch);
int do_verbatim_input(void);
int do_backspace(void);
int do_delete(void);
int do_tab(void);
int do_enter(void);
void do_verbatim_input(void);
void do_backspace(void);
void do_delete(void);
void do_tab(void);
void do_enter(void);
#ifndef NANO_SMALL
int do_next_word(void);
int do_prev_word(void);
void do_next_word(void);
void do_prev_word(void);
void do_mark(void);
#endif
int do_mark(void);
#ifndef DISABLE_WRAPPING
void wrap_reset(void);
int do_wrap(filestruct *inptr);
bool do_wrap(filestruct *inptr);
#endif
#ifndef DISABLE_SPELLER
int do_int_spell_fix(const char *word);
char *do_int_speller(char *tempfile_name);
char *do_alt_speller(char *tempfile_name);
bool do_int_spell_fix(const char *word);
const char *do_int_speller(const char *tempfile_name);
const char *do_alt_speller(char *tempfile_name);
void do_spell(void);
#endif
int do_spell(void);
#if !defined(DISABLE_WRAPPING) && !defined(NANO_SMALL) || !defined(DISABLE_JUSTIFY)
#if !defined(NANO_SMALL) || !defined(DISABLE_JUSTIFY)
size_t indent_length(const char *line);
#endif
#ifndef DISABLE_JUSTIFY
int justify_format(int changes_allowed, filestruct *line, size_t skip);
#ifdef HAVE_REGEX_H
size_t quote_length(const char *line, const regex_t *qreg);
#else
void justify_format(filestruct *line, size_t skip);
size_t quote_length(const char *line);
#endif
#ifdef HAVE_REGEX_H
# define IFREG(a, b) a, b
#else
# define IFREG(a, b) a
#endif
int quotes_match(const char *a_line, size_t a_quote,
IFREG(const char *b_line, const regex_t *qreg));
size_t indents_match(const char *a_line, size_t a_indent,
const char *b_line, size_t b_indent);
filestruct *backup_lines(filestruct *first_line, size_t par_len,
size_t quote_len);
int breakable(const char *line, int goal);
int break_line(const char *line, int goal, int force);
int do_para_search(int search_type, size_t *quote, size_t *par, size_t
*indent, int do_refresh);
int do_para_begin(void);
int do_para_end(void);
bool quotes_match(const char *a_line, size_t a_quote, const char
*b_line);
bool indents_match(const char *a_line, size_t a_indent, const char
*b_line, size_t b_indent);
bool begpar(const filestruct *const foo);
void do_para_begin(void);
bool inpar(const char *str);
void do_para_end(void);
filestruct *backup_lines(filestruct *first_line, size_t par_len, size_t
quote_len);
bool breakable(const char *line, int goal);
int break_line(const char *line, int goal, bool force);
bool do_para_search(size_t *const quote, size_t *const par);
void do_justify(bool full_justify);
void do_justify_void(void);
void do_full_justify(void);
#endif /* !DISABLE_JUSTIFY */
int do_justify(void);
int do_exit(void);
void do_exit(void);
void signal_init(void);
RETSIGTYPE handle_hupterm(int signal);
RETSIGTYPE do_suspend(int signal);
RETSIGTYPE do_cont(int signal);
#ifndef NANO_SMALL
void handle_sigwinch(int s);
void allow_pending_sigwinch(int allow);
void allow_pending_sigwinch(bool allow);
#endif
void print_numlock_warning(void);
#ifndef NANO_SMALL
void do_toggle(const toggle *which);
#endif
void disable_signals(void);
#ifndef NANO_SMALL
void enable_signals(void);
#endif
void disable_flow_control(void);
void enable_flow_control(void);
void terminal_init(void);
/* Public functions in rcfile.c */
#ifdef ENABLE_NANORC
void rcfile_error(const char *msg, ...);
void rcfile_msg(const char *msg, ...);
char *parse_next_word(char *ptr);
char *parse_argument(char *ptr);
#ifdef ENABLE_COLOR
int colortoint(const char *colorname, int *bright);
char *parse_next_regex(char *ptr);
int nregcomp(regex_t *preg, const char *regex, int flags);
int nregcomp(regex_t *preg, const char *regex, int eflags);
void parse_syntax(char *ptr);
void parse_colors(char *ptr);
#endif /* ENABLE_COLOR */
@@ -376,8 +399,10 @@ int is_whole_word(int curr_pos, const char *datastr, const char
*searchword);
int findnextstr(int can_display_wrap, int wholeword, const filestruct
*begin, size_t beginx, const char *needle, int no_sameline);
int do_search(void);
int do_research(void);
void do_search(void);
#ifndef NANO_SMALL
void do_research(void);
#endif
void replace_abort(void);
#ifdef HAVE_REGEX_H
int replace_regexp(char *string, int create_flag);
@@ -385,26 +410,24 @@ int replace_regexp(char *string, int create_flag);
char *replace_line(const char *needle);
int do_replace_loop(const char *needle, const filestruct *real_current,
size_t *real_current_x, int wholewords);
int do_replace(void);
int do_gotoline(int line, int save_pos);
int do_gotoline_void(void);
void do_replace(void);
void do_gotoline(int line, bool save_pos);
void do_gotoline_void(void);
#if defined (ENABLE_MULTIBUFFER) || !defined (DISABLE_SPELLER)
void do_gotopos(int line, int pos_x, int pos_y, int pos_placewewant);
void do_gotopos(int line, int pos_x, int pos_y, size_t pos_pww);
#endif
int do_find_bracket(void);
void do_find_bracket(void);
#ifndef NANO_SMALL
void history_init(void);
historytype *find_node(historytype *h, char *s);
historytype *find_node(historytype *h, const char *s);
void remove_node(historytype *r);
void insert_node(historytype *h, const char *s);
void update_history(historyheadtype *h, char *s);
void update_history(historyheadtype *h, const char *s);
char *get_history_older(historyheadtype *h);
char *get_history_newer(historyheadtype *h);
char *get_history_completion(historyheadtype *h, char *s);
#ifdef DEBUG
void free_history(historyheadtype *h);
#ifdef ENABLE_NANORC
void load_history(void);
void save_history(void);
#endif
#endif
@@ -416,8 +439,12 @@ int regexec_safe(const regex_t *preg, const char *string, size_t nmatch,
#endif
int regexp_bol_or_eol(const regex_t *preg, const char *string);
#endif
#ifndef HAVE_ISBLANK
int is_blank_char(int c);
#endif
int is_cntrl_char(int c);
int num_of_digits(int n);
bool parse_num(const char *str, ssize_t *val);
void align(char **strp);
void null_at(char **data, size_t index);
void unsunder(char *str, size_t true_len);
@@ -428,13 +455,26 @@ int nstricmp(const char *s1, const char *s2);
#ifndef HAVE_STRNCASECMP
int nstrnicmp(const char *s1, const char *s2, size_t n);
#endif
#ifndef NANO_SMALL
const char *revstrstr(const char *haystack, const char *needle,
const char *rev_start);
const char *revstristr(const char *haystack, const char *needle,
const char *rev_start);
#ifndef HAVE_STRCASESTR
const char *nstristr(const char *haystack, const char *needle);
#endif
const char *stristr(const char *haystack, const char *needle);
#ifndef NANO_SMALL
const char *revstrstr(const char *haystack, const char *needle, const
char *rev_start);
const char *revstristr(const char *haystack, const char *needle, const
char *rev_start);
#endif
#ifndef HAVE_STRNLEN
size_t nstrnlen(const char *s, size_t maxlen);
#endif
#if !defined(NANO_SMALL) && defined(ENABLE_NANORC)
#ifndef HAVE_GETLINE
ssize_t ngetline(char **lineptr, size_t *n, FILE *stream);
#endif
#ifndef HAVE_GETDELIM
ssize_t ngetdelim(char **lineptr, size_t *n, int delim, FILE *stream);
#endif
#endif /* !NANO_SMALL && ENABLE_NANORC */
const char *strstrwrapper(const char *haystack, const char *needle,
const char *start);
void nperror(const char *s);
@@ -443,38 +483,53 @@ void *nrealloc(void *ptr, size_t howmuch);
char *mallocstrcpy(char *dest, const char *src);
void new_magicline(void);
#ifndef NANO_SMALL
void mark_order(const filestruct **top, size_t *top_x,
const filestruct **bot, size_t *bot_x);
void mark_order(const filestruct **top, size_t *top_x, const filestruct
**bot, size_t *bot_x);
#endif
#ifndef DISABLE_TABCOMP
int check_wildcard_match(const char *text, const char *pattern);
#endif
/* Public functions in winio.c */
#ifndef NANO_SMALL
void reset_kbinput(void);
#endif
int get_kbinput(WINDOW *win, int *meta_key);
int *get_verbatim_kbinput(WINDOW *win, int *kbinput_len, int
allow_ascii);
int get_ignored_kbinput(WINDOW *win);
int get_accepted_kbinput(WINDOW *win, int kbinput, int *meta_key);
int get_ascii_kbinput(WINDOW *win, int kbinput);
int get_escape_seq_kbinput(WINDOW *win, int *escape_seq, int
escape_seq_len);
int get_translated_kbinput(int kbinput, int *es
#ifndef NANO_SMALL
, int reset
#endif
);
int get_ascii_kbinput(int kbinput, size_t ascii_digits
#ifndef NANO_SMALL
, int reset
#endif
);
int get_control_kbinput(int kbinput);
int get_escape_seq_kbinput(int *escape_seq, size_t es_len, int
*ignore_seq);
int get_escape_seq_abcd(int kbinput);
int get_mouseinput(int *mouse_x, int *mouse_y, int shortcut);
int do_first_line(void);
int do_last_line(void);
int xpt(const filestruct *fileptr, int index);
int *get_verbatim_kbinput(WINDOW *win, int *v_kbinput, size_t *v_len,
int allow_ascii);
int get_untranslated_kbinput(int kbinput, size_t position, int
allow_ascii
#ifndef NANO_SMALL
, int reset
#endif
);
#ifndef DISABLE_MOUSE
int get_mouseinput(int *mouse_x, int *mouse_y, int allow_shortcuts);
#endif
size_t xplustabs(void);
size_t actual_x(const char *str, size_t xplus);
size_t strnlenpt(const char *buf, size_t size);
size_t strlenpt(const char *buf);
void blank_bottombars(void);
void blank_bottomwin(void);
void blank_titlebar(void);
void blank_edit(void);
void blank_statusbar(void);
void blank_statusbar_refresh(void);
void check_statblank(void);
char *display_string(const char *buf, size_t start_col, int len);
void blank_bottombars(void);
char *display_string(const char *buf, size_t start_col, size_t len);
void nanoget_repaint(const char *buf, const char *inputbuf, size_t x);
int nanogetstr(int allowtabs, const char *buf, const char *def,
#ifndef NANO_SMALL
@@ -482,27 +537,27 @@ int nanogetstr(int allowtabs, const char *buf, const char *def,
#endif
const shortcut *s
#ifndef DISABLE_TABCOMP
, int *list
, bool *list
#endif
);
void set_modified(void);
void titlebar(const char *path);
void set_modified(void);
void statusbar(const char *msg, ...);
void bottombars(const shortcut *s);
void onekey(const char *keystroke, const char *desc, int len);
void onekey(const char *keystroke, const char *desc, size_t len);
#ifndef NDEBUG
int check_linenumbers(const filestruct *fileptr);
#endif
size_t get_page_start(size_t column);
void reset_cursor(void);
void add_marked_sameline(int begin, int end, filestruct *fileptr, int y,
int virt_cur_x, int this_page);
void edit_add(const filestruct *fileptr, const char *converted,
int yval, size_t start);
void edit_add(const filestruct *fileptr, const char *converted, int
yval, size_t start);
void update_line(const filestruct *fileptr, size_t index);
void update_cursor(void);
void center_cursor(void);
int need_horizontal_update(size_t old_pww);
int need_vertical_update(size_t old_pww);
void edit_scroll(updown direction, int nlines);
void edit_redraw(const filestruct *old_current, size_t old_pww);
void edit_refresh(void);
void edit_refresh_clearok(void);
void edit_update(filestruct *fileptr, topmidnone location);
int statusq(int allowtabs, const shortcut *s, const char *def,
#ifndef NANO_SMALL
@@ -510,13 +565,14 @@ int statusq(int allowtabs, const shortcut *s, const char *def,
#endif
const char *msg, ...);
int do_yesno(int all, const char *msg);
int total_refresh(void);
void total_refresh(void);
void display_main_list(void);
void statusbar(const char *msg, ...);
int do_cursorpos(int constant);
int do_cursorpos_void(void);
int line_len(const char *ptr);
int do_help(void);
void do_cursorpos(int constant);
void do_cursorpos_void(void);
#ifndef DISABLE_HELP
int help_line_len(const char *ptr);
void do_help(void);
#endif
void do_replace_highlight(int highlight_flag, const char *word);
#ifdef DEBUG
void dump_buffer(const filestruct *inptr);

View File

@@ -27,10 +27,10 @@
#include <stdio.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pwd.h>
#include <ctype.h>
#include <assert.h>
#include "proto.h"
#include "nano.h"
@@ -42,6 +42,9 @@ const static rcoption rcopts[] = {
{"autoindent", AUTOINDENT},
{"backup", BACKUP_FILE},
{"backupdir", 0},
#endif
#ifndef DISABLE_JUSTIFY
{"brackets", 0},
#endif
{"const", CONSTUPDATE},
#ifndef NANO_SMALL
@@ -71,14 +74,16 @@ const static rcoption rcopts[] = {
{"operatingdir", 0},
#endif
{"preserve", PRESERVE},
{"rebinddelete", REBIND_DELETE},
#ifndef DISABLE_JUSTIFY
{"punct", 0},
{"quotestr", 0},
#endif
{"rebinddelete", REBIND_DELETE},
#ifdef HAVE_REGEX_H
{"regexp", USE_REGEXP},
#endif
#ifndef NANO_SMALL
{"smarthome", SMART_HOME},
{"smooth", SMOOTHSCROLL},
#endif
#ifndef DISABLE_SPELLER
@@ -86,14 +91,17 @@ const static rcoption rcopts[] = {
#endif
{"suspend", SUSPEND},
{"tabsize", 0},
{"tempfile", TEMP_OPT},
{"tempfile", TEMP_FILE},
{"view", VIEW_MODE},
#ifndef NANO_SMALL
{"whitespace", 0},
#endif
{NULL, 0}
};
static int errors = 0;
static bool errors = FALSE;
static int lineno = 0;
static char *nanorc;
static const char *nanorc;
/* We have an error in some part of the rcfile; put it on stderr and
make the user hit return to continue starting up nano. */
@@ -102,36 +110,22 @@ void rcfile_error(const char *msg, ...)
va_list ap;
fprintf(stderr, "\n");
if (lineno > 0)
if (lineno > 0) {
errors = TRUE;
fprintf(stderr, _("Error in %s on line %d: "), nanorc, lineno);
va_start(ap, msg);
vfprintf(stderr, msg, ap);
va_end(ap);
fprintf(stderr, _("\nPress return to continue starting nano\n"));
while (getchar() != '\n');
}
/* Just print the error (one of many, perhaps) but don't abort, yet. */
void rcfile_msg(const char *msg, ...)
{
va_list ap;
if (!errors) {
errors = 1;
fprintf(stderr, "\n");
}
va_start(ap, msg);
vfprintf(stderr, msg, ap);
vfprintf(stderr, _(msg), ap);
va_end(ap);
fprintf(stderr, "\n");
}
/* Parse the next word from the string. Returns NULL if we hit EOL. */
char *parse_next_word(char *ptr)
{
while (*ptr != ' ' && *ptr != '\t' && *ptr != '\n' && *ptr != '\0')
while (!isblank(*ptr) && *ptr != '\n' && *ptr != '\0')
ptr++;
if (*ptr == '\0')
@@ -140,15 +134,16 @@ char *parse_next_word(char *ptr)
/* Null terminate and advance ptr */
*ptr++ = 0;
while (*ptr == ' ' || *ptr == '\t')
while (isblank(*ptr))
ptr++;
return ptr;
}
/* The keywords operatingdir, backupdir, fill, tabsize, speller, and
* quotestr take an argument when set. Among these, operatingdir,
* backupdir, speller, and quotestr have to allow tabs and spaces in the
/* The keywords operatingdir, backupdir, fill, tabsize, speller,
* punct, brackets, quotestr, and whitespace take an argument when set.
* Among these, operatingdir, backupdir, speller, punct, brackets,
* quotestr, and whitespace have to allow tabs and spaces in the
* argument. Thus, if the next word starts with a ", we say it ends
* with the last " of the line. Otherwise, the word is interpreted as
* usual. That is so the arguments can contain "s too. */
@@ -173,13 +168,13 @@ char *parse_argument(char *ptr)
ptr = NULL;
else
*ptr++ = '\0';
rcfile_error(_("Argument %s has unterminated \""), ptr_bak);
rcfile_error(N_("Argument %s has unterminated \""), ptr_bak);
} else {
*last_quote = '\0';
ptr = last_quote + 1;
}
if (ptr != NULL)
while (*ptr == ' ' || *ptr == '\t')
while (isblank(*ptr))
ptr++;
return ptr;
}
@@ -193,33 +188,33 @@ int colortoint(const char *colorname, int *bright)
if (colorname == NULL)
return -1;
if (!strncasecmp(colorname, "bright", 6)) {
if (strncasecmp(colorname, "bright", 6) == 0) {
*bright = 1;
colorname += 6;
}
if (!strcasecmp(colorname, "green"))
if (strcasecmp(colorname, "green") == 0)
mcolor = COLOR_GREEN;
else if (!strcasecmp(colorname, "red"))
else if (strcasecmp(colorname, "red") == 0)
mcolor = COLOR_RED;
else if (!strcasecmp(colorname, "blue"))
else if (strcasecmp(colorname, "blue") == 0)
mcolor = COLOR_BLUE;
else if (!strcasecmp(colorname, "white"))
else if (strcasecmp(colorname, "white") == 0)
mcolor = COLOR_WHITE;
else if (!strcasecmp(colorname, "yellow"))
else if (strcasecmp(colorname, "yellow") == 0)
mcolor = COLOR_YELLOW;
else if (!strcasecmp(colorname, "cyan"))
else if (strcasecmp(colorname, "cyan") == 0)
mcolor = COLOR_CYAN;
else if (!strcasecmp(colorname, "magenta"))
else if (strcasecmp(colorname, "magenta") == 0)
mcolor = COLOR_MAGENTA;
else if (!strcasecmp(colorname, "black"))
else if (strcasecmp(colorname, "black") == 0)
mcolor = COLOR_BLACK;
else {
rcfile_error(_("Color %s not understood.\n"
"Valid colors are \"green\", \"red\", \"blue\", \n"
"\"white\", \"yellow\", \"cyan\", \"magenta\" and \n"
"\"black\", with the optional prefix \"bright\" \n"
"for foreground colors.\n"), colorname);
rcfile_error(N_("Color %s not understood.\n"
"Valid colors are \"green\", \"red\", \"blue\", \n"
"\"white\", \"yellow\", \"cyan\", \"magenta\" and \n"
"\"black\", with the optional prefix \"bright\" \n"
"for foreground colors."), colorname);
mcolor = -1;
}
return mcolor;
@@ -237,24 +232,24 @@ char *parse_next_regex(char *ptr)
/* Null terminate and advance ptr. */
*ptr++ = '\0';
while (*ptr == ' ' || *ptr == '\t')
while (isblank(*ptr))
ptr++;
return ptr;
}
/* Compile the regular expression regex to preg. Returns FALSE on success,
TRUE if the expression is invalid. */
int nregcomp(regex_t *preg, const char *regex, int flags)
/* Compile the regular expression regex to preg. Returns FALSE on
* success, or TRUE if the expression is invalid. */
int nregcomp(regex_t *preg, const char *regex, int eflags)
{
int rc = regcomp(preg, regex, REG_EXTENDED | flags);
int rc = regcomp(preg, regex, REG_EXTENDED | eflags);
if (rc != 0) {
size_t len = regerror(rc, preg, NULL, 0);
char *str = charalloc(len);
regerror(rc, preg, str, len);
rcfile_error(_("Bad regex \"%s\": %s"), regex, str);
rcfile_error(N_("Bad regex \"%s\": %s"), regex, str);
free(str);
}
return rc != 0;
@@ -274,7 +269,7 @@ void parse_syntax(char *ptr)
return;
if (*ptr != '"') {
rcfile_error(_("Regex strings must begin and end with a \" character\n"));
rcfile_error(N_("Regex strings must begin and end with a \" character"));
return;
}
ptr++;
@@ -283,7 +278,7 @@ void parse_syntax(char *ptr)
ptr = parse_next_regex(ptr);
if (ptr == NULL) {
rcfile_error(_("Missing syntax name"));
rcfile_error(N_("Missing syntax name"));
return;
}
@@ -326,7 +321,7 @@ void parse_syntax(char *ptr)
ptr = parse_next_regex(ptr);
newext = (exttype *)nmalloc(sizeof(exttype));
if (nregcomp(&newext->val, fileregptr, REG_NOSUB))
if (nregcomp(&newext->val, fileregptr, REG_NOSUB) != 0)
free(newext);
else {
if (endext == NULL)
@@ -352,7 +347,7 @@ void parse_colors(char *ptr)
ptr = parse_next_word(ptr);
if (ptr == NULL) {
rcfile_error(_("Missing color name"));
rcfile_error(N_("Missing color name"));
return;
}
@@ -360,8 +355,8 @@ void parse_colors(char *ptr)
char *bgcolorname;
strtok(fgstr, ",");
bgcolorname = strtok(NULL, ",");
if (!strncasecmp(bgcolorname, "bright", 6)) {
rcfile_error(_("Background color %s cannot be bright"), bgcolorname);
if (strncasecmp(bgcolorname, "bright", 6) == 0) {
rcfile_error(N_("Background color %s cannot be bright"), bgcolorname);
return;
}
bg = colortoint(bgcolorname, &bright);
@@ -375,7 +370,7 @@ void parse_colors(char *ptr)
return;
if (syntaxes == NULL) {
rcfile_error(_("Cannot add a color directive without a syntax line"));
rcfile_error(N_("Cannot add a color directive without a syntax line"));
return;
}
@@ -398,13 +393,13 @@ void parse_colors(char *ptr)
if (*ptr == '\n' || *ptr == '\0')
break;
if (!strncasecmp(ptr, "start=", 6)) {
if (strncasecmp(ptr, "start=", 6) == 0) {
ptr += 6;
expectend = 1;
}
if (*ptr != '"') {
rcfile_error(_("Regex strings must begin and end with a \" character\n"));
rcfile_error(N_("Regex strings must begin and end with a \" character"));
ptr = parse_next_regex(ptr);
continue;
}
@@ -413,7 +408,7 @@ void parse_colors(char *ptr)
newcolor = (colortype *)nmalloc(sizeof(colortype));
fgstr = ptr;
ptr = parse_next_regex(ptr);
if (nregcomp(&newcolor->start, fgstr, 0)) {
if (nregcomp(&newcolor->start, fgstr, 0) != 0) {
free(newcolor);
cancelled = 1;
} else {
@@ -426,8 +421,7 @@ void parse_colors(char *ptr)
if (tmpsyntax->color == NULL) {
tmpsyntax->color = newcolor;
#ifdef DEBUG
fprintf(stderr, "Starting a new colorstring for fg %d bg %d\n",
fg, bg);
fprintf(stderr, "Starting a new colorstring for fg %d bg %d\n", fg, bg);
#endif
} else {
for (tmpcolor = tmpsyntax->color; tmpcolor->next != NULL;
@@ -441,17 +435,15 @@ void parse_colors(char *ptr)
}
if (expectend) {
if (ptr == NULL || strncasecmp(ptr, "end=", 4)) {
rcfile_error(_
("\"start=\" requires a corresponding \"end=\""));
if (ptr == NULL || strncasecmp(ptr, "end=", 4) != 0) {
rcfile_error(N_("\"start=\" requires a corresponding \"end=\""));
return;
}
ptr += 4;
if (*ptr != '"') {
rcfile_error(_
("Regex strings must begin and end with a \" character\n"));
rcfile_error(N_("Regex strings must begin and end with a \" character"));
continue;
}
ptr++;
@@ -464,7 +456,7 @@ void parse_colors(char *ptr)
if (cancelled)
continue;
newcolor->end = (regex_t *)nmalloc(sizeof(regex_t));
if (nregcomp(newcolor->end, fgstr, 0)) {
if (nregcomp(newcolor->end, fgstr, 0) != 0) {
free(newcolor->end);
newcolor->end = NULL;
}
@@ -478,13 +470,13 @@ void parse_colors(char *ptr)
void parse_rcfile(FILE *rcstream)
{
char *buf, *ptr, *keyword, *option;
int set = 0, i, j;
int set = 0, i;
buf = charalloc(1024);
while (fgets(buf, 1023, rcstream) != 0) {
lineno++;
ptr = buf;
while (*ptr == ' ' || *ptr == '\t')
while (isblank(*ptr))
ptr++;
if (*ptr == '\n' || *ptr == '\0')
@@ -504,18 +496,18 @@ void parse_rcfile(FILE *rcstream)
continue;
/* Else try to parse the keyword */
if (!strcasecmp(keyword, "set"))
if (strcasecmp(keyword, "set") == 0)
set = 1;
else if (!strcasecmp(keyword, "unset"))
else if (strcasecmp(keyword, "unset") == 0)
set = -1;
#ifdef ENABLE_COLOR
else if (!strcasecmp(keyword, "syntax"))
else if (strcasecmp(keyword, "syntax") == 0)
parse_syntax(ptr);
else if (!strcasecmp(keyword, "color"))
else if (strcasecmp(keyword, "color") == 0)
parse_colors(ptr);
#endif /* ENABLE_COLOR */
else {
rcfile_msg(_("Command %s not understood"), keyword);
rcfile_error(N_("Command %s not understood"), keyword);
continue;
}
@@ -525,33 +517,36 @@ void parse_rcfile(FILE *rcstream)
if (set != 0) {
for (i = 0; rcopts[i].name != NULL; i++) {
if (!strcasecmp(option, rcopts[i].name)) {
if (strcasecmp(option, rcopts[i].name) == 0) {
#ifdef DEBUG
fprintf(stderr, "%s: Parsing option %s\n",
"parse_rcfile()", rcopts[i].name);
#endif
if (set == 1) {
if (!strcasecmp(rcopts[i].name, "tabsize")
if (strcasecmp(rcopts[i].name, "tabsize") == 0
#ifndef DISABLE_OPERATINGDIR
|| !strcasecmp(rcopts[i].name, "operatingdir")
|| strcasecmp(rcopts[i].name, "operatingdir") == 0
#endif
#ifndef DISABLE_WRAPJUSTIFY
|| !strcasecmp(rcopts[i].name, "fill")
#endif
#ifndef DISABLE_JUSTIFY
|| !strcasecmp(rcopts[i].name, "quotestr")
|| strcasecmp(rcopts[i].name, "fill") == 0
#endif
#ifndef NANO_SMALL
|| !strcasecmp(rcopts[i].name, "backupdir")
|| strcasecmp(rcopts[i].name, "whitespace") == 0
#endif
#ifndef DISABLE_JUSTIFY
|| strcasecmp(rcopts[i].name, "punct") == 0
|| strcasecmp(rcopts[i].name, "brackets") == 0
|| strcasecmp(rcopts[i].name, "quotestr") == 0
#endif
#ifndef NANO_SMALL
|| strcasecmp(rcopts[i].name, "backupdir") == 0
#endif
#ifndef DISABLE_SPELLER
|| !strcasecmp(rcopts[i].name, "speller")
|| strcasecmp(rcopts[i].name, "speller") == 0
#endif
) {
if (*ptr == '\n' || *ptr == '\0') {
rcfile_error(_
("Option %s requires an argument"),
rcopts[i].name);
rcfile_error(N_("Option %s requires an argument"), rcopts[i].name);
continue;
}
option = ptr;
@@ -562,52 +557,63 @@ void parse_rcfile(FILE *rcstream)
fprintf(stderr, "option = %s\n", option);
#endif
#ifndef DISABLE_OPERATINGDIR
if (!strcasecmp(rcopts[i].name, "operatingdir"))
if (strcasecmp(rcopts[i].name, "operatingdir") == 0)
operating_dir = mallocstrcpy(NULL, option);
else
#endif
#ifndef DISABLE_WRAPJUSTIFY
if (!strcasecmp(rcopts[i].name, "fill")) {
char *first_error;
/* Using strtol() instead of atoi() lets
* us accept 0 while checking other
* errors. */
j = (int)strtol(option, &first_error, 10);
if (errno == ERANGE || *option == '\0' || *first_error != '\0')
rcfile_error(_("Requested fill size %d invalid"),
j);
else
wrap_at = j;
if (strcasecmp(rcopts[i].name, "fill") == 0) {
if (!parse_num(option, &wrap_at)) {
rcfile_error(N_("Requested fill size %s invalid"), option);
wrap_at = -CHARS_FROM_EOL;
}
} else
#endif
#ifndef NANO_SMALL
if (strcasecmp(rcopts[i].name, "whitespace") == 0) {
size_t ws_len;
whitespace = mallocstrcpy(NULL, option);
ws_len = strlen(whitespace);
if (ws_len != 2 || (ws_len == 2 && (is_cntrl_char(whitespace[0]) || is_cntrl_char(whitespace[1])))) {
rcfile_error(N_("Two non-control characters required"));
free(whitespace);
whitespace = NULL;
}
} else
#endif
#ifndef DISABLE_JUSTIFY
if (!strcasecmp(rcopts[i].name, "quotestr"))
if (strcasecmp(rcopts[i].name, "punct") == 0) {
punct = mallocstrcpy(NULL, option);
if (strchr(punct, '\t') != NULL || strchr(punct, ' ') != NULL) {
rcfile_error(N_("Non-tab and non-space characters required"));
free(punct);
punct = NULL;
}
} else if (strcasecmp(rcopts[i].name, "brackets") == 0) {
brackets = mallocstrcpy(NULL, option);
if (strchr(brackets, '\t') != NULL || strchr(brackets, ' ') != NULL) {
rcfile_error(N_("Non-tab and non-space characters required"));
free(brackets);
brackets = NULL;
}
} else if (strcasecmp(rcopts[i].name, "quotestr") == 0)
quotestr = mallocstrcpy(NULL, option);
else
#endif
#ifndef NANO_SMALL
if (!strcasecmp(rcopts[i].name, "backupdir"))
if (strcasecmp(rcopts[i].name, "backupdir") == 0)
backup_dir = mallocstrcpy(NULL, option);
else
#endif
#ifndef DISABLE_SPELLER
if (!strcasecmp(rcopts[i].name, "speller"))
if (strcasecmp(rcopts[i].name, "speller") == 0)
alt_speller = mallocstrcpy(NULL, option);
else
#endif
{
char *first_error;
/* Using strtol instead of atoi lets us
* accept 0 while checking other
* errors. */
j = (int)strtol(option, &first_error, 10);
if (errno == ERANGE || *option == '\0' || *first_error != '\0')
rcfile_error(_("Requested tab size %d invalid"),
j);
else
tabsize = j;
if (strcasecmp(rcopts[i].name, "tabsize") == 0) {
if (!parse_num(option, &tabsize) || tabsize <= 0)
rcfile_error(N_("Requested tab size %s invalid"), option);
tabsize = -1;
}
} else
SET(rcopts[i].flag);
@@ -627,8 +633,13 @@ void parse_rcfile(FILE *rcstream)
}
}
free(buf);
if (errors)
rcfile_error(_("Errors found in .nanorc file"));
if (errors) {
errors = FALSE;
fprintf(stderr, _("\nPress Return to continue starting nano\n"));
while (getchar() != '\n')
;
}
return;
}
@@ -637,16 +648,13 @@ void parse_rcfile(FILE *rcstream)
void do_rcfile(void)
{
FILE *rcstream;
const struct passwd *userage;
uid_t euid = geteuid();
char *homenv = getenv("HOME");
#ifdef SYSCONFDIR
assert(sizeof(SYSCONFDIR) == strlen(SYSCONFDIR) + 1);
nanorc = charalloc(sizeof(SYSCONFDIR) + 7);
sprintf(nanorc, "%s/nanorc", SYSCONFDIR);
nanorc = SYSCONFDIR "/nanorc";
/* Try to open system nanorc */
if ((rcstream = fopen(nanorc, "r")) != NULL) {
rcstream = fopen(nanorc, "r");
if (rcstream != NULL) {
/* Parse it! */
parse_rcfile(rcstream);
fclose(rcstream);
@@ -655,47 +663,51 @@ void do_rcfile(void)
lineno = 0;
/* Rely on $HOME, fall back on getpwuid() */
if (homenv != NULL) {
nanorc = charealloc(nanorc, strlen(homenv) + 10);
sprintf(nanorc, "%s/.nanorc", homenv);
} else {
userage = getpwuid(euid);
endpwent();
{
const char *homenv = getenv("HOME");
if (userage == NULL) {
rcfile_error(_("I can't find my home directory! Wah!"));
SET(NO_RCFILE);
} else {
nanorc = charealloc(nanorc, strlen(userage->pw_dir) + 9);
sprintf(nanorc, "%s/.nanorc", userage->pw_dir);
/* Rely on $HOME, fall back on getpwuid() */
if (homenv == NULL) {
const struct passwd *userage = getpwuid(geteuid());
if (userage != NULL)
homenv = userage->pw_dir;
}
homedir = mallocstrcpy(NULL, homenv);
}
if (!ISSET(NO_RCFILE)) {
if (homedir == NULL) {
rcfile_error(N_("I can't find my home directory! Wah!"));
SET(NO_RCFILE);
} else {
size_t homelen = strlen(homedir);
char *nanorcf = charalloc(homelen + 9);
nanorc = nanorcf;
strcpy(nanorcf, homedir);
strcpy(nanorcf + homelen, "/.nanorc");
#if defined(DISABLE_ROOTWRAP) && !defined(DISABLE_WRAPPING)
/* If we've already read SYSCONFDIR/nanorc (if it's there), we're
root, and --disable-wrapping-as-root is used, turn wrapping off */
if (euid == NANO_ROOT_UID)
if (geteuid() == NANO_ROOT_UID)
SET(NO_WRAP);
#endif
if ((rcstream = fopen(nanorc, "r")) == NULL) {
rcstream = fopen(nanorc, "r");
if (rcstream == NULL) {
/* Don't complain about the file not existing */
if (errno != ENOENT) {
rcfile_error(_("Unable to open ~/.nanorc file, %s"),
strerror(errno));
rcfile_error(N_("Error reading %s: %s"), nanorc, strerror(errno));
SET(NO_RCFILE);
}
} else {
parse_rcfile(rcstream);
fclose(rcstream);
}
free(nanorcf);
}
lineno = 0;
free(nanorc);
#ifdef ENABLE_COLOR
set_colorpairs();
#endif

View File

@@ -31,24 +31,39 @@
#include "proto.h"
#include "nano.h"
/* Regular expression helper functions */
#ifdef HAVE_REGEX_H
static int regexp_compiled = FALSE;
/* Regular expression helper functions. */
/* Compile the given regular expression. Return value 0 means the
* expression was invalid, and we wrote an error message on the status
* bar. Return value 1 means success. */
int regexp_init(const char *regexp)
{
/* Hmm, perhaps we should check for whether regcomp returns successfully */
if (regcomp(&search_regexp, regexp, (ISSET(CASE_SENSITIVE) ? 0 : REG_ICASE)
| REG_EXTENDED) != 0)
return 0;
int rc = regcomp(&search_regexp, regexp, REG_EXTENDED |
(ISSET(CASE_SENSITIVE) ? 0 : REG_ICASE));
SET(REGEXP_COMPILED);
assert(!regexp_compiled);
if (rc != 0) {
size_t len = regerror(rc, &search_regexp, NULL, 0);
char *str = charalloc(len);
regerror(rc, &search_regexp, str, len);
statusbar(_("Bad regex \"%s\": %s"), regexp, str);
free(str);
return 0;
}
regexp_compiled = TRUE;
return 1;
}
void regexp_cleanup(void)
{
if (ISSET(REGEXP_COMPILED)) {
UNSET(REGEXP_COMPILED);
if (regexp_compiled) {
regexp_compiled = FALSE;
regfree(&search_regexp);
}
}
@@ -56,15 +71,18 @@ void regexp_cleanup(void)
void not_found_msg(const char *str)
{
if (strlen(str) <= COLS / 2)
statusbar(_("\"%s\" not found"), str);
else {
char *foo = mallocstrcpy(NULL, str);
char *disp;
int numchars;
assert(str != NULL);
foo[COLS / 2] = '\0';
statusbar(_("\"%s...\" not found"), foo);
free(foo);
}
disp = display_string(str, 0, (COLS / 2) + 1);
numchars = strnlen(disp, COLS / 2);
statusbar(_("\"%.*s%s\" not found"), numchars, disp,
disp[numchars] == '\0' ? "" : "...");
free(disp);
}
void search_abort(void)
@@ -150,9 +168,12 @@ int search_init(int replacing)
#endif
"",
#ifdef HAVE_REGEX_H
/* This string is just a modifier for the search prompt; no
* grammar is implied. */
ISSET(USE_REGEXP) ? _(" [Regexp]") : "",
ISSET(USE_REGEXP) ? _(" [Regexp]") :
#endif
"",
#ifndef NANO_SMALL
/* This string is just a modifier for the search prompt; no
@@ -174,7 +195,6 @@ int search_init(int replacing)
if (i == -1 || (i < 0 && last_search[0] == '\0') ||
(!replacing && i == 0 && answer[0] == '\0')) {
statusbar(_("Search Cancelled"));
reset_cursor();
#ifndef NANO_SMALL
search_history.current = search_history.next;
#endif
@@ -184,21 +204,15 @@ int search_init(int replacing)
case -2: /* It's the same string. */
#ifdef HAVE_REGEX_H
/* Since answer is "", use last_search! */
if (ISSET(USE_REGEXP) && regexp_init(last_search) == 0) {
statusbar(_("Invalid regex \"%s\""), last_search);
reset_cursor();
if (ISSET(USE_REGEXP) && regexp_init(last_search) == 0)
return -1;
}
#endif
break;
case 0: /* They entered something new. */
last_replace[0] = '\0';
#ifdef HAVE_REGEX_H
if (ISSET(USE_REGEXP) && regexp_init(answer) == 0) {
statusbar(_("Invalid regex \"%s\""), answer);
reset_cursor();
if (ISSET(USE_REGEXP) && regexp_init(answer) == 0)
return -1;
}
#endif
break;
#ifndef NANO_SMALL
@@ -224,11 +238,9 @@ int search_init(int replacing)
#ifndef NANO_SMALL
search_history.current = search_history.next;
#endif
i = (int)strtol(answer, &buf, 10); /* Just testing answer here. */
if (!(errno == ERANGE || *answer == '\0' || *buf != '\0'))
do_gotoline(-1, 0);
else
do_gotoline_void();
/* If answer parses as an integer, put it up on the
* statusbar. */
do_gotoline(parse_num(answer, NULL) ? -1 : 0, FALSE);
/* Fall through. */
default:
return -1;
@@ -311,7 +323,7 @@ int findnextstr(int can_display_wrap, int wholeword, const filestruct
/* Original start line reached. */
if (fileptr == begin)
search_last_line = 1;
search_last_line = TRUE;
rev_start = fileptr->data;
#ifndef NANO_SMALL
if (ISSET(REVERSE_SEARCH))
@@ -345,11 +357,11 @@ int findnextstr(int can_display_wrap, int wholeword, const filestruct
}
/* Search for a string. */
int do_search(void)
void do_search(void)
{
int i;
size_t old_pww = placewewant, fileptr_x = current_x;
int i, didfind;
filestruct *fileptr = current;
int fileptr_x = current_x, didfind;
#ifndef DISABLE_WRAPPING
wrap_reset();
@@ -367,7 +379,7 @@ int do_search(void)
#endif
if (i != 0)
return 0;
return;
/* If answer is now "", copy last_search into answer. */
if (answer[0] == '\0')
@@ -382,10 +394,8 @@ int do_search(void)
update_history(&search_history, answer);
#endif
search_last_line = 0;
search_last_line = FALSE;
didfind = findnextstr(TRUE, FALSE, current, current_x, answer, FALSE);
edit_refresh();
placewewant = xplustabs();
/* Check to see if there's only one occurrence of the string and
* we're on it now. */
@@ -396,8 +406,10 @@ int do_search(void)
* that we find one only once per line. We should only end up
* back at the same position if the string isn't found again, in
* which case it's the only occurrence. */
if (ISSET(USE_REGEXP) && regexp_bol_or_eol(&search_regexp, last_search)) {
didfind = findnextstr(TRUE, FALSE, current, current_x, answer, TRUE);
if (ISSET(USE_REGEXP) && regexp_bol_or_eol(&search_regexp,
last_search)) {
didfind = findnextstr(TRUE, FALSE, current, current_x,
answer, TRUE);
if (fileptr == current && fileptr_x == current_x && !didfind)
statusbar(_("This is the only occurrence"));
} else {
@@ -408,16 +420,18 @@ int do_search(void)
#endif
}
placewewant = xplustabs();
edit_redraw(fileptr, old_pww);
search_abort();
return 1;
}
#ifndef NANO_SMALL
/* Search for the next string without prompting. */
int do_research(void)
void do_research(void)
{
size_t old_pww = placewewant, fileptr_x = current_x;
int didfind;
filestruct *fileptr = current;
int fileptr_x = current_x, didfind;
#ifndef DISABLE_WRAPPING
wrap_reset();
@@ -428,17 +442,13 @@ int do_research(void)
#ifdef HAVE_REGEX_H
/* Since answer is "", use last_search! */
if (ISSET(USE_REGEXP) && regexp_init(last_search) == 0) {
statusbar(_("Invalid regex \"%s\""), last_search);
reset_cursor();
return -1;
}
if (ISSET(USE_REGEXP) && regexp_init(last_search) == 0)
return;
#endif
search_last_line = 0;
didfind = findnextstr(TRUE, FALSE, current, current_x, last_search, FALSE);
edit_refresh();
placewewant = xplustabs();
search_last_line = FALSE;
didfind = findnextstr(TRUE, FALSE, current, current_x,
last_search, FALSE);
/* Check to see if there's only one occurrence of the string and
* we're on it now. */
@@ -449,8 +459,10 @@ int do_research(void)
* "^$"), so that we find one only once per line. We should
* only end up back at the same position if the string isn't
* found again, in which case it's the only occurrence. */
if (ISSET(USE_REGEXP) && regexp_bol_or_eol(&search_regexp, last_search)) {
didfind = findnextstr(TRUE, FALSE, current, current_x, answer, TRUE);
if (ISSET(USE_REGEXP) && regexp_bol_or_eol(&search_regexp,
last_search)) {
didfind = findnextstr(TRUE, FALSE, current, current_x,
answer, TRUE);
if (fileptr == current && fileptr_x == current_x && !didfind)
statusbar(_("This is the only occurrence"));
} else {
@@ -463,10 +475,11 @@ int do_research(void)
} else
statusbar(_("No current search pattern"));
placewewant = xplustabs();
edit_redraw(fileptr, old_pww);
search_abort();
return 1;
}
#endif
void replace_abort(void)
{
@@ -533,7 +546,7 @@ char *replace_line(const char *needle)
/* Calculate the size of the new line. */
#ifdef HAVE_REGEX_H
if (ISSET(USE_REGEXP)) {
search_match_count = regmatches[0].rm_eo - regmatches[0].rm_so;
search_match_count = regmatches[0].rm_eo - regmatches[0].rm_so;
new_line_size = replace_regexp(NULL, 0);
} else {
#endif
@@ -575,12 +588,12 @@ char *replace_line(const char *needle)
int do_replace_loop(const char *needle, const filestruct *real_current,
size_t *real_current_x, int wholewords)
{
int replaceall = 0, numreplaced = -1;
int replaceall = FALSE, numreplaced = -1;
size_t old_pww = placewewant, current_x_save = current_x;
const filestruct *current_save = current;
size_t current_x_save = current_x;
#ifdef HAVE_REGEX_H
/* The starting-line match and bol/eol regex flags. */
int begin_line = 0, bol_or_eol = 0;
int begin_line = FALSE, bol_or_eol = FALSE;
#endif
#ifndef NANO_SMALL
int mark_set = ISSET(MARK_ISSET);
@@ -617,12 +630,16 @@ int do_replace_loop(const char *needle, const filestruct *real_current,
* continue. */
else {
if (current == real_current)
begin_line = 1;
bol_or_eol = 0;
begin_line = TRUE;
bol_or_eol = FALSE;
}
#endif
edit_refresh();
if (!replaceall) {
placewewant = xplustabs();
edit_redraw(current_save, old_pww);
old_pww = placewewant;
}
#ifdef HAVE_REGEX_H
if (ISSET(USE_REGEXP))
@@ -660,7 +677,7 @@ int do_replace_loop(const char *needle, const filestruct *real_current,
* replace ("^", "$", or "^$"). */
if (ISSET(USE_REGEXP) && regexp_bol_or_eol(&search_regexp,
needle))
bol_or_eol = 1;
bol_or_eol = TRUE;
#endif
if (i > 0 || replaceall) { /* Yes, replace it!!!! */
@@ -668,7 +685,7 @@ int do_replace_loop(const char *needle, const filestruct *real_current,
int length_change;
if (i == 2)
replaceall = 1;
replaceall = TRUE;
copy = replace_line(needle);
@@ -703,7 +720,15 @@ int do_replace_loop(const char *needle, const filestruct *real_current,
free(current->data);
current->data = copy;
edit_refresh();
if (!replaceall) {
#ifdef ENABLE_COLOR
if (ISSET(COLOR_SYNTAX))
edit_refresh();
else
#endif
update_line(current, current_x);
}
set_modified();
numreplaced++;
}
@@ -722,7 +747,7 @@ int do_replace_loop(const char *needle, const filestruct *real_current,
}
/* Replace a string. */
int do_replace(void)
void do_replace(void)
{
int i, numreplaced;
filestruct *edittop_save, *begin;
@@ -731,23 +756,23 @@ int do_replace(void)
if (ISSET(VIEW_MODE)) {
print_view_warning();
replace_abort();
return 0;
return;
}
i = search_init(1);
if (i == -1) { /* Cancel, Go to Line, blank search
* string, or regcomp() failed. */
replace_abort();
return 0;
return;
} else if (i == -2) { /* No Replace. */
do_search();
return 0;
return;
} else if (i == 1) /* Case Sensitive, Backwards, or Regexp
* search toggle. */
do_replace();
if (i != 0)
return 0;
return;
/* If answer is not "", add answer to the search history list and
* copy answer into last_search. */
@@ -783,7 +808,7 @@ int do_replace(void)
statusbar(_("Replace Cancelled"));
}
replace_abort();
return 0;
return;
}
last_replace = mallocstrcpy(last_replace, answer);
@@ -797,24 +822,24 @@ int do_replace(void)
numreplaced = do_replace_loop(last_search, begin, &beginx, FALSE);
/* Restore where we were. */
edittop = edittop_save;
current = begin;
current_x = beginx;
renumber_all();
edit_update(edittop_save, TOP);
edit_refresh();
if (numreplaced >= 0)
statusbar(P_("Replaced %d occurrence", "Replaced %d occurrences",
numreplaced), numreplaced);
replace_abort();
return 1;
}
int do_gotoline(int line, int save_pos)
void do_gotoline(int line, bool save_pos)
{
if (line <= 0) { /* Ask for it */
if (line <= 0) { /* Ask for it. */
char *ans = mallocstrcpy(NULL, answer);
int st = statusq(FALSE, goto_list, line != 0 ? ans : "",
int st = statusq(FALSE, goto_list, line < 0 ? ans : "",
#ifndef NANO_SMALL
NULL,
#endif
@@ -827,64 +852,70 @@ int do_gotoline(int line, int save_pos)
statusbar(_("Aborted"));
if (st != 0) {
display_main_list();
return 0;
return;
}
line = atoi(answer);
/* Bounds check. */
if (line <= 0) {
if (!parse_num(answer, &line) || line < 0) {
statusbar(_("Come on, be reasonable"));
display_main_list();
return 0;
return;
}
}
for (current = fileage; current->next != NULL && line > 1; line--)
current = current->next;
if (current->lineno > line) {
for (; current->prev != NULL && current->lineno > line;
current = current->prev)
;
} else {
for (; current->next != NULL && current->lineno < line;
current = current->next)
;
}
current_x = 0;
/* If save_pos is nonzero, don't change the cursor position when
/* If save_pos is TRUE, don't change the cursor position when
* updating the edit window. */
edit_update(current, save_pos ? NONE : CENTER);
placewewant = 0;
display_main_list();
return 1;
}
int do_gotoline_void(void)
void do_gotoline_void(void)
{
return do_gotoline(0, 0);
do_gotoline(0, FALSE);
}
#if defined(ENABLE_MULTIBUFFER) || !defined(DISABLE_SPELLER)
void do_gotopos(int line, int pos_x, int pos_y, int pos_placewewant)
void do_gotopos(int line, int pos_x, int pos_y, size_t pos_pww)
{
/* since do_gotoline() resets the x-coordinate but not the
y-coordinate, set the coordinates up this way */
/* Since do_gotoline() resets the x-coordinate but not the
* y-coordinate, set the coordinates up this way. */
current_y = pos_y;
do_gotoline(line, 1);
do_gotoline(line, TRUE);
/* make sure that the x-coordinate is sane here */
if (pos_x > strlen(current->data))
pos_x = strlen(current->data);
/* Make sure that the x-coordinate is sane here. */
current_x = strlen(current->data);
if (pos_x < current_x)
current_x = pos_x;
/* set the rest of the coordinates up */
current_x = pos_x;
placewewant = pos_placewewant;
/* Set the rest of the coordinates up. */
placewewant = pos_pww;
update_line(current, pos_x);
}
#endif
#if !defined(NANO_SMALL) && defined(HAVE_REGEX_H)
int do_find_bracket(void)
void do_find_bracket(void)
{
char ch_under_cursor, wanted_ch;
const char *pos, *brackets = "([{<>}])";
char regexp_pat[] = "[ ]";
int flagsave, current_x_save, count = 1;
size_t old_pww, current_x_save;
int count = 1;
long flags_save;
filestruct *current_save;
ch_under_cursor = current->data[current_x];
@@ -892,25 +923,28 @@ int do_find_bracket(void)
pos = strchr(brackets, ch_under_cursor);
if (ch_under_cursor == '\0' || pos == NULL) {
statusbar(_("Not a bracket"));
return 1;
return;
}
assert(strlen(brackets) % 2 == 0);
wanted_ch = brackets[(strlen(brackets) - 1) - (pos - brackets)];
old_pww = placewewant;
current_x_save = current_x;
current_save = current;
flagsave = flags;
flags_save = flags;
SET(USE_REGEXP);
/* Apparent near redundancy with regexp_pat[] here is needed.
* "[][]" works, "[[]]" doesn't. */
if (pos < brackets + (strlen(brackets) / 2)) { /* On a left bracket. */
if (pos < brackets + (strlen(brackets) / 2)) {
/* On a left bracket. */
regexp_pat[1] = wanted_ch;
regexp_pat[2] = ch_under_cursor;
UNSET(REVERSE_SEARCH);
} else { /* On a right bracket. */
} else {
/* On a right bracket. */
regexp_pat[1] = ch_under_cursor;
regexp_pat[2] = wanted_ch;
SET(REVERSE_SEARCH);
@@ -918,18 +952,19 @@ int do_find_bracket(void)
regexp_init(regexp_pat);
/* We constructed regexp_pat to be a valid expression. */
assert(ISSET(REGEXP_COMPILED));
assert(regexp_compiled);
search_last_line = 0;
search_last_line = FALSE;
while (TRUE) {
if (findnextstr(FALSE, FALSE, current, current_x, regexp_pat, FALSE) != 0) {
if (findnextstr(FALSE, FALSE, current, current_x, regexp_pat,
FALSE) != 0) {
/* Found identical bracket. */
if (current->data[current_x] == ch_under_cursor)
count++;
/* Found complementary bracket. */
else if (--count == 0) {
edit_refresh();
placewewant = xplustabs();
edit_redraw(current_save, old_pww);
break;
}
} else {
@@ -943,8 +978,7 @@ int do_find_bracket(void)
}
regexp_cleanup();
flags = flagsave;
return 0;
flags = flags_save;
}
#endif
@@ -972,7 +1006,7 @@ void history_init(void)
}
/* find first node containing string *s in history list *h */
historytype *find_node(historytype *h, char *s)
historytype *find_node(historytype *h, const char *s)
{
for (; h->next != NULL; h = h->next)
if (strcmp(s, h->data) == 0)
@@ -996,14 +1030,14 @@ void insert_node(historytype *h, const char *s)
a = (historytype *)nmalloc(sizeof(historytype));
a->next = h->next;
a->prev = h->next->prev;
a->prev = h;
h->next->prev = a;
h->next = a;
a->data = mallocstrcpy(NULL, s);
}
/* update history list */
void update_history(historyheadtype *h, char *s)
void update_history(historyheadtype *h, const char *s)
{
historytype *p;
@@ -1061,14 +1095,16 @@ char *get_history_completion(historyheadtype *h, char *s)
return s;
}
#ifdef DEBUG
/* free a history list */
void free_history(historyheadtype *h)
{
historytype *p, *n;
historytype *p;
for (p = h->next; (n = p->next); p = n)
for (p = h->next; p->next != NULL; p = p->next)
remove_node(p);
}
#endif
/* end of history support functions */
#endif /* !NANO_SMALL */

View File

@@ -21,11 +21,12 @@
#include "config.h"
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <unistd.h>
#include <ctype.h>
#include <errno.h>
#include <assert.h>
#include "proto.h"
#include "nano.h"
@@ -52,10 +53,20 @@ int regexp_bol_or_eol(const regex_t *preg, const char *string)
}
#endif /* HAVE_REGEX_H */
#ifndef HAVE_ISBLANK
/* This function is equivalent to isblank(). */
int is_blank_char(int c)
{
return (c == '\t' || c == ' ');
}
#endif
/* This function is equivalent to iscntrl(), except in that it also
* handles control characters with their high bits set. */
int is_cntrl_char(int c)
{
return (-128 <= c && c < -96) || (0 <= c && c < 32) ||
(127 <= c && c < 160);
(127 <= c && c < 160);
}
int num_of_digits(int n)
@@ -73,6 +84,23 @@ int num_of_digits(int n)
return i;
}
/* Read an int from str, and store it in *val (if val is not NULL). On
* error, we return FALSE and don't change *val. Otherwise, we return
* TRUE. */
bool parse_num(const char *str, ssize_t *val)
{
char *first_error;
ssize_t j;
assert(str != NULL);
j = (ssize_t)strtol(str, &first_error, 10);
if (errno == ERANGE || *str == '\0' || *first_error != '\0')
return FALSE;
if (val != NULL)
*val = j;
return TRUE;
}
/* Fix the memory allocation for a string. */
void align(char **strp)
{
@@ -116,10 +144,12 @@ void sunder(char *str)
int nstricmp(const char *s1, const char *s2)
{
assert(s1 != NULL && s2 != NULL);
for (; *s1 != '\0' && *s2 != '\0'; s1++, s2++) {
if (tolower(*s1) != tolower(*s2))
break;
}
return (tolower(*s1) - tolower(*s2));
}
#endif
@@ -129,23 +159,45 @@ int nstricmp(const char *s1, const char *s2)
int nstrnicmp(const char *s1, const char *s2, size_t n)
{
assert(s1 != NULL && s2 != NULL);
for (; n > 0 && *s1 != '\0' && *s2 != '\0'; n--, s1++, s2++) {
if (tolower(*s1) != tolower(*s2))
break;
}
if (n > 0)
return (tolower(*s1) - tolower(*s2));
else if (n == 0)
else
return 0;
else if (n < 0)
return -1;
}
#endif
#ifndef HAVE_STRCASESTR
/* This function is equivalent to strcasestr(). It was adapted from
* mutt's mutt_stristr() function. */
const char *nstristr(const char *haystack, const char *needle)
{
assert(haystack != NULL && needle != NULL);
for (; *haystack != '\0'; haystack++) {
const char *p = haystack;
const char *q = needle;
for (; tolower(*p) == tolower(*q) && *q != '\0'; p++, q++)
;
if (*q == '\0')
return haystack;
}
return NULL;
}
#endif
/* None of this is needed if we're using NANO_SMALL! */
#ifndef NANO_SMALL
const char *revstrstr(const char *haystack, const char *needle,
const char *rev_start)
const char *revstrstr(const char *haystack, const char *needle, const
char *rev_start)
{
for (; rev_start >= haystack; rev_start--) {
const char *r, *q;
@@ -158,8 +210,8 @@ const char *revstrstr(const char *haystack, const char *needle,
return NULL;
}
const char *revstristr(const char *haystack, const char *needle,
const char *rev_start)
const char *revstristr(const char *haystack, const char *needle, const
char *rev_start)
{
for (; rev_start >= haystack; rev_start--) {
const char *r = rev_start, *q = needle;
@@ -173,26 +225,80 @@ const char *revstristr(const char *haystack, const char *needle,
}
#endif /* !NANO_SMALL */
/* This is now mutt's version (called mutt_stristr) because it doesn't
* use memory allocation to do a simple search (yuck). */
const char *stristr(const char *haystack, const char *needle)
#ifndef HAVE_STRNLEN
/* This function is equivalent to strnlen(). */
size_t nstrnlen(const char *s, size_t maxlen)
{
const char *p, *q;
size_t n = 0;
if (haystack == NULL)
return NULL;
if (needle == NULL)
return haystack;
while (*(p = haystack) != '\0') {
for (q = needle; *p != 0 && *q != 0 && tolower(*p) == tolower(*q); p++, q++)
;
if (*q == 0)
return haystack;
haystack++;
}
return NULL;
assert(s != NULL);
for (; maxlen > 0 && *s != '\0'; maxlen--, n++, s++)
;
return n;
}
#endif
#if !defined(NANO_SMALL) && defined(ENABLE_NANORC)
#ifndef HAVE_GETLINE
/* This function is equivalent to getline(). It was adapted from
* GNU mailutils' getline() function. */
ssize_t ngetline(char **lineptr, size_t *n, FILE *stream)
{
return getdelim(lineptr, n, '\n', stream);
}
#endif
#ifndef HAVE_GETDELIM
/* This function is equivalent to getdelim(). It was adapted from
* GNU mailutils' getdelim() function. */
ssize_t ngetdelim(char **lineptr, size_t *n, int delim, FILE *stream)
{
size_t indx = 0;
int c;
/* Sanity checks. */
if (lineptr == NULL || n == NULL || stream == NULL)
return -1;
/* Allocate the line the first time. */
if (*lineptr == NULL) {
*lineptr = charalloc(128);
*n = 128;
}
while ((c = getc(stream)) != EOF) {
/* Check if more memory is needed. */
if (indx >= *n) {
*lineptr = charealloc(*lineptr, *n + 128);
*n += 128;
}
/* Push the result in the line. */
(*lineptr)[indx++] = (char)c;
/* Bail out. */
if (c == delim)
break;
}
/* Make room for the null character. */
if (indx >= *n) {
*lineptr = charealloc(*lineptr, *n + 128);
*n += 128;
}
/* Null terminate the buffer. */
null_at(lineptr, indx++);
*n = indx;
/* The last line may not have the delimiter, we have to return what
* we got and the error will be seen on the next iteration. */
return (c == EOF && (indx - 1) == 0) ? -1 : indx - 1;
}
#endif
#endif /* !NANO_SMALL && ENABLE_NANORC */
/* If we are searching backwards, we will find the last match that
* starts no later than start. Otherwise we find the first match
@@ -253,7 +359,7 @@ const char *strstrwrapper(const char *haystack, const char *needle,
else if (ISSET(REVERSE_SEARCH))
return revstristr(haystack, needle, start);
#endif
return stristr(start, needle);
return strcasestr(start, needle);
}
/* This is a wrapper for the perror() function. The wrapper takes care
@@ -322,8 +428,8 @@ void new_magicline(void)
#ifndef NANO_SMALL
/* Set top_x and bot_x to the top and bottom x-coordinates of the mark,
* respectively, based on the locations of top and bot. */
void mark_order(const filestruct **top, size_t *top_x,
const filestruct **bot, size_t *bot_x)
void mark_order(const filestruct **top, size_t *top_x, const filestruct
**bot, size_t *bot_x)
{
assert(top != NULL && top_x != NULL && bot != NULL && bot_x != NULL);
if ((current->lineno == mark_beginbuf->lineno && current_x > mark_beginx)
@@ -390,10 +496,10 @@ int check_wildcard_match(const char *text, const char *pattern)
found = TRUE;
}
len = strlen(text);
if (found == FALSE && len != 0) {
if (!found && len != 0) {
return FALSE;
}
if (found == TRUE) {
if (found) {
if (strlen(pattern) == 0 && len == 1) {
return TRUE;
}

File diff suppressed because it is too large Load Diff