Compare commits

..

108 Commits

Author SHA1 Message Date
Chris Allegretta
c7ccb873f1 nano 0.9.24 release
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@421 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-19 02:59:43 +00:00
Chris Allegretta
66149e7aee Update docs for .24 release
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@420 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-19 02:51:06 +00:00
Chris Allegretta
07b9c2b90c Give the read file error segfault a bug # in BUGS
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@419 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-18 20:18:37 +00:00
Chris Allegretta
651216388c Fix lots of compiler warnings
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@418 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-18 07:05:27 +00:00
Chris Allegretta
b7d00efd6d Added --disable-help string to version()
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@417 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-18 05:36:51 +00:00
Chris Allegretta
d1627cffd0 Fix help menu keypad issues
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@416 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-18 05:03:16 +00:00
Chris Allegretta
7492cecc27 main(): - Added --view option to getopt_long()call . Bug discovered by Rocco Corsi.
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@415 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-18 04:55:21 +00:00
Chris Allegretta
affeda817e do_toggle(): - Added fix_editbot() call to fix improper redisplay of edit window when using nohelp toggle (bug discovered by Rocco Corsi).
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@414 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-18 04:03:48 +00:00
Chris Allegretta
92325e74b9 Oops, credit Rocco
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@413 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-18 03:44:22 +00:00
Chris Allegretta
220ba692e6 help_init(): - Fix off by one error that was making ^G help in normal mode and ^_ in pico mode not be displayed in the help.
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@412 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-18 03:40:00 +00:00
Chris Allegretta
51b3eec536 Added -b, -e and -f compatibility flags, updated man pages, added Alt-Alt-x functionality
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@411 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-18 02:23:50 +00:00
Chris Allegretta
3a7c0bee6b Fix segfault when read_file encounters an error opening the file
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@410 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-18 01:09:07 +00:00
Chris Allegretta
1a6e904583 Rid nano of PATH_MAX\!
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@409 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-14 13:56:28 +00:00
Chris Allegretta
b04a98dc86 Use MAX_PATH in write_file strncpy (for now) instead of 132
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@408 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-14 13:24:08 +00:00
Chris Allegretta
7960dcf919 Removed unneeded st2 var, don't open device files in open_file()
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@407 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-13 15:01:29 +00:00
Chris Allegretta
544d9b0210 Update comment in write_file
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@406 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-11 02:47:13 +00:00
Chris Allegretta
1cd506612d Remove useless fstat call
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@405 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-11 02:47:12 +00:00
Chris Allegretta
3bc8c72c8b Added --disable-help, moved hold pointer declaration
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@404 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-10 17:03:25 +00:00
Chris Allegretta
c130297a79 More totsize :P
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@403 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-10 06:07:01 +00:00
Chris Allegretta
321590a59d More totsize fixes
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@402 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-10 06:03:40 +00:00
Chris Allegretta
e51c95fa7b uncutting at filebot magic line fix and new_magicline totsize increment
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@401 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-10 05:54:27 +00:00
Chris Allegretta
5146fec04c Cut and renumber fixes
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@400 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-10 05:44:02 +00:00
Chris Allegretta
ef12311948 Update ChangeLog
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@399 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-10 00:04:13 +00:00
Chris Allegretta
f597777323 Remove the append check we just added :>
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@398 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-09 23:58:41 +00:00
Chris Allegretta
d62614cbc4 Let's just copy joe word for word and just change the name to nano!!!!
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@397 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-09 23:37:00 +00:00
Chris Allegretta
33084397dd More fun security crap
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@396 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-09 22:50:38 +00:00
Chris Allegretta
38552ee7a8 Back to CVS version
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@395 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-09 03:35:49 +00:00
Chris Allegretta
b29550e58d Nano 0.9.23 release
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@393 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-09 03:34:12 +00:00
Chris Allegretta
8816760ea1 Updated NEWS for release tonight
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@392 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-09 00:07:06 +00:00
Chris Allegretta
da13f0b45c Oops, misplaced comment
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@391 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-06 05:59:31 +00:00
Chris Allegretta
1bd0ce2832 Okay, now the permissions should be fixed too
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@390 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-06 05:56:08 +00:00
Chris Allegretta
7b36c52efc Changed --disable-spell to --disable-speller
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@389 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-06 01:08:10 +00:00
Chris Allegretta
b5bb24c949 Commented the code that got us into this mess in the first place 9 releases ago
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@388 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-06 00:57:54 +00:00
Chris Allegretta
71e464034d Line up link/unlink/rename check if conditional with top if conditional
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@387 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-06 00:40:26 +00:00
Chris Allegretta
21e3c28af2 Oops, get rid of my debugging code
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@386 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-05 12:04:16 +00:00
Chris Allegretta
fb62f73a9a Rocco fixes
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@385 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-05 11:36:41 +00:00
Chris Allegretta
928a7f535c Added anyexists and realexists documentation
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@384 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-04 05:31:34 +00:00
Chris Allegretta
fb2226a9ae Okay, we'll use O_EXCL also
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@383 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-04 05:25:47 +00:00
Chris Allegretta
37f627f2f8 Oops, we didn't want the latter check because if this is a new file there wont be any previous inodes
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@382 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-04 05:19:25 +00:00
Chris Allegretta
07f9ee059f Okay, forget O_EXCL, do lots of other obscure checks instead =)
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@381 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-04 05:15:39 +00:00
Chris Allegretta
908805a2e8 Rocco's edit_add off by one fix
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@380 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-04 04:42:56 +00:00
Chris Allegretta
20c131cf67 Added tmp check to TMP_OPT section (how apropriate).
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@379 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-04 04:20:09 +00:00
Chris Allegretta
5982849325 Added O_EXCL call to open is tmp == 1
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@378 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-04 03:31:39 +00:00
Chris Allegretta
4a938e137a Back to CVS version
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@377 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-03 03:45:35 +00:00
Chris Allegretta
d2cd65c967 Nano 0.9.22 release sync
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@375 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-03 03:43:17 +00:00
Chris Allegretta
90941714d2 Updated html version of man page
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@374 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-03 03:23:16 +00:00
Jordi Mallach
cb7fa25d3d Updated for new nano.save behaviour
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@373 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-03 03:16:47 +00:00
Chris Allegretta
fedd724086 Updating ChangeLog for 0.9.22 release
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@372 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-03 03:15:38 +00:00
Jordi Mallach
d87b34121f Updated for final nano.save behaviour
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@371 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-03 03:15:19 +00:00
Jordi Mallach
b998483369 Added nano to the list
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@370 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-03 03:10:44 +00:00
Chris Allegretta
9756d62d93 Okay, NOW tell what the file is we didn't write if we didn't write it
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@369 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-03 03:06:45 +00:00
Chris Allegretta
581bc60d0c Okay last time, now if there's any file at all, dont save the .save file. (foolproof? :)
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@368 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-03 03:01:12 +00:00
Jordi Mallach
d7ad75adb3 Documented nano.saves and other small changes to manpage.
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@367 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-03 02:46:02 +00:00
Chris Allegretta
9ee2a0d0bc Updated NEWS for 0.9.22 release
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@366 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-02 21:50:57 +00:00
Chris Allegretta
ac139dd6a6 Updated NEWS for 0.9.22 release
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@365 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-02 21:31:17 +00:00
Chris Allegretta
f7ee9e6996 Okay, now abort if the symlink isn't owned by the user, and some mode fixes
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@364 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-02 21:13:50 +00:00
Jordi Mallach
3ea0a8f1d6 .save changes.
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@363 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-02 16:57:48 +00:00
Chris Allegretta
8c36f8876c Silly newline fix in die()
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@362 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-02 05:33:00 +00:00
Chris Allegretta
3dbb2783d3 Okay, so if the .save file is a symlink, don't write to it, abort
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@361 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-02 04:36:50 +00:00
Chris Allegretta
331fc7a6f4 Okay, now write_file never trusts symlinks at all, no chance of spelling symlink attack :)
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@360 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-02 03:06:37 +00:00
Chris Allegretta
c5174aaef3 Oops, manually turn off FOLLOW_SYMLINKS if it's on
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@359 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-02 02:38:54 +00:00
Chris Allegretta
e7a5893245 Changs to die() and handle_sighup() for security
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@358 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-02 02:36:22 +00:00
Chris Allegretta
9e2934fd27 Fix for do_next_word and screen updates
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@357 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-01 23:49:48 +00:00
Chris Allegretta
4eb7aa04f3 Okay, don't define nano_small_msg or nano_disabled_msg id not needed
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@356 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-01 18:57:11 +00:00
Chris Allegretta
ff269f8873 Added --disable-justify and --disable-spell options, code cleanups
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@355 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-12-01 18:46:01 +00:00
Chris Allegretta
09a8084943 DISABLE_TABCOMP checks - #ifdef around check_wildchar_match and don't call real_dir_from_tilde in do_insertfile() if set
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@354 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-11-30 02:31:13 +00:00
Chris Allegretta
56b24b5909 Took out help from spell_list and changed SPELL_LIST_LEN to 1
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@353 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-11-29 23:57:20 +00:00
Chris Allegretta
7262358381 Oops, I guess that's MY right alt key also =). And right control is ASCII 543
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@352 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-11-29 23:43:28 +00:00
Jordi Mallach
28fdf444e5 nano.pot survived the masacre.
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@351 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-11-29 10:16:36 +00:00
Chris Allegretta
d00e6dfacd Rocco's changes to spell checking and my alterations
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@350 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-11-29 04:33:26 +00:00
Chris Allegretta
75155dff51 Ignore key sequence 545, Alt-Gr key on german keyboard
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@349 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-11-28 23:04:24 +00:00
Jordi Mallach
9200544269 .cvsignore for src/
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@348 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-11-28 17:13:41 +00:00
Jordi Mallach
acf2ac244d Ick, I left out libintl.h.
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@347 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-11-28 17:04:51 +00:00
Jordi Mallach
556b3a0028 .cvsignore for intl/.
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@346 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-11-28 17:01:26 +00:00
Jordi Mallach
24ccaf1e0f Kill kill kill
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@345 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-11-28 16:53:33 +00:00
Jordi Mallach
2ddb841940 Delete even more!
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@344 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-11-28 16:52:31 +00:00
Jordi Mallach
ce478115e4 Revoving gmo's.
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@343 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-11-28 16:48:51 +00:00
Jordi Mallach
40a24b7372 Added files now.
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@342 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-11-28 16:47:22 +00:00
Jordi Mallach
90b780b5d7 Silly me, I hope.
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@341 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-11-28 16:38:29 +00:00
Jordi Mallach
19ed700690 Let's get rid of some stuff :)
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@340 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-11-28 16:30:32 +00:00
Chris Allegretta
2773184d92 Handle ~~ in tab comp without segfaulting =)
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@339 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-11-28 05:53:41 +00:00
Chris Allegretta
184e1a6a4e Update the TODO, YAY
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@338 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-11-28 04:09:39 +00:00
Chris Allegretta
8be8ce2086 Various ChangeLog cleanups and additions
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@337 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-11-28 02:15:30 +00:00
Jordi Mallach
7e0e29d3bb Justify updates. Hopefully, this is the po in .22 :)
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@336 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-11-28 01:56:12 +00:00
Chris Allegretta
8a646adec4 Updated faq about automatically running strip
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@335 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-11-28 00:15:54 +00:00
Chris Allegretta
984b5366cd Oops\! Must update the date on the man page when we change i
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@334 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-11-27 23:12:27 +00:00
Chris Allegretta
4a9c8589b2 Oops, do it in either case, whether we did unjustify or not
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@333 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-11-27 22:59:40 +00:00
Chris Allegretta
0779835ce4 Okay, now make the shortcut list reflect the unjustify availability
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@332 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-11-27 22:58:23 +00:00
Chris Allegretta
d022eace15 Fix for justift at top of file
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@331 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-11-27 02:50:49 +00:00
Chris Allegretta
2ff25693f3 Oops, get rid of silly debugging code
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@330 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-11-27 00:24:42 +00:00
Chris Allegretta
9149e610b3 Implemented Unjustify, HAHAHA
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@329 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-11-27 00:23:41 +00:00
Chris Allegretta
24946bd77a read_file() - - Added check for fileptr == NULL
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@328 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-11-26 21:34:47 +00:00
Chris Allegretta
35788ff48c I hereby retract bug #48, as Pico does the exact same thing, oops
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@327 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-11-26 04:39:49 +00:00
Chris Allegretta
9956e530d0 Make nano at least not crash on weird binary data
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@326 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-11-26 02:09:53 +00:00
Chris Allegretta
7ffc01f00c Added bug #48
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@325 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-11-25 20:52:28 +00:00
Chris Allegretta
e106a87841 Added Christian Weisgerber too...
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@324 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-11-25 20:17:43 +00:00
Chris Allegretta
7cd9f74b51 Added Christian Weisgerber too...
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@323 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-11-25 20:17:28 +00:00
Chris Allegretta
150c50d512 Oops, forgot Bill Soudan
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@322 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-11-25 20:00:02 +00:00
Chris Allegretta
a131c7c029 Oops, forgot Bill Soudan
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@321 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-11-25 19:59:41 +00:00
Chris Allegretta
8b4ca4a30b Make credits less jumpy
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@320 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-11-25 18:21:37 +00:00
Chris Allegretta
25f4e58ff4 do_insertfile(): - Added call to real_name_from tilde, oops.
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@319 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-11-25 05:03:20 +00:00
Jordi Mallach
d819a4cf06 Destroyed any chance of getting a surprise with viewing credits. Because I translated them, of course.
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@318 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-11-25 04:50:25 +00:00
Chris Allegretta
04fec91362 Oops, how about we actually make username completion work if they didn't complete before
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@317 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-11-25 04:43:43 +00:00
Chris Allegretta
8a0de3bb3f New arg --enable-extra, checks for ./configure options, oher stuff :-)
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@316 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-11-24 20:45:14 +00:00
Chris Allegretta
650e8a406b Rocco's unset modified on tmp file write fix
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@315 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-11-24 14:15:17 +00:00
Chris Allegretta
0f5dfef8b0 Oops, better free realname in write_file if we're done using it
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@314 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-11-24 14:02:57 +00:00
Chris Allegretta
be77c6119f Implemented username tab completion, cleaned up existing tabcomp code, added --disable-tabcomp option
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@313 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-11-24 14:00:16 +00:00
Chris Allegretta
1866609311 Back to CVS version
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@312 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
2000-11-24 01:37:14 +00:00
38 changed files with 3137 additions and 1956 deletions

8
.cvsignore Normal file
View File

@@ -0,0 +1,8 @@
Makefile
confdefs.h
config.cache
config.h
config.log
config.status
nano
stamp-h

2
BUGS
View File

@@ -76,6 +76,8 @@
- When typing in a string in serahc or replace and hitting CASE_SENSITVE
or the other search string, the current string edit is blown away in
favor of the last stored search (47) [FIXED]
- If nano fails to open a file when it starts up,doing almost anything
causes a segfault (discovered by Ben Roberts) (48). [FIXED]
** Open BUGS **

161
ChangeLog
View File

@@ -1,3 +1,164 @@
nano 0.9.24 - 12/18/2000
General
- Added --disable-help option, affects acconfig.h, configure(.in),
winio.c:do_help, nano.c:help_init,help_text_init,version.
- Changed filename to no longer use PATH_MAX, so it can work on the
HURD. Changes in files.c:write_file(), new function
nano.c:clear_filename(), many changed in main(), a few other
places. Please test this!
- Added -b, -e, and -f flags, which we ignore as nano provides
their functionality already.
- cut.c:
do_uncut_text()
- Fix renumbering bug when uncutting marked text at filebot.
- Fix screen not being displayed when we are uncutting marked
text at editbot (Bug discovered by Ken Tyler).
- Fix magic line not getting created when (you guessed it)
uncutting marked text at filebot (Ryan Krebs).
- files.c:
read_file()
- If we encounter an error and insert is not set, run new_file().
(bug discovered by Ben Roberts).
write_file()
- Change open call flags, basically copy joe's way of doing it so
a more recent version will actually be included in (un)stable.
- Remove useless fstat call.
open_file()
- Added check for S_ISBLK and S_ISCHR, don't open device files!
- nano.c:
renumber()
- Dont stupidly assign the value of prev->lineno if prev == NULL!
main()
- Added code to check for Alt-Alt (27-27) keystrokes and set the
next keystroke as a control sequence. New variable
modify_control_key. Removed #ifdef _POSIX_VDISABLE check
around Control-S,Q,Z handlers because we need it now for
the Alt-Alt-x code.
- Added --view option to getopt_long()call . Bug discovered
by Rocco Corsi.
help_init()
- Fix off by one error that was making ^G help in normal mode and
^_ in pico mode not be displayed in the help (bug discovered by
Rocco Corsi).
do_toggle()
- Added fix_editbot() call to fix improper redisplay of edit
window when using nohelp toggle (bug discovered by Rocco Corsi).
- nano.1, nano.1.html:
- Updated man page for -b, -e, -f and expanded explanation for -p.
- winio.c
do_help()
- Force keypad on so F-keys and PageUp/Down will work properly.
Added check for NANO_EXIT_FKEY to loop.
- utils.c:
new_magicline()
- Increment totsize!! We decrement it when we've read a file,
everywhere else it should automatically be incremented
nano 0.9.23 - 12/08/2000
General
- Changed --disable-spell to --disable speller. The term is
"speller" for -s, so it should be --disable-speller.
- files.c:
write_file()
- Added tmp check to TMP_OPT section (how apropriate).
- Added new consistency checking code from securityfocus
article by Oliver Friedrichs, and use O_EXCL if tmp == 1.
- We now run check on result of lstat(), not stat(), to be
safer. New variable anyexists, we use still use realexists
later in the program.
- OOPS, line up link/unlink/rename check if conditional with
top if conditional. Option -l has been broken for 9 versions,
no one noticed?!
- Added saving perms at end of link so we can apply them to the
new file if --nofollow is used.
- winio.c:
edit_add()
- Off by one display error (fix by Rocco Corsi).
do_replace_highlight()
- New code to handle being past COLS (Roco Corsi).
- Moved from search.c, as it's definitely a winio function now =)
update_line()
- More '$' display fixes (Rocco Corsi).
nano 0.9.22 - 12/02/2000
- General
- Username tab completion code, and cleaned up existing tabcomp
code. New functions real_dir_from_tide(), append_slash_if_dir(),
username_tab_completion is more than a stub now =-).
- Ignore key sequence 543 & 545, right control and alt keys in
windows. Affects main() and winio.c:nanogetstr().
- Took out help from spell_list and changed SPELL_LIST_LEN to 1.
Is using a spell checker THAT difficult? =-)
- New function nano_disabled_msg(), to alert that certain
functions have been disabled, similaer to nano_tiny feature.
- New configure options:
- Added configure argument --disable-tabcomp. Affects
bottom of files.c and write_file, utils.c:check_wildcard_match()
and winio.c:nanogettsr().
- New options --enable-extra. New code in nano.c:version() to
print out various options from ./configure, function do_credits().
- Added --disable-spell option for those who want to just disable
the spell check feature. Affects the spellinf fucntions
do_spell, do_int_speller and do_alt_speller.
- Added --disable-justify to get rid of the justify function.
Affects do_justify() (not surprisingly).
- files.c:
write_file()
- Unsetting modified on temp files bug fixed (Rocco Corsi).
- Okay, if tmp == 1 and the file exists, we abort.
do_insertfile()
- Added call to real_name_from tilde, oops. Added check for
DISABLE_TABCOMP.
read_file()
- Added check for fileptr == NULL.
- global.c:
shortcut_init()
- Now takes an argument as to whether to display the unjustify
shortcut or the normal uncut text one. Needed to accomodate
the klugey unjustify code.
- nano.1, nano.1.html:
- Updated date on pages because of -p changes.
- Added "NOTES" section, where I explain what nano.save & friends
are.
- Added a copyright notice for the manpage, under the GPL.
- Other minor changes.
- nano.c:
do_justify()
- Wrote unjustify code. Borrows cutbuffer and stores the unjustified
text there, then grabs the next keystroke and, if the unjustify
key, gets rid of the justified text and calls do_uncut_text.
Added macro NANO_UNJUSTIFY_KEY.
do_int_spell*
- Various fixes (Rocco Corsi).
- Changed abort of program to aborting based on value of "edit a
replacement" question, and not caring about the replace loop
return value. That way the user can get out of the replace loop
and continue spell checking (very important to me anyway).
version()
- Took out huge check for the various --disabled macros,
eventually there will be too many to reasonably check for.
nano_small_msg(), nano_disabled_msg()
- Added checks for disabled functions to see whether or not to
declare them.
do_next_word()
- Update the previous line as well as the current one in case we
have moved beyond COLS or back from COLS, patch submitted
by Ryan Krebs.
die()
- Now creates .save file using variable-length strings. Also
calls write_file with tmp == 1, which happens to do exactly what
we want (abort on save file exists and use mode 0600).
handle_sighup()
- Now calls die instead of writing on its own and exiting normally.
- search.c:
do_replace_hilight()
- New function, displays the currently selected word as hilighted
in the spell check. Called from do_replace_loop (Rocco Corsi).
- Added calls to curs_set(0) and (1) to diable the cursor when
hilighting, looks much better.
- es.po:
- Traditional Spanish strings updates.
nano 0.9.21 - 11/23/2000
- AUTHORS
- Added Rocco Corsi.

36
NEWS
View File

@@ -1,3 +1,39 @@
12/18/2000 - Nano 0.9.24 is released. This versions contains the last of
the security fixes for writing files, as well as for a
nasty segfault when nano is unable to open a file for
reading, among other fixes. Nano also now cowardly
refuses to open device files, to stop silly things like
trying to open /dev/zero. New features include being
Able to use Meta-Meta-<key> as Control-<key>, better
HURD support, and some new flags have been added for Pico
compatibility. Upgrading to this version is highly
recommended.
12/08/2000 - Nano 0.9.23 is the "race conditions bite" release. The
main reason for this release is the less-than-optimal
fix for the security issue in nano with following symbolic
links. Hopefully this will fix the probelm permanently.
The --nofollow option also works again for those who
are real security nuts. There are also some display and
search fixes, and the --disable-spell function was renamed
to --disable-speller to be in line with nano and pico's
"speller" term.
12/02/2000 - Nano 0.9.22 is released, with many more changes and
additions than imaginable. The most important change is
a fix for unsafe handling of symbolic links which could
lead to symlink attacks if nano were to exit because
of an error or signal. Also there are better checks when
saving files.
As for new features, username tab completion is
now working well, the internal spell checker code has been
tweaked, you can now unjustify if you don't like how the
justify formatted your text, and there are more
options for configure, including --disable-spell and
--disable-justify and --enable-extra (for those who like
surprises). All in all, a whole lot of changes in
a little over a week.
11/23/2000 - Happy Thanksgiving! Nano 0.9.21 is our "last version was
a big turkey" release. It fixes several bugs introduced
by the previous version, as well as a few long-

6
TODO
View File

@@ -15,10 +15,8 @@ Current Version:
- Better statusbar interaction (scrolling, tab completion for filename)
[needed for version 1.0] [DONE]
- Now do username completion [DONE].
Needed for version 1.0:
- Unjustify command (^U after ^J)
- Username completion (~user).
- Unjustify command (^U after ^J) [DONE =-].
- Username completion (~user) [DONE =-].
For Next Version:
- Undo/Redo key?

View File

@@ -24,3 +24,18 @@
/* Define to use the slang wrappers for curses instead of native curses */
#undef USE_SLANG
/* Define this to enable the extra stuff */
#undef NANO_EXTRA
/* Define to disable the tab completion code Chris worked so hard on! */
#undef DISABLE_TABCOMP
/* Define this to disable the justify routine */
#undef DISABLE_JUSTIFY
/* Define this to disable the use(full|less) spelling functions */
#undef DISABLE_SPELLER
/* Define this to disable the ^G help menu */
#undef DISABLE_HELP

View File

@@ -76,6 +76,21 @@
/* Define to use the slang wrappers for curses instead of native curses */
#undef USE_SLANG
/* Define this to enable the extra stuff */
#undef NANO_EXTRA
/* Define to disable the tab completion code Chris worked so hard on! */
#undef DISABLE_TABCOMP
/* Define this to disable the justify routine */
#undef DISABLE_JUSTIFY
/* Define this to disable the use(full|less) spelling functions */
#undef DISABLE_SPELLER
/* Define this to disable the ^G help menu */
#undef DISABLE_HELP
/* Define if you have the __argz_count function. */
#undef HAVE___ARGZ_COUNT

428
configure vendored

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,7 @@
# $Id$
dnl Process this file with autoconf to produce a configure script.
AC_INIT(nano.c)
AM_INIT_AUTOMAKE(nano, 0.9.21)
AM_INIT_AUTOMAKE(nano, 0.9.24)
AM_CONFIG_HEADER(config.h:config.h.in)
ALL_LINGUAS="es de fr it id fi"
@@ -21,6 +21,36 @@ AC_ARG_ENABLE(tiny,
AC_DEFINE(NANO_SMALL) tiny_support=yes
fi])
AC_ARG_ENABLE(extra,
[ --enable-extra Enable extra (optional) functions, including easter eggs],
[if test x$enableval = xyes; then
AC_DEFINE(NANO_EXTRA) extra_support=yes
fi])
AC_ARG_ENABLE(tabcomp,
[ --disable-tabcomp Disables tab completion code for a smaller binary],
[if test x$enableval != xyes; then
AC_DEFINE(DISABLE_TABCOMP)
fi])
AC_ARG_ENABLE(justify,
[ --disable-justify Disable justify/unjustify function],
[if test x$enableval != xyes; then
AC_DEFINE(DISABLE_JUSTIFY)
fi])
AC_ARG_ENABLE(speller,
[ --disable-speller Disables spell checker function],
[if test x$enableval != xyes; then
AC_DEFINE(DISABLE_SPELLER)
fi])
AC_ARG_ENABLE(help,
[ --disable-help Disables help function (^G)],
[if test x$enableval != xyes; then
AC_DEFINE(DISABLE_HELP)
fi])
AC_MSG_CHECKING(whether to use slang)
CURSES_LIB_NAME=""
AC_ARG_WITH(slang,

12
cut.c
View File

@@ -274,6 +274,7 @@ int do_uncut_text(void)
filestruct *tmp = current, *fileptr = current, *newbuf, *newend;
#ifndef NANO_SMALL
char *tmpstr, *tmpstr2;
filestruct *hold = current;
#endif
int i;
@@ -339,8 +340,13 @@ int do_uncut_text(void)
if (tmp != NULL)
tmp->prev = newend;
else
else {
/* Fix the editbot pointer too */
if (editbot == filebot)
editbot = newend;
filebot = newend;
new_magicline();
}
/* Now why don't we update the totsize also */
for (tmp = current->next; tmp != newend; tmp = tmp->next)
@@ -368,7 +374,9 @@ int do_uncut_text(void)
current_x = 0;
placewewant = 0;
}
renumber(current->prev);
/* Renumber from BEFORE where we pasted ;) */
renumber(hold);
dump_buffer(fileage);
dump_buffer(cutbuffer);
set_modified();

View File

@@ -21,7 +21,7 @@
nano?</a></font>
<br><font color="#330000"><a href="#1.5">1.5. Why the name change from
TIP?</a></font>
<br><font color="#330000"><a href="#1.6">1.6 What is the current version
<br><font color="#330000"><a href="#1.6">1.6. What is the current version
of nano?</a></font>
<br><font color="#330000"><a href="#1.7">1.7. I want to read the man page
without having to download the program!</a></font></blockquote>
@@ -46,7 +46,9 @@ THE HECK DO I DO NOW?</a></font>
<br><font color="#330000"><a href="#3.2">3.3. Why does everything go into
/usr/local?</a></font>
<br><font color="#330000"><a href="#3.4">3.4. I get errors about 'bindtextdomain',
'gettext' and/or 'gettextdomain'.&nbsp; What can I do about it?</a></font></blockquote>
'gettext' and/or 'gettextdomain'.&nbsp; What can I do about it?</a></font>
<br><font color="#330000"><a href="#3.5">3.5. Nano should automatically
run strip on the binary when installing it!</a></font></blockquote>
<h2>
<font color="#330000"><a href="#4">4. Running</a></font></h2>
@@ -187,7 +189,7 @@ nano was developed).</font></blockquote>
of nano?</font></h2>
<blockquote><font color="#330000">The current version of nano *should*
be 0.9.21.&nbsp; Of course you should always check the nano hompage to
be 0.9.24.&nbsp; Of course you should always check the nano hompage to
see what the latest and greatest version is.</font></blockquote>
<h2>
@@ -330,6 +332,14 @@ install</b>.</font></blockquote>
and see if that solves your problem.&nbsp; You make need to do a <b>make
clean ; make</b> to get it to work fully.</font></blockquote>
<h2>
<a NAME="3.5"></a><font color="#330000">3.5. Nano should automatically
run strip on the binary when installing it!</font></h2>
<blockquote><font color="#330000">Actually, it does, but you have to use
<b>make install-strip</b>. The default make install does not, and will
not, run strip automatically.</font></blockquote>
<hr WIDTH="100%">
<h1>
<a NAME="4"></a><font color="#330000">4. Running</font></h1>
@@ -376,7 +386,7 @@ will get the same shortcuts at the bottom as Pico.</font></blockquote>
string, the string I last searched for is already in front of my
cursor! !What happened?!</font></h2>
<blockquote><font color="#330000">In nano version 0.9.21, the default is
<blockquote><font color="#330000">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

396
files.c
View File

@@ -179,7 +179,7 @@ int read_file(int fd, char *filename)
buf[0] = 0;
}
/* Did we even GET a file? */
if (totsize == 0) {
if (totsize == 0 || fileptr == NULL) {
new_file();
statusbar(_("Read %d lines"), num_lines);
return 1;
@@ -194,6 +194,7 @@ int read_file(int fd, char *filename)
} else if (fileptr->next == NULL) {
filebot = fileptr;
new_magicline();
totsize--;
/* Update the edit buffer */
load_file();
@@ -226,10 +227,18 @@ int open_file(char *filename, int insert, int quiet)
} else if ((fd = open(filename, O_RDONLY)) == -1) {
if (!quiet)
statusbar("%s: %s", strerror(errno), filename);
if (!insert)
new_file();
return -1;
} else { /* File is A-OK */
if (S_ISDIR(fileinfo.st_mode)) {
statusbar(_("File \"%s\" is a directory"), filename);
if (S_ISDIR(fileinfo.st_mode) || S_ISCHR(fileinfo.st_mode) ||
S_ISBLK(fileinfo.st_mode)) {
if (S_ISDIR(fileinfo.st_mode))
statusbar(_("File \"%s\" is a directory"), filename);
else
/* Don't open character or block files. Sorry, /dev/sndstat! */
statusbar(_("File \"%s\" is a device file"), filename);
if (!insert)
new_file();
return -1;
@@ -245,6 +254,7 @@ int open_file(char *filename, int insert, int quiet)
int do_insertfile(void)
{
int i;
char *realname = NULL;
wrap_reset();
i = statusq(1, writefile_list, WRITEFILE_LIST_LEN, "",
@@ -255,7 +265,14 @@ int do_insertfile(void)
fprintf(stderr, "filename is %s", answer);
#endif
i = open_file(answer, 1, 0);
#ifndef DISABLE_TABCOMP
realname = real_dir_from_tilde(answer);
#else
realname = mallocstrcpy(realname, answer);
#endif
i = open_file(realname, 1, 0);
free(realname);
dump_buffer(fileage);
set_modified();
@@ -285,16 +302,17 @@ int do_insertfile(void)
* we don't set the global variable filename to it's name, and don't
* print out how many lines we wrote on the statusbar.
*
* Note that tmp is only set to 1 for storing temporary files internal
* to the editor, and is completely different from TEMP_OPT.
* tmp means we are writing a tmp file in a secute fashion. We use
* it when spell checking or dumping the file on an error.
*/
int write_file(char *name, int tmp)
{
long size, lineswritten = 0;
char buf[PATH_MAX + 1];
static char *buf = NULL;
filestruct *fileptr;
int fd, mask = 0;
struct stat st;
int fd, mask = 0, realexists, anyexists;
struct stat st, lst;
static char *realname = NULL;
if (!strcmp(name, "")) {
statusbar(_("Cancelled"));
@@ -303,36 +321,57 @@ int write_file(char *name, int tmp)
titlebar();
fileptr = fileage;
if (realname != NULL)
free(realname);
/* Check to see if the file is a regular file and FOLLOW_SYMLINKS is
set. If so then don't do the delete and recreate code which would
cause unexpected behavior */
lstat(name, &st);
if (buf != NULL)
free(buf);
/* Open the file and truncate it. Trust the symlink. */
if ((ISSET(FOLLOW_SYMLINKS) || !S_ISLNK(st.st_mode)) && !tmp) {
#ifndef DISABLE_TABCOMP
realname = real_dir_from_tilde(name);
#else
realname = mallocstrcpy(realname, name);
#endif
if ((fd = open(name, O_WRONLY | O_CREAT | O_TRUNC,
S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH |
S_IWOTH)) == -1) {
if (ISSET(TEMP_OPT)) {
/* Save the state of file at the end of the symlink (if there is one) */
realexists = stat(realname, &st);
/* Stat the link itself for the check... */
anyexists = lstat(realname, &lst);
/* New case: if the file exists, just give up */
if (tmp && anyexists != -1)
return -1;
/* NOTE: If you change this statement, you MUST CHANGE the if
statement below (that says:
if (realexists == -1 || tmp || (!ISSET(FOLLOW_SYMLINKS) &&
S_ISLNK(lst.st_mode))) {
to reflect whether or not to link/unlink/rename the file */
else if (ISSET(FOLLOW_SYMLINKS) || !S_ISLNK(lst.st_mode) || tmp) {
/* Use O_EXCL if tmp == 1. This is now copied from joe, because
wiggy says so *shrug*. */
if (tmp)
fd = open(realname, O_WRONLY | O_CREAT | O_EXCL, (S_IRUSR|S_IWUSR));
else
fd = open(realname, O_WRONLY | O_CREAT | O_TRUNC, (S_IRUSR|S_IWUSR));
/* First, just give up if we couldn't even open the file */
if (fd == -1) {
if (!tmp && ISSET(TEMP_OPT)) {
UNSET(TEMP_OPT);
return do_writeout(1);
}
statusbar(_("Could not open file for writing: %s"),
strerror(errno));
return -1;
}
}
/* Don't follow symlink. Create new file. */
else {
if (strlen(name) > (PATH_MAX - 7)) {
statusbar(_("Could not open file: Path length exceeded."));
free(realname);
return -1;
}
memset(buf, 0x00, PATH_MAX + 1);
strcat(buf, name);
}
/* Don't follow symlink. Create new file. */
else {
buf = nmalloc(strlen(realname) + 8);
strncpy(buf, realname, strlen(realname)+1);
strcat(buf, ".XXXXXX");
if ((fd = mkstemp(buf)) == -1) {
if (ISSET(TEMP_OPT)) {
@@ -385,66 +424,68 @@ int write_file(char *name, int tmp)
if (close(fd) == -1) {
statusbar(_("Could not close %s: %s"), name, strerror(errno));
statusbar(_("Could not close %s: %s"), realname, strerror(errno));
unlink(buf);
return -1;
}
if (!ISSET(FOLLOW_SYMLINKS) || tmp) {
if (stat(name, &st) == -1) {
/* Use default umask as file permisions if file is a new file. */
mask = umask(0);
umask(mask);
if (realexists == -1 || tmp ||
(!ISSET(FOLLOW_SYMLINKS) && S_ISLNK(lst.st_mode))) {
if (tmp) /* We don't want anyone reading our temporary file! */
mask = 0600;
else
mask = 0666 & ~mask;
/* Use default umask as file permisions if file is a new file. */
mask = umask(0);
umask(mask);
} else {
/* Use permissions from file we are overwriting. */
mask = st.st_mode;
if (unlink(name) == -1) {
if (errno != ENOENT) {
statusbar(_("Could not open %s for writing: %s"),
name, strerror(errno));
unlink(buf);
return -1;
}
if (tmp) /* We don't want anyone reading our temporary file! */
mask = 0600;
else
mask = 0666 & ~mask;
} else
/* Use permissions from file we are overwriting. */
mask = st.st_mode;
if (!tmp && (!ISSET(FOLLOW_SYMLINKS) && S_ISLNK(lst.st_mode))) {
if (unlink(realname) == -1) {
if (errno != ENOENT) {
statusbar(_("Could not open %s for writing: %s"),
realname, strerror(errno));
unlink(buf);
return -1;
}
}
if (link(buf, name) != -1)
if (link(buf, realname) != -1)
unlink(buf);
else if (errno != EPERM) {
statusbar(_("Could not open %s for writing: %s"),
name, strerror(errno));
unlink(buf);
return -1;
} else if (rename(buf, name) == -1) { /* Try a rename?? */
} else if (rename(buf, realname) == -1) { /* Try a rename?? */
statusbar(_("Could not open %s for writing: %s"),
name, strerror(errno));
realname, strerror(errno));
unlink(buf);
return -1;
}
if (chmod(name, mask) == -1) {
statusbar(_("Could not set permissions %o on %s: %s"),
mask, name, strerror(errno));
}
}
if (chmod(realname, mask) == -1)
statusbar(_("Could not set permissions %o on %s: %s"),
mask, realname, strerror(errno));
}
if (!tmp) {
strncpy(filename, name, 132);
filename = mallocstrcpy(filename, realname);
statusbar(_("Wrote %d lines"), lineswritten);
UNSET(MODIFIED);
titlebar();
}
UNSET(MODIFIED);
titlebar();
return 1;
}
int do_writeout(int exiting)
{
int i = 0;
#ifdef NANO_EXTRA
static int did_cred = 0;
#endif
answer = mallocstrcpy(answer, filename);
@@ -471,6 +512,15 @@ int do_writeout(int exiting)
#ifdef DEBUG
fprintf(stderr, _("filename is %s"), answer);
#endif
#ifdef NANO_EXTRA
if (exiting && !ISSET(TEMP_OPT) && !strcasecmp(answer, "zzy")
&& !did_cred) {
do_credits();
did_cred = 1;
return -1;
}
#endif
if (strcmp(answer, filename)) {
struct stat st;
if (!stat(answer, &st)) {
@@ -497,6 +547,108 @@ int do_writeout_void(void)
return do_writeout(0);
}
#ifndef DISABLE_TABCOMP
static char **homedirs;
/* Return a malloc()ed string containing the actual directory, used
* to convert ~user and ~/ notation...
*/
char *real_dir_from_tilde(char *buf)
{
char *dirtmp = NULL, *line = NULL, byte[1], *lineptr;
int fd, i, status, searchctr = 1;
if (buf[0] == '~') {
if (buf[1] == '~')
goto abort; /* Handle ~~ without segfaulting =) */
else if (buf[1] == '/') {
if (getenv("HOME") != NULL) {
dirtmp = nmalloc(strlen(buf) + 2 + strlen(getenv("HOME")));
sprintf(dirtmp, "%s/%s", getenv("HOME"), &buf[2]);
}
} else if (buf[1] != 0) {
if ((fd = open("/etc/passwd", O_RDONLY)) == -1)
goto abort;
/* Figure how how much of of the str we need to compare */
for (searchctr = 1; buf[searchctr] != '/' &&
buf[searchctr] != 0; searchctr++);
do {
i = 0;
line = nmalloc(1);
while ((status = read(fd, byte, 1)) != 0
&& byte[0] != '\n') {
line[i] = byte[0];
i++;
line = nrealloc(line, i + 1);
}
line[i] = 0;
if (i == 0)
goto abort;
line[i] = 0;
lineptr = strtok(line, ":");
if (!strncmp(lineptr, &buf[1], searchctr - 1)) {
/* Okay, skip to the password portion now */
for (i = 0; i <= 4 && lineptr != NULL; i++)
lineptr = strtok(NULL, ":");
if (lineptr == NULL)
goto abort;
/* Else copy the new string into the new buf */
dirtmp = nmalloc(strlen(buf) + 2 + strlen(lineptr));
sprintf(dirtmp, "%s%s", lineptr, &buf[searchctr]);
free(line);
break;
}
free(line);
} while (status != 0);
}
} else
dirtmp = mallocstrcpy(dirtmp, buf);
return dirtmp;
abort:
dirtmp = mallocstrcpy(dirtmp, buf);
return dirtmp;
}
/* Tack a slash onto the string we're completing if it's a directory */
int append_slash_if_dir(char *buf, int *lastWasTab, int *place)
{
char *dirptr;
struct stat fileinfo;
int ret = 0;
dirptr = real_dir_from_tilde(buf);
if (stat(dirptr, &fileinfo) == -1)
ret = 0;
else if (S_ISDIR(fileinfo.st_mode)) {
strncat(buf, "/", 1);
*place += 1;
/* now we start over again with # of tabs so far */
*lastWasTab = 0;
ret = 1;
}
if (dirptr != buf)
free(dirptr);
return ret;
}
/*
* These functions (username_tab_completion, cwd_tab_completion, and
@@ -517,24 +669,90 @@ int do_writeout_void(void)
* This code may safely be consumed by a BSD or GPL license.
*/
#if 0
char **username_tab_completion(char *buf, int *num_matches)
{
char **matches = (char **) NULL;
*num_matches = 0;
char **matches = (char **) NULL, *line = NULL, *lineptr;
char *matchline = NULL, *matchdir = NULL;
int fd, i = 0, status = 1;
char byte[1];
if ((fd = open("/etc/passwd", O_RDONLY)) == -1) {
return NULL;
}
if (homedirs != NULL) {
for (i = 0; i < *num_matches; i++)
free(homedirs[i]);
free(homedirs);
homedirs = (char **) NULL;
*num_matches = 0;
}
matches = nmalloc(BUFSIZ);
homedirs = nmalloc(BUFSIZ);
strcat(buf, "*");
do {
i = 0;
line = nmalloc(1);
while ((status = read(fd, byte, 1)) != 0 && byte[0] != '\n') {
line[i] = byte[0];
i++;
line = nrealloc(line, i + 1);
}
if (i == 0)
break;
line[i] = 0;
lineptr = strtok(line, ":");
if (check_wildcard_match(line, &buf[1]) == TRUE) {
if (*num_matches == BUFSIZ)
break;
/* Cool, found a match. Add it to the list
* This makes a lot more sense to me (Chris) this way...
*/
matchline = nmalloc(strlen(line) + 2);
sprintf(matchline, "~%s", line);
for (i = 0; i <= 4 && lineptr != NULL; i++)
lineptr = strtok(NULL, ":");
if (lineptr == NULL)
break;
matchdir = mallocstrcpy(matchdir, lineptr);
homedirs[*num_matches] = matchdir;
matches[*num_matches] = matchline;
++*num_matches;
/* If there's no more room, bail out */
if (*num_matches == BUFSIZ)
break;
}
free(line);
} while (status != 0);
close(fd);
return matches;
#ifdef DEBUG
fprintf(stderr, "\nin username_tab_completion\n");
#endif
return (matches);
}
#endif
/* This was originally called exe_n_cwd_tab_completion, but we're not
worried about executables, only filenames :> */
char **cwd_tab_completion(char *buf, int *num_matches)
{
char *dirName, *tmp = NULL, *tmp2 = NULL;
char *dirName, *dirtmp = NULL, *tmp = NULL, *tmp2 = NULL;
char **matches = (char **) NULL;
DIR *dir;
struct dirent *next;
@@ -569,6 +787,17 @@ char **cwd_tab_completion(char *buf, int *num_matches)
fprintf(stderr, "\ntmp = %s\n", tmp);
#endif
dirtmp = real_dir_from_tilde(dirName);
free(dirName);
dirName = dirtmp;
#ifdef DEBUG
fprintf(stderr, "\nDir = %s\n", dirName);
fprintf(stderr, "\nbuf = %s\n", buf);
fprintf(stderr, "\ntmp = %s\n", tmp);
#endif
dir = opendir(dirName);
if (!dir) {
/* Don't print an error, just shut up and return */
@@ -616,9 +845,8 @@ char *input_tab(char *buf, int place, int *lastWasTab, int *newplace)
static int num_matches = 0, match_matches = 0;
static char **matches = (char **) NULL;
int pos = place, i = 0, col = 0, editline = 0;
int longestname = 0;
int longestname = 0, is_dir = 0;
char *foo;
struct stat fileinfo;
if (*lastWasTab == FALSE) {
char *tmp, *copyto, *matchBuf;
@@ -648,9 +876,9 @@ char *input_tab(char *buf, int place, int *lastWasTab, int *newplace)
/* If the word starts with `~' and there is no slash in the word,
* then try completing this word as a username. */
/* FIXME -- this check is broken!
if (*tmp == '~' && !strchr(tmp, '/'))
matches = username_tab_completion(tmp, &num_matches); */
/* FIXME -- this check is broken! */
if (*tmp == '~' && !strchr(tmp, '/'))
matches = username_tab_completion(tmp, &num_matches);
/* Try to match everything in the current working directory that
* matches. */
@@ -680,21 +908,11 @@ char *input_tab(char *buf, int place, int *lastWasTab, int *newplace)
} else
tmp = buf;
if (!strcmp(tmp, matches[0])) {
if (!strcmp(tmp, matches[0]))
is_dir = append_slash_if_dir(buf, lastWasTab, newplace);
/* Is it a directory? */
if (stat(buf, &fileinfo) == -1)
break;
else if (S_ISDIR(fileinfo.st_mode)) {
/* Tack on a slash */
strncat(buf, "/", 1);
*newplace += 1;
/* now we start over with 0 tabs so far */
*lastWasTab = 0;
}
if (is_dir)
break;
}
copyto = tmp;
for (pos = 0; *tmp == matches[0][pos] &&
@@ -705,14 +923,9 @@ char *input_tab(char *buf, int place, int *lastWasTab, int *newplace)
strncpy(copyto, matches[0], strlen(matches[0]) + 1);
*newplace += strlen(matches[0]) - pos;
if (stat(buf, &fileinfo) == -1)
break;
else if (S_ISDIR(fileinfo.st_mode)) {
strncat(buf, "/", 1);
*newplace += 1;
/* now we start over again with # of tabs so far */
*lastWasTab = 0;
}
/* Is it a directory? */
append_slash_if_dir(buf, lastWasTab, newplace);
break;
default:
/* Check to see if all matches share a beginning, and if so
@@ -815,3 +1028,4 @@ char *input_tab(char *buf, int place, int *lastWasTab, int *newplace)
curs_set(1);
return buf;
}
#endif

View File

@@ -39,7 +39,7 @@ int center_x = 0, center_y = 0; /* Center of screen */
WINDOW *edit; /* The file portion of the editor */
WINDOW *topwin; /* Top line of screen */
WINDOW *bottomwin; /* Bottom buffer */
char filename[PATH_MAX]; /* Name of the file */
char *filename = NULL; /* Name of the file */
int editwinrows = 0; /* How many rows long is the edit
window? */
filestruct *current; /* Current buffer pointer */
@@ -156,7 +156,7 @@ void toggle_init(void)
#endif
}
void shortcut_init(void)
void shortcut_init(int unjustify)
{
char *nano_help_msg = "", *nano_writeout_msg = "", *nano_exit_msg = "",
*nano_goto_msg = "", *nano_justify_msg = "", *nano_replace_msg =
@@ -170,7 +170,7 @@ void shortcut_init(void)
"", *nano_mark_msg = "", *nano_delete_msg =
"", *nano_backspace_msg = "", *nano_tab_msg =
"", *nano_enter_msg = "", *nano_case_msg =
"", *nano_cancel_msg = "";
"", *nano_cancel_msg = "", *nano_unjustify_msg = "";
#ifndef NANO_SMALL
nano_help_msg = _("Invoke the help menu");
@@ -178,6 +178,7 @@ void shortcut_init(void)
nano_exit_msg = _("Exit from nano");
nano_goto_msg = _("Goto a specific line number");
nano_justify_msg = _("Justify the current paragraph");
nano_unjustify_msg = _("Unjustify after a justify");
nano_replace_msg = _("Replace text within the editor");
nano_insert_msg = _("Insert another file into the current one");
nano_whereis_msg = _("Search for text within the editor");
@@ -255,7 +256,11 @@ void shortcut_init(void)
sc_init_one(&main_list[8], NANO_CUT_KEY, _("Cut Text"),
nano_cut_msg, 0, NANO_CUT_FKEY, 0, NOVIEW, do_cut_text);
sc_init_one(&main_list[9], NANO_UNCUT_KEY, _("UnCut Txt"),
if (unjustify)
sc_init_one(&main_list[9], NANO_UNJUSTIFY_KEY, _("UnJustify"),
nano_unjustify_msg, 0, 0, 0, NOVIEW, do_uncut_text);
else
sc_init_one(&main_list[9], NANO_UNCUT_KEY, _("UnCut Txt"),
nano_uncut_msg,
0, NANO_UNCUT_FKEY, 0, NOVIEW, do_uncut_text);
@@ -405,10 +410,7 @@ void shortcut_init(void)
sc_init_one(&writefile_list[0], NANO_CANCEL_KEY, _("Cancel"),
nano_cancel_msg, 0, 0, 0, VIEW, 0);
sc_init_one(&spell_list[0], NANO_HELP_KEY, _("Get Help"),
nano_help_msg, 0, 0, 0, VIEW, do_help);
sc_init_one(&spell_list[1], NANO_CANCEL_KEY, _("Cancel"),
sc_init_one(&spell_list[0], NANO_CANCEL_KEY, _("Cancel"),
nano_cancel_msg, 0, 0, 0, VIEW, 0);
toggle_init();

3
intl/.cvsignore Normal file
View File

@@ -0,0 +1,3 @@
Makefile
libintl.h
po2tbl.sed

56
nano.1
View File

@@ -1,20 +1,16 @@
.\" Hey, EMACS: -*- nroff -*-
.\" Hey, EMACS: -*- nroff -*-
.\" nano.1 is copyright 1999-2000 by
.\" Chris Allegretta <chrisa@asty.org>
.\"
.\" This is free documentation, see the latest version of the GNU General
.\" Public License for copying conditions. There is NO warranty.
.\"
.\" First parameter, NAME, should be all caps
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
.\" other parameters are allowed: see man(7), man(1)
.TH NANO 1 "July 28, 2000"
.TH NANO 1 "December 2, 2000"
.\" Please adjust this date whenever revising the manpage.
.\"
.\" Some roff macros, for reference:
.\" .nh disable hyphenation
.\" .hy enable hyphenation
.\" .ad l left justify
.\" .ad b justify to both left and right margins
.\" .nf disable filling
.\" .fi enable filling
.\" .br insert line break
.\" .sp <n> insert n+1 empty lines
.\" for manpage-specific macros, see man(7)
.SH NAME
nano \- Nano's ANOther editor, an enhanced free Pico Clone
.SH SYNOPSIS
@@ -29,14 +25,12 @@ command.
.\" TeX users may be more comfortable with the \fB<whatever>\fP and
.\" \fI<whatever>\fP escape sequences to invode bold face and italics,
.\" respectively.
\fBnano\fP was originally known as TIP (TIP Isn't Pico). It is a small,
free and friendly editor which aims to replace Pico, the default editor
included in the non-free Pine package. Rather than just copying Pico's
look and feel,
\fBnano\fP is a small, free and friendly editor which aims to replace
Pico, the default editor included in the non-free Pine package. Rather
than just copying Pico's look and feel,
.B nano
also implements some missing (or disabled by
default) features in Pico, such as "search and replace" and "goto line
number".
also implements some missing (or disabled by default) features in Pico,
such as "search and replace" and "goto line number".
.SH OPTIONS
.TP
.B \-T (\-\-tabsize)
@@ -70,7 +64,9 @@ a new file, do not follow it. Good for editing files in /tmp perhaps?
Enable mouse support (if available for your system).
.TP
.B \-p (\-\-pico)
Emulate Pico as closely as possible.
Emulate Pico as closely as possible. This affects both the "shortcut list"
at the bottom of the screen, as well as the display and entry of previous
search and replace strings.
.TP
.B \-s (\-\-speller)
Enable alternative spell checker command.
@@ -90,18 +86,32 @@ Disable help screen at bottom of editor.
.B \-z (\-\-suspend)
Enable suspend ability.
.TP
.B \-b, \-e, \-f
Ignored, for compatibility with Pico.
.TP
.B \+LINE
Places cursor at LINE on startup.
.SH NOTES
Nano will try to dump the buffer into an emergency file in some cases.
Mainly, this will happen if Nano recieves a SIGHUP or runs out of
memory, when it will write the buffer into a file named "nano.save" if the
buffer didn't have a name already, or will add a ".save" suffix to the
current finename. Nano will \fBnot\fP write this file if a previous one
exists in the current directory.
.SH BUGS
Please send any comments or bug reports to
.br
.B nano@nano-editor.org.
.br
The nano mailing list is available from
.br
.B nano-devel@lists.sourceforge.net.
To subscribe, email to nano-devel-request@lists.sourceforge.net with a
subject of "subscribe".
.SH HOMEPAGE
http://www.nano-editor.org
.SH AUTHOR
Chris Allegretta <chrisa@asty.org>, et al. This manual page was
originally written by Jordi Mallach <jordi@sindominio.net>, for the Debian
GNU/Linux system (but may be used by others).
Chris Allegretta <chrisa@asty.org>, et al (see AUTHORS for details).
This manual page was originally written by Jordi Mallach
<jordi@sindominio.net>, for the Debian GNU/Linux system (but may be
used by others).

View File

@@ -3,21 +3,11 @@ Content-type: text/html
<HTML><HEAD><TITLE>Manpage of NANO</TITLE>
</HEAD><BODY>
<H1>NANO</H1>
Section: User Commands (1)<BR>Updated: July 28, 2000<BR><A HREF="#index">Index</A>
Section: User Commands (1)<BR>Updated: December 2, 2000<BR><A HREF="#index">Index</A>
<A HREF="http://localhost/cgi-bin/man/man2html">Return to Main Contents</A><HR>
<A NAME="lbAB">&nbsp;</A>
<H2>NAME</H2>
@@ -43,15 +33,13 @@ command.
<B>nano</B> was originally known as TIP (TIP Isn't Pico). It is a small,
free and friendly editor which aims to replace Pico, the default editor
included in the non-free Pine package. Rather than just copying Pico's
look and feel,
<B>nano</B> is a small, free and friendly editor which aims to replace
Pico, the default editor included in the non-free Pine package. Rather
than just copying Pico's look and feel,
<B>nano</B>
also implements some missing (or disabled by
default) features in Pico, such as &quot;search and replace&quot; and &quot;goto line
number&quot;.
also implements some missing (or disabled by default) features in Pico,
such as &quot;search and replace&quot; and &quot;goto line number&quot;.
<A NAME="lbAE">&nbsp;</A>
<H2>OPTIONS</H2>
@@ -98,7 +86,9 @@ Enable mouse support (if available for your system).
<DT><B>-p (--pico)</B>
<DD>
Emulate Pico as closely as possible.
Emulate Pico as closely as possible. This affects both the &quot;shortcut list&quot;
at the bottom of the screen, as well as the display and entry of previous
search and replace strings.
<DT><B>-s (--speller)</B>
<DD>
@@ -123,32 +113,52 @@ Disable help screen at bottom of editor.
<DD>
Enable suspend ability.
<DT><B>-b, -e, -f</B>
<DD>
Ignored, for compatibility with Pico.
<DT><B>+LINE</B>
<DD>
Places cursor at LINE on startup.
</DL>
<A NAME="lbAF">&nbsp;</A>
<H2>NOTES</H2>
Nano will try to dump the buffer into an emergency file in some cases.
Mainly, this will happen if Nano recieves a SIGHUP or runs out of
memory, when it will write the buffer into a file named &quot;nano.save&quot; if the
buffer didn't have a name already, or will add a &quot;.save&quot; suffix to the
current finename. Nano will <B>not</B> write this file if a previous one
exists in the current directory.
<A NAME="lbAG">&nbsp;</A>
<H2>BUGS</H2>
Please send any comments or bug reports to
<BR>
<B><A HREF="mailto:nano@nano-editor.org">nano@nano-editor.org</A>.</B>
<BR>
The nano mailing list is available from
<BR>
<B><A HREF="mailto:nano-devel@lists.sourceforge.net">nano-devel@lists.sourceforge.net</A>.</B>
To subscribe, email to <A HREF="mailto:nano-devel-request@lists.sourceforge.net">nano-devel-request@lists.sourceforge.net</A> with a
subject of &quot;subscribe&quot;.
<A NAME="lbAG">&nbsp;</A>
<A NAME="lbAH">&nbsp;</A>
<H2>HOMEPAGE</H2>
<A HREF="http://www.nano-editor.org">http://www.nano-editor.org</A>
<A NAME="lbAH">&nbsp;</A>
<A NAME="lbAI">&nbsp;</A>
<H2>AUTHOR</H2>
Chris Allegretta &lt;<A HREF="mailto:chrisa@asty.org">chrisa@asty.org</A>&gt;, et al. This manual page was
originally written by Jordi Mallach &lt;<A HREF="mailto:jordi@sindominio.net">jordi@sindominio.net</A>&gt;, for the Debian
GNU/Linux system (but may be used by others).
Chris Allegretta &lt;<A HREF="mailto:chrisa@asty.org">chrisa@asty.org</A>&gt;, et al (see AUTHORS for details).
This manual page was originally written by Jordi Mallach
&lt;<A HREF="mailto:jordi@sindominio.net">jordi@sindominio.net</A>&gt;, for the Debian GNU/Linux system (but may be
used by others).
<P>
<HR>
@@ -158,14 +168,15 @@ GNU/Linux system (but may be used by others).
<DT><A HREF="#lbAC">SYNOPSIS</A><DD>
<DT><A HREF="#lbAD">DESCRIPTION</A><DD>
<DT><A HREF="#lbAE">OPTIONS</A><DD>
<DT><A HREF="#lbAF">BUGS</A><DD>
<DT><A HREF="#lbAG">HOMEPAGE</A><DD>
<DT><A HREF="#lbAH">AUTHOR</A><DD>
<DT><A HREF="#lbAF">NOTES</A><DD>
<DT><A HREF="#lbAG">BUGS</A><DD>
<DT><A HREF="#lbAH">HOMEPAGE</A><DD>
<DT><A HREF="#lbAI">AUTHOR</A><DD>
</DL>
<HR>
This document was created by
<A HREF="http://localhost/cgi-bin/man/man2html">man2html</A>,
using the manual pages.<BR>
Time: 21:33:46 GMT, November 19, 2000
Time: 02:16:52 GMT, December 18, 2000
</BODY>
</HTML>

264
nano.c
View File

@@ -64,10 +64,12 @@
int fill = 0; /* Fill - where to wrap lines, basically */
static char *alt_speller; /* Alternative spell command */
struct termios oldterm; /* The user's original term settings */
static char *help_text_init = "";
/* Initial message, not including shortcuts */
static struct sigaction act; /* For all out fun signal handlers */
#if !defined(NANO_SMALL) && !defined(DISABLE_HELP)
static char *help_text_init = ""; /* Initial message, not including shortcuts */
#endif
char *last_search = NULL; /* Last string we searched for */
char *last_replace = NULL; /* Last replacement string */
int search_last_line; /* Is this the last search line? */
@@ -104,6 +106,8 @@ RETSIGTYPE finish(int sigage)
void die(char *msg, ...)
{
va_list ap;
char *name;
int i;
va_start(ap, msg);
vfprintf(stderr, msg, ap);
@@ -112,12 +116,15 @@ void die(char *msg, ...)
/* if we can't save we have REAL bad problems,
* but we might as well TRY. */
if (filename[0] == '\0') {
write_file("nano.save", 0);
name = "nano.save";
i = write_file(name, 1);
} else {
char buf[BUFSIZ];
strncpy(buf, filename, BUFSIZ);
strncat(buf, ".save", BUFSIZ - strlen(buf));
write_file(buf, 0);
char *buf = nmalloc(strlen(filename) + 6);
strcpy(buf, filename);
strcat(buf, ".save");
i = write_file(buf, 1);
name = buf;
}
/* Restore the old term settings */
tcsetattr(0, TCSANOW, &oldterm);
@@ -128,7 +135,10 @@ void die(char *msg, ...)
endwin();
fprintf(stderr, msg);
fprintf(stderr, _("\nBuffer written to 'nano.save'\n"));
if (i != -1)
fprintf(stderr, _("\nBuffer written to %s\n"), name);
else
fprintf(stderr, _("\nNo %s written (file exists?)\n"), name);
exit(1); /* We have a problem: exit w/ errorlevel(1) */
}
@@ -138,6 +148,13 @@ void print_view_warning(void)
statusbar(_("Key illegal in VIEW mode"));
}
void clear_filename(void)
{
if (filename != NULL)
free(filename);
filename = nmalloc(1);
filename[0] = 0;
}
/* Initialize global variables - no better way for now */
void global_init(void)
@@ -169,7 +186,7 @@ void global_init(void)
void init_help_msg(void)
{
#ifndef NANO_SMALL
#if !defined(NANO_SMALL) && !defined(DISABLE_HELP)
help_text_init =
_(" nano help text\n\n "
@@ -307,7 +324,10 @@ int renumber(filestruct * fileptr)
return 0;
}
for (temp = fileptr; temp != NULL; temp = temp->next) {
temp->lineno = temp->prev->lineno + 1;
if (temp->prev != NULL)
temp->lineno = temp->prev->lineno + 1;
else
temp->lineno = 1;
}
return 0;
@@ -417,7 +437,32 @@ void version(void)
printf(_(" nano version %s by Chris Allegretta (compiled %s, %s)\n"),
VERSION, __TIME__, __DATE__);
printf(_
(" Email: nano@nano-editor.org Web: http://www.nano-editor.org\n"));
(" Email: nano@nano-editor.org Web: http://www.nano-editor.org"));
printf(_("\n Compiled options:"));
#ifdef NANO_SMALL
printf(" --enable-tiny");
#endif
#ifdef NANO_EXTRA
printf(" --enable-extra");
#endif
#ifdef DISABLE_TABCOMP
printf(" --disable-tabcomp");
#endif
#ifdef DISABLE_JUSTIFY
printf(" --disable-justify");
#endif
#ifdef DISABLE_SPELLER
printf(" --disable-speller");
#endif
#ifdef DISABLE_HELP
printf(" --disable-help");
#endif
#ifdef USE_SLANG
printf(" --with-slang");
#endif
printf("\n");
}
filestruct *make_new_node(filestruct * prevnode)
@@ -477,10 +522,19 @@ int no_help(void)
return 0;
}
#ifdef NANO_SMALL
void nano_small_msg(void)
{
statusbar("Sorry, this function not available with nano-tiny option");
}
#endif
#if defined(DISABLE_JUSTIFY) || defined(DISABLE_SPELLER) || defined(DISABLE_HELP)
void nano_disabled_msg(void)
{
statusbar("Sorry, support for this function has been disabled");
}
#endif
/* The user typed a printable character; add it to the edit buffer */
void do_char(char ch)
@@ -579,12 +633,13 @@ int do_enter_void(void)
void do_next_word(void)
{
filestruct *fileptr;
filestruct *fileptr, *old;
int i;
if (current == NULL)
return;
old = current;
i = current_x;
for (fileptr = current; fileptr != NULL; fileptr = fileptr->next) {
if (fileptr == current) {
@@ -612,8 +667,19 @@ void do_next_word(void)
current_x = i;
placewewant = xplustabs();
if (current->lineno >= editbot->lineno)
edit_update(current, CENTER);
else {
/* If we've jumped lines, refresh the old line. We can't just use
* current->prev here, because we may have skipped over some blank
* lines, in which case the previous line is the wrong one.
*/
if (current != old)
update_line(old, 0);
update_line(current, current_x);
}
}
@@ -979,7 +1045,6 @@ int do_backspace(void)
if (strcmp(current->data, "")) {
new_magicline();
fix_editbot();
totsize++;
}
}
@@ -1051,13 +1116,13 @@ void wrap_reset(void)
UNSET(SAMELINEWRAP);
}
#ifndef NANO_SMALL
#if !defined(NANO_SMALL) && !defined(DISABLE_SPELLER)
int do_int_spell_fix(char *word)
{
char *prevanswer = NULL, *save_search = NULL, *save_replace = NULL;
filestruct *begin, *begin_top;
int i = 0, beginx, beginx_top;
filestruct *begin;
int i = 0, j = 0, beginx, beginx_top;
/* save where we are */
begin = current;
@@ -1074,25 +1139,32 @@ int do_int_spell_fix(char *word)
last_replace = mallocstrcpy(last_replace, word);
/* start from the top of file */
begin_top = current = fileage;
beginx_top = current_x = -1;
current = fileage;
current_x = beginx_top = -1;
search_last_line = FALSE;
edit_update(fileage, TOP);
/* make sure word is still mis-spelt (i.e. when multi-errors) */
if (findnextstr(TRUE, begin_top, beginx_top, prevanswer) != NULL)
if (findnextstr(TRUE, fileage, beginx_top, prevanswer) != NULL)
{
do_replace_highlight(TRUE, prevanswer);
/* allow replace word to be corrected */
i = statusq(0, spell_list, SPELL_LIST_LEN, last_replace,
_("Edit a replacement"));
do_replace_highlight(FALSE, prevanswer);
/* start from the start of this line again */
current = begin_top;
current = fileage;
current_x = beginx_top;
search_last_line = FALSE;
/* allow replace word to be corrected */
i = statusq(0, replace_list_2, REPLACE_LIST_2_LEN, last_replace,
_("Edit a replacement"));
do_replace_loop(prevanswer, begin_top, &beginx_top, TRUE, &i);
j = i;
do_replace_loop(prevanswer, fileage, &beginx_top, TRUE, &j);
}
/* restore the search/replace strings */
@@ -1112,7 +1184,7 @@ int do_int_spell_fix(char *word)
}
#endif
#ifndef NANO_SMALL
#if !defined(NANO_SMALL) && !defined(DISABLE_SPELLER)
/* Integrated spell checking using 'spell' program */
int do_int_speller(char *tempfile_name)
@@ -1153,6 +1225,7 @@ int do_int_speller(char *tempfile_name)
}
close(tempfile_fd);
/* send spell's standard out to the pipe */
if (dup2(in_fd[1], STDOUT_FILENO) != STDOUT_FILENO) {
@@ -1241,7 +1314,7 @@ int do_int_speller(char *tempfile_name)
}
#endif
#ifndef NANO_SMALL
#if !defined(NANO_SMALL) && !defined(DISABLE_SPELLER)
/* External spell checking */
int do_alt_speller(char *file_name)
@@ -1293,9 +1366,12 @@ int do_alt_speller(char *file_name)
int do_spell(void)
{
#ifdef NANO_SMALL
#if defined(NANO_SMALL)
nano_small_msg();
return (TRUE);
#elif defined(DISABLE_SPELLER)
nano_disabled_msg();
return (TRUE);
#else
char *temp;
int spell_res;
@@ -1306,8 +1382,10 @@ int do_spell(void)
return 0;
}
if (write_file(temp, 1) == -1)
if (write_file(temp, 1) == -1) {
statusbar(_("Spell checking failed: unable to write temp file!"));
return 0;
}
if (alt_speller)
spell_res = do_alt_speller(temp);
@@ -1435,8 +1513,7 @@ void do_mouse(void)
/* Handler for SIGHUP */
RETSIGTYPE handle_hup(int signal)
{
write_file("nano.save", 0);
finish(1);
die(_("Received SIGHUP"));
}
/* What do we do when we catch the suspend signal */
@@ -1597,7 +1674,7 @@ int do_tab(void)
return 1;
}
#ifndef NANO_SMALL
#if !defined(NANO_SMALL) && !defined(DISABLE_JUSTIFY)
int empty_line(const char *data)
{
while (*data) {
@@ -1649,10 +1726,16 @@ void justify_format(char *data)
int do_justify(void)
{
#ifndef NANO_SMALL
#ifdef NANO_SMALL
nano_small_msg();
return 1;
#elif defined(DISABLE_JUSTIFY)
nano_disabled_msg();
return 1;
#else
int slen = 0; /* length of combined lines on one line. */
int initial_y;
filestruct *initial = NULL;
int initial_y, kbinput;
filestruct *initial = NULL, *tmpjust = NULL, *cutbak, *tmptop, *tmpbot;
if (empty_line(current->data)) {
/* Justify starting at first non-empty line. */
@@ -1690,6 +1773,12 @@ int do_justify(void)
initial_y = current_y;
set_modified();
cutbak = cutbuffer; /* Got to like cutbak ;) */
cutbuffer = NULL;
tmptop = current;
tmpjust = copy_node(current);
add_to_cutbuffer(tmpjust);
/* Put the whole paragraph into one big line. */
while (current->next && !isspace((int) current->next->data[0])
&& current->next->data[0]) {
@@ -1697,6 +1786,10 @@ int do_justify(void)
int len = strlen(current->data);
int len2 = strlen(current->next->data);
tmpjust = NULL;
tmpjust = copy_node(current->next);
add_to_cutbuffer(tmpjust);
/* length of both strings plus space between strings and ending \0. */
current->data = nrealloc(current->data, len + len2 + 2);
current->data[len++] = ' ';
@@ -1761,6 +1854,7 @@ int do_justify(void)
} while ((strlenpt(current->data) > (fill))
&& !no_spaces(current->data));
}
tmpbot = current;
if (current->next)
current = current->next;
@@ -1783,24 +1877,51 @@ int do_justify(void)
}
edit_refresh();
statusbar(_("Justify Complete"));
return 1;
#else
nano_small_msg();
statusbar(_("Can now UnJustify!"));
/* Change the shortcut list to display the unjustify code */
shortcut_init(1);
display_main_list();
reset_cursor();
/* Now get a keystroke and see if it's unjustify, if not unget the keytroke
and return */
if ((kbinput = wgetch(edit)) != NANO_UNJUSTIFY_KEY)
ungetch(kbinput);
else {
/* Else restore the justify we just did (ungrateful user!) */
if (tmptop->prev != NULL)
tmptop->prev->next = tmpbot->next;
else
fileage = current;
tmpbot->next->prev = tmptop->prev;
current = tmpbot->next;
tmpbot->next = NULL;
do_uncut_text();
if (tmptop->prev == NULL)
edit_refresh();
free_filestruct(tmptop);
blank_statusbar_refresh();
}
shortcut_init(0);
display_main_list();
free_filestruct(cutbuffer);
cutbuffer = cutbak;
return 1;
#endif
}
#if !defined(NANO_SMALL) && !defined(DISABLE_HELP)
void help_init(void)
{
int i, sofar = 0;
long allocsize = 1; /* How much space we're gonna need for the help text */
char buf[BUFSIZ];
char buf[BUFSIZ] = "";
/* Compute the space needed for the shortcut lists - we add 15 to
have room for the shortcut abbrev and its possible alternate keys */
for (i = 0; i < MAIN_LIST_LEN; i++)
for (i = 0; i <= MAIN_LIST_LEN - 1; i++)
if (main_list[i].help != NULL)
allocsize += strlen(main_list[i].help) + 15;
@@ -1821,7 +1942,7 @@ void help_init(void)
strcpy(help_text, help_text_init);
/* Now add our shortcut info */
for (i = 0; i < MAIN_LIST_LEN - 1; i++) {
for (i = 0; i <= MAIN_LIST_LEN - 1; i++) {
sofar = snprintf(buf, BUFSIZ, "^%c ", main_list[i].val + 64);
if (main_list[i].misc1 > KEY_F0 && main_list[i].misc1 <= KEY_F(64))
@@ -1859,6 +1980,7 @@ void help_init(void)
}
}
#endif
void do_toggle(int which)
{
@@ -1873,7 +1995,7 @@ void do_toggle(int which)
switch (toggles[which].val) {
case TOGGLE_PICOMODE_KEY:
shortcut_init();
shortcut_init(0);
display_main_list();
break;
case TOGGLE_SUSPEND_KEY:
@@ -1886,6 +2008,7 @@ void do_toggle(int which)
wclear(bottomwin);
wrefresh(bottomwin);
window_init();
fix_editbot();
edit_refresh();
display_main_list();
break;
@@ -1917,7 +2040,7 @@ int main(int argc, char *argv[])
int kbinput; /* Input from keyboard */
long startline = 0; /* Line to try and start at */
int keyhandled = 0; /* Have we handled the keystroke yet? */
int i;
int i, modify_control_seq = 0;
char *argv0;
#ifdef _POSIX_VDISABLE
struct termios term;
@@ -1935,6 +2058,7 @@ int main(int argc, char *argv[])
{"nowrap", 0, 0, 'w'},
{"nohelp", 0, 0, 'x'},
{"help", 0, 0, 'h'},
{"view", 0, 0, 'v'},
#ifndef NANO_SMALL
{"cut", 0, 0, 'k'},
#endif
@@ -1960,10 +2084,10 @@ int main(int argc, char *argv[])
#endif
#ifdef HAVE_GETOPT_LONG
while ((optchr = getopt_long(argc, argv, "?T:RVchiklmpr:s:tvwxz",
while ((optchr = getopt_long(argc, argv, "?T:RVbcefhiklmpr:s:tvwxz",
long_options, &option_index)) != EOF) {
#else
while ((optchr = getopt(argc, argv, "h?T:RVciklmpr:s:tvwxz")) != EOF) {
while ((optchr = getopt(argc, argv, "h?T:RVbcefiklmpr:s:tvwxz")) != EOF) {
#endif
switch (optchr) {
@@ -1982,6 +2106,11 @@ int main(int argc, char *argv[])
case 'V':
version();
exit(0);
case 'b':
case 'e':
case 'f':
/* Pico compatibility flags */
break;
case 'c':
SET(CONSTUPDATE);
break;
@@ -2051,19 +2180,19 @@ int main(int argc, char *argv[])
/* See if there's a non-option in argv (first non-option is the
filename, if +LINE is not given) */
if (argc == 1 || argc <= optind)
strcpy(filename, "");
clear_filename();
else {
/* Look for the +line flag... */
if (argv[optind][0] == '+') {
startline = atoi(&argv[optind][1]);
optind++;
if (argc == 1 || argc <= optind)
strcpy(filename, "");
clear_filename();
else
strncpy(filename, argv[optind], 132);
} else
strncpy(filename, argv[optind], 132);
filename = mallocstrcpy(filename, argv[optind]);
} else
filename = mallocstrcpy(filename, argv[optind]);
}
@@ -2088,9 +2217,11 @@ int main(int argc, char *argv[])
/* Set up some global variables */
global_init();
shortcut_init();
shortcut_init(0);
init_help_msg();
#if !defined(NANO_SMALL) && !defined(DISABLE_HELP)
help_init();
#endif
signal_init();
#ifdef DEBUG
@@ -2156,6 +2287,12 @@ int main(int argc, char *argv[])
}
#endif
break;
case 27:
/* If we get Alt-Alt, the next keystroke should be the same as a
control sequence */
modify_control_seq = 1;
keyhandled = 1;
break;
case 91:
switch (kbinput = wgetch(edit)) {
@@ -2285,6 +2422,18 @@ int main(int argc, char *argv[])
break;
}
}
/* If the modify_control_seq is set, we received an Alt-Alt
sequence before this, so we make this key a control sequence
by subtracting 64 or 96, depending on its value. */
if (!keyhandled && modify_control_seq) {
if (kbinput >= 'A' && kbinput < 'a')
kbinput -= 64;
else if (kbinput >= 'a' && kbinput <= 'z')
kbinput -= 96;
modify_control_seq = 0;
}
/* Look through the main shortcut list to see if we've hit a
shortcut key */
for (i = 0; i < MAIN_LIST_LEN && !keyhandled; i++) {
@@ -2298,18 +2447,17 @@ int main(int argc, char *argv[])
keyhandled = 1;
}
}
#ifndef _POSIX_VDISABLE
/* Since we're in raw mode, we have to catch ^Q and ^S */
/* If we're in raw mode or using Alt-Alt-x, we have to catch
Control-S and Control-Q */
if (kbinput == 17 || kbinput == 19)
keyhandled = 1;
/* And catch ^Z by hand when triggered */
/* Catch ^Z by hand when triggered also */
if (kbinput == 26) {
if (ISSET(SUSPEND))
do_suspend(0);
keyhandled = 1;
}
#endif
/* Last gasp, stuff that's not in the main lists */
if (!keyhandled)
@@ -2330,7 +2478,9 @@ int main(int argc, char *argv[])
#ifdef PDCURSES
case 541: /* ???? */
case 542: /* Control and alt in Windows *shrug* */
case 543: /* Right ctrl key */
case 544:
case 545: /* Right alt key */
#endif
break;

3
nano.h
View File

@@ -212,6 +212,7 @@ know what you're doing */
#define NANO_REFRESH_KEY NANO_CONTROL_L
#define NANO_JUSTIFY_KEY NANO_CONTROL_J
#define NANO_JUSTIFY_FKEY KEY_F(4)
#define NANO_UNJUSTIFY_KEY NANO_CONTROL_U
#define NANO_UP_KEY NANO_CONTROL_P
#define NANO_DOWN_KEY NANO_CONTROL_N
#define NANO_FORWARD_KEY NANO_CONTROL_F
@@ -244,7 +245,7 @@ know what you're doing */
#define GOTO_LIST_LEN 3
#define WRITEFILE_LIST_LEN 1
#define HELP_LIST_LEN 3
#define SPELL_LIST_LEN 3
#define SPELL_LIST_LEN 1
#ifdef HAVE_REGEX_H
#define TOGGLE_LEN 9

7
po/.cvsignore Normal file
View File

@@ -0,0 +1,7 @@
Makefile
Makefile.in
POTFILES
*.gmo
*.pot
cat-id*
stamp-cat*

View File

@@ -1,238 +0,0 @@
/* Automatically generated by po2tbl.sed from nano.pot. */
#if HAVE_CONFIG_H
# include <config.h>
#endif
#include "libgettext.h"
const struct _msg_ent _msg_tbl[] = {
{"", 1},
{"add_to_cutbuffer called with inptr->data = %s\n", 2},
{"Blew away cutbuffer =)\n", 3},
{"read_line: not on first line and prev is NULL", 4},
{"Read %d lines", 5},
{"\"%s\" not found", 6},
{"New File", 7},
{"File \"%s\" is a directory", 8},
{"Reading File", 9},
{"File to insert [from ./] ", 10},
{"Cancelled", 11},
{"Could not open file for writing: %s", 12},
{"Could not open file: Path length exceeded.", 13},
{"Wrote >%s\n", 14},
{"Could not close %s: %s", 15},
{"Could not open %s for writing: %s", 16},
{"Could not set permissions %o on %s: %s", 17},
{"Wrote %d lines", 18},
{"File Name to write", 19},
{"filename is %s", 20},
{"File exists, OVERWRITE ?", 21},
{"(more)", 22},
{"Constant cursor position", 23},
{"Auto indent", 24},
{"Suspend", 25},
{"Help mode", 26},
{"Pico mode", 27},
{"Mouse support", 28},
{"Cut to end", 29},
{"Regular expressions", 30},
{"Auto wrap", 31},
{"Invoke the help menu", 32},
{"Write the current file to disk", 33},
{"Exit from nano", 34},
{"Goto a specific line number", 35},
{"Justify the current paragraph", 36},
{"Replace text within the editor", 37},
{"Insert another file into the current one", 38},
{"Search for text within the editor", 39},
{"Move to the previous screen", 40},
{"Move to the next screen", 41},
{"Cut the current line and store it in the cutbuffer", 42},
{"Uncut from the cutbuffer into the current line", 43},
{"Show the posititon of the cursor", 44},
{"Invoke the spell checker (if available)", 45},
{"Move up one line", 46},
{"Move down one line", 47},
{"Move forward one character", 48},
{"Move back one character", 49},
{"Move to the beginning of the current line", 50},
{"Move to the end of the current line", 51},
{"Go to the first line of the file", 52},
{"Go to the last line of the file", 53},
{"Refresh (redraw) the current screen", 54},
{"Mark text at the current cursor location", 55},
{"Delete the character under the cursor", 56},
{"Delete the character to the left of the cursor", 57},
{"Insert a tab character", 58},
{"Insert a carriage return at the cursor position", 59},
{"Make the current search or replace case (in)sensitive", 60},
{"Cancel the current function", 61},
{"Get Help", 62},
{"WriteOut", 63},
{"Exit", 64},
{"Goto Line", 65},
{"Justify", 66},
{"Replace", 67},
{"Read File", 68},
{"Where Is", 69},
{"Prev Page", 70},
{"Next Page", 71},
{"Cut Text", 72},
{"UnCut Txt", 73},
{"Cur Pos", 74},
{"To Spell", 75},
{"Up", 76},
{"Down", 77},
{"Forward", 78},
{"Back", 79},
{"Home", 80},
{"End", 81},
{"Refresh", 82},
{"Mark Text", 83},
{"Delete", 84},
{"Backspace", 85},
{"Tab", 86},
{"Enter", 87},
{"First Line", 88},
{"Last Line", 89},
{"Case Sens", 90},
{"Cancel", 91},
{"No Replace", 92},
{"\
\n\
Buffer written to 'nano.save'\n", 93},
{"Key illegal in VIEW mode", 94},
{"\
nano help text\n\
\n\
The nano editor is designed to emulate the functionality and ease-of-use of \
the UW Pico text editor. There are four main sections of the editor: The \
top line shows the program version, the current filename being edited, and \
whether or not the file has been modified. Next is the main editor window \
showing the file being edited. The status line is the third line from the \
bottom and shows important messages. The bottom two lines show the most \
commonly used shortcuts in the editor.\n\
\n\
The notation for shortcuts is as follows: Control-key sequences are notated \
with a caret (^) symbol and are entered with the Control (Ctrl) key. \
Escape-key sequences are notated with the Meta (M) symbol and can be entered \
using either the Esc, Alt or Meta key depending on your keyboard setup. The \
following keystrokes are available in the main editor window. Optional keys \
are shown in parentheses:\n\
\n", 95},
{"free_node(): free'd a node, YAY!\n", 96},
{"free_node(): free'd last node.\n", 97},
{"\
Usage: nano [GNU long option] [option] +LINE <file>\n\
\n", 98},
{"Option\t\tLong option\t\tMeaning\n", 99},
{" -T \t\t--tabsize=[num]\t\tSet width of a tab to num\n", 100},
{" -R\t\t--regexp\t\tUse regular expressions for search\n", 101},
{" -V \t\t--version\t\tPrint version information and exit\n", 102},
{" -c \t\t--const\t\t\tConstantly show cursor position\n", 103},
{" -h \t\t--help\t\t\tShow this message\n", 104},
{" -k \t\t--cut\t\t\tLet ^K cut from cursor to end of line\n", 105},
{" -i \t\t--autoindent\t\tAutomatically indent new lines\n", 106},
{" -l \t\t--nofollow\t\tDon't follow symbolic links, overwrite\n", 107},
{" -m \t\t--mouse\t\t\tEnable mouse\n", 108},
{"\
-r [#cols] \t--fill=[#cols]\t\tSet fill cols to (wrap lines at) #cols\n", 109},
{" -p\t \t--pico\t\t\tEmulate Pico as closely as possible\n", 110},
{" -s [prog] \t--speller=[prog]\tEnable alternate speller\n", 111},
{" -t \t\t--tempfile\t\tAuto save on exit, don't prompt\n", 112},
{" -v \t\t--view\t\t\tView (read only) mode\n", 113},
{" -w \t\t--nowrap\t\tDon't wrap long lines\n", 114},
{" -x \t\t--nohelp\t\tDon't show help window\n", 115},
{" -z \t\t--suspend\t\tEnable suspend\n", 116},
{" +LINE\t\t\t\t\tStart at line number LINE\n", 117},
{"\
Usage: nano [option] +LINE <file>\n\
\n", 118},
{"Option\t\tMeaning\n", 119},
{" -T [num]\tSet width of a tab to num\n", 120},
{" -R\t\tUse regular expressions for search\n", 121},
{" -V \t\tPrint version information and exit\n", 122},
{" -c \t\tConstantly show cursor position\n", 123},
{" -h \t\tShow this message\n", 124},
{" -k \t\tLet ^K cut from cursor to end of line\n", 125},
{" -i \t\tAutomatically indent new lines\n", 126},
{" -l \t\tDon't follow symbolic links, overwrite\n", 127},
{" -m \t\tEnable mouse\n", 128},
{" -r [#cols] \tSet fill cols to (wrap lines at) #cols\n", 129},
{" -s [prog] \tEnable alternate speller\n", 130},
{" -p \t\tEmulate Pico as closely as possible\n", 131},
{" -t \t\tAuto save on exit, don't prompt\n", 132},
{" -v \t\tView (read only) mode\n", 133},
{" -w \t\tDon't wrap long lines\n", 134},
{" -x \t\tDon't show help window\n", 135},
{" -z \t\tEnable suspend\n", 136},
{" +LINE\t\tStart at line number LINE\n", 137},
{" nano version %s by Chris Allegretta (compiled %s, %s)\n", 138},
{" Email: nano@nano-editor.org\tWeb: http://www.nano-editor.org\n", 139},
{"Mark Set", 140},
{"Mark UNset", 141},
{"check_wrap called with inptr->data=\"%s\"\n", 142},
{"current->data now = \"%s\"\n", 143},
{"After, data = \"%s\"\n", 144},
{"Edit a replacement", 145},
{"Could not create a temporary filename: %s", 146},
{"Finished checking spelling", 147},
{"Spell checking failed", 148},
{"Save modified buffer (ANSWERING \"No\" WILL DESTROY CHANGES) ? ", 149},
{"Cannot resize top win", 150},
{"Cannot move top win", 151},
{"Cannot resize edit win", 152},
{"Cannot move edit win", 153},
{"Cannot resize bottom win", 154},
{"Cannot move bottom win", 155},
{"Justify Complete", 156},
{"%s enable/disable", 157},
{"enabled", 158},
{"disabled", 159},
{"Main: set up windows\n", 160},
{"Main: bottom win\n", 161},
{"Main: open file\n", 162},
{"I got Alt-O-%c! (%d)\n", 163},
{"I got Alt-[-1-%c! (%d)\n", 164},
{"I got Alt-[-2-%c! (%d)\n", 165},
{"I got Alt-[-%c! (%d)\n", 166},
{"I got Alt-%c! (%d)\n", 167},
{"Case Sensitive Regexp Search%s%s", 168},
{"Regexp Search%s%s", 169},
{"Case Sensitive Search%s%s", 170},
{"Search%s%s", 171},
{" (to replace)", 172},
{"Search Cancelled", 173},
{"\"%s...\" not found", 174},
{"Search Wrapped", 175},
{"Replaced %d occurences", 176},
{"Replaced 1 occurence", 177},
{"Replace Cancelled", 178},
{"Replace this instance?", 179},
{"Replace failed: unknown subexpression!", 180},
{"Replace with [%s]", 181},
{"Replace with", 182},
{"Enter line number", 183},
{"Aborted", 184},
{"Come on, be reasonable", 185},
{"Only %d lines available, skipping to last line", 186},
{"actual_x_from_start for xplus=%d returned %d\n", 187},
{"input '%c' (%d)\n", 188},
{"New Buffer", 189},
{" File: ...", 190},
{"Modified", 191},
{"Moved to (%d, %d) in edit buffer\n", 192},
{"current->data = \"%s\"\n", 193},
{"I got \"%s\"\n", 194},
{"Yes", 195},
{"All", 196},
{"No", 197},
{"do_cursorpos: linepct = %f, bytepct = %f\n", 198},
{"line %d of %d (%.0f%%), character %d of %d (%.0f%%)", 199},
{"Dumping file buffer to stderr...\n", 200},
{"Dumping cutbuffer to stderr...\n", 201},
{"Dumping a buffer to stderr...\n", 202},
};
int _msg_tbl_length = 202;

BIN
po/de.gmo

Binary file not shown.

446
po/de.po

File diff suppressed because it is too large Load Diff

BIN
po/es.gmo

Binary file not shown.

455
po/es.po

File diff suppressed because it is too large Load Diff

BIN
po/fi.gmo

Binary file not shown.

444
po/fi.po

File diff suppressed because it is too large Load Diff

BIN
po/fr.gmo

Binary file not shown.

444
po/fr.po

File diff suppressed because it is too large Load Diff

BIN
po/id.gmo

Binary file not shown.

444
po/id.po

File diff suppressed because it is too large Load Diff

BIN
po/it.gmo

Binary file not shown.

444
po/it.po

File diff suppressed because it is too large Load Diff

View File

@@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2000-11-22 20:20-0500\n"
"POT-Creation-Date: 2000-12-02 00:33-0500\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -51,63 +51,63 @@ msgstr ""
msgid "Reading File"
msgstr ""
#: files.c:251
#: files.c:252
msgid "File to insert [from ./] "
msgstr ""
#: files.c:276 files.c:300 files.c:488 nano.c:1355
#: files.c:284 files.c:309 files.c:521 nano.c:1419
msgid "Cancelled"
msgstr ""
#: files.c:322 files.c:342 files.c:356 files.c:373 files.c:379
#: files.c:343 files.c:364 files.c:378 files.c:395 files.c:401
#, c-format
msgid "Could not open file for writing: %s"
msgstr ""
#: files.c:330
#: files.c:352
msgid "Could not open file: Path length exceeded."
msgstr ""
#: files.c:361
#: files.c:383
#, c-format
msgid "Wrote >%s\n"
msgstr ""
#: files.c:388
#: files.c:410
#, c-format
msgid "Could not close %s: %s"
msgstr ""
#. Try a rename??
#: files.c:409 files.c:420 files.c:425
#: files.c:431 files.c:442 files.c:447
#, c-format
msgid "Could not open %s for writing: %s"
msgstr ""
#: files.c:431
#: files.c:453
#, c-format
msgid "Could not set permissions %o on %s: %s"
msgstr ""
#: files.c:438
#: files.c:460
#, c-format
msgid "Wrote %d lines"
msgstr ""
#: files.c:467
#: files.c:492
msgid "File Name to write"
msgstr ""
#: files.c:472
#: files.c:497
#, c-format
msgid "filename is %s"
msgstr ""
#: files.c:477
#: files.c:510
msgid "File exists, OVERWRITE ?"
msgstr ""
#: files.c:801
#: files.c:999
msgid "(more)"
msgstr ""
@@ -168,241 +168,256 @@ msgid "Justify the current paragraph"
msgstr ""
#: global.c:181
msgid "Replace text within the editor"
msgid "Unjustify after a justify"
msgstr ""
#: global.c:182
msgid "Insert another file into the current one"
msgid "Replace text within the editor"
msgstr ""
#: global.c:183
msgid "Search for text within the editor"
msgid "Insert another file into the current one"
msgstr ""
#: global.c:184
msgid "Move to the previous screen"
msgid "Search for text within the editor"
msgstr ""
#: global.c:185
msgid "Move to the next screen"
msgid "Move to the previous screen"
msgstr ""
#: global.c:186
msgid "Cut the current line and store it in the cutbuffer"
msgid "Move to the next screen"
msgstr ""
#: global.c:187
msgid "Uncut from the cutbuffer into the current line"
msgid "Cut the current line and store it in the cutbuffer"
msgstr ""
#: global.c:188
msgid "Show the posititon of the cursor"
msgid "Uncut from the cutbuffer into the current line"
msgstr ""
#: global.c:189
msgid "Invoke the spell checker (if available)"
msgid "Show the posititon of the cursor"
msgstr ""
#: global.c:190
msgid "Move up one line"
msgid "Invoke the spell checker (if available)"
msgstr ""
#: global.c:191
msgid "Move down one line"
msgid "Move up one line"
msgstr ""
#: global.c:192
msgid "Move forward one character"
msgid "Move down one line"
msgstr ""
#: global.c:193
msgid "Move back one character"
msgid "Move forward one character"
msgstr ""
#: global.c:194
msgid "Move to the beginning of the current line"
msgid "Move back one character"
msgstr ""
#: global.c:195
msgid "Move to the end of the current line"
msgid "Move to the beginning of the current line"
msgstr ""
#: global.c:196
msgid "Go to the first line of the file"
msgid "Move to the end of the current line"
msgstr ""
#: global.c:197
msgid "Go to the last line of the file"
msgid "Go to the first line of the file"
msgstr ""
#: global.c:198
msgid "Refresh (redraw) the current screen"
msgid "Go to the last line of the file"
msgstr ""
#: global.c:199
msgid "Mark text at the current cursor location"
msgid "Refresh (redraw) the current screen"
msgstr ""
#: global.c:200
msgid "Mark text at the current cursor location"
msgstr ""
#: global.c:201
msgid "Delete the character under the cursor"
msgstr ""
#: global.c:202
#: global.c:203
msgid "Delete the character to the left of the cursor"
msgstr ""
#: global.c:203
#: global.c:204
msgid "Insert a tab character"
msgstr ""
#: global.c:204
#: global.c:205
msgid "Insert a carriage return at the cursor position"
msgstr ""
#: global.c:206
#: global.c:207
msgid "Make the current search or replace case (in)sensitive"
msgstr ""
#: global.c:207
#: global.c:208
msgid "Cancel the current function"
msgstr ""
#: global.c:211 global.c:323 global.c:408
#: global.c:212 global.c:328
msgid "Get Help"
msgstr ""
#: global.c:214 global.c:222
#: global.c:215 global.c:223
msgid "WriteOut"
msgstr ""
#: global.c:218 global.c:397
#: global.c:219 global.c:402
msgid "Exit"
msgstr ""
#: global.c:226 global.c:319 global.c:341 global.c:361
#: global.c:227 global.c:324 global.c:346 global.c:366
msgid "Goto Line"
msgstr ""
#: global.c:231 global.c:310
#: global.c:232 global.c:315
msgid "Justify"
msgstr ""
#: global.c:235 global.c:306 global.c:337
#: global.c:236 global.c:311 global.c:342
msgid "Replace"
msgstr ""
#: global.c:239
#: global.c:240
msgid "Read File"
msgstr ""
#: global.c:243
#: global.c:244
msgid "Where Is"
msgstr ""
#: global.c:247 global.c:389
#: global.c:248 global.c:394
msgid "Prev Page"
msgstr ""
#: global.c:251 global.c:393
#: global.c:252 global.c:398
msgid "Next Page"
msgstr ""
#: global.c:255
#: global.c:256
msgid "Cut Text"
msgstr ""
#: global.c:258
#: global.c:260
msgid "UnJustify"
msgstr ""
#: global.c:263
msgid "UnCut Txt"
msgstr ""
#: global.c:262
#: global.c:267
msgid "Cur Pos"
msgstr ""
#: global.c:266
#: global.c:271
msgid "To Spell"
msgstr ""
#: global.c:270
#: global.c:275
msgid "Up"
msgstr ""
#: global.c:273
#: global.c:278
msgid "Down"
msgstr ""
#: global.c:276
#: global.c:281
msgid "Forward"
msgstr ""
#: global.c:279
#: global.c:284
msgid "Back"
msgstr ""
#: global.c:282
#: global.c:287
msgid "Home"
msgstr ""
#: global.c:285
#: global.c:290
msgid "End"
msgstr ""
#: global.c:288
#: global.c:293
msgid "Refresh"
msgstr ""
#: global.c:291
#: global.c:296
msgid "Mark Text"
msgstr ""
#: global.c:294
#: global.c:299
msgid "Delete"
msgstr ""
#: global.c:298
#: global.c:303
msgid "Backspace"
msgstr ""
#: global.c:302
#: global.c:307
msgid "Tab"
msgstr ""
#: global.c:314
#: global.c:319
msgid "Enter"
msgstr ""
#: global.c:327 global.c:348 global.c:369 global.c:379
#: global.c:332 global.c:353 global.c:374 global.c:384
msgid "First Line"
msgstr ""
#: global.c:330 global.c:351 global.c:372 global.c:382
#: global.c:335 global.c:356 global.c:377 global.c:387
msgid "Last Line"
msgstr ""
#: global.c:333 global.c:354
#: global.c:338 global.c:359
msgid "Case Sens"
msgstr ""
#: global.c:344 global.c:364 global.c:375 global.c:385 global.c:401
#: global.c:405 global.c:411 winio.c:1020
#: global.c:349 global.c:369 global.c:380 global.c:390 global.c:406
#: global.c:410 global.c:413 winio.c:1028
msgid "Cancel"
msgstr ""
#: global.c:357
#: global.c:362
msgid "No Replace"
msgstr ""
#: nano.c:131
#: nano.c:137
#, c-format
msgid ""
"\n"
"Buffer written to 'nano.save'\n"
"Buffer written to %s\n"
msgstr ""
#: nano.c:138
#: nano.c:139
msgid ""
"\n"
"No .save file written (symlink encountered?)\n"
msgstr ""
#: nano.c:146
msgid "Key illegal in VIEW mode"
msgstr ""
#: nano.c:175
#: nano.c:183
msgid ""
" nano help text\n"
"\n"
@@ -423,306 +438,320 @@ msgid ""
"\n"
msgstr ""
#: nano.c:278
#: nano.c:286
msgid "free_node(): free'd a node, YAY!\n"
msgstr ""
#: nano.c:283
#: nano.c:291
msgid "free_node(): free'd last node.\n"
msgstr ""
#: nano.c:335
#: nano.c:343
msgid ""
"Usage: nano [GNU long option] [option] +LINE <file>\n"
"\n"
msgstr ""
#: nano.c:336
#: nano.c:344
msgid "Option\t\tLong option\t\tMeaning\n"
msgstr ""
#: nano.c:338
#: nano.c:346
msgid " -T \t\t--tabsize=[num]\t\tSet width of a tab to num\n"
msgstr ""
#: nano.c:341
#: nano.c:349
msgid " -R\t\t--regexp\t\tUse regular expressions for search\n"
msgstr ""
#: nano.c:345
#: nano.c:353
msgid " -V \t\t--version\t\tPrint version information and exit\n"
msgstr ""
#: nano.c:347
#: nano.c:355
msgid " -c \t\t--const\t\t\tConstantly show cursor position\n"
msgstr ""
#: nano.c:349
#: nano.c:357
msgid " -h \t\t--help\t\t\tShow this message\n"
msgstr ""
#: nano.c:352
#: nano.c:360
msgid " -k \t\t--cut\t\t\tLet ^K cut from cursor to end of line\n"
msgstr ""
#: nano.c:355
#: nano.c:363
msgid " -i \t\t--autoindent\t\tAutomatically indent new lines\n"
msgstr ""
#: nano.c:357
#: nano.c:365
msgid " -l \t\t--nofollow\t\tDon't follow symbolic links, overwrite\n"
msgstr ""
#: nano.c:360
#: nano.c:368
msgid " -m \t\t--mouse\t\t\tEnable mouse\n"
msgstr ""
#: nano.c:365
#: nano.c:373
msgid ""
" -r [#cols] \t--fill=[#cols]\t\tSet fill cols to (wrap lines at) #cols\n"
msgstr ""
#: nano.c:367
#: nano.c:375
msgid " -p\t \t--pico\t\t\tEmulate Pico as closely as possible\n"
msgstr ""
#: nano.c:369
#: nano.c:377
msgid " -s [prog] \t--speller=[prog]\tEnable alternate speller\n"
msgstr ""
#: nano.c:371
#: nano.c:379
msgid " -t \t\t--tempfile\t\tAuto save on exit, don't prompt\n"
msgstr ""
#: nano.c:373
#: nano.c:381
msgid " -v \t\t--view\t\t\tView (read only) mode\n"
msgstr ""
#: nano.c:375
#: nano.c:383
msgid " -w \t\t--nowrap\t\tDon't wrap long lines\n"
msgstr ""
#: nano.c:377
#: nano.c:385
msgid " -x \t\t--nohelp\t\tDon't show help window\n"
msgstr ""
#: nano.c:379
#: nano.c:387
msgid " -z \t\t--suspend\t\tEnable suspend\n"
msgstr ""
#: nano.c:381
#: nano.c:389
msgid " +LINE\t\t\t\t\tStart at line number LINE\n"
msgstr ""
#: nano.c:383
#: nano.c:391
msgid ""
"Usage: nano [option] +LINE <file>\n"
"\n"
msgstr ""
#: nano.c:384
#: nano.c:392
msgid "Option\t\tMeaning\n"
msgstr ""
#: nano.c:385
#: nano.c:393
msgid " -T [num]\tSet width of a tab to num\n"
msgstr ""
#: nano.c:386
#: nano.c:394
msgid " -R\t\tUse regular expressions for search\n"
msgstr ""
#: nano.c:387
#: nano.c:395
msgid " -V \t\tPrint version information and exit\n"
msgstr ""
#: nano.c:388
#: nano.c:396
msgid " -c \t\tConstantly show cursor position\n"
msgstr ""
#: nano.c:389
#: nano.c:397
msgid " -h \t\tShow this message\n"
msgstr ""
#: nano.c:391
#: nano.c:399
msgid " -k \t\tLet ^K cut from cursor to end of line\n"
msgstr ""
#: nano.c:393
#: nano.c:401
msgid " -i \t\tAutomatically indent new lines\n"
msgstr ""
#: nano.c:395
#: nano.c:403
msgid " -l \t\tDon't follow symbolic links, overwrite\n"
msgstr ""
#: nano.c:398
#: nano.c:406
msgid " -m \t\tEnable mouse\n"
msgstr ""
#: nano.c:402
#: nano.c:410
msgid " -r [#cols] \tSet fill cols to (wrap lines at) #cols\n"
msgstr ""
#: nano.c:403
#: nano.c:411
msgid " -s [prog] \tEnable alternate speller\n"
msgstr ""
#: nano.c:404
#: nano.c:412
msgid " -p \t\tEmulate Pico as closely as possible\n"
msgstr ""
#: nano.c:405
#: nano.c:413
msgid " -t \t\tAuto save on exit, don't prompt\n"
msgstr ""
#: nano.c:406
#: nano.c:414
msgid " -v \t\tView (read only) mode\n"
msgstr ""
#: nano.c:407
#: nano.c:415
msgid " -w \t\tDon't wrap long lines\n"
msgstr ""
#: nano.c:408
#: nano.c:416
msgid " -x \t\tDon't show help window\n"
msgstr ""
#: nano.c:409
#: nano.c:417
msgid " -z \t\tEnable suspend\n"
msgstr ""
#: nano.c:410
#: nano.c:418
msgid " +LINE\t\tStart at line number LINE\n"
msgstr ""
#: nano.c:417
#: nano.c:425
#, c-format
msgid " nano version %s by Chris Allegretta (compiled %s, %s)\n"
msgstr ""
#: nano.c:420
msgid " Email: nano@nano-editor.org\tWeb: http://www.nano-editor.org\n"
#: nano.c:428
msgid " Email: nano@nano-editor.org\tWeb: http://www.nano-editor.org"
msgstr ""
#: nano.c:455
#: nano.c:429
msgid ""
"\n"
" Compiled options:"
msgstr ""
#: nano.c:485
msgid "Mark Set"
msgstr ""
#: nano.c:460
#: nano.c:490
msgid "Mark UNset"
msgstr ""
#: nano.c:887
#, c-format
msgid "check_wrap called with inptr->data=\"%s\"\n"
msgstr ""
#: nano.c:938
#, c-format
msgid "check_wrap called with inptr->data=\"%s\"\n"
msgstr ""
#: nano.c:989
#, c-format
msgid "current->data now = \"%s\"\n"
msgstr ""
#: nano.c:991
#: nano.c:1042
#, c-format
msgid "After, data = \"%s\"\n"
msgstr ""
#: nano.c:1093
#: nano.c:1142
msgid "Edit a replacement"
msgstr ""
#: nano.c:1304
#: nano.c:1366
#, c-format
msgid "Could not create a temporary filename: %s"
msgstr ""
#: nano.c:1320
#: nano.c:1372
msgid "Spell checking failed: unable to write temp file!"
msgstr ""
#: nano.c:1384
msgid "Finished checking spelling"
msgstr ""
#: nano.c:1322
#: nano.c:1386
msgid "Spell checking failed"
msgstr ""
#: nano.c:1342
#: nano.c:1406
msgid "Save modified buffer (ANSWERING \"No\" WILL DESTROY CHANGES) ? "
msgstr ""
#: nano.c:1505
#: nano.c:1502
msgid "Received SIGHUP"
msgstr ""
#: nano.c:1568
msgid "Cannot resize top win"
msgstr ""
#: nano.c:1507
#: nano.c:1570
msgid "Cannot move top win"
msgstr ""
#: nano.c:1509
#: nano.c:1572
msgid "Cannot resize edit win"
msgstr ""
#: nano.c:1511
#: nano.c:1574
msgid "Cannot move edit win"
msgstr ""
#: nano.c:1513
#: nano.c:1576
msgid "Cannot resize bottom win"
msgstr ""
#: nano.c:1515
#: nano.c:1578
msgid "Cannot move bottom win"
msgstr ""
#: nano.c:1786
msgid "Justify Complete"
#: nano.c:1866
msgid "Can now UnJustify!"
msgstr ""
#: nano.c:1854
#: nano.c:1961
#, c-format
msgid "%s enable/disable"
msgstr ""
#: nano.c:1866
#: nano.c:1973
msgid "enabled"
msgstr ""
#: nano.c:1867
#: nano.c:1974
msgid "disabled"
msgstr ""
#: nano.c:2097
#: nano.c:2204
msgid "Main: set up windows\n"
msgstr ""
#: nano.c:2110
#: nano.c:2217
msgid "Main: bottom win\n"
msgstr ""
#: nano.c:2116
#: nano.c:2223
msgid "Main: open file\n"
msgstr ""
#: nano.c:2153
#: nano.c:2260
#, c-format
msgid "I got Alt-O-%c! (%d)\n"
msgstr ""
#: nano.c:2175
#: nano.c:2282
#, c-format
msgid "I got Alt-[-1-%c! (%d)\n"
msgstr ""
#: nano.c:2208
#: nano.c:2315
#, c-format
msgid "I got Alt-[-2-%c! (%d)\n"
msgstr ""
#: nano.c:2256
#: nano.c:2363
#, c-format
msgid "I got Alt-[-%c! (%d)\n"
msgstr ""
#: nano.c:2282
#: nano.c:2389
#, c-format
msgid "I got Alt-%c! (%d)\n"
msgstr ""
@@ -751,7 +780,7 @@ msgstr ""
msgid " (to replace)"
msgstr ""
#: search.c:136 search.c:318
#: search.c:136 search.c:321
msgid "Search Cancelled"
msgstr ""
@@ -764,120 +793,152 @@ msgstr ""
msgid "Search Wrapped"
msgstr ""
#: search.c:340
#: search.c:343
#, c-format
msgid "Replaced %d occurences"
msgstr ""
#: search.c:342
#: search.c:345
msgid "Replaced 1 occurence"
msgstr ""
#: search.c:479 search.c:575 search.c:591
#: search.c:504 search.c:608 search.c:624
msgid "Replace Cancelled"
msgstr ""
#: search.c:525
#: search.c:554
msgid "Replace this instance?"
msgstr ""
#: search.c:533
#: search.c:566
msgid "Replace failed: unknown subexpression!"
msgstr ""
#: search.c:616
#: search.c:649
#, c-format
msgid "Replace with [%s]"
msgstr ""
#: search.c:620 search.c:624
#: search.c:653 search.c:657
msgid "Replace with"
msgstr ""
#. Ask for it
#: search.c:659
#: search.c:692
msgid "Enter line number"
msgstr ""
#: search.c:661
#: search.c:694
msgid "Aborted"
msgstr ""
#: search.c:681
#: search.c:714
msgid "Come on, be reasonable"
msgstr ""
#: search.c:686
#: search.c:719
#, c-format
msgid "Only %d lines available, skipping to last line"
msgstr ""
#: winio.c:120
#: winio.c:121
#, c-format
msgid "actual_x_from_start for xplus=%d returned %d\n"
msgstr ""
#: winio.c:433
#: winio.c:441
#, c-format
msgid "input '%c' (%d)\n"
msgstr ""
#: winio.c:471
#: winio.c:479
msgid "New Buffer"
msgstr ""
#: winio.c:474
#: winio.c:482
msgid " File: ..."
msgstr ""
#: winio.c:482
#: winio.c:490
msgid "Modified"
msgstr ""
#: winio.c:934
#: winio.c:942
#, c-format
msgid "Moved to (%d, %d) in edit buffer\n"
msgstr ""
#: winio.c:945
#: winio.c:953
#, c-format
msgid "current->data = \"%s\"\n"
msgstr ""
#: winio.c:990
#: winio.c:998
#, c-format
msgid "I got \"%s\"\n"
msgstr ""
#: winio.c:1015
#: winio.c:1023
msgid "Yes"
msgstr ""
#: winio.c:1017
#: winio.c:1025
msgid "All"
msgstr ""
#: winio.c:1019
#: winio.c:1027
msgid "No"
msgstr ""
#: winio.c:1156
#: winio.c:1164
#, c-format
msgid "do_cursorpos: linepct = %f, bytepct = %f\n"
msgstr ""
#: winio.c:1160
#: winio.c:1168
msgid "line %d of %d (%.0f%%), character %d of %d (%.0f%%)"
msgstr ""
#: winio.c:1288
#: winio.c:1296
msgid "Dumping file buffer to stderr...\n"
msgstr ""
#: winio.c:1290
#: winio.c:1298
msgid "Dumping cutbuffer to stderr...\n"
msgstr ""
#: winio.c:1292
#: winio.c:1300
msgid "Dumping a buffer to stderr...\n"
msgstr ""
#: winio.c:1341
msgid "The nano text editor"
msgstr ""
#: winio.c:1342
msgid "version "
msgstr ""
#: winio.c:1343
msgid "Brought to you by:"
msgstr ""
#: winio.c:1344
msgid "Special thanks to:"
msgstr ""
#: winio.c:1345
msgid "The Free Software Foundation"
msgstr ""
#: winio.c:1346
msgid "Pavel Curtis, Zeyd Ben-Halim and Eric S. Raymond for ncurses"
msgstr ""
#: winio.c:1347
msgid "and anyone else we forgot..."
msgstr ""
#: winio.c:1348
msgid "Thank you for using nano!\n"
msgstr ""

View File

@@ -1 +0,0 @@
timestamp

16
proto.h
View File

@@ -38,7 +38,7 @@ extern int fill, flags,tabsize;
extern int search_last_line;
extern WINDOW *edit, *topwin, *bottomwin;
extern char filename[PATH_MAX];
extern char *filename;
extern char *answer;
extern char *hblank, *help_text;
extern char *last_search;
@@ -88,9 +88,11 @@ int do_down(void);
int do_left(void);
int do_right(void);
int check_wildcard_match(const char *text, const char *pattern);
char *input_tab(char *buf, int place, int *lastWasTab, int *newplace);
void shortcut_init(void);
char *input_tab(char *buf, int place, int *lastWasTab, int *newplace);
char *real_dir_from_tilde(char *buf);
void shortcut_init(int unjustify);
void lowercase(char *src);
void blank_bottombars(void);
void check_wrap(filestruct * inptr, char ch);
@@ -117,6 +119,7 @@ void *mallocstrcpy(void *dest, void *src);
void wrap_reset(void);
void display_main_list(void);
void nano_small_msg(void);
void nano_disable_msg(void);
void do_early_abort(void);
void *nmalloc(size_t howmuch);
void *nrealloc(void *ptr, size_t howmuch);
@@ -129,6 +132,13 @@ void page_up_center(void);
void blank_edit(void);
void search_init_globals(void);
void replace_abort(void);
void add_to_cutbuffer(filestruct * inptr);
void do_replace_highlight(int highlight_flag, char *word);
void keypad_on(int yesno);
void nano_disabled_msg(void);
#ifdef NANO_EXTRA
void do_credits(void);
#endif
int do_writeout_void(void), do_exit(void), do_gotoline_void(void);
int do_insertfile(void), do_search(void), page_up(void), page_down(void);

View File

@@ -202,11 +202,11 @@ filestruct *findnextstr(int quiet, filestruct * begin, int beginx,
{
filestruct *fileptr;
char *searchstr, *found = NULL, *tmp;
int past_editbot = 0, current_x_find = current_x;
int past_editbot = 0, current_x_find;
fileptr = current;
current_x_find++;
current_x_find = current_x + 1;
/* Are we searching the last line? (i.e. the line where search started) */
if ((fileptr == begin) && (current_x_find < beginx))
@@ -251,18 +251,21 @@ filestruct *findnextstr(int quiet, filestruct * begin, int beginx,
}
/* We found an instance */
current = fileptr;
current_x = 0;
current_x_find = 0;
for (tmp = fileptr->data; tmp != found; tmp++)
current_x++;
current_x_find++;
/* Ensure we haven't wrap around again! */
if ((search_last_line) && (current_x >= beginx)) {
if ((search_last_line) && (current_x_find >= beginx)) {
if (!quiet)
not_found_msg(needle);
return NULL;
}
/* Set globals now that we are sure we found something */
current = fileptr;
current_x = current_x_find;
if (past_editbot)
edit_update(fileptr, CENTER);
else
@@ -465,6 +468,7 @@ char *replace_line(void)
return copy;
}
/* step through each replace word and prompt user before replacing word */
int do_replace_loop(char *prevanswer, filestruct *begin, int *beginx,
int wholewords, int *i)
{
@@ -521,9 +525,17 @@ int do_replace_loop(char *prevanswer, filestruct *begin, int *beginx,
}
/* If we're here, we've found the search string */
if (!replaceall)
if (!replaceall) {
curs_set(0);
do_replace_highlight(TRUE, prevanswer);
*i = do_yesno(1, 1, _("Replace this instance?"));
do_replace_highlight(FALSE, prevanswer);
curs_set(1);
}
if (*i > 0 || replaceall) { /* Yes, replace it!!!! */
if (*i == 2)
replaceall = 1;

View File

@@ -152,8 +152,10 @@ void new_magicline(void)
filebot->next->lineno = filebot->lineno + 1;
filebot = filebot->next;
totlines++;
totsize++;
}
#ifndef DISABLE_TABCOMP
/*
* Routine to see if a text string is matched by a wildcard pattern.
* Returns TRUE if the text is matched, or FALSE if it is not matched
@@ -253,3 +255,4 @@ int check_wildcard_match(const char *text, const char *pattern)
return TRUE;
}
#endif

166
winio.c
View File

@@ -22,6 +22,7 @@
#include <stdarg.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include "config.h"
#include "proto.h"
#include "nano.h"
@@ -247,8 +248,11 @@ int nanogetstr(int allowtabs, char *buf, char *def, shortcut s[], int slen,
int start_x)
{
int kbinput = 0, j = 0, x = 0, xend;
int x_left = 0, inputlen, tabbed = 0, shift = 0;
int x_left = 0, inputlen, tabbed = 0;
char *inputbuf;
#ifndef DISABLE_TABCOMP
int shift = 0;
#endif
inputbuf = nmalloc(strlen(def) + 1);
inputbuf[0] = 0;
@@ -286,13 +290,15 @@ int nanogetstr(int allowtabs, char *buf, char *def, shortcut s[], int slen,
case 343:
ungetch(13); /* Enter on iris-ansi $TERM, sometimes */
break;
/* Stuff we want to ignore */
#ifdef PDCURSES
/* Stuff we want to ignore with PDCURSES */
case 541:
case 542:
case 543: /* Right ctrl again */
case 544:
break;
case 545: /* Right alt again */
#endif
break;
case KEY_HOME:
x = x_left;
nanoget_repaint(buf, inputbuf, x);
@@ -340,6 +346,7 @@ int nanogetstr(int allowtabs, char *buf, char *def, shortcut s[], int slen,
x--;
nanoget_repaint(buf, inputbuf, x);
break;
#ifndef DISABLE_TABCOMP
case NANO_CONTROL_I:
if (allowtabs) {
shift = 0;
@@ -349,6 +356,7 @@ int nanogetstr(int allowtabs, char *buf, char *def, shortcut s[], int slen,
nanoget_repaint(buf, inputbuf, x);
}
break;
#endif
case KEY_LEFT:
if (x > strlen(buf))
x--;
@@ -753,7 +761,7 @@ void edit_add(filestruct * fileptr, int yval, int start, int virt_cur_x,
#endif
/* Just paint the string (no mark on this line) */
mvwaddnstr(edit, yval, 0, &fileptr->data[start],
get_page_end_virtual(this_page) - start);
get_page_end_virtual(this_page) - start + 1);
}
/*
@@ -824,7 +832,7 @@ void update_line(filestruct * fileptr, int index)
edit_add(filetmp, line, col, virt_cur_x, virt_mark_beginx, page);
mvwaddch(edit, line, 0, '$');
if (strlenpt(fileptr->data) > get_page_end_virtual(page))
if (strlenpt(fileptr->data) > get_page_end_virtual(page) + 1)
mvwaddch(edit, line, COLS - 1, '$');
} else {
/* It's not the current line means that it's at x=0 and page=1 */
@@ -1167,11 +1175,16 @@ int do_cursorpos(void)
But hey, it's better than nothing, and it's dynamic! */
int do_help(void)
{
#ifndef NANO_SMALL
#if !defined(NANO_SMALL) && !defined(DISABLE_HELP)
char *ptr = help_text, *end;
int i, j, row = 0, page = 1, kbinput = 0, no_more = 0;
int no_help_flag = 0;
/* Oh well, they've asked for the help menu, if the keypad is not on now
we're going to have to turn it on */
keypad_on(TRUE);
blank_edit();
curs_set(0);
blank_statusbar();
@@ -1257,7 +1270,9 @@ int do_help(void)
no_more = 1;
continue;
}
} while ((kbinput = wgetch(edit)) != NANO_EXIT_KEY);
} while ((kbinput = wgetch(edit)) != NANO_EXIT_KEY &&
kbinput != NANO_EXIT_FKEY);
if (no_help_flag) {
werase(bottomwin);
wrefresh(bottomwin);
@@ -1271,8 +1286,10 @@ int do_help(void)
curs_set(1);
edit_refresh();
#else
#elif defined(NANO_SMALL)
nano_small_msg();
#elif defined(DISABLE_HELP)
nano_disabled_msg();
#endif
return 1;
@@ -1322,3 +1339,136 @@ void fix_editbot(void)
for (i = 0; (i <= editwinrows - 1) && (editbot->next != NULL)
&& (editbot != filebot); i++, editbot = editbot->next);
}
/* highlight the current word being replaced or spell checked */
void do_replace_highlight(int highlight_flag, char *word)
{
char *highlight_word = NULL;
int x, y;
highlight_word = mallocstrcpy(highlight_word, &current->data[current_x]);
highlight_word[strlen(word)] = '\0';
/* adjust output when word extends beyond screen*/
x = xplustabs();
y = get_page_end_virtual(get_page_from_virtual(x)) + 1;
if ((COLS - (y - x) + strlen(word)) > COLS) {
highlight_word[y - x - 1] = '$';
highlight_word[y - x] = '\0';
}
/* OK display the output */
reset_cursor();
if (highlight_flag)
wattron(edit, A_REVERSE);
waddstr(edit, highlight_word);
if (highlight_flag)
wattroff(edit, A_REVERSE);
free(highlight_word);
}
#ifdef NANO_EXTRA
#define CREDIT_LEN 45
void do_credits(void)
{
int i, j = 0, k, place = 0, start_x;
char *what;
char *nanotext = _("The nano text editor");
char *version = _("version ");
char *brought = _("Brought to you by:");
char *specialthx = _("Special thanks to:");
char *fsf = _("The Free Software Foundation");
char *ncurses = _("Pavel Curtis, Zeyd Ben-Halim and Eric S. Raymond for ncurses");
char *anyonelse = _("and anyone else we forgot...");
char *thankyou = _("Thank you for using nano!\n");
char *credits[CREDIT_LEN] = {nanotext,
version,
VERSION,
"",
brought,
"Chris Allegretta",
"Jordi Mallach",
"Adam Rogoyski",
"Rob Siemborski",
"Rocco Corsi",
"Ken Tyler",
"Sven Guckes",
"Florian König",
"Pauli Virtanen",
"Daniele Medri",
"Clement Laforet",
"Tedi Heriyanto",
"Bill Soudan",
"Christian Weisgerber",
"Erik Anderson",
"Big Gaute",
"Joshua Jensen",
"",
specialthx,
"Plattsburgh State University",
"Benet Laboratories",
"Amy Allegretta",
"Linda Young",
"Jeremy Robichaud",
"Richard Kolb II",
fsf,
"Linus Torvalds",
ncurses,
anyonelse,
thankyou,
"", "", "", "",
"(c) 2000 Chris Allegretta",
"", "", "", "",
"www.nano-editor.org"
};
curs_set(0);
nodelay(edit, TRUE);
blank_bottombars();
mvwaddstr(topwin, 0, 0, hblank);
blank_edit();
wrefresh(edit);
wrefresh(bottomwin);
wrefresh(topwin);
while (wgetch(edit) == ERR) {
for (k = 0; k <= 1; k++) {
blank_edit();
for (i = editwinrows / 2 - 1; i >= (editwinrows / 2 - 1 - j); i--) {
mvwaddstr(edit, i * 2 - k, 0, hblank);
if (place - (editwinrows / 2 - 1 - i) < CREDIT_LEN)
what = credits[place - (editwinrows / 2 - 1 - i)];
else
what = "";
start_x = center_x - strlen(what) / 2 - 1;
mvwaddstr(edit, i * 2 - k, start_x, what);
}
usleep(700000);
wrefresh(edit);
}
if (j < editwinrows / 2 - 1)
j++;
place++;
if (place >= CREDIT_LEN + editwinrows / 2)
break;
}
nodelay(edit, FALSE);
curs_set(1);
display_main_list();
total_refresh();
}
#endif