Compare commits
181 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
35d90259ed | ||
|
|
07e97d61c0 | ||
|
|
71348eeb1f | ||
|
|
9e7efa3202 | ||
|
|
df3afdce0d | ||
|
|
66989d6ece | ||
|
|
7c44b68e05 | ||
|
|
ad1daccecc | ||
|
|
4aacee6627 | ||
|
|
629edad237 | ||
|
|
834a69d5a4 | ||
|
|
f45c18daa0 | ||
|
|
0b88ce08cb | ||
|
|
c9f147aba3 | ||
|
|
e7034c6087 | ||
|
|
90bd712c88 | ||
|
|
9c35eb0def | ||
|
|
92c9dd255c | ||
|
|
2a42af1d62 | ||
|
|
16e4168993 | ||
|
|
d0dbb40ef6 | ||
|
|
91d392cd2b | ||
|
|
b9bfc9bc4f | ||
|
|
2dc0f6b2bf | ||
|
|
44e73dfc96 | ||
|
|
9239d742d6 | ||
|
|
43932bd17b | ||
|
|
805c26d1a6 | ||
|
|
d746d90cc3 | ||
|
|
429a5518ea | ||
|
|
bf9da287a0 | ||
|
|
423cbfd743 | ||
|
|
5577aec4e8 | ||
|
|
18f8be0058 | ||
|
|
f8163dc2e7 | ||
|
|
f0f63a82fb | ||
|
|
a547fd1e0e | ||
|
|
6306a11ad6 | ||
|
|
9541f2a1d3 | ||
|
|
d56bd79daf | ||
|
|
e49f123cc0 | ||
|
|
4c780be883 | ||
|
|
220e7fb132 | ||
|
|
756f220a26 | ||
|
|
cf7c9936ad | ||
|
|
9babaf3b38 | ||
|
|
340d6e50c2 | ||
|
|
dabc3cb0df | ||
|
|
e10debd14b | ||
|
|
f1d33d30ce | ||
|
|
8c81d23a7e | ||
|
|
8d458043d1 | ||
|
|
5286ccbaf9 | ||
|
|
ba96f7afac | ||
|
|
a2efc36799 | ||
|
|
e5935973f9 | ||
|
|
13415991e8 | ||
|
|
b7ea9d45bb | ||
|
|
0286ba436e | ||
|
|
c86f714a15 | ||
|
|
9b45ff54ac | ||
|
|
2b78429248 | ||
|
|
c87a411624 | ||
|
|
141c1274c4 | ||
|
|
11b0011b1f | ||
|
|
b4dc9e0944 | ||
|
|
81b1eea10f | ||
|
|
7dc14e81d7 | ||
|
|
4dbcc3cd9e | ||
|
|
1f2a072e33 | ||
|
|
0bf4e146a0 | ||
|
|
bbd96ea838 | ||
|
|
5027a18c2c | ||
|
|
99bf73fe66 | ||
|
|
d7c31c1123 | ||
|
|
6d690a39dc | ||
|
|
ed02216378 | ||
|
|
55d5455abd | ||
|
|
5d8f6250de | ||
|
|
7a6f0d9868 | ||
|
|
145a0450ea | ||
|
|
da721be17a | ||
|
|
234a34d273 | ||
|
|
84ff479b24 | ||
|
|
3206ab4fe0 | ||
|
|
f5d7a8b4fd | ||
|
|
d069ac02d1 | ||
|
|
d63d11be58 | ||
|
|
1a471392c5 | ||
|
|
f6a6b5aa86 | ||
|
|
95b0b5249a | ||
|
|
29d9025381 | ||
|
|
6925bbd360 | ||
|
|
18bd029981 | ||
|
|
7975ed86a7 | ||
|
|
a1a55c79c8 | ||
|
|
2ece167f56 | ||
|
|
0e5faca531 | ||
|
|
939fdbd64d | ||
|
|
293849eb69 | ||
|
|
1013e14a87 | ||
|
|
63aa0f7f16 | ||
|
|
cf037ba969 | ||
|
|
45dfda97d8 | ||
|
|
c9b1dba4a3 | ||
|
|
a417ddca91 | ||
|
|
461b2a9dfe | ||
|
|
962c3c9c21 | ||
|
|
05597197f3 | ||
|
|
f4e75e1256 | ||
|
|
d8346ffb84 | ||
|
|
90d6895e94 | ||
|
|
f1171c3c0e | ||
|
|
723845c0cc | ||
|
|
1d7110d657 | ||
|
|
edebbe6039 | ||
|
|
065bb1e1a0 | ||
|
|
231d3d6979 | ||
|
|
acb6234263 | ||
|
|
8f6c069543 | ||
|
|
fcf32bf3d1 | ||
|
|
aa44841315 | ||
|
|
a299b039c4 | ||
|
|
3088555a15 | ||
|
|
8d7ac1b004 | ||
|
|
82bd1b34f2 | ||
|
|
d19e9916cb | ||
|
|
ed0cb890fb | ||
|
|
fa8f7bf0dc | ||
|
|
6a2273d781 | ||
|
|
627de19ce0 | ||
|
|
7539a829c4 | ||
|
|
a966d991e6 | ||
|
|
635fae3ed0 | ||
|
|
2a4ef924c8 | ||
|
|
a4d2162091 | ||
|
|
6967eec4cb | ||
|
|
7ecc435f5a | ||
|
|
1e328fbd72 | ||
|
|
688fc032b3 | ||
|
|
b275aacc3f | ||
|
|
20d61d5628 | ||
|
|
9d58455825 | ||
|
|
e955dae711 | ||
|
|
68b12334d5 | ||
|
|
dba37aef66 | ||
|
|
f6b13420d7 | ||
|
|
a408edd486 | ||
|
|
47805612c3 | ||
|
|
cdff015d06 | ||
|
|
9fc8d43a82 | ||
|
|
5537387352 | ||
|
|
976847c016 | ||
|
|
82e603d273 | ||
|
|
acf71da636 | ||
|
|
01dc83ae12 | ||
|
|
28a0f89d90 | ||
|
|
29e9a76f36 | ||
|
|
e0e568fe17 | ||
|
|
23ecb17595 | ||
|
|
63b3d7e0c0 | ||
|
|
66b0fc5b6c | ||
|
|
deca3e727a | ||
|
|
dd53ec2a87 | ||
|
|
48fd2cb833 | ||
|
|
1e57e68e57 | ||
|
|
67105eb11f | ||
|
|
dbc12b2070 | ||
|
|
6d0e9cd556 | ||
|
|
6af1431eaa | ||
|
|
715e7dd403 | ||
|
|
518b8ef7a2 | ||
|
|
8c2b40f06c | ||
|
|
8b709372b7 | ||
|
|
f7eba0ba8b | ||
|
|
0b0fc4944f | ||
|
|
5204ea9e86 | ||
|
|
6e80585b0d | ||
|
|
8a9fe7e4dd | ||
|
|
5a4eb33590 | ||
|
|
fc5fb2ea48 |
@@ -224,3 +224,4 @@ distribution.
|
||||
If December 1997 seems to be old, you may fetch a more recent copy
|
||||
of this `ABOUT-NLS' file on most GNU archive sites.
|
||||
|
||||
$Id$
|
||||
|
||||
5
AUTHORS
5
AUTHORS
@@ -1,9 +1,10 @@
|
||||
$Id$
|
||||
This file lists people who have made significant contribution to the nano
|
||||
editor. Please see the ChangeLog for specific changes by author.
|
||||
-------------------------------------------------------------------------
|
||||
|
||||
Chris Allegretta <chrisa@asty.org>
|
||||
* Main program author and maintainer
|
||||
* Main program author and maintainer.
|
||||
|
||||
Jordi Mallach <jordi@sindominio.net>
|
||||
* Debian package maintainer, fellow bug squasher.
|
||||
@@ -16,5 +17,5 @@ Adam Rogoyski <rogoyski@cs.utexas.edu>
|
||||
|
||||
Robert Siemborski <rjs3@andrew.cmu.edu>
|
||||
* Miscellaneous cut, display, replace, and other bug fixes,
|
||||
original "magic line" code, read_line() function, new
|
||||
original and new "magic line" code, read_line() function, new
|
||||
edit display routines.
|
||||
|
||||
66
BUGS
66
BUGS
@@ -1,13 +1,7 @@
|
||||
- Marked cutting sometimes leaves a newline in the file unintelligently,
|
||||
such as when all of a line is selected but the mark doesn't proceed to
|
||||
the new line. (8) { Is this an issue? compare to pico 3.5 }
|
||||
- Certains are not lined up properly when there are tabs in them at
|
||||
certain col values. (9) [FIXED]
|
||||
- edit_refresh() and update_line() do not handle selecting text when the
|
||||
cursor is beyond COLS (10) [FIXED]
|
||||
- no way to do a replace with the empty string. (11)
|
||||
- Spelling support is not elegant like pico's integration of the 'spell'
|
||||
program. Nano only uses ispell (for now) (12)
|
||||
- Moving to the end of a line when close to a multiple of COLS and at
|
||||
least COLS * 2 does not make the screen jump early like it would for
|
||||
if we were around COLS (bugs in edit_refresh, update_line) (13)
|
||||
@@ -18,22 +12,70 @@
|
||||
- Doing a replacement of a substring of the replace string (e.g. replacing
|
||||
"ed" with "fred" causes an infinite loop. (15) [FIXED]
|
||||
- Cutting a file with marked text and both marker ends on the same line
|
||||
causes a random segfault (16)
|
||||
causes a random segfault (16) [FIXED]
|
||||
- Cutting more than one line resets the KEEP_CUTBUFFER flag in 0.9.3
|
||||
Error is in bitwise assignment (nano.h). (17) [FIXED]
|
||||
- The wrapping code does not work right for lines like the following:
|
||||
* *
|
||||
Error is in do_wrap, must be rewritten (18).
|
||||
- Wrapping a line with autoindent mode sometimes causes a segfault (19).
|
||||
Error is in do_wrap, must be rewritten. (18) [FIXED]
|
||||
- Nano fails to follow symlinks, even though -l isn't being used (20).
|
||||
[Bug in global flag init, FIXED]
|
||||
- When using --help or --version, the SIGINT character gets lost. (21) [FIXED]
|
||||
- When inserting files, the display sometimes fails to display properly
|
||||
until a pageup/down occurs (22).
|
||||
- edit_refresh() and update_line() (and related functions), have
|
||||
trouble when a tab is the character that is the boundry at COLS (23) [FIXED]
|
||||
- there is an off-by-one error in keeping track of totsize. It is caused
|
||||
by the fact that we count the newline at the end when we read in a file
|
||||
but we do not, in fact, display this newline. This should go away
|
||||
implicitly when the "Magic Line" returns, but it is noted here for
|
||||
documentation's sake. (24)
|
||||
documentation's sake. (24) [FIXED]
|
||||
- In replace with completely adjacent strings, every other search string
|
||||
will be missed (try replace ':' in a string like ':::::::::') (28) [FIXED]
|
||||
- If nano opens a read-only file with the --tempfile option, and a change
|
||||
is made to the buffer, and a write is attempted, nano will not give you
|
||||
a dialog about not being able to write the file, and it will not let the
|
||||
user exit (29, discovered by Joshua Jensen) [FIXED]
|
||||
- Using nano -k, marked text is not cut properly. (31) [FIXED]
|
||||
- Invoking -t or -k has the effect of invoking both option. (32) [FIXED]
|
||||
- totsize becomes incorrect after word-wrapping (25) [FIXED]
|
||||
- Wrapping a line with autoindent mode sometimes causes a segfault (19)[FIXED]
|
||||
- When inserting files, the display sometimes fails to display properly
|
||||
until a pageup/down occurs (22)[FIXED]
|
||||
- In search/replace code there is too much refreshing in bottomwin (26)
|
||||
[FIXED]
|
||||
- Using nano -t, user can not exit until a filename is given via ^O. (30)
|
||||
[FIXED]
|
||||
- Using -k cut text is not pasted properly. (34) [FIXED].
|
||||
- Using -k pasted text is not updated properly if it goes beyond editbot. (35)
|
||||
[FIXED]
|
||||
- Doing a cut with -k can screw up the filestruct, fault is in cutting
|
||||
code. (36) [FIXED]
|
||||
- Hitting enter on the magic line makes new lines, but they are not
|
||||
written out to disk when saved..... (37). [FIXED]
|
||||
- Page up and page down do not work the same way as Pico (# of lines). (38)
|
||||
[FIXED]
|
||||
- When doing a search and the marker is set, the screen does not always
|
||||
properly update the inverted text (39). [FIXED]
|
||||
- Searches for a string that only exist on one line multiple times will
|
||||
fail after finding the last occurance (discovered by Ken Tyler) (40). [FIXED]
|
||||
- Alt-Z is current broken to toggle suspend. I guess I still don't know
|
||||
signals very well =-) (41) [FIXED].
|
||||
- Unable to cut the entire file using the marker (discovered by Kev Tyler)
|
||||
(42). [FIXED]
|
||||
- The keypad does not work when nano runs in the Gnome terminal (43). [FIXED]
|
||||
- When reading in a file, if the file is a directory the contents of the
|
||||
file being edited are blown away (discovered by Chris Pimlot) (44). [FIXED]
|
||||
|
||||
** Open BUGS **
|
||||
|
||||
- Marked cutting sometimes leaves a newline in the file unintelligently,
|
||||
such as when all of a line is selected but the mark doesn't proceed to
|
||||
the new line. (8) { Is this an issue? compare to pico 3.5 }
|
||||
- no way to do a replace with the empty string (11).
|
||||
- Spelling support is not elegant like pico's integration of the 'spell'
|
||||
program. Nano only uses ispell (for now) (12).
|
||||
- In replace, there is no way to accept the default replace string. (27)
|
||||
- totsize problems still abound in do_justify (33).
|
||||
- in certain terms, nano will leave a "ghost" of screen upon exit
|
||||
when called from inside mutt (among other settings) (45).
|
||||
|
||||
$Id$
|
||||
|
||||
311
ChangeLog
311
ChangeLog
@@ -1,3 +1,312 @@
|
||||
nano 0.9.19 - 10/02/2000
|
||||
- General
|
||||
- Added PDCurses support under cygwin, which allows building
|
||||
a nice stand-alone nano.exe for those poor Windows users.
|
||||
Extra check in configure.in for initscr() in -lcurses (as
|
||||
PDcurses has no tgetent), some #ifdef PDCURSES statements
|
||||
in main().
|
||||
- Changed web site and email to new nano-editor.org domain.
|
||||
- nano.c
|
||||
- Added (int) casts to remove compile warnings with -Wall.
|
||||
main()
|
||||
- Added check for _POSIX_VDISABLE around term variable definition.
|
||||
- search.c
|
||||
- Added initializations for last_search and last_replace (Rocco Corsi)
|
||||
|
||||
nano 0.9.18 - 09/18/2000
|
||||
- General
|
||||
- Changed _POSIX_VERSION checks in regex code to HAVE_REGEX_H,
|
||||
added check for regex.h in configure.in.
|
||||
- configure.in:
|
||||
- Added default case for cross-compiling to get rid of annoying
|
||||
AC_TRY_RUN warning.
|
||||
- cut.c:
|
||||
do_cut_text()
|
||||
- Don't immediately abort if we're on filebot and the marker is
|
||||
set (fixes bug #42).
|
||||
- files.c:
|
||||
open_file()
|
||||
- Fix for bug #44 (Rocco Corsi).
|
||||
- global.c:
|
||||
shortcut_init()
|
||||
- Added in FKEYs that for some reason were left out. *boggle*
|
||||
- nano.c:
|
||||
main()
|
||||
- Added check for _POSIX_VDISABLE and use raw mode if not
|
||||
available, allows nano to work with cygwin.
|
||||
- Added gettext calls to enable/disable strings (Jordi).
|
||||
- Revamped a great deal of the F-key and keypad key handling,
|
||||
because we not longer use keypad() (see below).
|
||||
- Removed keypad() call because nano was not working with the
|
||||
keypad in many terms, which is very bad.
|
||||
- Made insert key call do_insertfile().
|
||||
do_toggle()
|
||||
- Rewrote function to allow NOHELP toggle to wotk on systems
|
||||
without a working resizewin(). New function window_init().
|
||||
mouse_init()
|
||||
- Add keypad only if mouse support is on, otherwise mouse doesn't
|
||||
work. I guess you have to choose between having the mouse and
|
||||
having a working keypad for the time being (thank god for Meta-m).
|
||||
- winio.c:
|
||||
total_refresh()
|
||||
- Added titlebar() call.
|
||||
onekey()
|
||||
- Off by one error fix fix ;-) (Rocco Corsi).
|
||||
|
||||
- search.c:
|
||||
findnextstr()
|
||||
- Reset starting at current for search instead of begin.
|
||||
- es.po:
|
||||
- Translated new strings and minor updates (Jordi).
|
||||
- de.po
|
||||
- Revised translations by floki@bigfoot.com
|
||||
|
||||
nano-0.9.17 - 09/04/2000
|
||||
- General
|
||||
- New shortcuts to toggle certain options that are normally only
|
||||
flags via Alt/Meta. See Alt-C,E,I,K,M,P,X,Z. New struct called
|
||||
toggles in nano.h, toggle_init(), toggle_init_one() in global.c
|
||||
called from shortcut_init(), and do_toggle in nano.c. Also
|
||||
moved the signal code into a separate function in nano.c called
|
||||
signal_init(). Moved "struct sigaction act"into a static in
|
||||
nano.c.
|
||||
- Changed from Alt-key symbol (@) which is completely nonstandard
|
||||
to the *nix "Meta" symbol (M-). Changed help_init to show
|
||||
the M-key usage and the help text to explain keys whcih generate
|
||||
Meta. Moved the toggle Meta keystrokes to the first column
|
||||
instead of the third as they are the primary keystrokes for the
|
||||
functions. Thanks Mini editor team :->
|
||||
- Changed last_search and last_replace vars to statically
|
||||
allocated (hence nulled) and moved to search.c (Matt Kraai).
|
||||
- global.c:
|
||||
toggle_init()
|
||||
- Changed "No auto wrap" and "No help mode" to "Auto wrap" and
|
||||
"Help mode". See the change to do_toggle() below.
|
||||
- nano.c:
|
||||
do_mouse()
|
||||
- Patch for handling lines w/tabs and mouse better (Ben Roberts).
|
||||
do_wrap()
|
||||
- Made wrapping code less ambitious.
|
||||
do_toggle()
|
||||
- Added checks for no help and no wrap mode, and print opposite
|
||||
enable/disable message.
|
||||
do_suspend(), do_cont():
|
||||
- New functions, handle suspend signal in a Pico-like manner and
|
||||
work with Meta-Z.
|
||||
- winio.c:
|
||||
total_refresh()
|
||||
- Added edit_refresh() call to actually update the screen if messy.
|
||||
edit_refresh_clearok()
|
||||
- New function, does a total update for edit refresh, needed to fix
|
||||
lack of reversed text on searching with MARK_ISSET.
|
||||
onekey()
|
||||
- Off by one error fix (Rocco Corsi).
|
||||
|
||||
update_line()
|
||||
- Added check for binary data >= 1 and <= 26, and use ^+letter
|
||||
to display it. Should fix editing text files with binary
|
||||
data in them. Placing of the cursor seems to be a bit screwed
|
||||
though...
|
||||
- search.c:
|
||||
search_abort()
|
||||
- Now calls edit_refresh_clearok when MARK_ISSET to handle screen
|
||||
ugliness bug (reported by Ken Tyler).
|
||||
findnextstr():
|
||||
- Added reset for placewewant (Ben Roberts).
|
||||
- Fixed check for string that only occurs on the same line failing
|
||||
(discovered by Ken Tyler).
|
||||
|
||||
nano-0.9.16 - 08/09/2000
|
||||
- cut.c:
|
||||
do_cut_text()
|
||||
- Fixed getting locked into cutbuffer on cutting first line of file.
|
||||
- Added check_statblank().
|
||||
- Check for fileptr == filebot, if so return, we shouldn't bother
|
||||
cutting the magic line.
|
||||
do_uncut_text()
|
||||
- Added check_statblank().
|
||||
- nano.c:
|
||||
main()
|
||||
- Changed tabsize long arg to actually accept an argument *sigh*.
|
||||
- po/Makefile.in.in:
|
||||
- Patch to handle $DESTDIR (orig by Dan Harnett contributed by
|
||||
Christian Weisgerber)
|
||||
- configure.in:
|
||||
- New (and severally revised =) slang test code (Albert Chin-A-Young)
|
||||
|
||||
nano-0.9.15 - 08/03/2000
|
||||
- Changed edit_update call to take arguments TOP, CENTER or BOTTOM.
|
||||
Affects many many functions. Removed functions edit_update_top and
|
||||
edit_update_bot.
|
||||
- Added global variable tabsize, we no longer screw with the curses
|
||||
library in order to implement -T (suggested by Christian Weisgerber).
|
||||
- configure.in:
|
||||
- Finally fixed check for slang to report "no" if not called
|
||||
with --with-slang or --without-slang
|
||||
- nano.c:
|
||||
splice_node()
|
||||
- New function, abstracts linking in nodes. Fixes bug #36.
|
||||
null_at()
|
||||
- New function, nulls a string at a given index and realigns it.
|
||||
delete_buffer()
|
||||
- Removed, same as free_filestruct().
|
||||
do_backspace()
|
||||
- Now calls page_up_center instead of page_up (as it should?)
|
||||
do_enter()
|
||||
- Fixed typo (?) in check for inptr->next. Caused lots of
|
||||
grief for editing lines at filebot.
|
||||
main()
|
||||
- Removed now useless usrtabsize variable (Christian Weisgerber).
|
||||
- search.c:
|
||||
replace_abort()
|
||||
- redundant, now just calls search abort until it does something
|
||||
different.
|
||||
- winio.c:
|
||||
edit_refresh()
|
||||
- Added check for current line "running" off the screen.
|
||||
Hopefully this will not cause any recursive lockups.
|
||||
(Who am I kidding, of course it will!)
|
||||
- Added check to stop infinite loop calling edit_update.
|
||||
edit_update()
|
||||
- Rewritten, hopefully this will remove a lot of the
|
||||
scrolling the cursor back and forth needlessly.
|
||||
- move.c:
|
||||
page_down()
|
||||
- do an edit_update() at last case. Made function more like
|
||||
Pico's version, only move down to two lines before editbot.
|
||||
page_up()
|
||||
- Made function more like Pico's version, only move down to two
|
||||
lines after edittop.
|
||||
|
||||
nano-0.9.14 - 07/27/2000
|
||||
- nano.h:
|
||||
- Set CUT_TO_END to a different bit than TEMP_OPT. Fixes bug #32.
|
||||
- cut.c:
|
||||
do_cut_text()
|
||||
- Added check for MARK_ISSET when using CUT_TO_END. Fixes bug #31.
|
||||
- Simplified check for freeing cutbuffer. Added checks for doing
|
||||
multiple cuts with -k, now sets marked_cut to 2 for later
|
||||
processing by do_uncut_text().
|
||||
do_uncut_text()
|
||||
- Added handler for uncutting with -k cuts.
|
||||
- files.c:
|
||||
write_file()
|
||||
- Removed (redundant) check for writing out files with -t.
|
||||
do_writeout()
|
||||
- Changed check for filename to filename[0]. Added some code,
|
||||
overall fixes bug #30 =-)
|
||||
- nano.c:
|
||||
do_justify() & do_wrap():
|
||||
- totsize-related fixes (Rob)
|
||||
- de.po
|
||||
- Revised translations by floki@bigfoot.com
|
||||
|
||||
nano-0.9.13 - 07/23/2000
|
||||
- Implemented Pico's -k mode. New flag CUT_TO_END, option (-k, --cut),
|
||||
affects do_cut_text in cut.c. Not available with SMALL_NANO because it
|
||||
depends on the marker code which is not available with that setting.
|
||||
- Changed static temp_opt to flag TEMP_OPT. Fixed bug #29 (using
|
||||
-t with an unwritable file causes users to get locked into editor).
|
||||
- move.c
|
||||
page_down()
|
||||
- Don't edit_refresh() if the bottom of the file is in the edit
|
||||
buffer. (Adam)
|
||||
- nano.c:
|
||||
main():
|
||||
- TABSIZE now set before first call to edit_refresh (Bill Soudan)
|
||||
- Different ^C kill code (patch by Christian Weisgerber).
|
||||
die():
|
||||
- More intelligent emergency-save filename selection (Rob)
|
||||
do_spell():
|
||||
- Changed exit semantincs a bit so that aspell wouldn't get
|
||||
all screwy (bug disovered by Joshua Jensen.
|
||||
- files.c:
|
||||
read_file():
|
||||
- Added init of buf variable, hopefully this will stop the
|
||||
"bleeding" of text seen with mutt and using i18n.
|
||||
write_file():
|
||||
- Added code to check to see if using -l and the file is not
|
||||
in fact a link. This should fix the behavior where a file
|
||||
that does not have write permission but could be removed and
|
||||
rewritten is saved without error. Please test this feature
|
||||
and give feedback.
|
||||
- search.c:
|
||||
search_init():
|
||||
- Added " (to replace)" statement to end of search string if
|
||||
we are doing a replace. Manually converted all the translations
|
||||
from '%s' to '%s%s' to ensure they still work with the new code.
|
||||
Also put in the translation for " (replace)" in the .po's. Hope
|
||||
I didn't step on your toes doing this Jordi. (Chris)
|
||||
do_search(), do_replace():
|
||||
- Removed call to search_abort()/replace_abort() before call to
|
||||
the opposite function.
|
||||
- Fixed bug #28.
|
||||
findnextstr()
|
||||
- do not center string found if it is currently visable. (Adam)
|
||||
- fr.po:
|
||||
- French update by Clement Laforet <clem_laf@wanadoo.fr>.
|
||||
- es.po:
|
||||
- Updated strings to 0.9.13 (Jordi).
|
||||
|
||||
nano-0.9.12 - 07/07/2000
|
||||
- all:
|
||||
- New regexp search feature by Bill Soudan. New flags USE_REGEXP
|
||||
and REGEXP_COMPILED, new functions regexp_init, regexp_cleanup
|
||||
replace_line, replace_regexp in search.c, changes to
|
||||
search_init() and do_replace() and strstrwrapper().
|
||||
- Added _POSIX_VERSION check to regexp code. Better than nothing
|
||||
for non-POSIX systems...
|
||||
- Made search functions & keys more like Pico. Added goto line from
|
||||
search and replace function, changed wording to "No Replace" instead
|
||||
of "To Search", "To Replace" to simply "Replace", and changed to
|
||||
Pico's keystroke by default, ^R. Affects search_init(),
|
||||
do_search() in search.c, globals in nano.h and
|
||||
shortcut_init() in global.c.
|
||||
- changed 'sprintf' calls to safer 'snprintf' (Rob)
|
||||
- cut.c
|
||||
- further totsize update corrections
|
||||
- files.c:
|
||||
- changed do_insertfile to call fix_editbot (Rob)
|
||||
- Magic Line code in read_file (Rob)
|
||||
- nano.c:
|
||||
- Removed dual alt_speller variables, oops! (Rocco Corsi)
|
||||
- Removed unnecessary do_oldspell function (Rocco Corsi). Added
|
||||
SMALL_NANO #ifdef around actual spell function.
|
||||
- Moved page_up() to move.c where is belongs.
|
||||
- Corrected FIXME in do_enter with explanation. (Rob)
|
||||
- Fixed FIXME in do_justify, resulted in creation of
|
||||
fix_editbot [also fixed in do_enter] (winio.c) (Rob)
|
||||
help_init():
|
||||
- Moved newline out of if statement (Rocco Corsi)
|
||||
do_char():
|
||||
- Magic Line related code in do_char (Rob)
|
||||
do_backspace(), do_delete():
|
||||
- Added magic line code here too.
|
||||
|
||||
- de.po:
|
||||
- Revised translations by floki@bigfoot.com.
|
||||
- fi.po:
|
||||
- Finnish translation by pauli.virtanen@saunalahti.fi.
|
||||
- utils.c:
|
||||
- Added new_magicline()
|
||||
- winio.c:
|
||||
- Added stdlib.h to includes, found by OpenBSD gcc.
|
||||
- lots of new commenting around display functions
|
||||
do_yesno(), nanogetstr():
|
||||
- Removed now unnecessary raw/cbreak combos.
|
||||
- Removed gettext calls from "Y(es)", "N(o)", "A(ll)" and "^C", till
|
||||
we decide if those keybindings should be translated. (Jordi)
|
||||
clear_bottomwin():
|
||||
- Removed wrefresh(edit) call.
|
||||
edit_update_top():
|
||||
- Fixed a bug that caused nano to not update when
|
||||
current->next == NULL (e.g. paging down to the very bottom of
|
||||
ABOUT NLS wouldn't work).
|
||||
fix_editbot:
|
||||
- Added (should rebuild editbot from a valid edittop) (Rob)
|
||||
edit_add:
|
||||
- removal of redundant call to mvwaddnstr
|
||||
|
||||
nano-0.9.11 - 06/20/2000
|
||||
- New flag "-T" or "--tabsize" to specify how to display tab widths.
|
||||
Affects main() in nano.c, strlenpt(), xpt() and actual_x() (et al) in
|
||||
@@ -711,3 +1020,5 @@ nano 0.7.6 - 01/15/2000
|
||||
0.2 Read in data to buffer, bound keystrokes to stub functions,
|
||||
initial cursor movement on screen. Initial autoconf support.
|
||||
0.1 Initial program setup w/ncurses
|
||||
|
||||
$Id$
|
||||
|
||||
2
INSTALL
2
INSTALL
@@ -180,3 +180,5 @@ operates.
|
||||
script, and exit.
|
||||
|
||||
`configure' also accepts some other, not widely useful, options.
|
||||
|
||||
$Id$
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
## $Id$
|
||||
bin_PROGRAMS = nano
|
||||
nano_SOURCES = cut.c \
|
||||
files.c \
|
||||
@@ -14,7 +15,8 @@ man_MANS = nano.1
|
||||
nano_LDADD = @INTLLIBS@
|
||||
|
||||
EXTRA_DIST = AUTHORS BUGS COPYING ChangeLog INSTALL NEWS README \
|
||||
TODO install-sh missing mkinstalldirs nano.1 nano.1.html
|
||||
TODO install-sh missing mkinstalldirs nano.1 nano.1.html \
|
||||
faq.html
|
||||
|
||||
SUBDIRS = po intl
|
||||
|
||||
|
||||
@@ -94,7 +94,7 @@ nano_SOURCES = cut.c files.c global.c move.c nano.c nano.h proto.h
|
||||
man_MANS = nano.1
|
||||
nano_LDADD = @INTLLIBS@
|
||||
|
||||
EXTRA_DIST = AUTHORS BUGS COPYING ChangeLog INSTALL NEWS README TODO install-sh missing mkinstalldirs nano.1 nano.1.html
|
||||
EXTRA_DIST = AUTHORS BUGS COPYING ChangeLog INSTALL NEWS README TODO install-sh missing mkinstalldirs nano.1 nano.1.html faq.html
|
||||
|
||||
|
||||
SUBDIRS = po intl
|
||||
|
||||
71
NEWS
71
NEWS
@@ -1,3 +1,72 @@
|
||||
10/02/2000 - Nano 0.9.19 is the "Chris is getting married in less than
|
||||
a week and needs a distraction" release. There are only
|
||||
a few actual code changes, mainly portability and compiler
|
||||
warning fixes. Nano now also supports PDCurses, which
|
||||
enables easily-built nano executables for Windows NT
|
||||
and 95/98 for the brave. The official nano site has
|
||||
changed (again) as well, check out www.nano-editor.org for
|
||||
all the latest nano schtuff.
|
||||
|
||||
09/18/2000 - Nano 0.9.18 is unleashed. It has some new keyboard
|
||||
handling code, cygwin support out of the box, and
|
||||
a more portable handler for the NOHELP toggle. There
|
||||
is also a fix for a somewhat serious bug whereby trying
|
||||
to insert a directory instead of a normal file would
|
||||
destroy the contents of the editor. A must-see. Four
|
||||
stars.
|
||||
|
||||
09/04/2000 - Nano 0.9.17, the Labor Day release, is released after a
|
||||
quiet spell (almost an entire month since last release!)
|
||||
New features include better (not yet perfect) binary
|
||||
display support and toggle support for most of the program
|
||||
flags (M-c, M-i, M-z, M-x, M-p, M-w, M-m, M-k and M-e for
|
||||
-c, -i, -x, -p, -w, -k, and -R).
|
||||
|
||||
08/09/2000 - Nano 0.9.16, after some struggling, is release. This release
|
||||
should fix a few of the holes that 0.9.15 dug. The
|
||||
"cutting text on the first line" bug is fixed, as is the
|
||||
"cutting text on the last line" bug. Nice symmetry there
|
||||
huh? Also the --tabsize argument should now work as well
|
||||
as by using -T.
|
||||
|
||||
08/03/2000 - Nano 0.9.15 is the "I cant think of a release description"
|
||||
release. There are the usual gala of display bugfixes,
|
||||
a for the the nasty bug in -k mode that could create a
|
||||
loop in the file being edited, and some other code
|
||||
cleanup. Also, the -T option should now work regardless
|
||||
of the curses library used. Yay.
|
||||
|
||||
07/27/2000 - Nano 0.9.14 is officially the "13 is so unlucky it should
|
||||
be skipped as a version number" release. One typo
|
||||
caused unending problems (calling nano with either -t or
|
||||
-k caused both flags to be used). The -k code is also now
|
||||
closer in functionality to Pico's -k mode, please
|
||||
note that this code is not finished yet. Working on this
|
||||
code has made me realize that there is not enough
|
||||
abstraction in the code, and I will be working on that
|
||||
for the next release. Until then, have fun with this
|
||||
version.
|
||||
|
||||
07/23/2000 - Nano 0.9.13 has a few new bits and bobs, most notably the
|
||||
-k option from Pico (cut to end of line). The majority
|
||||
of changes in this release are bugfixes however, including
|
||||
the usual display fixes and fixes for writing to symbolic
|
||||
links and un-writeable files. Barring any other major
|
||||
changes, this should be the feature set for nano 1.0,
|
||||
whenever it might be released =-)
|
||||
|
||||
07/07/2000 - Nano 0.9.12 (The "lucky day" release) is bursting with new
|
||||
features, bug fixes, and yummy fruit flavor. For
|
||||
changes, the alternate replace keystroke ^W^T is now
|
||||
^W^R to be compatible with later version of Pico.
|
||||
^W^T is now goto line, again for Pico compatibility.
|
||||
As for new features, the wonderful/hated magic line
|
||||
code has returned with a vengeance! Also, regular
|
||||
expression searches and replaces have been incorporated
|
||||
via the -R flag. And of course there are the usual
|
||||
helping of display and other bug fixes to top it all
|
||||
off.
|
||||
|
||||
06/20/2000 - Nano 0.9.11 presents drastic rewrites of the most buggy
|
||||
routines in the program, specifically the wrapping code
|
||||
and almost all of the display routines. There are many
|
||||
@@ -212,3 +281,5 @@
|
||||
http://faculty.plattsburgh.edu/astyanax/nano. Please
|
||||
update your bookmarks, tell your friends, and all that
|
||||
jazz.
|
||||
|
||||
$Id$
|
||||
|
||||
6
README
6
README
@@ -39,7 +39,7 @@ How to compile and install nano
|
||||
|
||||
Web Page
|
||||
|
||||
http://www.asty.org/nano
|
||||
http://www.nano-editor.org
|
||||
|
||||
Mailing List and Bug Reports
|
||||
|
||||
@@ -54,7 +54,7 @@ Mailing List and Bug Reports
|
||||
with a subject of "subscribe", where <name> is the list you want to
|
||||
subscribe to.
|
||||
For general bug reports, send a description of the problem to
|
||||
nano@asty.org or directly to the development list.
|
||||
nano@nano-editor.org or directly to the development list.
|
||||
|
||||
Current Status
|
||||
|
||||
@@ -80,3 +80,5 @@ Current Status
|
||||
can guess, I'm not much of an emacs fan ;)
|
||||
|
||||
Chris Allegretta (chrisa@asty.org)
|
||||
|
||||
$Id$
|
||||
|
||||
20
TODO
20
TODO
@@ -1,14 +1,26 @@
|
||||
TODO file (? means the feature may be implemented, but not definitely)
|
||||
-----------------------------------------------------------------------------
|
||||
|
||||
- Implement Spelling [DONE, mostly...]
|
||||
Current Version:
|
||||
- Implement Spelling [DONE]
|
||||
- Implement Help [DONE]
|
||||
- Internationalization [In progress, translators welcome!]
|
||||
- Allow nano to be resized in X. [DONE]
|
||||
- Color syntax highlighting? (certainly seems like there's a demand for it.)
|
||||
- On page up/down, put the cursor on the first line (like Pico), not the
|
||||
center line [DONE]
|
||||
- Rewrite edit_refresh, if at all possible [DONE]
|
||||
- Implement justify function [DONE]
|
||||
- Cut to end of line [DONE]
|
||||
- Unjustify command (^U after ^J)
|
||||
- Built-in speller command [needed for version 1.0]
|
||||
- Better statusbar interaction (scrolling, tab completion for filename)
|
||||
[needed for version 1.0]
|
||||
|
||||
|
||||
For Next Version:
|
||||
- Undo/Redo key?
|
||||
- single line scroll up/down?
|
||||
- Rewrite edit_refresh, if at all possible [In progress]
|
||||
- Implement justify function [DONE]
|
||||
- Color syntax highlighting? (certainly seems like there's a demand for it.)
|
||||
- .nanorc ?????
|
||||
|
||||
$Id$
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
/* $Id$ */
|
||||
|
||||
/* Define this if you have the wresize function in your ncurses-type library */
|
||||
#undef HAVE_WRESIZE
|
||||
|
||||
@@ -22,5 +24,3 @@
|
||||
/* Define to use the slang wrappers for curses instead of native curses */
|
||||
#undef USE_SLANG
|
||||
|
||||
/* Define this if you have a behaving TABSIZE global in your curses lib */
|
||||
#undef HAVE_TABSIZE
|
||||
|
||||
@@ -76,9 +76,6 @@
|
||||
/* Define to use the slang wrappers for curses instead of native curses */
|
||||
#undef USE_SLANG
|
||||
|
||||
/* Define this if you have a behaving TABSIZE global in your curses lib */
|
||||
#undef HAVE_TABSIZE
|
||||
|
||||
/* Define if you have the __argz_count function. */
|
||||
#undef HAVE___ARGZ_COUNT
|
||||
|
||||
@@ -157,6 +154,9 @@
|
||||
/* Define if you have the <nl_types.h> header file. */
|
||||
#undef HAVE_NL_TYPES_H
|
||||
|
||||
/* Define if you have the <regex.h> header file. */
|
||||
#undef HAVE_REGEX_H
|
||||
|
||||
/* Define if you have the <string.h> header file. */
|
||||
#undef HAVE_STRING_H
|
||||
|
||||
|
||||
119
configure.in
119
configure.in
@@ -1,8 +1,9 @@
|
||||
# $Id$
|
||||
dnl Process this file with autoconf to produce a configure script.
|
||||
AC_INIT(nano.c)
|
||||
AM_INIT_AUTOMAKE(nano, 0.9.11-cvs)
|
||||
AM_INIT_AUTOMAKE(nano, 0.9.19)
|
||||
AM_CONFIG_HEADER(config.h:config.h.in)
|
||||
ALL_LINGUAS="es de fr it id"
|
||||
ALL_LINGUAS="es de fr it id fi"
|
||||
|
||||
dnl Checks for programs.
|
||||
AC_PROG_CC
|
||||
@@ -10,7 +11,7 @@ AC_ISC_POSIX
|
||||
|
||||
dnl Checks for header files.
|
||||
AC_HEADER_STDC
|
||||
AC_CHECK_HEADERS(fcntl.h unistd.h malloc.h termios.h termio.h limits.h getopt.h)
|
||||
AC_CHECK_HEADERS(fcntl.h unistd.h malloc.h termios.h termio.h limits.h getopt.h regex.h)
|
||||
|
||||
dnl options
|
||||
AC_ARG_ENABLE(tiny,
|
||||
@@ -25,44 +26,78 @@ CURSES_LIB_NAME=""
|
||||
AC_ARG_WITH(slang,
|
||||
[ --with-slang[=DIR] Use the slang library instead of curses],
|
||||
[ case "$with_slang" in
|
||||
yes)
|
||||
AC_MSG_RESULT(yes)
|
||||
|
||||
AC_CHECK_HEADER(slcurses.h,
|
||||
AC_CHECK_LIB(slang, SLcurses_newwin,
|
||||
[AC_DEFINE(USE_SLANG) slang_support=yes
|
||||
CURSES_LIB="-lslang" CURSES_LIB_NAME=slang]),
|
||||
AC_MSG_ERROR([
|
||||
*** The header file slcurses.h was not found. If you wish to use
|
||||
*** slang support this header file is required. Please either
|
||||
*** install a version of slang that includes the slcurses.h file or
|
||||
*** do not call the configure script with --with-slang
|
||||
]))
|
||||
;;
|
||||
no)
|
||||
AC_MSG_RESULT(no)
|
||||
;;
|
||||
*)
|
||||
AC_MSG_RESULT(yes)
|
||||
|
||||
# Needed for AC_CHECK_HEADERS and AC_CHECK_LIB to look at
|
||||
# alternate readline path
|
||||
_ldflags=${LDFLAGS}
|
||||
_cppflags=${CPPFLAGS}
|
||||
|
||||
# Add additional search path
|
||||
LDFLAGS="-L$with_slang/lib $LDFLAGS"
|
||||
CPPFLAGS="-I$with_slang/include $CPPFLAGS"
|
||||
if test "$with_slang" != "yes"; then
|
||||
# Add additional search path
|
||||
LDFLAGS="-L$with_slang/lib $LDFLAGS"
|
||||
CPPFLAGS="-I$with_slang/include $CPPFLAGS"
|
||||
fi
|
||||
|
||||
AC_CHECK_HEADER(slcurses.h,
|
||||
AC_CHECK_LIB(slang, SLcurses_newwin,
|
||||
[AC_DEFINE(USE_SLANG) slang_support=yes
|
||||
CURSES_LIB="-L${with_slang}/lib -lslang"
|
||||
CURSES_LIB_NAME=slang],
|
||||
AC_MSG_ERROR([
|
||||
*** The slang library was not found or the version you have installed
|
||||
*** is incorrect.
|
||||
])),
|
||||
AC_MSG_CHECKING(for SLtt_initialize in -lslang)
|
||||
_libs=$LIBS
|
||||
LIBS="$LIBS -lslang"
|
||||
AC_TRY_RUN([
|
||||
#include <stdio.h>
|
||||
#include <slcurses.h>
|
||||
int main () { SLtt_initialize (NULL); return 0; }],
|
||||
[AC_MSG_RESULT(yes)
|
||||
AC_DEFINE(USE_SLANG)
|
||||
slang_support=yes
|
||||
if test "$with_slang" != "yes"; then
|
||||
CURSES_LIB="-L${with_slang}/lib -lslang"
|
||||
else
|
||||
CURSES_LIB="-lslang"
|
||||
fi
|
||||
CURSES_LIB_NAME=slang], [
|
||||
AC_MSG_RESULT(no)
|
||||
# We might need the term library
|
||||
for termlib in ncurses curses termcap terminfo termlib; do
|
||||
AC_CHECK_LIB(${termlib}, tputs, [tcap="-l$termlib"])
|
||||
test -n "$tcap" && break
|
||||
done
|
||||
|
||||
AC_MSG_CHECKING(for SLtt_initialize in -lslang $tcap)
|
||||
LIBS="$LIBS $tcap"
|
||||
AC_TRY_RUN([
|
||||
#include <stdio.h>
|
||||
#include <slcurses.h>
|
||||
int main () { SLtt_initialize (NULL); return 0; }],
|
||||
[AC_MSG_RESULT(yes)
|
||||
AC_DEFINE(USE_SLANG)
|
||||
slang_support=yes
|
||||
if test "$with_slang" != "yes"; then
|
||||
CURSES_LIB="-L${with_slang}/lib -lslang $tcap"
|
||||
else
|
||||
CURSES_LIB="-lslang $tcap"
|
||||
fi
|
||||
CURSES_LIB_NAME=slang], [
|
||||
AC_MSG_RESULT(no)
|
||||
# We might need the math library
|
||||
AC_MSG_CHECKING(for SLtt_initialize in -lslang $tcap -lm)
|
||||
LIBS="$LIBS -lm"
|
||||
AC_TRY_RUN([
|
||||
#include <stdio.h>
|
||||
#include <slcurses.h>
|
||||
int main () { SLtt_initialize (NULL); return 0; }],
|
||||
[AC_MSG_RESULT(yes)
|
||||
AC_DEFINE(USE_SLANG)
|
||||
slang_support=yes
|
||||
if test "$with_slang" != "yes"; then
|
||||
CURSES_LIB="-L${with_slang}/lib -lslang $tcap -lm"
|
||||
else
|
||||
CURSES_LIB="-lslang $tcap -lm"
|
||||
fi
|
||||
CURSES_LIB_NAME=slang],
|
||||
[AC_MSG_RESULT(no)],
|
||||
AC_MSG_WARN([*** Can not use slang when cross-compiling]))],
|
||||
AC_MSG_WARN([*** Can not use slang when cross-compiling]))],
|
||||
AC_MSG_WARN([*** Can not use slang when cross-compiling])),
|
||||
AC_MSG_ERROR([
|
||||
*** The header file slcurses.h was not found. If you wish to use
|
||||
*** slang support this header file is required. Please either
|
||||
@@ -70,9 +105,13 @@ AC_ARG_WITH(slang,
|
||||
*** do not call the configure script with --with-slang
|
||||
]))
|
||||
|
||||
LDFLAGS=${_ldflags}
|
||||
test "${_libs+set}" = "set" && LIBS=$_libs
|
||||
|
||||
if test "$with_slang" != "yes"; then
|
||||
LDFLAGS=${_ldflags}
|
||||
fi
|
||||
;;
|
||||
esac])
|
||||
esac], AC_MSG_RESULT(no))
|
||||
|
||||
dnl Checks for functions
|
||||
AC_CHECK_FUNCS(snprintf vsnprintf)
|
||||
@@ -101,9 +140,7 @@ dnl Checks for libraries.
|
||||
if eval "test x$CURSES_LIB_NAME = x"
|
||||
then
|
||||
AC_CHECK_HEADERS(curses.h ncurses.h)
|
||||
AC_CHECK_LIB(ncurses, tgetent,[CURSES_LIB="-lncurses" CURSES_LIB_NAME=ncurses
|
||||
dnl Only ncurses seems to have a working TABSIZE function.
|
||||
AC_DEFINE(HAVE_TABSIZE)])
|
||||
AC_CHECK_LIB(ncurses, tgetent,CURSES_LIB="-lncurses" CURSES_LIB_NAME=ncurses)
|
||||
fi
|
||||
|
||||
if eval "test x$CURSES_LIB_NAME = x"
|
||||
@@ -111,6 +148,12 @@ then
|
||||
AC_CHECK_LIB(curses, tgetent, CURSES_LIB="-lcurses" CURSES_LIB_NAME=curses)
|
||||
fi
|
||||
|
||||
# Fallback for PDCurses and less useful curses libs...
|
||||
if eval "test x$CURSES_LIB_NAME = x"
|
||||
then
|
||||
AC_CHECK_LIB(curses, initscr, CURSES_LIB="-lcurses" CURSES_LIB_NAME=curses)
|
||||
fi
|
||||
|
||||
if eval "test x$CURSES_LIB_NAME = x"
|
||||
then
|
||||
AC_CHECK_LIB(termcap, tgetent, CURSES_LIB="-ltermcap" CURSES_LIB_NAME=termcap)
|
||||
|
||||
90
cut.c
90
cut.c
@@ -1,3 +1,4 @@
|
||||
/* $Id$ */
|
||||
/**************************************************************************
|
||||
* cut.c *
|
||||
* *
|
||||
@@ -97,8 +98,7 @@ void cut_marked_segment(filestruct * top, int top_x, filestruct * bot,
|
||||
free(top->data);
|
||||
top->data = tmpstr;
|
||||
|
||||
bot->data[bot_x] = 0;
|
||||
align(&bot->data);
|
||||
null_at(bot->data, bot_x);
|
||||
next = bot->next;
|
||||
|
||||
/* We explicitly don't decrement totlines here because we don't snarf
|
||||
@@ -123,8 +123,8 @@ void cut_marked_segment(filestruct * top, int top_x, filestruct * bot,
|
||||
filebot = top;
|
||||
}
|
||||
}
|
||||
if (top->lineno < edittop->lineno)
|
||||
edit_update(top);
|
||||
if (top->lineno < edittop->lineno)
|
||||
edit_update(top, CENTER);
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -133,22 +133,47 @@ int do_cut_text(void)
|
||||
filestruct *tmp, *fileptr = current;
|
||||
#ifndef NANO_SMALL
|
||||
char *tmpstr;
|
||||
int newsize;
|
||||
int newsize, cuttingtoend = 0;
|
||||
#endif
|
||||
|
||||
check_statblank();
|
||||
if (fileptr == NULL || fileptr->data == NULL)
|
||||
return 0;
|
||||
|
||||
tmp = fileptr->next;
|
||||
|
||||
if (!ISSET(KEEP_CUTBUFFER) || ISSET(MARK_ISSET)) {
|
||||
if (!ISSET(KEEP_CUTBUFFER)) {
|
||||
free_filestruct(cutbuffer);
|
||||
cutbuffer = NULL;
|
||||
|
||||
#ifdef DEBUG
|
||||
fprintf(stderr, _("Blew away cutbuffer =)\n"));
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Must let cutbuffer get blown away first before we do this... */
|
||||
if (fileptr == filebot && !ISSET(MARK_ISSET))
|
||||
return 0;
|
||||
|
||||
#ifndef NANO_SMALL
|
||||
if (ISSET(CUT_TO_END) && !ISSET(MARK_ISSET)) {
|
||||
if (current_x == strlen(current->data))
|
||||
{
|
||||
do_delete();
|
||||
SET(KEEP_CUTBUFFER);
|
||||
marked_cut = 2;
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
SET(MARK_ISSET);
|
||||
SET(KEEP_CUTBUFFER);
|
||||
|
||||
mark_beginx = strlen(current->data);
|
||||
mark_beginbuf = current;
|
||||
cuttingtoend = 1;
|
||||
}
|
||||
}
|
||||
if (ISSET(MARK_ISSET)) {
|
||||
if (current->lineno == mark_beginbuf->lineno) {
|
||||
tmp = copy_node(current);
|
||||
@@ -183,9 +208,14 @@ int do_cut_text(void)
|
||||
|
||||
placewewant = xplustabs();
|
||||
UNSET(MARK_ISSET);
|
||||
|
||||
marked_cut = 1;
|
||||
set_modified();
|
||||
edit_update(current);
|
||||
if (cuttingtoend)
|
||||
edit_refresh();
|
||||
else
|
||||
edit_update(current, CENTER);
|
||||
|
||||
return 1;
|
||||
#else
|
||||
if (0) {
|
||||
@@ -197,10 +227,11 @@ int do_cut_text(void)
|
||||
tmp = fileptr;
|
||||
fileage = fileptr;
|
||||
add_to_cutbuffer(fileptr->prev);
|
||||
totsize--; /* get the newline */
|
||||
totlines--;
|
||||
fileptr->prev = NULL;
|
||||
edit_update(fileage);
|
||||
current = fileptr;
|
||||
edit_update(fileage, CENTER);
|
||||
} else {
|
||||
add_to_cutbuffer(fileptr);
|
||||
fileage = make_new_node(NULL);
|
||||
@@ -216,18 +247,9 @@ int do_cut_text(void)
|
||||
(fileptr->next)->prev = fileptr->prev;
|
||||
current = fileptr->next;
|
||||
totlines--;
|
||||
} else {
|
||||
/* we're deleteing the last line
|
||||
and replacing it with a dummy line,
|
||||
so totlines is the same */
|
||||
tmp = fileptr->prev;
|
||||
tmp->next = make_new_node(tmp);
|
||||
tmp = tmp->next;
|
||||
tmp->data = nmalloc(1);
|
||||
strcpy(tmp->data, "");
|
||||
current = tmp;
|
||||
filebot = tmp;
|
||||
}
|
||||
totsize--; /* get the newline */
|
||||
} /* No longer an else here, because we never get here anymore...
|
||||
No need to cut the magic line, as it's empty */
|
||||
|
||||
add_to_cutbuffer(fileptr);
|
||||
}
|
||||
@@ -259,6 +281,7 @@ int do_uncut_text(void)
|
||||
int i;
|
||||
|
||||
wrap_reset();
|
||||
check_statblank();
|
||||
if (cutbuffer == NULL || fileptr == NULL)
|
||||
return 0; /* AIEEEEEEEEEEEE */
|
||||
|
||||
@@ -270,7 +293,7 @@ int do_uncut_text(void)
|
||||
|
||||
/* Hook newbuf into fileptr */
|
||||
#ifndef NANO_SMALL
|
||||
if (marked_cut == 1) {
|
||||
if (marked_cut) {
|
||||
/* If there's only one line in the cutbuffer */
|
||||
if (cutbuffer->next == NULL) {
|
||||
tmpstr =
|
||||
@@ -286,7 +309,6 @@ int do_uncut_text(void)
|
||||
|
||||
placewewant = xplustabs();
|
||||
update_cursor();
|
||||
renumber(current);
|
||||
} else { /* yuck -- no kidding! */
|
||||
tmp = current->next;
|
||||
/* New beginning */
|
||||
@@ -329,13 +351,27 @@ int do_uncut_text(void)
|
||||
|
||||
i = editbot->lineno;
|
||||
|
||||
renumber(current);
|
||||
|
||||
current = newend;
|
||||
if (i <= newend->lineno)
|
||||
edit_update(current);
|
||||
edit_update(current, CENTER);
|
||||
}
|
||||
|
||||
/* If marked cut == 2, that means that we're doing a cut to end
|
||||
and we don't want anything else on the line, so we have to
|
||||
screw up all the work we just did and separate the line. There
|
||||
must be a better way to do this, but not at 1AM on a work night. */
|
||||
|
||||
if (marked_cut == 2 && current_x != strlen(current->data)) {
|
||||
tmp = make_new_node(current);
|
||||
tmp->data = nmalloc(strlen(¤t->data[current_x]) + 1);
|
||||
strcpy(tmp->data, ¤t->data[current_x]);
|
||||
splice_node(current, tmp, current->next);
|
||||
null_at(current->data, current_x);
|
||||
current = current->next;
|
||||
current_x = 0;
|
||||
placewewant = 0;
|
||||
}
|
||||
renumber(current->prev);
|
||||
dump_buffer(fileage);
|
||||
dump_buffer(cutbuffer);
|
||||
set_modified();
|
||||
@@ -368,8 +404,8 @@ int do_uncut_text(void)
|
||||
|
||||
i = editbot->lineno;
|
||||
renumber(newbuf);
|
||||
if (i < newend->lineno)
|
||||
edit_update(fileptr);
|
||||
if (i < newend->lineno)
|
||||
edit_update(fileptr, CENTER);
|
||||
|
||||
dump_buffer_reverse(fileptr);
|
||||
|
||||
|
||||
548
faq.html
Normal file
548
faq.html
Normal file
@@ -0,0 +1,548 @@
|
||||
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
||||
<meta name="GENERATOR" content="Mozilla/4.73 [en] (X11; U; Linux 2.2.16 i586) [Netscape]">
|
||||
</head>
|
||||
<body text="#000000" bgcolor="#FFFFFF" link="#0000EF" vlink="#51188E" alink="#FF0000">
|
||||
|
||||
<h1>
|
||||
<font color="#CC0000">The nano FAQ</font></h1>
|
||||
<h2>
|
||||
<font color="#330000">Table of Contents</font></h2>
|
||||
|
||||
<h2>
|
||||
<font color="#330000"><a href="#1">1. General</a></font></h2>
|
||||
|
||||
<blockquote><font color="#330000"><a href="#1.1">1.1 About this FAQ.</a></font>
|
||||
<br><font color="#330000"><a href="#1.2">1.2. How do I contribute to it?</a></font>
|
||||
<br><font color="#330000"><a href="#1.3">1.3. What is nano?</a></font>
|
||||
<br><font color="#330000"><a href="#1.4">1.4. What is the history behind
|
||||
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
|
||||
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>
|
||||
|
||||
<h2>
|
||||
<font color="#330000"><a href="#2">2. Where to get nano</a></font></h2>
|
||||
|
||||
<blockquote><font color="#330000"><a href="#2.1">2.1. FTP and WWW sites
|
||||
that carry nano.</a></font>
|
||||
<br><font color="#330000"><a href="#2.2">2.2. Redhat and derivatives (.rpm)
|
||||
packages.</a></font>
|
||||
<br><font color="#330000"><a href="#2.3">2.3. Debian (.deb) packages.</a></font>
|
||||
<br><font color="#330000"><a href="#2.4">2.4. By CVS (for the brave).</a></font></blockquote>
|
||||
|
||||
<h2>
|
||||
<font color="#330000"><a href="#3">3. Installation and Configuration</a></font></h2>
|
||||
|
||||
<blockquote><font color="#330000"><a href="#3.1">3.1. How do install the
|
||||
RPM or DEB package?</a></font>
|
||||
<br><font color="#330000"><a href="#3.2">3.2. Compiling from source: WHAT
|
||||
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'. What can I do about it?</a></font></blockquote>
|
||||
|
||||
<h2>
|
||||
<font color="#330000"><a href="#4">4. Running</a></font></h2>
|
||||
|
||||
<blockquote><font color="#330000"><a href="#4.1">4.1. Ack! My backspace/delete/enter/double
|
||||
bucky/meta key doesn't seem to work! What can I do?</a></font>
|
||||
<br><font color="#330000"><a href="#4.2">4.2. Nano crashes when I type
|
||||
<insert keystroke here>!</a></font>
|
||||
<br><font color="#330000"><a href="#4.3">4.3. Nano crashes when I resize
|
||||
my window. How can I fix that?</a></font>
|
||||
<br><font color="#330000"><a href="#4.4">4.4. Why does nano show ^\ and
|
||||
^_ in the shortcut list instead of ^G and ^J?</a></font>
|
||||
<br><a href="#4.5">4.5 How do I make nano my default editor (in Pine, mutt,
|
||||
etc.)?</a></blockquote>
|
||||
|
||||
<h2>
|
||||
<font color="#330000"><a href="#5">5. Internationalization</a></font></h2>
|
||||
|
||||
<blockquote><font color="#330000"><a href="#5.1">5.1. There's no translation
|
||||
for my language!</a></font>
|
||||
<br><font color="#330000"><a href="#5.2">5.2. I don't like the translation
|
||||
for <x> in my language. How can I fix it?</a></font></blockquote>
|
||||
|
||||
<h2>
|
||||
<font color="#330000"><a href="#6">6. Advocacy and Licensing</a></font></h2>
|
||||
|
||||
<blockquote><font color="#330000"><a href="#6.1">6.1. Why should I use
|
||||
nano instead of Pico?</a></font>
|
||||
<br><font color="#330000"><a href="#6.2">6.2. Why should I use Pico instead
|
||||
of nano?</a></font>
|
||||
<br><font color="#330000"><a href="#6.3">6.3. What is so bad about the
|
||||
PINE license?</a></font>
|
||||
<br><font color="#330000"><a href="#6.4">6.4. Okay, well what mail program
|
||||
should I use then?</a></font>
|
||||
<br><font color="#330000"><a href="#6.5">6.5. Why doesn't UW simply change
|
||||
their license?</a></font>
|
||||
<br><font color="#330000"><a href="#6.6">6.6. What if tomorrow UW changes
|
||||
the license to be truly Free Software?</a></font></blockquote>
|
||||
|
||||
<h2>
|
||||
<font color="#330000"><a href="#7">7. Miscellaneous</a></font></h2>
|
||||
|
||||
<blockquote><font color="#330000"><a href="#7.1">7.1. Nano related mailing
|
||||
lists.</a></font>
|
||||
<br><font color="#330000"><a href="#7.2">7.2. I want to send the development
|
||||
team a big load of cash (or just a thank you).</a></font>
|
||||
<br><font color="#330000"><a href="#7.3">7.3. How do I submit a patch?</a></font>
|
||||
<br><font color="#330000"><a href="#7.4">7.4. How do I join the development
|
||||
team?</a></font>
|
||||
<br><font color="#330000"><a href="#7.5">7.5. Can I have CVS write access?</a></font></blockquote>
|
||||
|
||||
<h2>
|
||||
<a href="#8">8. ChangeLog</a></h2>
|
||||
|
||||
<hr WIDTH="100%">
|
||||
<br>
|
||||
<h1>
|
||||
<a NAME="1"></a><font color="#330000">1. General</font></h1>
|
||||
|
||||
<h2>
|
||||
<a NAME="1.1"></a><font color="#330000">1.1 About this FAQ.</font></h2>
|
||||
|
||||
<blockquote><font color="#330000">This FAQ was written and is maintained
|
||||
by Chris Allegretta <<a href="mailto:chrisa@asty.org">chrisa@asty.org</a>>,
|
||||
who also happens to be the creator of nano. Maybe someone else
|
||||
will volunteer to maintain this FAQ someday, who knows...</font></blockquote>
|
||||
|
||||
<h2>
|
||||
<a NAME="1.2"></a><font color="#330000">1.2. How do I contribute to it?</font></h2>
|
||||
|
||||
<blockquote><font color="#330000">Your best bet is to send it to the nano
|
||||
email address, <a
|
||||
href="mailto:nano@nano-editor.org">nano@nano-editor.org</a> and if
|
||||
it is useful enough it will be included in future versions.</font></blockquote>
|
||||
|
||||
<h2>
|
||||
<a NAME="1.3"></a><font color="#330000">1.3. What is nano?</font></h2>
|
||||
|
||||
<blockquote><font color="#330000">Nano is designed to be a free replacement
|
||||
for the Pico text editor, part of the PINE email suite from <a href="http://www.washington.edu/pine">The
|
||||
University of Washington</a>. It aims to "emulate Pico as closely
|
||||
as possible and perhaps include extra functionality WITHOUT breaking compatibility
|
||||
with Pico.</font></blockquote>
|
||||
|
||||
<h2>
|
||||
<a NAME="1.4"></a><font color="#330000">1.4. What is the history behind
|
||||
nano?</font></h2>
|
||||
|
||||
<blockquote><font color="#330000">Funny you should ask!</font>
|
||||
<p><b><font color="#330000">In the beginning...</font></b>
|
||||
<p><font color="#330000">For years Pine was THE program used to read email
|
||||
on a Unix system. The Pico text editor is the portion of the program
|
||||
one would use to compose his or her mail messages. Many beginners
|
||||
to Unix flocked to Pico and Pine because of their well organized, easy
|
||||
to use interfaces. With the proliferation of Linux in the mid to
|
||||
late 90's, many University students became intimately familiar with the
|
||||
strengths (and weaknesses) of Pine and Pico.</font>
|
||||
<p><b><font color="#330000">Then came debian...</font></b>
|
||||
<p><font color="#330000">The <a href="http://www.debian.org">debian GNU/Linux</a>
|
||||
distribution, known for its strict standards in distributing truly "free"
|
||||
software (i.e. had no restrictions on redistribution), would not include
|
||||
a binary package for Pine or Pico. Many people had a serious dilemma:
|
||||
they loved these programs, but they were not truly free software in the
|
||||
<a href="http://www.gnu.org/philosophy/free-sw.html">GNU</a>
|
||||
sense of the word.</font>
|
||||
<p><b><font color="#330000">The event...</font></b>
|
||||
<p><font color="#330000">It was in late 1999 when Chris Allegretta (our
|
||||
hero) was yet again complaining to himself about the less-than-perfect
|
||||
license Pico was distributed under, the 10000 makefiles that came with
|
||||
it and how just a few small improvements could make it the Best Editor
|
||||
in the World (TM). Having been a convert from Slackware to debian,
|
||||
he missed having a simple binary package that included Pine and Pico, and
|
||||
had grown tired of downloading them himself.</font>
|
||||
<p><font color="#330000">Finally something snapped inside and Chris coded
|
||||
and hacked like a madman for many hours straight one weekend to make a
|
||||
(barely usable) Pico clone, at the time called TIP (Tip Isn't Pico).
|
||||
The program could not be invoked without a filename, could not save files,
|
||||
had no help menu, spell checker, and so forth. But over time it improved,
|
||||
and with the help of a few great coders it matured to the almost stable
|
||||
state it is today.</font></blockquote>
|
||||
|
||||
<h2>
|
||||
<a NAME="1.5"></a><font color="#330000">1.5. Why the name change from TIP?</font></h2>
|
||||
|
||||
<blockquote><font color="#330000">On January 10, 2000, TIP was officially
|
||||
renamed to nano because of a namespace conflict with another program called
|
||||
'tip'. The original 'tip' program "establishes a full duplex terminal
|
||||
connection to a remote host", and was included with many older Unix systems
|
||||
(and newer ones like Solaris). The conflict was not noticed at first because
|
||||
there is no 'tip' utility included with most Linux distributions (where
|
||||
nano was developed).</font></blockquote>
|
||||
|
||||
<h2>
|
||||
<a NAME="1.6"></a><font color="#330000">1.6 What is the current version
|
||||
of nano?</font></h2>
|
||||
|
||||
<blockquote><font color="#330000">The current version of nano *should*
|
||||
be 0.9.19. Of course you should always check the nano hompage to
|
||||
see what the latest and greatest version is.</font></blockquote>
|
||||
|
||||
<h2>
|
||||
<a NAME="1.7"></a><font color="#330000">1.7. I want to read the man page
|
||||
without having to download the program!</font></h2>
|
||||
|
||||
<blockquote><font color="#330000">Jeez, demanding, aren't we?
|
||||
Okay, look <a href="http://www.nano-editor.org/dist/nano.1.html">here</a>.</font></blockquote>
|
||||
|
||||
<hr WIDTH="100%">
|
||||
<h1>
|
||||
<a NAME="2"></a><font color="#330000">2. Where to get nano</font></h1>
|
||||
|
||||
<h2>
|
||||
<a NAME="2.1"></a><font color="#330000">2.1. FTP and WWW sites that carry
|
||||
nano.</font></h2>
|
||||
|
||||
<blockquote><font color="#330000">The nano distribution can be downloaded
|
||||
at the following fine web and ftp sites:</font>
|
||||
<ul>
|
||||
<li>
|
||||
<font color="#330000"><a href="http://www.nano-editor.org/dist">http://www.nano-editor.org/dist</a></font></li>
|
||||
|
||||
<li>
|
||||
<font color="#330000"><a href="http://www.ewtoo.org/~astyanax/nano/dist">http://www.ewtoo.org/~astyanax/nano/dist</a></font></li>
|
||||
|
||||
<li>
|
||||
<font color="#330000"><a href="ftp://ftp.nano-editor.org/pub/nano">ftp://ftp.nano-editor.org/pub/nano</a></font></li>
|
||||
|
||||
<li>
|
||||
<font color="#330000"><a href="ftp://nano.sourceforge.net/pub/nano/">ftp://nano.sourceforge.net/pub/nano</a></font></li>
|
||||
</ul>
|
||||
</blockquote>
|
||||
|
||||
<h2>
|
||||
<a NAME="2.2"></a><font color="#330000">2.2. Redhat and derivatives (.rpm)
|
||||
packages.</font></h2>
|
||||
|
||||
<blockquote>
|
||||
<ul>
|
||||
<li>
|
||||
<font color="#330000"><a href="http://www.nano-editor.org/dist/RPMS">http://www.nano-editor.org/dist/RPMS</a></font></li>
|
||||
|
||||
<li>
|
||||
<font color="#330000"><a href="http://www.ewtoo.org/~astyanax/nano/dist/RPMS">http://www.ewtoo.org/~astyanax/nano/dist/RPMS</a></font></li>
|
||||
|
||||
<li>
|
||||
<font color="#330000"><a href="ftp://ftp.nano-editor.org/pub/nano/RPMS">ftp://ftp.nano-editor.org/pub/nano/RPMS</a></font></li>
|
||||
|
||||
<li>
|
||||
<font color="#330000"><a href="ftp://nano.sourceforge.net/pub/nano/RPMS">ftp://nano.sourceforge.net/pub/nano/RPMS</a></font></li>
|
||||
</ul>
|
||||
<font color="#330000">Additionally, check out the Redhat contribs section
|
||||
at:</font>
|
||||
<ul>
|
||||
<li>
|
||||
<font color="#330000"><a href="http://metalab.unc.edu/pub/Linux/distributions/redhat/contrib/libc6/i386">http://metalab.unc.edu/pub/Linux/distributions/redhat/contrib/libc6/i386</a></font></li>
|
||||
|
||||
<li>
|
||||
<font color="#330000"><a href="ftp://metalab.unc.edu/pub/Linux/distributions/redhat/contrib/libc6/i386">ftp://metalab.unc.edu/pub/Linux/distributions/redhat/contrib/libc6/i386</a></font></li>
|
||||
</ul>
|
||||
</blockquote>
|
||||
|
||||
<h2>
|
||||
<a NAME="2.3"></a><font color="#330000">2.3. Debian (.deb) packages.</font></h2>
|
||||
|
||||
<blockquote><font color="#330000">For debian users, you can check out the
|
||||
current nano packages for:</font>
|
||||
<ul>
|
||||
<li>
|
||||
<font color="#330000"><a href="http://www.debian.org/Packages/frozen/editors/nano.html">frozen</a></font></li>
|
||||
|
||||
<li>
|
||||
<font color="#330000"><a href="http://www.debian.org/Packages/unstable/editors/nano.html">unstable</a></font></li>
|
||||
</ul>
|
||||
<font color="#330000">Note that versions < 0.9.10 are probably not for
|
||||
those wanting to get serious work done, so until the frozen/stable distributions
|
||||
have an updated version of nano, you are best off using the one in unstable
|
||||
for now.</font></blockquote>
|
||||
|
||||
<h2>
|
||||
<a NAME="2.4"></a><font color="#330000">2.4. By CVS (for the brave).</font></h2>
|
||||
|
||||
<blockquote><font color="#330000">For the 'bleeding edge' current version
|
||||
of nano, you can use CVS to download the current source code. <b>Note:</b>
|
||||
believe it or not, by downloading code that has not yet stabilized into
|
||||
an official release, there could quite possibly be bugs, in fact the code
|
||||
may not even compile! Anyway, see <a href="https://sourceforge.net/cvs/?group_id=1304">the
|
||||
nano CVS page</a> for info on anonymous CVS access to the nano source.</font></blockquote>
|
||||
|
||||
<hr WIDTH="100%">
|
||||
<h1>
|
||||
<a NAME="3"></a><font color="#330000">3. Installation and Configuration</font></h1>
|
||||
|
||||
<h2>
|
||||
<a NAME="3.1"></a><font color="#330000">3.1. How do install the RPM or
|
||||
DEB package?</font></h2>
|
||||
|
||||
<blockquote><font color="#330000">It's simple really! As root, type
|
||||
<b>rpm
|
||||
-Uvh nano-x.y.z-1.i386.rpm</b> if you have a Redhat-ish system or
|
||||
<b>dpkg
|
||||
-i nano_x.y.z-1.deb</b> if you have a Debian-ish system, where
|
||||
<b>x.y.z</b>
|
||||
is the release of nano. There are other programs to install programs,
|
||||
and if you wish to use those, knock yourself out.</font></blockquote>
|
||||
|
||||
<h2>
|
||||
<a NAME="3.2"></a><font color="#330000">3.2. Compiling from source: WHAT
|
||||
THE HECK DO I DO NOW?</font></h2>
|
||||
|
||||
<blockquote><font color="#330000">Okay, take a deep breath, this really
|
||||
isn't hard. Unpack the nano source with a command like:</font>
|
||||
<p><b><font color="#330000">tar -zxvf nano-x.y.z.tar.gz</font></b>
|
||||
<p><font color="#330000">If you get error messages about the -z option,
|
||||
try this:</font>
|
||||
<p><b><font color="#330000">gzip -dc nano-x.y.z.tar.gz | tar xvf -</font></b>
|
||||
<p><font color="#330000">(again, where x.y.z is the version number in question).
|
||||
Then you need to run configure with any options you might want (if any).</font>
|
||||
<p><font color="#330000">The average case is this:</font>
|
||||
<p><b><font color="#330000">./configure</font></b>
|
||||
<br><b><font color="#330000">make</font></b>
|
||||
<br><font color="#330000"><b>make install </b>(as root, of course)</font></blockquote>
|
||||
|
||||
<h2>
|
||||
<a NAME="3.3"></a><font color="#330000">3.3. Why does everything go into
|
||||
/usr/local?</font></h2>
|
||||
|
||||
<blockquote><font color="#330000">Well, that's what the <b>configure</b>
|
||||
script defaults to. If you wish to change this, simply do this:</font>
|
||||
<p><b><font color="#330000">./configure --prefix=/usr</font></b>
|
||||
<p><font color="#330000">to put nano into /usr/bin when you run <b>make
|
||||
install</b>.</font></blockquote>
|
||||
|
||||
<h2>
|
||||
<a NAME="3.4"></a><font color="#330000">3.4. I get errors about 'bindtextdomain',
|
||||
'gettext' and/or 'gettextdomain'. What can I do about it?</font></h2>
|
||||
|
||||
<blockquote><font color="#330000">Try doing a <b>./configure --with-included-gettext</b>
|
||||
and see if that solves your problem. You make need to do a <b>make
|
||||
clean ; make</b> to get it to work fully.</font></blockquote>
|
||||
|
||||
<hr WIDTH="100%">
|
||||
<h1>
|
||||
<a NAME="4"></a><font color="#330000">4. Running</font></h1>
|
||||
|
||||
<h2>
|
||||
<a NAME="4.1"></a><font color="#330000">4.1. Ack! My backspace/delete/enter/double
|
||||
bucky/meta key doesn't seem to work! What can I do?</font></h2>
|
||||
|
||||
<blockquote><font color="#330000">Try setting your $TERM variable to 'vt100'.
|
||||
Nano doesn't yet support every term entry under the sun.</font>
|
||||
<p><font color="#330000">Bourne shell users (like bash): <b>export TERM=vt100</b></font>
|
||||
<br><font color="#330000">C Shell users (tcsh and csh): <b>setenv TERM
|
||||
vt100</b></font></blockquote>
|
||||
|
||||
<h2>
|
||||
<a NAME="4.2"></a><font color="#330000">4.2. Nano crashes when I type <insert
|
||||
keystroke here>!</font></h2>
|
||||
|
||||
<blockquote><font color="#330000">If you aren't trying some bizarre keystroke
|
||||
combination with some bizarre $TERM entry, chances are you have found a
|
||||
bug. You are welcome to submit it to the nano-devel list or
|
||||
to <a href="mailto:nano@nano-editor.org">nano@nano-editor.org</a>.</font></blockquote>
|
||||
|
||||
<h2>
|
||||
<a NAME="4.3"></a><font color="#330000">4.3. Nano crashes when I resize
|
||||
my window. How can I fix that?</font></h2>
|
||||
|
||||
<blockquote><font color="#330000">Older versions of nano had this problem,
|
||||
please upgrade to a newer version (at least 0.9.9 would be great, 0.9.
|
||||
12 is recommended).</font></blockquote>
|
||||
|
||||
<h2>
|
||||
<a NAME="4.4"></a><font color="#330000">4.4. Why does nano show ^\ and
|
||||
^_ in the shortcut list instead of ^G and ^J?</font></h2>
|
||||
|
||||
<blockquote><font color="#330000">The help (^G) and justify (^J) functions
|
||||
were among the last to be written. To show the improvements that
|
||||
nano had over Pico (goto line # and replace), ^_ and ^\ were put on the
|
||||
shortcut list. If you use the <b>-p</b> option to nano you
|
||||
will get the same shortcuts at the bottom as Pico.</font></blockquote>
|
||||
|
||||
<h2>
|
||||
<a NAME="4.5"></a>4.5 How do I make nano my default editor (in Pine, mutt,
|
||||
etc)?</h2>
|
||||
|
||||
<blockquote>You need to make nano your $EDITOR. If you want this
|
||||
to be saved, you should put a line like this in your <b>.bashrc</b> if
|
||||
you use bash:
|
||||
<p><b>export EDITOR=/usr/local/bin/nano</b>
|
||||
<p>or if you use tcsh put this in your <b>.cshrc</b> file:
|
||||
<p><b>setenv EDITOR /usr/local/bin/nano</b>
|
||||
<p>Change /usr/local/bin/nano to wherever nano is installed in your system.
|
||||
Type which nano to find out. This will not take effect until the next time
|
||||
you login. So log out and back in again.
|
||||
<p>Then on top that if you use Pine you must go into setup (type <b>S</b>
|
||||
at the main menu), then configure (type <b>C</b>). Hit enter on the
|
||||
lines that say:
|
||||
<p><b>[ ] enable-alternate-editor-cmd</b>
|
||||
<br><b>[ ] enable-alternate-editor-implicitly</b>
|
||||
<p>Then exit (<b>E</b>) and select Yes (<b>Y</b>).
|
||||
<p>Mutt users should see an effect immediately the next time you log in,
|
||||
no further configuration is needed. However, if you want to let people
|
||||
know you use nano to compose your email messages, you can put a line like
|
||||
this in your <b>.muttrc</b>:
|
||||
<p><b>my_hdr X-Composer: nano x.y.z</b>
|
||||
<p>Again, replace x.y.z with the version of nano you use.
|
||||
<br> </blockquote>
|
||||
|
||||
<hr WIDTH="100%">
|
||||
<h1>
|
||||
<a NAME="5"></a><font color="#330000">5. Internationalization</font></h1>
|
||||
|
||||
<h2>
|
||||
<a NAME="5.1"></a><font color="#330000">5.1. There's no translation for
|
||||
my language!</font></h2>
|
||||
|
||||
<blockquote><font color="#330000">So, uh, get someone who speaks your native
|
||||
language to write one =-). Just grab the <b>nano.pot</b> file from
|
||||
the latest and greatest nano distribution (it's in the <b>po/</b> directory)
|
||||
and translate each line into your native language on the <b>msgstr</b>
|
||||
line. Then send it to the nano devel list or <a href="mailto:nano@nano-editor.org">nano@nano-editor.org</a>.</font></blockquote>
|
||||
|
||||
<h2>
|
||||
<a NAME="5.2"></a><font color="#330000">5.2. I don't like the translation
|
||||
for <x> in my language. How can I fix it?</font></h2>
|
||||
|
||||
<blockquote><font color="#330000">The best way would probably be to e-mail
|
||||
the person listed in the <b><your_language>.po</b> file with your suggested
|
||||
corrections and they can in turn forward it to the nano email address,
|
||||
or the devel list.</font></blockquote>
|
||||
|
||||
<hr WIDTH="100%">
|
||||
<h1>
|
||||
<a NAME="6"></a><font color="#330000">6. Advocacy and Licensing</font></h1>
|
||||
|
||||
<h2>
|
||||
<a NAME="6.1"></a><font color="#330000">6.1. Why should I use nano instead
|
||||
of Pico?</font></h2>
|
||||
|
||||
<blockquote><font color="#330000">There are many reasons to use nano instead
|
||||
of Pico, a more complete list can be found at the <a href="http://www.nano-edior.org">nano
|
||||
homepage</a>.</font></blockquote>
|
||||
|
||||
<h2>
|
||||
<a NAME="6.2"></a><font color="#330000">6.2. Why should I use Pico instead
|
||||
of nano?</font></h2>
|
||||
|
||||
<blockquote>Again, check out the <a href="http://www.nano-editor.org">nano
|
||||
homepage</a> for a good summary of reasons. It really is a matter
|
||||
of personal preference as to which editor you should use. If you're
|
||||
the type of person who likes using the original version of a program, then
|
||||
Pico is the editor for you. If you're looking for a few more
|
||||
features and a 'better' license as far as adding your own changes (sacrificing
|
||||
mailer integration and a little stability), nano is the way to go.</blockquote>
|
||||
|
||||
<h2>
|
||||
<a NAME="6.3"></a><font color="#330000">6.3. What is so bad about the PINE
|
||||
license?</font></h2>
|
||||
|
||||
<blockquote><font color="#330000">Technically there is nothing "wrong"
|
||||
with the U of W license for Pine and Pico. However, it is not
|
||||
considered truly "free" according to the <a href="http://www.debian.org/social_contract#guidelines">Debian
|
||||
Free Software Guidelines</a>. The only real problem as far as I'm
|
||||
aware as that there are limitations on the redistribution of programs based
|
||||
on the Pine and Pico source. So at a real nitty gritty level,
|
||||
these programs are not considered Free Software. This is why Pico
|
||||
isn't distributed in binary form in debian, and hence one of the main reasons
|
||||
nano was started.</font></blockquote>
|
||||
|
||||
<h2>
|
||||
<a NAME="6.4"></a><font color="#330000">6.4. Okay, well what mail program
|
||||
should I use then?</font></h2>
|
||||
|
||||
<blockquote><font color="#330000">Well, there is nothing stopping you from
|
||||
using Pine with nano (or Pine with Pico for that matter). But if
|
||||
you want to use programs that are considered Free Software, you may want
|
||||
to look into <a href="http://www.mutt.org">mutt</a>. It is a full-screen,
|
||||
console based mail program that actually has a lot more flexibility than
|
||||
Pine, but has a keymap included in the distribution that allows you to
|
||||
use the same keystrokes as Pine would to send and receive mail. It's
|
||||
also licensed under the GPL.</font></blockquote>
|
||||
|
||||
<h2>
|
||||
<a NAME="6.5"></a><font color="#330000">6.5. Why doesn't UW simply change
|
||||
their license?</font></h2>
|
||||
|
||||
<blockquote><font color="#330000">You're really not asking the right person
|
||||
here. I (Chris) waited a long time to see if UW would change their
|
||||
license because of the amount of high quality software being released and
|
||||
developed under the GPL without being taken advantage of by malicious corporate
|
||||
entities or other baddies, but no such luck so far.</font></blockquote>
|
||||
|
||||
<h2>
|
||||
<a NAME="6.6"></a><font color="#330000">6.6. What if tomorrow UW changes
|
||||
the license to be truly Free Software?</font></h2>
|
||||
|
||||
<blockquote><font color="#330000">Honestly nothing would make me happier
|
||||
than to see that happen. Nano would continue to be developed independently
|
||||
until such time as Pico had all the features nano did or the projects merged.
|
||||
That just does not seem very likely given that there has been no sign of
|
||||
any changes in the past few years in a positive direction.</font></blockquote>
|
||||
|
||||
<hr WIDTH="100%">
|
||||
<h1>
|
||||
<a NAME="7"></a><font color="#330000">7. Miscellaneous</font></h1>
|
||||
|
||||
<h2>
|
||||
<a NAME="7.1"></a><font color="#330000">7.1. Nano related mailing lists.</font></h2>
|
||||
|
||||
<blockquote><font color="#330000">There are two mailing lists for nano
|
||||
hosted at <a href="http://www.sourceforge.net">SourceForge</a>, nano-announce
|
||||
and nano-devel. Nano-announce is a very low traffic list where new
|
||||
versions of nano are announced (surprise!) Nano-devel is a sometimes
|
||||
low, sometimes very high traffic list for dicussing the present and future
|
||||
development of nano. Here are links to where you can sign up for
|
||||
a given list:</font><font color="#330000"></font>
|
||||
<p><font color="#330000">nano-announce - <a href="http://lists.sourceforge.net/mailman/listinfo/nano-announce">http://lists.sourceforge.net/mailman/listinfo/nano-announce</a></font>
|
||||
<br><font color="#330000">nano-devel - <a href="http://lists.sourceforge.net/mailman/listinfo/nano-devel">http://lists.sourceforge.net/mailman/listinfo/nano-devel</a></font></blockquote>
|
||||
|
||||
<h2>
|
||||
<a NAME="7.2"></a><font color="#330000">7.2. I want to send the development
|
||||
team a big load of cash (or just a thank you).</font></h2>
|
||||
|
||||
<blockquote><font color="#330000">That's fine. Send it <a href="mailto:nano-devel@lists.sourceforge.net">our
|
||||
way</a>! Better yet, fix a <a href="http://www.nano-editor.org/dist/BUGS">bug</a>
|
||||
in the program or implement a <a href="http://www.nano-editor.org/dist/TODO">cool
|
||||
feature</a> and send us that instead (though cash is fine too).</font></blockquote>
|
||||
|
||||
<h2>
|
||||
<a NAME="7.3"></a><font color="#330000">7.3. How do I submit a patch?</font></h2>
|
||||
|
||||
<blockquote><font color="#330000">See Section <a href="#7.2">7.2</a>.</font></blockquote>
|
||||
|
||||
<h2>
|
||||
<a NAME="7.4"></a><font color="#330000">7.4. How do I join the development
|
||||
team?</font></h2>
|
||||
|
||||
<blockquote><font color="#330000">The easiest way is to consistently send
|
||||
in good patches that add some needed functionality, fix a bug or two and/or
|
||||
make the program more optimized/efficient. Then ask nicely and you
|
||||
will probably be added to the SourceForge development list and be given
|
||||
CVS write after awhile. There is a lot of responsibility that goes
|
||||
along with being a team member, so don't think it's just something to add
|
||||
to your resume.</font></blockquote>
|
||||
|
||||
<h2>
|
||||
<a NAME="7.5"></a><font color="#330000">7.5. Can I have CVS write access?</font></h2>
|
||||
|
||||
<blockquote><font color="#330000">Re-read Section </font><a href="#7.4">7.4</a><font color="#330000">
|
||||
and you should know the answer.</font></blockquote>
|
||||
|
||||
<h1>
|
||||
<a NAME="8"></a>8. ChangeLog</h1>
|
||||
|
||||
<blockquote>06/31/2000 - Initial framework.</blockquote>
|
||||
<P>
|
||||
$Id$
|
||||
</body>
|
||||
</html>
|
||||
70
files.c
70
files.c
@@ -1,3 +1,4 @@
|
||||
/* $Id$ */
|
||||
/**************************************************************************
|
||||
* files.c *
|
||||
* *
|
||||
@@ -125,7 +126,7 @@ filestruct *read_line(char *buf, filestruct * prev, int *line1ins)
|
||||
|
||||
int read_file(int fd, char *filename)
|
||||
{
|
||||
long size, lines = 0, linetemp = 0;
|
||||
long size, num_lines = 0, linetemp = 0;
|
||||
char input[2]; /* buffer */
|
||||
char *buf;
|
||||
long i = 0, bufx = 128;
|
||||
@@ -133,6 +134,7 @@ int read_file(int fd, char *filename)
|
||||
int line1ins = 0;
|
||||
|
||||
buf = nmalloc(bufx);
|
||||
buf[0] = '\0';
|
||||
|
||||
if (fileptr != NULL && fileptr->prev != NULL) {
|
||||
fileptr = fileptr->prev;
|
||||
@@ -148,7 +150,7 @@ int read_file(int fd, char *filename)
|
||||
linetemp = 0;
|
||||
if (input[0] == '\n') {
|
||||
fileptr = read_line(buf, fileptr, &line1ins);
|
||||
lines++;
|
||||
num_lines++;
|
||||
buf[0] = 0;
|
||||
i = 0;
|
||||
} else {
|
||||
@@ -171,15 +173,16 @@ int read_file(int fd, char *filename)
|
||||
/* Did we not get a newline but still have stuff to do? */
|
||||
if (buf[0]) {
|
||||
fileptr = read_line(buf, fileptr, &line1ins);
|
||||
lines++;
|
||||
num_lines++;
|
||||
buf[0] = 0;
|
||||
}
|
||||
/* Did we even GET a file? */
|
||||
if (totsize == 0) {
|
||||
new_file();
|
||||
statusbar(_("Read %d lines"), lines);
|
||||
statusbar(_("Read %d lines"), num_lines);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (current != NULL) {
|
||||
fileptr->next = current;
|
||||
current->prev = fileptr;
|
||||
@@ -188,10 +191,13 @@ int read_file(int fd, char *filename)
|
||||
placewewant = 0;
|
||||
} else if (fileptr->next == NULL) {
|
||||
filebot = fileptr;
|
||||
new_magicline();
|
||||
|
||||
/* Update the edit buffer */
|
||||
load_file();
|
||||
}
|
||||
statusbar(_("Read %d lines"), lines);
|
||||
totlines += lines;
|
||||
statusbar(_("Read %d lines"), num_lines);
|
||||
totlines += num_lines;
|
||||
|
||||
free(buf);
|
||||
close(fd);
|
||||
@@ -222,7 +228,8 @@ int open_file(char *filename, int insert, int quiet)
|
||||
} else { /* File is A-OK */
|
||||
if (S_ISDIR(fileinfo.st_mode)) {
|
||||
statusbar(_("File \"%s\" is a directory"), filename);
|
||||
new_file();
|
||||
if (!insert)
|
||||
new_file();
|
||||
return -1;
|
||||
}
|
||||
if (!quiet)
|
||||
@@ -252,14 +259,11 @@ int do_insertfile(void)
|
||||
set_modified();
|
||||
|
||||
/* Here we want to rebuild the edit window */
|
||||
for (i = 0, editbot = edittop;
|
||||
i <= editwinrows - 1
|
||||
&& i <= totlines
|
||||
&& editbot->next != NULL; editbot = editbot->next, i++);
|
||||
fix_editbot();
|
||||
|
||||
/* If we've gone off the bottom, recenter, otherwise just redraw */
|
||||
if (current->lineno > editbot->lineno)
|
||||
edit_update(current);
|
||||
edit_update(current, CENTER);
|
||||
else
|
||||
edit_refresh();
|
||||
|
||||
@@ -280,7 +284,7 @@ int do_insertfile(void)
|
||||
* 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.
|
||||
* to the editor, and is completely different from TEMP_OPT.
|
||||
*/
|
||||
int write_file(char *name, int tmp)
|
||||
{
|
||||
@@ -298,11 +302,21 @@ int write_file(char *name, int tmp)
|
||||
fileptr = fileage;
|
||||
|
||||
|
||||
/* 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);
|
||||
|
||||
/* Open the file and truncate it. Trust the symlink. */
|
||||
if (ISSET(FOLLOW_SYMLINKS) && !tmp) {
|
||||
if ((ISSET(FOLLOW_SYMLINKS) || !S_ISLNK(st.st_mode)) && !tmp) {
|
||||
|
||||
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)) {
|
||||
UNSET(TEMP_OPT);
|
||||
return do_writeout(1);
|
||||
}
|
||||
statusbar(_("Could not open file for writing: %s"),
|
||||
strerror(errno));
|
||||
return -1;
|
||||
@@ -319,16 +333,21 @@ int write_file(char *name, int tmp)
|
||||
strcat(buf, name);
|
||||
strcat(buf, ".XXXXXX");
|
||||
if ((fd = mkstemp(buf)) == -1) {
|
||||
if (ISSET(TEMP_OPT)) {
|
||||
UNSET(TEMP_OPT);
|
||||
return do_writeout(1);
|
||||
}
|
||||
statusbar(_("Could not open file for writing: %s"),
|
||||
strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
dump_buffer(fileage);
|
||||
while (fileptr != NULL && fileptr->next != NULL) {
|
||||
/* Next line is so we discount the "magic line" */
|
||||
if(filebot == fileptr && fileptr->data[0] == '\0') break;
|
||||
|
||||
size = write(fd, fileptr->data, strlen(fileptr->data));
|
||||
if (size == -1) {
|
||||
statusbar(_("Could not open file for writing: %s"),
|
||||
@@ -426,10 +445,21 @@ int do_writeout(int exiting)
|
||||
|
||||
strncpy(answer, filename, 132);
|
||||
|
||||
if ((exiting) && (temp_opt) && (filename)) {
|
||||
i = write_file(answer, 0);
|
||||
display_main_list();
|
||||
return i;
|
||||
if ((exiting) && (ISSET(TEMP_OPT))) {
|
||||
if (filename[0])
|
||||
{
|
||||
i = write_file(answer, 0);
|
||||
display_main_list();
|
||||
return i;
|
||||
}
|
||||
else
|
||||
{
|
||||
UNSET(TEMP_OPT);
|
||||
do_exit();
|
||||
|
||||
/* They cancelled, abort quit */
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
while (1) {
|
||||
|
||||
92
global.c
92
global.c
@@ -1,3 +1,4 @@
|
||||
/* $Id$ */
|
||||
/**************************************************************************
|
||||
* global.c *
|
||||
* *
|
||||
@@ -38,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; /* Name of the file */
|
||||
char filename[PATH_MAX]; /* Name of the file */
|
||||
int editwinrows = 0; /* How many rows long is the edit
|
||||
window? */
|
||||
filestruct *current; /* Current buffer pointer */
|
||||
@@ -53,13 +54,15 @@ filestruct *editbot = NULL; /* Same for the bottom */
|
||||
filestruct *filebot = NULL; /* Last node in the file struct */
|
||||
filestruct *cutbuffer = NULL; /* A place to store cut text */
|
||||
|
||||
char *answer; /* Answer str to many questions */
|
||||
char answer[132]; /* Answer str to many questions */
|
||||
int totlines = 0; /* Total number of lines in the file */
|
||||
int totsize = 0; /* Total number of bytes in the file */
|
||||
int placewewant = 0; /* The collum we'd like the cursor
|
||||
to jump to when we go to the
|
||||
next or previous line */
|
||||
|
||||
int tabsize = 8; /* Our internal tabsize variable */
|
||||
|
||||
char *hblank; /* A horizontal blank line */
|
||||
char *help_text; /* The text in the help window */
|
||||
|
||||
@@ -75,6 +78,15 @@ shortcut goto_list[GOTO_LIST_LEN];
|
||||
shortcut writefile_list[WRITEFILE_LIST_LEN];
|
||||
shortcut help_list[HELP_LIST_LEN];
|
||||
shortcut spell_list[SPELL_LIST_LEN];
|
||||
toggle toggles[TOGGLE_LEN];
|
||||
|
||||
/* Regular expressions */
|
||||
|
||||
#ifdef HAVE_REGEX_H
|
||||
regex_t search_regexp; /* Global to store compiled search regexp */
|
||||
regmatch_t regmatches[10]; /* Match positions for parenthetical
|
||||
subexpressions, max of 10 */
|
||||
#endif
|
||||
|
||||
/* Initialize a struct *without* our lovely braces =( */
|
||||
void sc_init_one(shortcut * s, int key, char *desc, char *help, int alt,
|
||||
@@ -90,6 +102,56 @@ void sc_init_one(shortcut * s, int key, char *desc, char *help, int alt,
|
||||
s->func = func;
|
||||
}
|
||||
|
||||
/* Initialize the toggles in the same manner */
|
||||
void toggle_init_one(toggle * t, int val, char *desc, int flag)
|
||||
{
|
||||
t->val = val;
|
||||
t->desc = desc;
|
||||
t->flag = flag;
|
||||
}
|
||||
|
||||
void toggle_init(void)
|
||||
{
|
||||
#ifndef NANO_SMALL
|
||||
char *toggle_const_msg, *toggle_autoindent_msg, *toggle_suspend_msg,
|
||||
*toggle_nohelp_msg, *toggle_picomode_msg, *toggle_mouse_msg,
|
||||
*toggle_cuttoend_msg, *toggle_regexp_msg, *toggle_wrap_msg;
|
||||
|
||||
toggle_const_msg = _("Constant cursor position");
|
||||
toggle_autoindent_msg = _("Auto indent");
|
||||
toggle_suspend_msg = _("Suspend");
|
||||
toggle_nohelp_msg = _("Help mode");
|
||||
toggle_picomode_msg = _("Pico messages");
|
||||
toggle_mouse_msg = _("Mouse support");
|
||||
toggle_cuttoend_msg = _("Cut to end");
|
||||
#ifdef HAVE_REGEX_H
|
||||
toggle_regexp_msg = _("Regular expressions");
|
||||
#endif
|
||||
toggle_wrap_msg = _("Auto wrap");
|
||||
|
||||
toggle_init_one(&toggles[0], TOGGLE_CONST_KEY, toggle_const_msg,
|
||||
CONSTUPDATE);
|
||||
toggle_init_one(&toggles[1], TOGGLE_AUTOINDENT_KEY, toggle_autoindent_msg,
|
||||
AUTOINDENT);
|
||||
toggle_init_one(&toggles[2], TOGGLE_SUSPEND_KEY, toggle_suspend_msg,
|
||||
SUSPEND);
|
||||
toggle_init_one(&toggles[3], TOGGLE_NOHELP_KEY, toggle_nohelp_msg,
|
||||
NO_HELP);
|
||||
toggle_init_one(&toggles[4], TOGGLE_PICOMODE_KEY, toggle_picomode_msg,
|
||||
PICO_MSGS);
|
||||
toggle_init_one(&toggles[5], TOGGLE_WRAP_KEY, toggle_wrap_msg,
|
||||
NO_WRAP);
|
||||
toggle_init_one(&toggles[6], TOGGLE_MOUSE_KEY, toggle_mouse_msg,
|
||||
USE_MOUSE);
|
||||
toggle_init_one(&toggles[7], TOGGLE_CUTTOEND_KEY, toggle_cuttoend_msg,
|
||||
CUT_TO_END);
|
||||
#ifdef HAVE_REGEX_H
|
||||
toggle_init_one(&toggles[8], TOGGLE_REGEXP_KEY, toggle_regexp_msg,
|
||||
USE_REGEXP);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
void shortcut_init(void)
|
||||
{
|
||||
char *nano_help_msg = "", *nano_writeout_msg = "", *nano_exit_msg = "",
|
||||
@@ -141,10 +203,9 @@ void shortcut_init(void)
|
||||
nano_cancel_msg = _("Cancel the current function");
|
||||
#endif
|
||||
|
||||
|
||||
if (ISSET(PICO_MSGS))
|
||||
sc_init_one(&main_list[0], NANO_HELP_KEY, _("Get Help"),
|
||||
nano_help_msg, 0, 0, 0, VIEW, do_help);
|
||||
nano_help_msg, 0, NANO_HELP_FKEY, 0, VIEW, do_help);
|
||||
else
|
||||
sc_init_one(&main_list[0], NANO_WRITEOUT_KEY, _("WriteOut"),
|
||||
nano_writeout_msg,
|
||||
@@ -164,7 +225,8 @@ void shortcut_init(void)
|
||||
|
||||
if (ISSET(PICO_MSGS))
|
||||
sc_init_one(&main_list[3], NANO_JUSTIFY_KEY, _("Justify"),
|
||||
nano_justify_msg, 0, 0, 0, NOVIEW, do_justify);
|
||||
nano_justify_msg, 0, NANO_JUSTIFY_FKEY, 0,
|
||||
NOVIEW, do_justify);
|
||||
else
|
||||
sc_init_one(&main_list[3], NANO_REPLACE_KEY, _("Replace"),
|
||||
nano_replace_msg,
|
||||
@@ -242,7 +304,8 @@ void shortcut_init(void)
|
||||
NANO_ALT_R, NANO_REPLACE_FKEY, 0, NOVIEW, do_replace);
|
||||
else
|
||||
sc_init_one(&main_list[23], NANO_JUSTIFY_KEY, _("Justify"),
|
||||
nano_justify_msg, 0, 0, 0, NOVIEW, do_justify);
|
||||
nano_justify_msg, 0, NANO_JUSTIFY_FKEY, 0,
|
||||
NOVIEW, do_justify);
|
||||
|
||||
sc_init_one(&main_list[24], NANO_ENTER_KEY, _("Enter"),
|
||||
nano_enter_msg,
|
||||
@@ -254,7 +317,7 @@ void shortcut_init(void)
|
||||
NANO_ALT_G, NANO_GOTO_FKEY, 0, VIEW, do_gotoline_void);
|
||||
else
|
||||
sc_init_one(&main_list[25], NANO_HELP_KEY, _("Get Help"),
|
||||
nano_help_msg, 0, 0, 0, VIEW, do_help);
|
||||
nano_help_msg, 0, NANO_HELP_FKEY, 0, VIEW, do_help);
|
||||
|
||||
|
||||
sc_init_one(&whereis_list[0], NANO_FIRSTLINE_KEY, _("First Line"),
|
||||
@@ -267,10 +330,13 @@ void shortcut_init(void)
|
||||
nano_case_msg, 0, 0, 0, VIEW, 0);
|
||||
|
||||
|
||||
sc_init_one(&whereis_list[3], NANO_OTHERSEARCH_KEY, _("To Replace"),
|
||||
sc_init_one(&whereis_list[3], NANO_OTHERSEARCH_KEY, _("Replace"),
|
||||
nano_replace_msg, 0, 0, 0, VIEW, do_replace);
|
||||
|
||||
sc_init_one(&whereis_list[4], NANO_CANCEL_KEY, _("Cancel"),
|
||||
sc_init_one(&whereis_list[4], NANO_FROMSEARCHTOGOTO_KEY, _("Goto Line"),
|
||||
nano_goto_msg, 0, 0, 0, VIEW, do_gotoline_void);
|
||||
|
||||
sc_init_one(&whereis_list[5], NANO_CANCEL_KEY, _("Cancel"),
|
||||
nano_cancel_msg, 0, 0, 0, VIEW, 0);
|
||||
|
||||
|
||||
@@ -283,10 +349,13 @@ void shortcut_init(void)
|
||||
sc_init_one(&replace_list[2], NANO_CASE_KEY, _("Case Sens"),
|
||||
nano_case_msg, 0, 0, 0, VIEW, 0);
|
||||
|
||||
sc_init_one(&replace_list[3], NANO_OTHERSEARCH_KEY, _("To Search"),
|
||||
sc_init_one(&replace_list[3], NANO_OTHERSEARCH_KEY, _("No Replace"),
|
||||
nano_whereis_msg, 0, 0, 0, VIEW, do_search);
|
||||
|
||||
sc_init_one(&replace_list[4], NANO_CANCEL_KEY, _("Cancel"),
|
||||
sc_init_one(&replace_list[4], NANO_FROMSEARCHTOGOTO_KEY, _("Goto Line"),
|
||||
nano_goto_msg, 0, 0, 0, VIEW, do_gotoline_void);
|
||||
|
||||
sc_init_one(&replace_list[5], NANO_CANCEL_KEY, _("Cancel"),
|
||||
nano_cancel_msg, 0, 0, 0, VIEW, 0);
|
||||
|
||||
|
||||
@@ -325,4 +394,5 @@ void shortcut_init(void)
|
||||
sc_init_one(&spell_list[1], NANO_CANCEL_KEY, _("Cancel"),
|
||||
nano_cancel_msg, 0, 0, 0, VIEW, 0);
|
||||
|
||||
toggle_init();
|
||||
}
|
||||
|
||||
54
move.c
54
move.c
@@ -1,3 +1,4 @@
|
||||
/* $Id$ */
|
||||
/**************************************************************************
|
||||
* move.c *
|
||||
* *
|
||||
@@ -34,19 +35,15 @@
|
||||
|
||||
void page_down_center(void)
|
||||
{
|
||||
if (editbot->next != NULL && editbot->next != filebot) {
|
||||
edit_update(editbot->next);
|
||||
center_cursor();
|
||||
} else if (editbot != filebot) {
|
||||
edit_update(editbot);
|
||||
if (editbot != filebot) {
|
||||
edit_update(editbot->next, CENTER);
|
||||
center_cursor();
|
||||
} else {
|
||||
while (current != filebot)
|
||||
current = current->next;
|
||||
edit_update(current);
|
||||
edit_update(current, CENTER);
|
||||
}
|
||||
update_cursor();
|
||||
|
||||
}
|
||||
|
||||
int page_down(void)
|
||||
@@ -58,16 +55,23 @@ int page_down(void)
|
||||
if (current == filebot)
|
||||
return 0;
|
||||
|
||||
if (editbot != filebot) {
|
||||
if (editbot != filebot || edittop == fileage) {
|
||||
current_y = 0;
|
||||
current = editbot;
|
||||
} else
|
||||
current = editbot;
|
||||
|
||||
if (current->prev != NULL)
|
||||
current = current->prev;
|
||||
if (current->prev != NULL)
|
||||
current = current->prev;
|
||||
edit_update(current, TOP);
|
||||
} else {
|
||||
while (current != filebot) {
|
||||
current = current->next;
|
||||
current_y++;
|
||||
}
|
||||
edit_update(edittop, TOP);
|
||||
}
|
||||
|
||||
edit_update_top(current);
|
||||
update_cursor();
|
||||
UNSET(KEEP_CUTBUFFER);
|
||||
check_statblank();
|
||||
@@ -125,7 +129,7 @@ int do_down(void)
|
||||
void page_up_center(void)
|
||||
{
|
||||
if (edittop != fileage) {
|
||||
edit_update(edittop);
|
||||
edit_update(edittop, CENTER);
|
||||
center_cursor();
|
||||
} else
|
||||
current_y = 0;
|
||||
@@ -134,6 +138,32 @@ void page_up_center(void)
|
||||
|
||||
}
|
||||
|
||||
int page_up(void)
|
||||
{
|
||||
filestruct *fileptr = edittop;
|
||||
wrap_reset();
|
||||
current_x = 0;
|
||||
placewewant = 0;
|
||||
|
||||
if (current == fileage)
|
||||
return 0;
|
||||
|
||||
current_y = 0;
|
||||
if (fileptr->next != NULL)
|
||||
fileptr = fileptr->next;
|
||||
if (fileptr->next != NULL)
|
||||
fileptr = fileptr->next;
|
||||
|
||||
current = edittop;
|
||||
edit_update(fileptr, BOTTOM);
|
||||
update_cursor();
|
||||
|
||||
UNSET(KEEP_CUTBUFFER);
|
||||
check_statblank();
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
int do_up(void)
|
||||
{
|
||||
wrap_reset();
|
||||
|
||||
15
nano.1
15
nano.1
@@ -2,7 +2,7 @@
|
||||
.\" 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 "January 4, 2000"
|
||||
.TH NANO 1 "July 28, 2000"
|
||||
.\" Please adjust this date whenever revising the manpage.
|
||||
.\"
|
||||
.\" Some roff macros, for reference:
|
||||
@@ -40,7 +40,11 @@ number".
|
||||
.SH OPTIONS
|
||||
.TP
|
||||
.B \-T (\-\-tabsize)
|
||||
Set the size (width) of a tab, if supported by your curses library.
|
||||
Set the size (width) of a tab.
|
||||
.TP
|
||||
.B \-R (\-\-regexp)
|
||||
Enable regular expression matching for search strings, as well as
|
||||
\\n subexpression replacement for replace strings, if available.
|
||||
.TP
|
||||
.B \-V (\-\-version)
|
||||
Show the current version number and author.
|
||||
@@ -51,6 +55,9 @@ Display a summary of commandline options.
|
||||
.B \-c (\-\-const)
|
||||
Constantly show the cursor position.
|
||||
.TP
|
||||
.B \-k (\-\-cut)
|
||||
Enable cut from cursor to end of line with ^K.
|
||||
.TP
|
||||
.B \-i (\-\-autoindent)
|
||||
Indent new lines to the previous line's indentation. Useful when editing
|
||||
source code.
|
||||
@@ -87,13 +94,13 @@ Enable suspend ability.
|
||||
Places cursor at LINE on startup.
|
||||
.SH BUGS
|
||||
Please send any comments or bug reports to
|
||||
.B nano@asty.org.
|
||||
.B nano@nano-editor.org.
|
||||
The nano mailing list is available from
|
||||
.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.asty.org/nano
|
||||
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
|
||||
|
||||
19
nano.1.html
19
nano.1.html
@@ -3,7 +3,7 @@ Content-type: text/html
|
||||
<HTML><HEAD><TITLE>Manpage of NANO</TITLE>
|
||||
</HEAD><BODY>
|
||||
<H1>NANO</H1>
|
||||
Section: User Commands (1)<BR>Updated: January 4, 2000<BR><A HREF="#index">Index</A>
|
||||
Section: User Commands (1)<BR>Updated: July 28, 2000<BR><A HREF="#index">Index</A>
|
||||
<A HREF="http://localhost/cgi-bin/man/man2html">Return to Main Contents</A><HR>
|
||||
|
||||
|
||||
@@ -59,7 +59,12 @@ number".
|
||||
<DT><B>-T (--tabsize)</B>
|
||||
|
||||
<DD>
|
||||
Set the size (width) of a tab, if supported by your curses library.
|
||||
Set the size (width) of a tab.
|
||||
<DT><B>-R (--regexp)</B>
|
||||
|
||||
<DD>
|
||||
Enable regular expression matching for search strings, as well as
|
||||
\n subexpression replacement for replace strings, if available.
|
||||
<DT><B>-V (--version)</B>
|
||||
|
||||
<DD>
|
||||
@@ -72,6 +77,10 @@ Display a summary of commandline options.
|
||||
|
||||
<DD>
|
||||
Constantly show the cursor position.
|
||||
<DT><B>-k (--cut)</B>
|
||||
|
||||
<DD>
|
||||
Enable cut from cursor to end of line with ^K.
|
||||
<DT><B>-i (--autoindent)</B>
|
||||
|
||||
<DD>
|
||||
@@ -123,7 +132,7 @@ Places cursor at LINE on startup.
|
||||
<H2>BUGS</H2>
|
||||
|
||||
Please send any comments or bug reports to
|
||||
<B><A HREF="mailto:nano@asty.org">nano@asty.org</A>.</B>
|
||||
<B><A HREF="mailto:nano@nano-editor.org">nano@nano-editor.org</A>.</B>
|
||||
|
||||
The nano mailing list is available from
|
||||
<B><A HREF="mailto:nano-devel@lists.sourceforge.net">nano-devel@lists.sourceforge.net</A>.</B>
|
||||
@@ -133,7 +142,7 @@ subject of "subscribe".
|
||||
<A NAME="lbAG"> </A>
|
||||
<H2>HOMEPAGE</H2>
|
||||
|
||||
<A HREF="http://www.asty.org/nano">http://www.asty.org/nano</A>
|
||||
<A HREF="http://www.nano-editor.org">http://www.nano-editor.org</A>
|
||||
<A NAME="lbAH"> </A>
|
||||
<H2>AUTHOR</H2>
|
||||
|
||||
@@ -157,6 +166,6 @@ GNU/Linux system (but may be used by others).
|
||||
This document was created by
|
||||
<A HREF="http://localhost/cgi-bin/man/man2html">man2html</A>,
|
||||
using the manual pages.<BR>
|
||||
Time: 02:19:33 GMT, June 21, 2000
|
||||
Time: 17:29:02 GMT, July 28, 2000
|
||||
</BODY>
|
||||
</HTML>
|
||||
|
||||
46
nano.h
46
nano.h
@@ -1,3 +1,4 @@
|
||||
/* $Id$ */
|
||||
/**************************************************************************
|
||||
* nano.h *
|
||||
* *
|
||||
@@ -44,11 +45,6 @@
|
||||
#include <curses.h>
|
||||
#endif /* CURSES_H */
|
||||
|
||||
#ifndef HAVE_TABSIZE
|
||||
static int TABSIZE = 8;
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef HAVE_LIBINTL_H
|
||||
#include <libintl.h>
|
||||
#endif
|
||||
@@ -86,6 +82,14 @@ typedef struct shortcut {
|
||||
char *help; /* Help file entry text */
|
||||
} shortcut;
|
||||
|
||||
typedef struct toggle {
|
||||
int val; /* Sequence to toggle the key. Should only need 1 */
|
||||
char *desc; /* Description for when toggle is, uh, toggled,
|
||||
e.g. "Pico Messages", we'll append Enabled or
|
||||
Disabled */
|
||||
int flag; /* What flag actually gets toggled */
|
||||
} toggle;
|
||||
|
||||
/* Bitwise flags so we can save space (or more correctly, not waste it) */
|
||||
|
||||
#define MODIFIED (1<<0)
|
||||
@@ -102,7 +106,11 @@ typedef struct shortcut {
|
||||
#define SAMELINEWRAP (1<<11)
|
||||
#define VIEW_MODE (1<<12)
|
||||
#define USE_MOUSE (1<<13)
|
||||
|
||||
#define USE_REGEXP (1<<14)
|
||||
#define REGEXP_COMPILED (1<<15)
|
||||
#define TEMP_OPT (1<<16)
|
||||
#define CUT_TO_END (1<<17)
|
||||
#define DISABLE_CURPOS (1<<18)
|
||||
|
||||
/* Control key sequences, chaning these would be very very bad */
|
||||
|
||||
@@ -184,7 +192,7 @@ know what you're doing */
|
||||
#define NANO_REPLACE_KEY NANO_CONTROL_4
|
||||
#define NANO_REPLACE_FKEY KEY_F(14)
|
||||
#define NANO_ALT_REPLACE_KEY NANO_ALT_R
|
||||
#define NANO_OTHERSEARCH_KEY NANO_CONTROL_T
|
||||
#define NANO_OTHERSEARCH_KEY NANO_CONTROL_R
|
||||
#define NANO_PREVPAGE_KEY NANO_CONTROL_Y
|
||||
#define NANO_PREVPAGE_FKEY KEY_F(7)
|
||||
#define NANO_NEXTPAGE_KEY NANO_CONTROL_V
|
||||
@@ -216,17 +224,37 @@ know what you're doing */
|
||||
#define NANO_TAB_KEY NANO_CONTROL_I
|
||||
#define NANO_SUSPEND_KEY NANO_CONTROL_Z
|
||||
#define NANO_ENTER_KEY NANO_CONTROL_M
|
||||
#define NANO_FROMSEARCHTOGOTO_KEY NANO_CONTROL_T
|
||||
|
||||
#define TOGGLE_CONST_KEY NANO_ALT_C
|
||||
#define TOGGLE_AUTOINDENT_KEY NANO_ALT_I
|
||||
#define TOGGLE_SUSPEND_KEY NANO_ALT_Z
|
||||
#define TOGGLE_NOHELP_KEY NANO_ALT_X
|
||||
#define TOGGLE_PICOMODE_KEY NANO_ALT_P
|
||||
#define TOGGLE_MOUSE_KEY NANO_ALT_M
|
||||
#define TOGGLE_CUTTOEND_KEY NANO_ALT_K
|
||||
#define TOGGLE_REGEXP_KEY NANO_ALT_E
|
||||
#define TOGGLE_WRAP_KEY NANO_ALT_W
|
||||
|
||||
#define MAIN_LIST_LEN 26
|
||||
#define MAIN_VISIBLE 12
|
||||
#define WHEREIS_LIST_LEN 5
|
||||
#define REPLACE_LIST_LEN 5
|
||||
#define WHEREIS_LIST_LEN 6
|
||||
#define REPLACE_LIST_LEN 6
|
||||
#define GOTO_LIST_LEN 3
|
||||
#define WRITEFILE_LIST_LEN 1
|
||||
#define HELP_LIST_LEN 3
|
||||
#define SPELL_LIST_LEN 3
|
||||
|
||||
#ifdef HAVE_REGEX_H
|
||||
#define TOGGLE_LEN 9
|
||||
#else
|
||||
#define TOGGLE_LEN 8
|
||||
#endif
|
||||
|
||||
#define VIEW 1
|
||||
#define NOVIEW 0
|
||||
|
||||
#define TOP 2
|
||||
#define CENTER 1
|
||||
#define BOTTOM 0
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
$Id$
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
# $Id$
|
||||
# Makefile for program source directory in GNU NLS utilities package.
|
||||
# Copyright (C) 1995, 1996, 1997 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
|
||||
#
|
||||
@@ -111,9 +112,9 @@ install-data: install-data-@USE_NLS@
|
||||
install-data-no: all
|
||||
install-data-yes: all
|
||||
if test -r "$(MKINSTALLDIRS)"; then \
|
||||
$(MKINSTALLDIRS) $(datadir); \
|
||||
$(MKINSTALLDIRS) $(DESTDIR)$(datadir); \
|
||||
else \
|
||||
$(SHELL) $(top_srcdir)/mkinstalldirs $(datadir); \
|
||||
$(SHELL) $(top_srcdir)/mkinstalldirs $(DESTDIR)$(datadir); \
|
||||
fi
|
||||
@catalogs='$(CATALOGS)'; \
|
||||
for cat in $$catalogs; do \
|
||||
@@ -125,27 +126,30 @@ install-data-yes: all
|
||||
lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
|
||||
dir=$$destdir/$$lang/LC_MESSAGES; \
|
||||
if test -r "$(MKINSTALLDIRS)"; then \
|
||||
$(MKINSTALLDIRS) $$dir; \
|
||||
$(MKINSTALLDIRS) $(DESTDIR)$$dir; \
|
||||
else \
|
||||
$(SHELL) $(top_srcdir)/mkinstalldirs $$dir; \
|
||||
$(SHELL) $(top_srcdir)/mkinstalldirs $(DESTDIR)$$dir; \
|
||||
fi; \
|
||||
if test -r $$cat; then \
|
||||
$(INSTALL_DATA) $$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \
|
||||
echo "installing $$cat as $$dir/$(PACKAGE)$(INSTOBJEXT)"; \
|
||||
$(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE)$(INSTOBJEXT); \
|
||||
echo "installing $$cat as" \
|
||||
"$(DESTDIR)$$dir/$(PACKAGE)$(INSTOBJEXT)"; \
|
||||
else \
|
||||
$(INSTALL_DATA) $(srcdir)/$$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \
|
||||
$(INSTALL_DATA) $(srcdir)/$$cat \
|
||||
$(DESTDIR)$$dir/$(PACKAGE)$(INSTOBJEXT); \
|
||||
echo "installing $(srcdir)/$$cat as" \
|
||||
"$$dir/$(PACKAGE)$(INSTOBJEXT)"; \
|
||||
"$(DESTDIR)$$dir/$(PACKAGE)$(INSTOBJEXT)"; \
|
||||
fi; \
|
||||
if test -r $$cat.m; then \
|
||||
$(INSTALL_DATA) $$cat.m $$dir/$(PACKAGE)$(INSTOBJEXT).m; \
|
||||
echo "installing $$cat.m as $$dir/$(PACKAGE)$(INSTOBJEXT).m"; \
|
||||
$(INSTALL_DATA) $$cat.m $(DESTDIR)$$dir/$(PACKAGE)$(INSTOBJEXT).m; \
|
||||
echo "installing $$cat.m as" \
|
||||
"$(DESTDIR)$$dir/$(PACKAGE)$(INSTOBJEXT).m"; \
|
||||
else \
|
||||
if test -r $(srcdir)/$$cat.m ; then \
|
||||
$(INSTALL_DATA) $(srcdir)/$$cat.m \
|
||||
$$dir/$(PACKAGE)$(INSTOBJEXT).m; \
|
||||
$(DESTDIR)$$dir/$(PACKAGE)$(INSTOBJEXT).m; \
|
||||
echo "installing $(srcdir)/$$cat as" \
|
||||
"$$dir/$(PACKAGE)$(INSTOBJEXT).m"; \
|
||||
"$(DESTDIR)$$dir/$(PACKAGE)$(INSTOBJEXT).m"; \
|
||||
else \
|
||||
true; \
|
||||
fi; \
|
||||
@@ -153,12 +157,12 @@ install-data-yes: all
|
||||
done
|
||||
if test "$(PACKAGE)" = "gettext"; then \
|
||||
if test -r "$(MKINSTALLDIRS)"; then \
|
||||
$(MKINSTALLDIRS) $(gettextsrcdir); \
|
||||
$(MKINSTALLDIRS) $(DESTDIR)$(gettextsrcdir); \
|
||||
else \
|
||||
$(SHELL) $(top_srcdir)/mkinstalldirs $(gettextsrcdir); \
|
||||
$(SHELL) $(top_srcdir)/mkinstalldirs $(DESTDIR)$(gettextsrcdir); \
|
||||
fi; \
|
||||
$(INSTALL_DATA) $(srcdir)/Makefile.in.in \
|
||||
$(gettextsrcdir)/Makefile.in.in; \
|
||||
$(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \
|
||||
else \
|
||||
: ; \
|
||||
fi
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
# $Id$
|
||||
# List of source files containing translatable strings.
|
||||
|
||||
# Package source files
|
||||
|
||||
349
po/cat-id-tbl.c
349
po/cat-id-tbl.c
@@ -28,72 +28,80 @@ const struct _msg_ent _msg_tbl[] = {
|
||||
{"File Name to write", 19},
|
||||
{"filename is %s", 20},
|
||||
{"File exists, OVERWRITE ?", 21},
|
||||
{"Invoke the help menu", 22},
|
||||
{"Write the current file to disk", 23},
|
||||
{"Exit from nano", 24},
|
||||
{"Goto a specific line number", 25},
|
||||
{"Justify the current paragraph", 26},
|
||||
{"Replace text within the editor", 27},
|
||||
{"Insert another file into the current one", 28},
|
||||
{"Search for text within the editor", 29},
|
||||
{"Move to the previous screen", 30},
|
||||
{"Move to the next screen", 31},
|
||||
{"Cut the current line and store it in the cutbuffer", 32},
|
||||
{"Uncut from the cutbuffer into the current line", 33},
|
||||
{"Show the posititon of the cursor", 34},
|
||||
{"Invoke the spell checker (if available)", 35},
|
||||
{"Move up one line", 36},
|
||||
{"Move down one line", 37},
|
||||
{"Move forward one character", 38},
|
||||
{"Move back one character", 39},
|
||||
{"Move to the beginning of the current line", 40},
|
||||
{"Move to the end of the current line", 41},
|
||||
{"Go to the first line of the file", 42},
|
||||
{"Go to the last line of the file", 43},
|
||||
{"Refresh (redraw) the current screen", 44},
|
||||
{"Mark text at the current cursor location", 45},
|
||||
{"Delete the character under the cursor", 46},
|
||||
{"Delete the character to the left of the cursor", 47},
|
||||
{"Insert a tab character", 48},
|
||||
{"Insert a carriage return at the cursor position", 49},
|
||||
{"Make the current search or replace case (in)sensitive", 50},
|
||||
{"Cancel the current function", 51},
|
||||
{"Get Help", 52},
|
||||
{"WriteOut", 53},
|
||||
{"Exit", 54},
|
||||
{"Goto Line", 55},
|
||||
{"Justify", 56},
|
||||
{"Replace", 57},
|
||||
{"Read File", 58},
|
||||
{"Where Is", 59},
|
||||
{"Prev Page", 60},
|
||||
{"Next Page", 61},
|
||||
{"Cut Text", 62},
|
||||
{"UnCut Txt", 63},
|
||||
{"Cur Pos", 64},
|
||||
{"To Spell", 65},
|
||||
{"Up", 66},
|
||||
{"Down", 67},
|
||||
{"Forward", 68},
|
||||
{"Back", 69},
|
||||
{"Home", 70},
|
||||
{"End", 71},
|
||||
{"Refresh", 72},
|
||||
{"Mark Text", 73},
|
||||
{"Delete", 74},
|
||||
{"Backspace", 75},
|
||||
{"Tab", 76},
|
||||
{"Enter", 77},
|
||||
{"First Line", 78},
|
||||
{"Last Line", 79},
|
||||
{"Case Sens", 80},
|
||||
{"To Replace", 81},
|
||||
{"Cancel", 82},
|
||||
{"To Search", 83},
|
||||
{"Constant cursor position", 22},
|
||||
{"Auto indent", 23},
|
||||
{"Suspend", 24},
|
||||
{"Help mode", 25},
|
||||
{"Pico messages", 26},
|
||||
{"Mouse support", 27},
|
||||
{"Cut to end", 28},
|
||||
{"Regular expressions", 29},
|
||||
{"Auto wrap", 30},
|
||||
{"Invoke the help menu", 31},
|
||||
{"Write the current file to disk", 32},
|
||||
{"Exit from nano", 33},
|
||||
{"Goto a specific line number", 34},
|
||||
{"Justify the current paragraph", 35},
|
||||
{"Replace text within the editor", 36},
|
||||
{"Insert another file into the current one", 37},
|
||||
{"Search for text within the editor", 38},
|
||||
{"Move to the previous screen", 39},
|
||||
{"Move to the next screen", 40},
|
||||
{"Cut the current line and store it in the cutbuffer", 41},
|
||||
{"Uncut from the cutbuffer into the current line", 42},
|
||||
{"Show the posititon of the cursor", 43},
|
||||
{"Invoke the spell checker (if available)", 44},
|
||||
{"Move up one line", 45},
|
||||
{"Move down one line", 46},
|
||||
{"Move forward one character", 47},
|
||||
{"Move back one character", 48},
|
||||
{"Move to the beginning of the current line", 49},
|
||||
{"Move to the end of the current line", 50},
|
||||
{"Go to the first line of the file", 51},
|
||||
{"Go to the last line of the file", 52},
|
||||
{"Refresh (redraw) the current screen", 53},
|
||||
{"Mark text at the current cursor location", 54},
|
||||
{"Delete the character under the cursor", 55},
|
||||
{"Delete the character to the left of the cursor", 56},
|
||||
{"Insert a tab character", 57},
|
||||
{"Insert a carriage return at the cursor position", 58},
|
||||
{"Make the current search or replace case (in)sensitive", 59},
|
||||
{"Cancel the current function", 60},
|
||||
{"Get Help", 61},
|
||||
{"WriteOut", 62},
|
||||
{"Exit", 63},
|
||||
{"Goto Line", 64},
|
||||
{"Justify", 65},
|
||||
{"Replace", 66},
|
||||
{"Read File", 67},
|
||||
{"Where Is", 68},
|
||||
{"Prev Page", 69},
|
||||
{"Next Page", 70},
|
||||
{"Cut Text", 71},
|
||||
{"UnCut Txt", 72},
|
||||
{"Cur Pos", 73},
|
||||
{"To Spell", 74},
|
||||
{"Up", 75},
|
||||
{"Down", 76},
|
||||
{"Forward", 77},
|
||||
{"Back", 78},
|
||||
{"Home", 79},
|
||||
{"End", 80},
|
||||
{"Refresh", 81},
|
||||
{"Mark Text", 82},
|
||||
{"Delete", 83},
|
||||
{"Backspace", 84},
|
||||
{"Tab", 85},
|
||||
{"Enter", 86},
|
||||
{"First Line", 87},
|
||||
{"Last Line", 88},
|
||||
{"Case Sens", 89},
|
||||
{"Cancel", 90},
|
||||
{"No Replace", 91},
|
||||
{"\
|
||||
\n\
|
||||
Buffer written to 'nano.save'\n", 84},
|
||||
{"Key illegal in VIEW mode", 85},
|
||||
Buffer written to 'nano.save'\n", 92},
|
||||
{"Key illegal in VIEW mode", 93},
|
||||
{"\
|
||||
nano help text\n\
|
||||
\n\
|
||||
@@ -106,111 +114,122 @@ 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. Alt-key sequences are notated with an at (@) \
|
||||
symbol. The following keystrokes are available in the main editor window. \
|
||||
Optional keys are shown in parentheses:\n\
|
||||
\n", 86},
|
||||
{"free_node(): free'd a node, YAY!\n", 87},
|
||||
{"free_node(): free'd last node.\n", 88},
|
||||
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", 94},
|
||||
{"free_node(): free'd a node, YAY!\n", 95},
|
||||
{"free_node(): free'd last node.\n", 96},
|
||||
{"\
|
||||
Usage: nano [GNU long option] [option] +LINE <file>\n\
|
||||
\n", 89},
|
||||
{"Option\t\tLong option\t\tMeaning\n", 90},
|
||||
{" -T \t\t--tabsize=[num]\t\tSet width of a tab to num\n", 91},
|
||||
{" -V \t\t--version\t\tPrint version information and exit\n", 92},
|
||||
{" -c \t\t--const\t\t\tConstantly show cursor position\n", 93},
|
||||
{" -h \t\t--help\t\t\tShow this message\n", 94},
|
||||
{" -i \t\t--autoindent\t\tAutomatically indent new lines\n", 95},
|
||||
{" -l \t\t--nofollow\t\tDon't follow symbolic links, overwrite.\n", 96},
|
||||
{" -m \t\t--mouse\t\t\tEnable mouse\n", 97},
|
||||
\n", 97},
|
||||
{"Option\t\tLong option\t\tMeaning\n", 98},
|
||||
{" -T \t\t--tabsize=[num]\t\tSet width of a tab to num\n", 99},
|
||||
{" -R\t\t--regexp\t\tUse regular expressions for search\n", 100},
|
||||
{" -V \t\t--version\t\tPrint version information and exit\n", 101},
|
||||
{" -c \t\t--const\t\t\tConstantly show cursor position\n", 102},
|
||||
{" -h \t\t--help\t\t\tShow this message\n", 103},
|
||||
{" -k \t\t--cut\t\t\tLet ^K cut from cursor to end of line\n", 104},
|
||||
{" -i \t\t--autoindent\t\tAutomatically indent new lines\n", 105},
|
||||
{" -l \t\t--nofollow\t\tDon't follow symbolic links, overwrite\n", 106},
|
||||
{" -m \t\t--mouse\t\t\tEnable mouse\n", 107},
|
||||
{"\
|
||||
-r [#cols] \t--fill=[#cols]\t\tSet fill cols to (wrap lines at) #cols\n", 98},
|
||||
{" -p\t \t--pico\t\t\tMake bottom 2 lines more Pico-like\n", 99},
|
||||
{" -s [prog] \t--speller=[prog]\tEnable alternate speller\n", 100},
|
||||
{" -t \t\t--tempfile\t\tAuto save on exit, don't prompt\n", 101},
|
||||
{" -v \t\t--view\t\t\tView (read only) mode\n", 102},
|
||||
{" -w \t\t--nowrap\t\tDon't wrap long lines\n", 103},
|
||||
{" -x \t\t--nohelp\t\tDon't show help window\n", 104},
|
||||
{" -z \t\t--suspend\t\tEnable suspend\n", 105},
|
||||
{" +LINE\t\t\t\t\tStart at line number LINE\n", 106},
|
||||
-r [#cols] \t--fill=[#cols]\t\tSet fill cols to (wrap lines at) #cols\n", 108},
|
||||
{" -p\t \t--pico\t\t\tMake bottom 2 lines more Pico-like\n", 109},
|
||||
{" -s [prog] \t--speller=[prog]\tEnable alternate speller\n", 110},
|
||||
{" -t \t\t--tempfile\t\tAuto save on exit, don't prompt\n", 111},
|
||||
{" -v \t\t--view\t\t\tView (read only) mode\n", 112},
|
||||
{" -w \t\t--nowrap\t\tDon't wrap long lines\n", 113},
|
||||
{" -x \t\t--nohelp\t\tDon't show help window\n", 114},
|
||||
{" -z \t\t--suspend\t\tEnable suspend\n", 115},
|
||||
{" +LINE\t\t\t\t\tStart at line number LINE\n", 116},
|
||||
{"\
|
||||
Usage: nano [option] +LINE <file>\n\
|
||||
\n", 107},
|
||||
{"Option\t\tMeaning\n", 108},
|
||||
{" -T [num]\tSet width of a tab to num\n", 109},
|
||||
{" -V \t\tPrint version information and exit\n", 110},
|
||||
{" -c \t\tConstantly show cursor position\n", 111},
|
||||
{" -h \t\tShow this message\n", 112},
|
||||
{" -i \t\tAutomatically indent new lines\n", 113},
|
||||
{" -l \t\tDon't follow symbolic links, overwrite.\n", 114},
|
||||
{" -m \t\tEnable mouse\n", 115},
|
||||
{" -r [#cols] \tSet fill cols to (wrap lines at) #cols\n", 116},
|
||||
{" -s [prog] \tEnable alternate speller\n", 117},
|
||||
{" -p \t\tMake bottom 2 lines more Pico-like\n", 118},
|
||||
{" -t \t\tAuto save on exit, don't prompt\n", 119},
|
||||
{" -v \t\tView (read only) mode\n", 120},
|
||||
{" -w \t\tDon't wrap long lines\n", 121},
|
||||
{" -x \t\tDon't show help window\n", 122},
|
||||
{" -z \t\tEnable suspend\n", 123},
|
||||
{" +LINE\t\tStart at line number LINE\n", 124},
|
||||
{" nano version %s by Chris Allegretta (compiled %s, %s)\n", 125},
|
||||
{" Email: nano@asty.org\tWeb: http://www.asty.org/nano\n", 126},
|
||||
{"Mark Set", 127},
|
||||
{"Mark UNset", 128},
|
||||
{"check_wrap called with inptr->data=\"%s\"\n", 129},
|
||||
{"current->data now = \"%s\"\n", 130},
|
||||
{"After, data = \"%s\"\n", 131},
|
||||
{"Error deleting tempfile, ack!", 132},
|
||||
{"Could not create a temporary filename: %s", 133},
|
||||
{"Could not invoke spell program \"%s\"", 134},
|
||||
{"Could not invoke \"ispell\"", 135},
|
||||
{"Finished checking spelling", 136},
|
||||
{"Save modified buffer (ANSWERING \"No\" WILL DESTROY CHANGES) ? ", 137},
|
||||
{"Cannot resize top win", 138},
|
||||
{"Cannot move top win", 139},
|
||||
{"Cannot resize edit win", 140},
|
||||
{"Cannot move edit win", 141},
|
||||
{"Cannot resize bottom win", 142},
|
||||
{"Cannot move bottom win", 143},
|
||||
{"Main: set up windows\n", 144},
|
||||
{"Main: bottom win\n", 145},
|
||||
{"Main: open file\n", 146},
|
||||
{"I got Alt-[-%c! (%d)\n", 147},
|
||||
{"I got Alt-%c! (%d)\n", 148},
|
||||
{"Case Sensitive Search%s", 149},
|
||||
{"Search%s", 150},
|
||||
{"Search Cancelled", 151},
|
||||
{"Search Wrapped", 152},
|
||||
{"Replaced %d occurences", 153},
|
||||
{"Replaced 1 occurence", 154},
|
||||
{"Replace Cancelled", 155},
|
||||
{"Replace with [%s]", 156},
|
||||
{"Replace with", 157},
|
||||
{"Replace this instance?", 158},
|
||||
{"Enter line number", 159},
|
||||
{"Aborted", 160},
|
||||
{"Come on, be reasonable", 161},
|
||||
{"Only %d lines available, skipping to last line", 162},
|
||||
{"actual_x_from_start for xplus=%d returned %d\n", 163},
|
||||
{"input '%c' (%d)\n", 164},
|
||||
{"New Buffer", 165},
|
||||
{" File: ...", 166},
|
||||
{"Modified", 167},
|
||||
{"Moved to (%d, %d) in edit buffer\n", 168},
|
||||
{"current->data = \"%s\"\n", 169},
|
||||
{"I got \"%s\"\n", 170},
|
||||
{" Y", 171},
|
||||
{"Yes", 172},
|
||||
{" A", 173},
|
||||
{"All", 174},
|
||||
{" N", 175},
|
||||
{"No", 176},
|
||||
{"^C", 177},
|
||||
{"do_cursorpos: linepct = %f, bytepct = %f\n", 178},
|
||||
{"line %d of %d (%.0f%%), character %d of %d (%.0f%%)", 179},
|
||||
{"Dumping file buffer to stderr...\n", 180},
|
||||
{"Dumping cutbuffer to stderr...\n", 181},
|
||||
{"Dumping a buffer to stderr...\n", 182},
|
||||
\n", 117},
|
||||
{"Option\t\tMeaning\n", 118},
|
||||
{" -T [num]\tSet width of a tab to num\n", 119},
|
||||
{" -R\t\tUse regular expressions for search\n", 120},
|
||||
{" -V \t\tPrint version information and exit\n", 121},
|
||||
{" -c \t\tConstantly show cursor position\n", 122},
|
||||
{" -h \t\tShow this message\n", 123},
|
||||
{" -k \t\tLet ^K cut from cursor to end of line\n", 124},
|
||||
{" -i \t\tAutomatically indent new lines\n", 125},
|
||||
{" -l \t\tDon't follow symbolic links, overwrite\n", 126},
|
||||
{" -m \t\tEnable mouse\n", 127},
|
||||
{" -r [#cols] \tSet fill cols to (wrap lines at) #cols\n", 128},
|
||||
{" -s [prog] \tEnable alternate speller\n", 129},
|
||||
{" -p \t\tMake bottom 2 lines more Pico-like\n", 130},
|
||||
{" -t \t\tAuto save on exit, don't prompt\n", 131},
|
||||
{" -v \t\tView (read only) mode\n", 132},
|
||||
{" -w \t\tDon't wrap long lines\n", 133},
|
||||
{" -x \t\tDon't show help window\n", 134},
|
||||
{" -z \t\tEnable suspend\n", 135},
|
||||
{" +LINE\t\tStart at line number LINE\n", 136},
|
||||
{" nano version %s by Chris Allegretta (compiled %s, %s)\n", 137},
|
||||
{" Email: nano@nano-editor.org\tWeb: http://www.nano-editor.org\n", 138},
|
||||
{"Mark Set", 139},
|
||||
{"Mark UNset", 140},
|
||||
{"check_wrap called with inptr->data=\"%s\"\n", 141},
|
||||
{"current->data now = \"%s\"\n", 142},
|
||||
{"After, data = \"%s\"\n", 143},
|
||||
{"Error deleting tempfile, ack!", 144},
|
||||
{"Could not create a temporary filename: %s", 145},
|
||||
{"Could not invoke spell program \"%s\"", 146},
|
||||
{"Could not invoke \"ispell\"", 147},
|
||||
{"Finished checking spelling", 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},
|
||||
{"%s enable/disable", 156},
|
||||
{"enabled", 157},
|
||||
{"disabled", 158},
|
||||
{"Main: set up windows\n", 159},
|
||||
{"Main: bottom win\n", 160},
|
||||
{"Main: open file\n", 161},
|
||||
{"I got Alt-O-%c! (%d)\n", 162},
|
||||
{"I got Alt-[-1-%c! (%d)\n", 163},
|
||||
{"I got Alt-[-2-%c! (%d)\n", 164},
|
||||
{"I got Alt-[-%c! (%d)\n", 165},
|
||||
{"I got Alt-%c! (%d)\n", 166},
|
||||
{"Case Sensitive Regexp Search%s%s", 167},
|
||||
{"Regexp Search%s%s", 168},
|
||||
{"Case Sensitive Search%s%s", 169},
|
||||
{"Search%s%s", 170},
|
||||
{" (to replace)", 171},
|
||||
{"Search Cancelled", 172},
|
||||
{"Search Wrapped", 173},
|
||||
{"Replaced %d occurences", 174},
|
||||
{"Replaced 1 occurence", 175},
|
||||
{"Replace Cancelled", 176},
|
||||
{"Replace with [%s]", 177},
|
||||
{"Replace with", 178},
|
||||
{"Replace this instance?", 179},
|
||||
{"Enter line number", 180},
|
||||
{"Aborted", 181},
|
||||
{"Come on, be reasonable", 182},
|
||||
{"Only %d lines available, skipping to last line", 183},
|
||||
{"actual_x_from_start for xplus=%d returned %d\n", 184},
|
||||
{"input '%c' (%d)\n", 185},
|
||||
{"New Buffer", 186},
|
||||
{" File: ...", 187},
|
||||
{"Modified", 188},
|
||||
{"Moved to (%d, %d) in edit buffer\n", 189},
|
||||
{"current->data = \"%s\"\n", 190},
|
||||
{"I got \"%s\"\n", 191},
|
||||
{"Yes", 192},
|
||||
{"All", 193},
|
||||
{"No", 194},
|
||||
{"do_cursorpos: linepct = %f, bytepct = %f\n", 195},
|
||||
{"line %d of %d (%.0f%%), character %d of %d (%.0f%%)", 196},
|
||||
{"Dumping file buffer to stderr...\n", 197},
|
||||
{"Dumping cutbuffer to stderr...\n", 198},
|
||||
{"Dumping a buffer to stderr...\n", 199},
|
||||
};
|
||||
|
||||
int _msg_tbl_length = 182;
|
||||
int _msg_tbl_length = 199;
|
||||
|
||||
915
po/fi.po
Normal file
915
po/fi.po
Normal file
@@ -0,0 +1,915 @@
|
||||
# $Id$
|
||||
# nano Finnish Translation.
|
||||
# Copyright (C) 2000 Free Software Foundation, Inc.
|
||||
# Pauli Virtanen <pauli.virtanen@saunalahti.fi>, 2000.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: nano 0.9.11\n"
|
||||
"POT-Creation-Date: 2000-10-02 00:28-0400\n"
|
||||
"PO-Revision-Date: 2000-06-21 23:08+03:00\n"
|
||||
"Last-Translator: Pauli Virtanen <pauli.virtanen@saunalahti.fi>\n"
|
||||
"Language-Team: Finnish <fi@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=iso-8859-15\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: cut.c:44
|
||||
#, c-format
|
||||
msgid "add_to_cutbuffer called with inptr->data = %s\n"
|
||||
msgstr "add_to_cutbuffer funktion parametri inptr->data = %s\n"
|
||||
|
||||
#: cut.c:150
|
||||
msgid "Blew away cutbuffer =)\n"
|
||||
msgstr "Leiketila katosi =)\n"
|
||||
|
||||
#: files.c:120
|
||||
msgid "read_line: not on first line and prev is NULL"
|
||||
msgstr "read_line: ei ensimmäisellä rivillä ja prev on NULL"
|
||||
|
||||
#: files.c:182 files.c:199
|
||||
#, c-format
|
||||
msgid "Read %d lines"
|
||||
msgstr "%d riviä luettu"
|
||||
|
||||
#: files.c:217 search.c:177
|
||||
#, c-format
|
||||
msgid "\"%s\" not found"
|
||||
msgstr "Tiedostoa \"%s\" ei ole"
|
||||
|
||||
#. We have a new file
|
||||
#: files.c:221
|
||||
msgid "New File"
|
||||
msgstr "Uusi tiedosto"
|
||||
|
||||
#: files.c:230
|
||||
#, c-format
|
||||
msgid "File \"%s\" is a directory"
|
||||
msgstr "\"%s\" on hakemisto"
|
||||
|
||||
#: files.c:236
|
||||
msgid "Reading File"
|
||||
msgstr "Tiedostoa luetaan"
|
||||
|
||||
#: files.c:249
|
||||
msgid "File to insert [from ./] "
|
||||
msgstr "Lisättävä tiedosto [hakemistossa ./]"
|
||||
|
||||
#: files.c:274 files.c:298 files.c:488 nano.c:1133
|
||||
msgid "Cancelled"
|
||||
msgstr "Peruttu"
|
||||
|
||||
#: files.c:320 files.c:340 files.c:353 files.c:370 files.c:376
|
||||
#, c-format
|
||||
msgid "Could not open file for writing: %s"
|
||||
msgstr "Tiedostoa ei voitu avata luettavaksi: %s"
|
||||
|
||||
#: files.c:328
|
||||
msgid "Could not open file: Path length exceeded."
|
||||
msgstr "Tiedostoa ei voitu avata: liian pitkä tiedostonnimi."
|
||||
|
||||
#: files.c:358
|
||||
#, c-format
|
||||
msgid "Wrote >%s\n"
|
||||
msgstr "Kirjoitettu: >%s\n"
|
||||
|
||||
#: files.c:385
|
||||
#, c-format
|
||||
msgid "Could not close %s: %s"
|
||||
msgstr "Tiedosto %s ei sulkeutunut: %s"
|
||||
|
||||
#. Try a rename??
|
||||
#: files.c:406 files.c:417 files.c:422
|
||||
#, c-format
|
||||
msgid "Could not open %s for writing: %s"
|
||||
msgstr "Tiedostoa %s ei voitu avata kirjoitettavaksi: %s"
|
||||
|
||||
#: files.c:428
|
||||
#, c-format
|
||||
msgid "Could not set permissions %o on %s: %s"
|
||||
msgstr "Oikeuksia %o ei voitu asettaa tiedostolle %s: %s"
|
||||
|
||||
#: files.c:435
|
||||
#, c-format
|
||||
msgid "Wrote %d lines"
|
||||
msgstr "%d riviä kirjoitettu"
|
||||
|
||||
#: files.c:467
|
||||
msgid "File Name to write"
|
||||
msgstr "Kirjoitettavan tiedoston nimi"
|
||||
|
||||
#: files.c:472
|
||||
#, c-format
|
||||
msgid "filename is %s"
|
||||
msgstr "tiedoston nimi on %s"
|
||||
|
||||
#: files.c:477
|
||||
msgid "File exists, OVERWRITE ?"
|
||||
msgstr "Tiedosto on jo olemassa, korvataanko?"
|
||||
|
||||
#: global.c:120
|
||||
#, fuzzy
|
||||
msgid "Constant cursor position"
|
||||
msgstr " -c \t\tNäytä kohdistimen sijainti jatkuvasti\n"
|
||||
|
||||
#: global.c:121
|
||||
#, fuzzy
|
||||
msgid "Auto indent"
|
||||
msgstr "Siirry"
|
||||
|
||||
#: global.c:122
|
||||
msgid "Suspend"
|
||||
msgstr ""
|
||||
|
||||
#: global.c:123
|
||||
msgid "Help mode"
|
||||
msgstr ""
|
||||
|
||||
#: global.c:124
|
||||
msgid "Pico messages"
|
||||
msgstr ""
|
||||
|
||||
#: global.c:125
|
||||
msgid "Mouse support"
|
||||
msgstr ""
|
||||
|
||||
#: global.c:126
|
||||
msgid "Cut to end"
|
||||
msgstr ""
|
||||
|
||||
#: global.c:128
|
||||
msgid "Regular expressions"
|
||||
msgstr ""
|
||||
|
||||
#: global.c:130
|
||||
msgid "Auto wrap"
|
||||
msgstr ""
|
||||
|
||||
#: global.c:172
|
||||
msgid "Invoke the help menu"
|
||||
msgstr "Avaa ohjevalikko"
|
||||
|
||||
#: global.c:173
|
||||
msgid "Write the current file to disk"
|
||||
msgstr "Kirjoita nykyinen tiedosto levylle"
|
||||
|
||||
#: global.c:174
|
||||
msgid "Exit from nano"
|
||||
msgstr "Poistu nanosta"
|
||||
|
||||
#: global.c:175
|
||||
msgid "Goto a specific line number"
|
||||
msgstr "Siirry tietylle riville"
|
||||
|
||||
#: global.c:176
|
||||
msgid "Justify the current paragraph"
|
||||
msgstr "Tasaa nykyinen kappale"
|
||||
|
||||
#: global.c:177
|
||||
msgid "Replace text within the editor"
|
||||
msgstr "Etsi ja korvaa tekstiä"
|
||||
|
||||
#: global.c:178
|
||||
msgid "Insert another file into the current one"
|
||||
msgstr "Lisää toinen tiedosto nykyiseen tiedostoon"
|
||||
|
||||
#: global.c:179
|
||||
msgid "Search for text within the editor"
|
||||
msgstr "Etsi tekstiä"
|
||||
|
||||
#: global.c:180
|
||||
msgid "Move to the previous screen"
|
||||
msgstr "Siirry edelliseen ruutuun"
|
||||
|
||||
#: global.c:181
|
||||
msgid "Move to the next screen"
|
||||
msgstr "Siirry seuraavaan ruutuun"
|
||||
|
||||
#: global.c:182
|
||||
msgid "Cut the current line and store it in the cutbuffer"
|
||||
msgstr "Leikkaa nykyinen rivi leiketilaan"
|
||||
|
||||
#: global.c:183
|
||||
msgid "Uncut from the cutbuffer into the current line"
|
||||
msgstr "Kopioi rivi leiketilasta nykyiselle riville"
|
||||
|
||||
#: global.c:184
|
||||
msgid "Show the posititon of the cursor"
|
||||
msgstr "Näytä kohdistimen sijainti"
|
||||
|
||||
#: global.c:185
|
||||
msgid "Invoke the spell checker (if available)"
|
||||
msgstr "Käynnistä oikoluin (jos saatavilla)"
|
||||
|
||||
#: global.c:186
|
||||
msgid "Move up one line"
|
||||
msgstr "Siirry yksi rivi ylöspäin"
|
||||
|
||||
#: global.c:187
|
||||
msgid "Move down one line"
|
||||
msgstr "Siirry yksi rivi alaspäin"
|
||||
|
||||
#: global.c:188
|
||||
msgid "Move forward one character"
|
||||
msgstr "Siirry yksi merkki eteenpäin"
|
||||
|
||||
#: global.c:189
|
||||
msgid "Move back one character"
|
||||
msgstr "Siirry yksi merkki taaksepäin"
|
||||
|
||||
#: global.c:190
|
||||
msgid "Move to the beginning of the current line"
|
||||
msgstr "Siirry nykyisen rivin alkuun"
|
||||
|
||||
#: global.c:191
|
||||
msgid "Move to the end of the current line"
|
||||
msgstr "Siirry nykyisen rivin loppuun"
|
||||
|
||||
#: global.c:192
|
||||
msgid "Go to the first line of the file"
|
||||
msgstr "Siirry tiedoston ensimmäiselle riville"
|
||||
|
||||
#: global.c:193
|
||||
msgid "Go to the last line of the file"
|
||||
msgstr "Siirry tiedoston viimeiselle riville"
|
||||
|
||||
#: global.c:194
|
||||
msgid "Refresh (redraw) the current screen"
|
||||
msgstr "Piirrä ruutu uudestaan"
|
||||
|
||||
#: global.c:195
|
||||
msgid "Mark text at the current cursor location"
|
||||
msgstr "Merkitse kohdistimen kohdalla oleva teksti"
|
||||
|
||||
#: global.c:196
|
||||
msgid "Delete the character under the cursor"
|
||||
msgstr "Poista kohdistimen kohdalla oleva merkki"
|
||||
|
||||
#: global.c:198
|
||||
msgid "Delete the character to the left of the cursor"
|
||||
msgstr "Poista kohdistimesta vasemmalle oleva merkki"
|
||||
|
||||
#: global.c:199
|
||||
msgid "Insert a tab character"
|
||||
msgstr "Lisää sarkainmerkki"
|
||||
|
||||
#: global.c:200
|
||||
msgid "Insert a carriage return at the cursor position"
|
||||
msgstr "Lisää rivinvaihto kohdistimen kohdalle"
|
||||
|
||||
#: global.c:202
|
||||
msgid "Make the current search or replace case (in)sensitive"
|
||||
msgstr "Muuta etsintä- tai korvaustoiminnon kirjainkoosta piittaamista."
|
||||
|
||||
#: global.c:203
|
||||
msgid "Cancel the current function"
|
||||
msgstr "Peru nykyinen toiminto."
|
||||
|
||||
#: global.c:207 global.c:319 global.c:391
|
||||
msgid "Get Help"
|
||||
msgstr "Ohjeita"
|
||||
|
||||
#: global.c:210 global.c:218
|
||||
msgid "WriteOut"
|
||||
msgstr "Kirjoita"
|
||||
|
||||
#: global.c:214 global.c:380
|
||||
msgid "Exit"
|
||||
msgstr "Lopeta"
|
||||
|
||||
#: global.c:222 global.c:315 global.c:336 global.c:355
|
||||
msgid "Goto Line"
|
||||
msgstr "Siirry"
|
||||
|
||||
#: global.c:227 global.c:306
|
||||
msgid "Justify"
|
||||
msgstr "Tasaa"
|
||||
|
||||
#: global.c:231 global.c:302 global.c:333
|
||||
msgid "Replace"
|
||||
msgstr "Korvaa"
|
||||
|
||||
#: global.c:235
|
||||
msgid "Read File"
|
||||
msgstr "Lue tied."
|
||||
|
||||
#: global.c:239
|
||||
msgid "Where Is"
|
||||
msgstr "Etsi"
|
||||
|
||||
#: global.c:243 global.c:372
|
||||
msgid "Prev Page"
|
||||
msgstr "Ed. sivu"
|
||||
|
||||
#: global.c:247 global.c:376
|
||||
msgid "Next Page"
|
||||
msgstr "Seur. sivu"
|
||||
|
||||
#: global.c:251
|
||||
msgid "Cut Text"
|
||||
msgstr "Leikkaa"
|
||||
|
||||
#: global.c:254
|
||||
msgid "UnCut Txt"
|
||||
msgstr "Liitä"
|
||||
|
||||
#: global.c:258
|
||||
msgid "Cur Pos"
|
||||
msgstr "Sijainti"
|
||||
|
||||
#: global.c:262
|
||||
msgid "To Spell"
|
||||
msgstr "Oikolue"
|
||||
|
||||
#: global.c:266
|
||||
msgid "Up"
|
||||
msgstr "Ylös"
|
||||
|
||||
#: global.c:269
|
||||
msgid "Down"
|
||||
msgstr "Alas"
|
||||
|
||||
#: global.c:272
|
||||
msgid "Forward"
|
||||
msgstr "Eteenpäin"
|
||||
|
||||
#: global.c:275
|
||||
msgid "Back"
|
||||
msgstr "Takaisin"
|
||||
|
||||
#: global.c:278
|
||||
msgid "Home"
|
||||
msgstr "Home"
|
||||
|
||||
#: global.c:281
|
||||
msgid "End"
|
||||
msgstr "End"
|
||||
|
||||
#: global.c:284
|
||||
msgid "Refresh"
|
||||
msgstr "Piirrä uudelleen"
|
||||
|
||||
#: global.c:287
|
||||
msgid "Mark Text"
|
||||
msgstr "Merkitse tekstiä"
|
||||
|
||||
#: global.c:290
|
||||
msgid "Delete"
|
||||
msgstr "Poista"
|
||||
|
||||
#: global.c:294
|
||||
msgid "Backspace"
|
||||
msgstr "Askelpalautin"
|
||||
|
||||
#: global.c:298
|
||||
msgid "Tab"
|
||||
msgstr "Sarkain"
|
||||
|
||||
#: global.c:310
|
||||
msgid "Enter"
|
||||
msgstr "Enter"
|
||||
|
||||
#: global.c:323 global.c:343 global.c:362
|
||||
msgid "First Line"
|
||||
msgstr "1. rivi"
|
||||
|
||||
#: global.c:326 global.c:346 global.c:365
|
||||
msgid "Last Line"
|
||||
msgstr "Viim. rivi"
|
||||
|
||||
#: global.c:329 global.c:349
|
||||
msgid "Case Sens"
|
||||
msgstr "Kirj. koko"
|
||||
|
||||
#: global.c:339 global.c:358 global.c:368 global.c:384 global.c:388
|
||||
#: global.c:394 winio.c:999
|
||||
msgid "Cancel"
|
||||
msgstr "Peru"
|
||||
|
||||
#: global.c:352
|
||||
msgid "No Replace"
|
||||
msgstr ""
|
||||
|
||||
#: nano.c:115
|
||||
msgid ""
|
||||
"\n"
|
||||
"Buffer written to 'nano.save'\n"
|
||||
msgstr ""
|
||||
"\n"
|
||||
"Teksti kirjoitettu tiedostoon 'nano.save'\n"
|
||||
|
||||
#: nano.c:122
|
||||
msgid "Key illegal in VIEW mode"
|
||||
msgstr "Virheellinen näppäin katselutilassa"
|
||||
|
||||
#: nano.c:158
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
" 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"
|
||||
msgstr ""
|
||||
" nanon ohje\n"
|
||||
"\n"
|
||||
" nano-editori on suunniteltu vastaamaan UW Pico-editorin toiminnallisuutta "
|
||||
"ja helppokäyttöisyyttä. Editorin näytöllä näkyy neljä osaa. Ylin rivi "
|
||||
"näyttää ohjelman versionumeron, nykyisen tiedoston nimen sekä sen että onko "
|
||||
"tiedostoa muutettu. Tilarivi on kolmas rivi alhaalta. Se näyttää tärkeät "
|
||||
"viestit. Alimmilla kahdella rivillä on lueteltu useimmin tarvitut "
|
||||
"pikanäppäimet.\n"
|
||||
"\n"
|
||||
" Näppäinohjeissa Control-näppäimen komentoja on merkitty hatulla (^). "
|
||||
"Alt-näppäimen komentoja on merkitty at-merkillä (@). Seuraavia "
|
||||
"näppäinkomentoja voi käyttää editorin pääikkunassa. Valinnaiset näppäimet "
|
||||
"ovat sulkeissa:\n"
|
||||
"\n"
|
||||
|
||||
#: nano.c:261
|
||||
msgid "free_node(): free'd a node, YAY!\n"
|
||||
msgstr "free_node(): node vapautettu, YAY!\n"
|
||||
|
||||
#: nano.c:266
|
||||
msgid "free_node(): free'd last node.\n"
|
||||
msgstr "free_node(): viimeinen node vapautettu.\n"
|
||||
|
||||
#: nano.c:318
|
||||
msgid ""
|
||||
"Usage: nano [GNU long option] [option] +LINE <file>\n"
|
||||
"\n"
|
||||
msgstr ""
|
||||
"Käyttö: nano [GNU pitkät komentoriviasetukset] [asetukset] +RIVI <tiedosto>\n"
|
||||
|
||||
#: nano.c:319
|
||||
msgid "Option\t\tLong option\t\tMeaning\n"
|
||||
msgstr "Asetus\t\tPitkä asetus\t\tMerkitys\n"
|
||||
|
||||
#: nano.c:321
|
||||
msgid " -T \t\t--tabsize=[num]\t\tSet width of a tab to num\n"
|
||||
msgstr " -T \t\t--tabsize=[leveys]\tAseta sarkaimen leveys\n"
|
||||
|
||||
#: nano.c:324
|
||||
msgid " -R\t\t--regexp\t\tUse regular expressions for search\n"
|
||||
msgstr ""
|
||||
|
||||
#: nano.c:328
|
||||
msgid " -V \t\t--version\t\tPrint version information and exit\n"
|
||||
msgstr " -V \t\t--version\t\tTulosta versiotiedot ja lopeta\n"
|
||||
|
||||
#: nano.c:330
|
||||
msgid " -c \t\t--const\t\t\tConstantly show cursor position\n"
|
||||
msgstr " -c \t\t--const\t\t\tNäytä kohdistimen sijainti jatkuvasti\n"
|
||||
|
||||
#: nano.c:332
|
||||
msgid " -h \t\t--help\t\t\tShow this message\n"
|
||||
msgstr " -h \t\t--help\t\t\tNäytä tämä ohje\n"
|
||||
|
||||
#: nano.c:335
|
||||
msgid " -k \t\t--cut\t\t\tLet ^K cut from cursor to end of line\n"
|
||||
msgstr ""
|
||||
|
||||
#: nano.c:338
|
||||
msgid " -i \t\t--autoindent\t\tAutomatically indent new lines\n"
|
||||
msgstr " -i \t\t--autoindent\t\tSisennä uudet rivit automaattisesti\n"
|
||||
|
||||
#: nano.c:340
|
||||
msgid " -l \t\t--nofollow\t\tDon't follow symbolic links, overwrite\n"
|
||||
msgstr ""
|
||||
" -l \t\t--nofollow\t\tÄlä seuraa symbolisia linkkejä, vaan\n"
|
||||
"\t\t\t\t\tkorvaa ne tiedostoilla.\n"
|
||||
|
||||
#: nano.c:343
|
||||
msgid " -m \t\t--mouse\t\t\tEnable mouse\n"
|
||||
msgstr " -m \t\t--mouse\t\t\tKäytä hiirtä\n"
|
||||
|
||||
#: nano.c:348
|
||||
msgid ""
|
||||
" -r [#cols] \t--fill=[#cols]\t\tSet fill cols to (wrap lines at) #cols\n"
|
||||
msgstr " -r [#lkm] \t--fill=[#lkm]\t\tRivitä annettua pidemmät rivit\n"
|
||||
|
||||
#: nano.c:350
|
||||
msgid " -p\t \t--pico\t\t\tMake bottom 2 lines more Pico-like\n"
|
||||
msgstr " -p\t \t--pico\t\t\tNäytä 2 alinta riviä kuin Pico\n"
|
||||
|
||||
#: nano.c:352
|
||||
msgid " -s [prog] \t--speller=[prog]\tEnable alternate speller\n"
|
||||
msgstr " -s [ohjelma] \t--speller=[ohjelma]\tKäytä annettua oikolukuohjelmaa\n"
|
||||
|
||||
#: nano.c:354
|
||||
msgid " -t \t\t--tempfile\t\tAuto save on exit, don't prompt\n"
|
||||
msgstr ""
|
||||
" -t \t\t--tempfile\t\tTallenna tiedosto kysymättä\n"
|
||||
"\t\t\t\t\tpoistettaessa \n"
|
||||
|
||||
#: nano.c:356
|
||||
msgid " -v \t\t--view\t\t\tView (read only) mode\n"
|
||||
msgstr " -v \t\t--view\t\t\tKatselutila (vain luku)\n"
|
||||
|
||||
#: nano.c:358
|
||||
msgid " -w \t\t--nowrap\t\tDon't wrap long lines\n"
|
||||
msgstr " -w \t\t--nowrap\t\tÄlä rivitä pitkiä rivejä\n"
|
||||
|
||||
#: nano.c:360
|
||||
msgid " -x \t\t--nohelp\t\tDon't show help window\n"
|
||||
msgstr " -x \t\t--nohelp\t\tÄlä näytä ohjeikkunaa\n"
|
||||
|
||||
#: nano.c:362
|
||||
msgid " -z \t\t--suspend\t\tEnable suspend\n"
|
||||
msgstr " -z \t\t--suspend\t\tMahdollista keskeyttäminen\n"
|
||||
|
||||
#: nano.c:364
|
||||
msgid " +LINE\t\t\t\t\tStart at line number LINE\n"
|
||||
msgstr " +RIVI\t\t\t\t\tSiirry riville RIVI\n"
|
||||
|
||||
#: nano.c:366
|
||||
msgid ""
|
||||
"Usage: nano [option] +LINE <file>\n"
|
||||
"\n"
|
||||
msgstr ""
|
||||
"Käyttö: nano [asetukset] +RIVI <tiedosto>\n"
|
||||
"\n"
|
||||
|
||||
#: nano.c:367
|
||||
msgid "Option\t\tMeaning\n"
|
||||
msgstr "Asetus\t\tMerkitys\n"
|
||||
|
||||
#: nano.c:368
|
||||
msgid " -T [num]\tSet width of a tab to num\n"
|
||||
msgstr " -T [leveys]\tAseta sarkaimen leveys\n"
|
||||
|
||||
#: nano.c:369
|
||||
msgid " -R\t\tUse regular expressions for search\n"
|
||||
msgstr ""
|
||||
|
||||
#: nano.c:370
|
||||
msgid " -V \t\tPrint version information and exit\n"
|
||||
msgstr " -V \t\tTulosta versiotiedot ja lopeta\n"
|
||||
|
||||
#: nano.c:371
|
||||
msgid " -c \t\tConstantly show cursor position\n"
|
||||
msgstr " -c \t\tNäytä kohdistimen sijainti jatkuvasti\n"
|
||||
|
||||
#: nano.c:372
|
||||
msgid " -h \t\tShow this message\n"
|
||||
msgstr " -h \t\tNäytä tämä ohje\n"
|
||||
|
||||
#: nano.c:374
|
||||
msgid " -k \t\tLet ^K cut from cursor to end of line\n"
|
||||
msgstr ""
|
||||
|
||||
#: nano.c:376
|
||||
msgid " -i \t\tAutomatically indent new lines\n"
|
||||
msgstr " -i \t\tSisennä uudet rivit automaattisesti\n"
|
||||
|
||||
#: nano.c:378
|
||||
msgid " -l \t\tDon't follow symbolic links, overwrite\n"
|
||||
msgstr " -l \t\tÄlä seuraa symbolisia linkkejä, vaan korvaa ne tiedostoilla\n"
|
||||
|
||||
#: nano.c:381
|
||||
msgid " -m \t\tEnable mouse\n"
|
||||
msgstr " -m \t\tKäytä hiirtä\n"
|
||||
|
||||
#: nano.c:385
|
||||
msgid " -r [#cols] \tSet fill cols to (wrap lines at) #cols\n"
|
||||
msgstr " -r [#lkm] \tRivitä annettua pidemmät rivit\n"
|
||||
|
||||
#: nano.c:386
|
||||
msgid " -s [prog] \tEnable alternate speller\n"
|
||||
msgstr " -s [ohjelma] \tKäytä annettua oikolukuohjelmaa\n"
|
||||
|
||||
#: nano.c:387
|
||||
msgid " -p \t\tMake bottom 2 lines more Pico-like\n"
|
||||
msgstr " -p \t\tNäytä 2 alinta riviä kuin Pico\n"
|
||||
|
||||
#: nano.c:388
|
||||
msgid " -t \t\tAuto save on exit, don't prompt\n"
|
||||
msgstr " -t \t\tTallenna tiedosto kysymättä poistettaessa\n"
|
||||
|
||||
#: nano.c:389
|
||||
msgid " -v \t\tView (read only) mode\n"
|
||||
msgstr " -v \t\tKatselutila (vain luku)\n"
|
||||
|
||||
#: nano.c:390
|
||||
msgid " -w \t\tDon't wrap long lines\n"
|
||||
msgstr " -w \t\tÄlä rivitä pitkiä rivejä\n"
|
||||
|
||||
#: nano.c:391
|
||||
msgid " -x \t\tDon't show help window\n"
|
||||
msgstr " -x \t\tÄlä näytä ohjeikkunaa\n"
|
||||
|
||||
#: nano.c:392
|
||||
msgid " -z \t\tEnable suspend\n"
|
||||
msgstr " -z \t\tMahdollista keskeyttäminen\n"
|
||||
|
||||
#: nano.c:393
|
||||
msgid " +LINE\t\tStart at line number LINE\n"
|
||||
msgstr " +RIVI\t\tSiirry riville RIVI\n"
|
||||
|
||||
#: nano.c:400
|
||||
#, c-format
|
||||
msgid " nano version %s by Chris Allegretta (compiled %s, %s)\n"
|
||||
msgstr " nano, versio %s. Chris Allegretta (käännetty %s, %s)\n"
|
||||
|
||||
#: nano.c:402
|
||||
msgid " Email: nano@nano-editor.org\tWeb: http://www.nano-editor.org\n"
|
||||
msgstr " Maili: nano@nano-editor.org\tNetti: http://www.nano-editor.org\n"
|
||||
|
||||
#: nano.c:437
|
||||
msgid "Mark Set"
|
||||
msgstr "Teksti merkitty"
|
||||
|
||||
#: nano.c:442
|
||||
msgid "Mark UNset"
|
||||
msgstr "Merkintä poistettu"
|
||||
|
||||
#: nano.c:868
|
||||
#, c-format
|
||||
msgid "check_wrap called with inptr->data=\"%s\"\n"
|
||||
msgstr "check_wrap -funktion parametri inptr->data=\"%s\"\n"
|
||||
|
||||
#: nano.c:919
|
||||
#, c-format
|
||||
msgid "current->data now = \"%s\"\n"
|
||||
msgstr "current->data nyt = \"%s\"\n"
|
||||
|
||||
#: nano.c:972
|
||||
#, c-format
|
||||
msgid "After, data = \"%s\"\n"
|
||||
msgstr "Jälkeenpäin, data = \"%s\"\n"
|
||||
|
||||
#: nano.c:1042
|
||||
msgid "Error deleting tempfile, ack!"
|
||||
msgstr "Väliaikaistiedostoa poistettaessa tapahtui virhe."
|
||||
|
||||
#: nano.c:1060
|
||||
#, c-format
|
||||
msgid "Could not create a temporary filename: %s"
|
||||
msgstr "Väliaikaista tiedostonnimeä ei voitu luoda: %s"
|
||||
|
||||
#: nano.c:1083
|
||||
#, c-format
|
||||
msgid "Could not invoke spell program \"%s\""
|
||||
msgstr "Oikoluinta \"%s\" ei voitu käynnistää"
|
||||
|
||||
#. Why 32512? I dont know!
|
||||
#: nano.c:1089
|
||||
msgid "Could not invoke \"ispell\""
|
||||
msgstr "\"ispell\" -ohjelmaa ei voitu käynnistää"
|
||||
|
||||
#: nano.c:1102
|
||||
msgid "Finished checking spelling"
|
||||
msgstr "Oikoluku on valmis"
|
||||
|
||||
#: nano.c:1120
|
||||
msgid "Save modified buffer (ANSWERING \"No\" WILL DESTROY CHANGES) ? "
|
||||
msgstr "Tallenna muutettu teksti (Muutokset häviävät, jos vastaat \"ei\") ? "
|
||||
|
||||
#: nano.c:1284
|
||||
msgid "Cannot resize top win"
|
||||
msgstr "Yläikkunan kokoa ei voi muuttaa"
|
||||
|
||||
#: nano.c:1286
|
||||
msgid "Cannot move top win"
|
||||
msgstr "Yläikkunaa ei voi siirtää"
|
||||
|
||||
#: nano.c:1288
|
||||
msgid "Cannot resize edit win"
|
||||
msgstr "Muokkausikkunan kokoa ei voi muuttaa"
|
||||
|
||||
#: nano.c:1290
|
||||
msgid "Cannot move edit win"
|
||||
msgstr "Muokkausikkunaa ei voi siirtää"
|
||||
|
||||
#: nano.c:1292
|
||||
msgid "Cannot resize bottom win"
|
||||
msgstr "Alaikkunan kokoa ei voi muuttaa"
|
||||
|
||||
#: nano.c:1294
|
||||
msgid "Cannot move bottom win"
|
||||
msgstr "Alaikkunaa ei voi siirtää"
|
||||
|
||||
#: nano.c:1638
|
||||
#, c-format
|
||||
msgid "%s enable/disable"
|
||||
msgstr ""
|
||||
|
||||
#: nano.c:1650
|
||||
msgid "enabled"
|
||||
msgstr ""
|
||||
|
||||
#: nano.c:1651
|
||||
msgid "disabled"
|
||||
msgstr ""
|
||||
|
||||
#: nano.c:1881
|
||||
msgid "Main: set up windows\n"
|
||||
msgstr "Päätila: ikkunoiden asettelu\n"
|
||||
|
||||
#: nano.c:1895
|
||||
msgid "Main: bottom win\n"
|
||||
msgstr "Päätila: alaikkuna\n"
|
||||
|
||||
#: nano.c:1901
|
||||
msgid "Main: open file\n"
|
||||
msgstr "Päätila: avaa tiedosto\n"
|
||||
|
||||
#: nano.c:1935
|
||||
#, fuzzy, c-format
|
||||
msgid "I got Alt-O-%c! (%d)\n"
|
||||
msgstr "Vastaanotettu Alt-[-%c! (%d)\n"
|
||||
|
||||
#: nano.c:1959
|
||||
#, fuzzy, c-format
|
||||
msgid "I got Alt-[-1-%c! (%d)\n"
|
||||
msgstr "Vastaanotettu Alt-[-%c! (%d)\n"
|
||||
|
||||
#: nano.c:1992
|
||||
#, fuzzy, c-format
|
||||
msgid "I got Alt-[-2-%c! (%d)\n"
|
||||
msgstr "Vastaanotettu Alt-[-%c! (%d)\n"
|
||||
|
||||
#: nano.c:2040
|
||||
#, c-format
|
||||
msgid "I got Alt-[-%c! (%d)\n"
|
||||
msgstr "Vastaanotettu Alt-[-%c! (%d)\n"
|
||||
|
||||
#: nano.c:2066
|
||||
#, c-format
|
||||
msgid "I got Alt-%c! (%d)\n"
|
||||
msgstr "Vastaanotettu Alt-%c! (%d)\n"
|
||||
|
||||
#: search.c:75
|
||||
#, fuzzy, c-format
|
||||
msgid "Case Sensitive Regexp Search%s%s"
|
||||
msgstr "Kirjainkoosta välittävä etsintä%s%s"
|
||||
|
||||
#: search.c:77
|
||||
#, fuzzy, c-format
|
||||
msgid "Regexp Search%s%s"
|
||||
msgstr "Etsintä%s%s"
|
||||
|
||||
#: search.c:80
|
||||
#, fuzzy, c-format
|
||||
msgid "Case Sensitive Search%s%s"
|
||||
msgstr "Kirjainkoosta välittävä etsintä%s%s"
|
||||
|
||||
#: search.c:82
|
||||
#, fuzzy, c-format
|
||||
msgid "Search%s%s"
|
||||
msgstr "Etsintä%s%s"
|
||||
|
||||
#: search.c:85
|
||||
#, fuzzy
|
||||
msgid " (to replace)"
|
||||
msgstr " (korvaa)"
|
||||
|
||||
#: search.c:93
|
||||
msgid "Search Cancelled"
|
||||
msgstr "Etsintä peruttu"
|
||||
|
||||
#: search.c:191
|
||||
msgid "Search Wrapped"
|
||||
msgstr "Etsintä jatkuu"
|
||||
|
||||
#: search.c:242
|
||||
#, c-format
|
||||
msgid "Replaced %d occurences"
|
||||
msgstr "%d kohtaa korvattu"
|
||||
|
||||
#: search.c:244
|
||||
msgid "Replaced 1 occurence"
|
||||
msgstr "1 kohta korvattu"
|
||||
|
||||
#: search.c:379 search.c:400 search.c:423
|
||||
msgid "Replace Cancelled"
|
||||
msgstr "Korvaus peruttu"
|
||||
|
||||
#: search.c:396
|
||||
#, c-format
|
||||
msgid "Replace with [%s]"
|
||||
msgstr "Korvaa merkkijonolla [%s]"
|
||||
|
||||
#. last_search is empty
|
||||
#: search.c:421
|
||||
msgid "Replace with"
|
||||
msgstr "Korvaa merkkijonolla"
|
||||
|
||||
#: search.c:462
|
||||
msgid "Replace this instance?"
|
||||
msgstr "Korvataanko tämä kohta?"
|
||||
|
||||
#. Ask for it
|
||||
#: search.c:513
|
||||
msgid "Enter line number"
|
||||
msgstr "Kirjoita rivin numero"
|
||||
|
||||
#: search.c:515
|
||||
msgid "Aborted"
|
||||
msgstr "Keskeytetty"
|
||||
|
||||
#: search.c:535
|
||||
msgid "Come on, be reasonable"
|
||||
msgstr "Jotakin järkevää, kiitos?"
|
||||
|
||||
#: search.c:540
|
||||
#, c-format
|
||||
msgid "Only %d lines available, skipping to last line"
|
||||
msgstr "Vain %d riviä olemassa, siirrytään viimeiselle riville"
|
||||
|
||||
#: winio.c:120
|
||||
#, c-format
|
||||
msgid "actual_x_from_start for xplus=%d returned %d\n"
|
||||
msgstr "actual_x_from_start parametrilla xplus=%d palautti %d\n"
|
||||
|
||||
#: winio.c:410
|
||||
#, c-format
|
||||
msgid "input '%c' (%d)\n"
|
||||
msgstr "syöte '%c' (%d)\n"
|
||||
|
||||
#: winio.c:444
|
||||
msgid "New Buffer"
|
||||
msgstr "Uusi teksti"
|
||||
|
||||
#: winio.c:447
|
||||
msgid " File: ..."
|
||||
msgstr " Tiedosto: ..."
|
||||
|
||||
#: winio.c:455
|
||||
msgid "Modified"
|
||||
msgstr "Muokattu"
|
||||
|
||||
#: winio.c:915
|
||||
#, c-format
|
||||
msgid "Moved to (%d, %d) in edit buffer\n"
|
||||
msgstr "Kohtaan (%d,%d) siirrytty muokkausruudussa\n"
|
||||
|
||||
#: winio.c:926
|
||||
#, c-format
|
||||
msgid "current->data = \"%s\"\n"
|
||||
msgstr "current->data = \"%s\"\n"
|
||||
|
||||
#: winio.c:969
|
||||
#, c-format
|
||||
msgid "I got \"%s\"\n"
|
||||
msgstr "Saatiin \"%s\"\n"
|
||||
|
||||
#: winio.c:994
|
||||
msgid "Yes"
|
||||
msgstr "Kyllä"
|
||||
|
||||
#: winio.c:996
|
||||
msgid "All"
|
||||
msgstr "Kaikki"
|
||||
|
||||
#: winio.c:998
|
||||
msgid "No"
|
||||
msgstr "Ei"
|
||||
|
||||
#: winio.c:1135
|
||||
#, c-format
|
||||
msgid "do_cursorpos: linepct = %f, bytepct = %f\n"
|
||||
msgstr "do_cursorpos: linepct = %f, bytepct = %f\n"
|
||||
|
||||
#: winio.c:1139
|
||||
msgid "line %d of %d (%.0f%%), character %d of %d (%.0f%%)"
|
||||
msgstr "rivi %d/%d (%.0f%%), merkki %d/%d (%.0f%%)"
|
||||
|
||||
#: winio.c:1267
|
||||
msgid "Dumping file buffer to stderr...\n"
|
||||
msgstr "Syötetään tiedosto stderriin...\n"
|
||||
|
||||
#: winio.c:1269
|
||||
msgid "Dumping cutbuffer to stderr...\n"
|
||||
msgstr "Syötetään leiketila stderriin...\n"
|
||||
|
||||
#: winio.c:1271
|
||||
msgid "Dumping a buffer to stderr...\n"
|
||||
msgstr "Syötetään teksti stderriin...\n"
|
||||
|
||||
#~ msgid "To Search"
|
||||
#~ msgstr "Etsittävä"
|
||||
|
||||
#~ msgid " Y"
|
||||
#~ msgstr " Y"
|
||||
|
||||
#~ msgid " A"
|
||||
#~ msgstr " A"
|
||||
|
||||
#~ msgid " N"
|
||||
#~ msgstr " N"
|
||||
|
||||
#~ msgid "^C"
|
||||
#~ msgstr "^C"
|
||||
694
po/nano.pot
694
po/nano.pot
File diff suppressed because it is too large
Load Diff
33
proto.h
33
proto.h
@@ -1,3 +1,4 @@
|
||||
/* $Id$ */
|
||||
/**************************************************************************
|
||||
* proto.h *
|
||||
* *
|
||||
@@ -21,6 +22,11 @@
|
||||
/* Externs */
|
||||
|
||||
#include <sys/stat.h>
|
||||
|
||||
#ifdef HAVE_REGEX_H
|
||||
#include <regex.h>
|
||||
#endif
|
||||
|
||||
#include "nano.h"
|
||||
|
||||
extern int center_x, center_y, editwinrows;
|
||||
@@ -28,10 +34,11 @@ extern int current_x, current_y, posible_max, totlines;
|
||||
extern int placewewant;
|
||||
extern int mark_beginx, samelinewrap;
|
||||
extern int totsize, temp_opt;
|
||||
extern int fill, flags;
|
||||
extern int fill, flags,tabsize;
|
||||
|
||||
extern WINDOW *edit, *topwin, *bottomwin;
|
||||
extern char *filename, *answer, *last_search, *last_replace;
|
||||
extern char filename[PATH_MAX];
|
||||
extern char answer[132];
|
||||
extern char *hblank, *help_text;
|
||||
extern struct stat fileinfo;
|
||||
extern filestruct *current, *fileage, *edittop, *editbot, *filebot;
|
||||
@@ -42,6 +49,14 @@ extern shortcut replace_list[REPLACE_LIST_LEN], goto_list[GOTO_LIST_LEN];
|
||||
extern shortcut writefile_list[WRITEFILE_LIST_LEN], help_list[HELP_LIST_LEN];
|
||||
extern shortcut spell_list[SPELL_LIST_LEN];
|
||||
|
||||
#ifdef HAVE_REGEX_H
|
||||
extern int use_regexp, regexp_compiled;
|
||||
extern regex_t search_regexp;
|
||||
extern regmatch_t regmatches[10];
|
||||
#endif
|
||||
|
||||
extern toggle toggles[TOGGLE_LEN];
|
||||
|
||||
/* Programs we want available */
|
||||
|
||||
char *strcasestr(char *haystack, char *needle);
|
||||
@@ -75,10 +90,8 @@ void blank_bottombars(void);
|
||||
void check_wrap(filestruct * inptr, char ch);
|
||||
void dump_buffer(filestruct * inptr);
|
||||
void align(char **strp);
|
||||
void edit_refresh(void);
|
||||
void edit_update(filestruct * fileptr);
|
||||
void edit_update_top(filestruct * fileptr);
|
||||
void edit_update_bot(filestruct * fileptr);
|
||||
void edit_refresh(void), edit_refresh_clearok(void);
|
||||
void edit_update(filestruct * fileptr, int topmidbot);
|
||||
void update_cursor(void);
|
||||
void delete_node(filestruct * fileptr);
|
||||
void set_modified(void);
|
||||
@@ -86,6 +99,7 @@ void dump_buffer_reverse(filestruct * inptr);
|
||||
void reset_cursor(void);
|
||||
void check_statblank(void);
|
||||
void update_line(filestruct * fileptr, int index);
|
||||
void fix_editbot(void);
|
||||
void statusbar(char *msg, ...);
|
||||
void titlebar(void);
|
||||
void previous_line(void);
|
||||
@@ -101,7 +115,10 @@ void *nmalloc(size_t howmuch);
|
||||
void *nrealloc(void *ptr, size_t howmuch);
|
||||
void die(char *msg, ...);
|
||||
void new_file(void);
|
||||
|
||||
void new_magicline(void);
|
||||
void splice_node(filestruct *begin, filestruct *new, filestruct *end);
|
||||
void null_at(char *data, int index);
|
||||
void page_up_center(void);
|
||||
|
||||
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);
|
||||
@@ -115,5 +132,3 @@ int do_replace(void), do_help(void), do_enter_void(void);
|
||||
filestruct *copy_node(filestruct * src);
|
||||
filestruct *copy_filestruct(filestruct * src);
|
||||
filestruct *make_new_node(filestruct * prevnode);
|
||||
|
||||
|
||||
|
||||
254
search.c
254
search.c
@@ -1,3 +1,4 @@
|
||||
/* $Id$ */
|
||||
/**************************************************************************
|
||||
* search.c *
|
||||
* *
|
||||
@@ -20,6 +21,7 @@
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include "config.h"
|
||||
#include "proto.h"
|
||||
@@ -32,6 +34,25 @@
|
||||
#define _(string) (string)
|
||||
#endif
|
||||
|
||||
static char last_search[132] = ""; /* Last string we searched for */
|
||||
static char last_replace[132] = ""; /* Last replacement string */
|
||||
|
||||
/* Regular expression helper functions */
|
||||
|
||||
#ifdef HAVE_REGEX_H
|
||||
void regexp_init(const char *regexp)
|
||||
{
|
||||
regcomp(&search_regexp, regexp, ISSET(CASE_SENSITIVE) ? 0 : REG_ICASE);
|
||||
SET(REGEXP_COMPILED);
|
||||
}
|
||||
|
||||
void regexp_cleanup()
|
||||
{
|
||||
UNSET(REGEXP_COMPILED);
|
||||
regfree(&search_regexp);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Set up the system variables for a search or replace. Returns -1 on
|
||||
abort, 0 on success, and 1 on rerun calling program
|
||||
Return -2 to run opposite program (searchg -> replace, replace -> search)
|
||||
@@ -41,18 +62,31 @@
|
||||
int search_init(int replacing)
|
||||
{
|
||||
int i;
|
||||
char buf[135];
|
||||
|
||||
char buf[BUFSIZ];
|
||||
char *prompt, *reprompt = "";
|
||||
|
||||
if (last_search[0]) {
|
||||
sprintf(buf, " [%s]", last_search);
|
||||
snprintf(buf, BUFSIZ, " [%s]", last_search);
|
||||
} else {
|
||||
buf[0] = '\0';
|
||||
}
|
||||
|
||||
if (ISSET(USE_REGEXP) && ISSET(CASE_SENSITIVE))
|
||||
prompt = _("Case Sensitive Regexp Search%s%s");
|
||||
else if (ISSET(USE_REGEXP))
|
||||
prompt = _("Regexp Search%s%s");
|
||||
else
|
||||
if (ISSET(CASE_SENSITIVE))
|
||||
prompt = _("Case Sensitive Search%s%s");
|
||||
else
|
||||
prompt = _("Search%s%s");
|
||||
|
||||
if (replacing)
|
||||
reprompt = _(" (to replace)");
|
||||
|
||||
i = statusq(replacing ? replace_list : whereis_list,
|
||||
replacing ? REPLACE_LIST_LEN : WHEREIS_LIST_LEN, "",
|
||||
ISSET(CASE_SENSITIVE) ? _("Case Sensitive Search%s") :
|
||||
_("Search%s"), buf);
|
||||
prompt, reprompt, buf);
|
||||
|
||||
/* Cancel any search, or just return with no previous search */
|
||||
if ((i == -1) || (i < 0 && !last_search[0])) {
|
||||
@@ -61,9 +95,16 @@ int search_init(int replacing)
|
||||
return -1;
|
||||
} else if (i == -2) { /* Same string */
|
||||
strncpy(answer, last_search, 132);
|
||||
#ifdef HAVE_REGEX_H
|
||||
if (ISSET(USE_REGEXP))
|
||||
regexp_init(answer);
|
||||
#endif
|
||||
} else if (i == 0) { /* They entered something new */
|
||||
strncpy(last_search, answer, 132);
|
||||
|
||||
#ifdef HAVE_REGEX_H
|
||||
if (ISSET(USE_REGEXP))
|
||||
regexp_init(answer);
|
||||
#endif
|
||||
/* Blow away last_replace because they entered a new search
|
||||
string....uh, right? =) */
|
||||
last_replace[0] = '\0';
|
||||
@@ -76,6 +117,9 @@ int search_init(int replacing)
|
||||
return 1;
|
||||
} else if (i == NANO_OTHERSEARCH_KEY) {
|
||||
return -2; /* Call the opposite search function */
|
||||
} else if (i == NANO_FROMSEARCHTOGOTO_KEY) {
|
||||
do_gotoline_void();
|
||||
return -3;
|
||||
} else { /* First line key, etc. */
|
||||
do_early_abort();
|
||||
return -3;
|
||||
@@ -88,6 +132,7 @@ filestruct *findnextstr(int quiet, filestruct * begin, char *needle)
|
||||
{
|
||||
filestruct *fileptr;
|
||||
char *searchstr, *found = NULL, *tmp;
|
||||
int past_editbot = 0;
|
||||
|
||||
fileptr = current;
|
||||
|
||||
@@ -95,8 +140,12 @@ filestruct *findnextstr(int quiet, filestruct * begin, char *needle)
|
||||
/* Look for searchstr until EOF */
|
||||
while (fileptr != NULL &&
|
||||
(found = strstrwrapper(searchstr, needle)) == NULL) {
|
||||
|
||||
fileptr = fileptr->next;
|
||||
|
||||
if (!past_editbot && (fileptr == editbot))
|
||||
past_editbot = 1;
|
||||
|
||||
if (fileptr == begin)
|
||||
return NULL;
|
||||
|
||||
@@ -111,39 +160,36 @@ filestruct *findnextstr(int quiet, filestruct * begin, char *needle)
|
||||
for (tmp = fileptr->data; tmp != found; tmp++)
|
||||
current_x++;
|
||||
|
||||
edit_update(current);
|
||||
if (past_editbot)
|
||||
edit_update(current, CENTER);
|
||||
placewewant = xplustabs();
|
||||
reset_cursor();
|
||||
} else { /* We're at EOF, go back to the top, once */
|
||||
|
||||
fileptr = fileage;
|
||||
|
||||
while (fileptr != current && fileptr != begin &&
|
||||
while (fileptr != begin->next &&
|
||||
(found = strstrwrapper(fileptr->data, needle)) == NULL)
|
||||
fileptr = fileptr->next;
|
||||
|
||||
if (fileptr == begin) {
|
||||
if (fileptr == begin->next) {
|
||||
if (!quiet)
|
||||
statusbar(_("\"%s\" not found"), needle);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
if (fileptr != current) { /* We found something */
|
||||
else { /* We found something */
|
||||
current = fileptr;
|
||||
current_x = 0;
|
||||
for (tmp = fileptr->data; tmp != found; tmp++)
|
||||
current_x++;
|
||||
|
||||
edit_update(current);
|
||||
edit_update(current, CENTER);
|
||||
reset_cursor();
|
||||
|
||||
if (!quiet)
|
||||
statusbar(_("Search Wrapped"));
|
||||
} else { /* Nada */
|
||||
|
||||
if (!quiet)
|
||||
statusbar(_("\"%s\" not found"), needle);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return fileptr;
|
||||
@@ -154,6 +200,13 @@ void search_abort(void)
|
||||
UNSET(KEEP_CUTBUFFER);
|
||||
display_main_list();
|
||||
wrefresh(bottomwin);
|
||||
if (ISSET(MARK_ISSET))
|
||||
edit_refresh_clearok();
|
||||
|
||||
#ifdef HAVE_REGEX_H
|
||||
if (ISSET(REGEXP_COMPILED))
|
||||
regexp_cleanup();
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Search for a string */
|
||||
@@ -171,7 +224,6 @@ int do_search(void)
|
||||
search_abort();
|
||||
return 0;
|
||||
} else if (i == -2) {
|
||||
search_abort();
|
||||
do_replace();
|
||||
return 0;
|
||||
} else if (i == 1) {
|
||||
@@ -194,17 +246,134 @@ void print_replaced(int num)
|
||||
|
||||
void replace_abort(void)
|
||||
{
|
||||
UNSET(KEEP_CUTBUFFER);
|
||||
display_main_list();
|
||||
reset_cursor();
|
||||
/* Identicle to search_abort, so we'll call it here. If it
|
||||
does something different later, we can change it back. For now
|
||||
it's just a waste to duplicat code */
|
||||
search_abort();
|
||||
}
|
||||
|
||||
/* Search for a string */
|
||||
#ifdef HAVE_REGEX_H
|
||||
int replace_regexp(char *string, int create_flag)
|
||||
{
|
||||
/* split personality here - if create_flag is null, just calculate
|
||||
* the size of the replacement line (necessary because of
|
||||
* subexpressions like \1 \2 \3 in the replaced text) */
|
||||
|
||||
char *c;
|
||||
int new_size = strlen(current->data) + 1;
|
||||
int search_match_count = regmatches[0].rm_eo -
|
||||
regmatches[0].rm_so;
|
||||
|
||||
new_size -= search_match_count;
|
||||
|
||||
/* Iterate through the replacement text to handle
|
||||
* subexpression replacement using \1, \2, \3, etc */
|
||||
|
||||
c = last_replace;
|
||||
while (*c) {
|
||||
if (*c != '\\') {
|
||||
if (create_flag)
|
||||
*string++=*c;
|
||||
c++;
|
||||
new_size++;
|
||||
} else {
|
||||
int num = (int)*(c+1) - (int)'0';
|
||||
if (num >= 1 && num <= 9) {
|
||||
|
||||
int i = regmatches[num].rm_so;
|
||||
|
||||
if (num > search_regexp.re_nsub) {
|
||||
/* Ugh, they specified a subexpression that doesn't
|
||||
exist. */
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Skip over the replacement expression */
|
||||
c+=2;
|
||||
|
||||
/* But add the length of the subexpression to new_size */
|
||||
new_size += regmatches[num].rm_eo - regmatches[num].rm_so;
|
||||
|
||||
/* And if create_flag is set, append the result of the
|
||||
* subexpression match to the new line */
|
||||
while (create_flag && i < regmatches[num].rm_eo )
|
||||
*string++=*(current->data + i++);
|
||||
|
||||
} else {
|
||||
if (create_flag)
|
||||
*string++=*c;
|
||||
c++;
|
||||
new_size++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (create_flag)
|
||||
*string = 0;
|
||||
|
||||
return new_size;
|
||||
}
|
||||
#endif
|
||||
|
||||
char *replace_line()
|
||||
{
|
||||
char *copy, *tmp;
|
||||
int new_line_size;
|
||||
int search_match_count;
|
||||
|
||||
/* Calculate size of new line */
|
||||
#ifdef HAVE_REGEX_H
|
||||
if (ISSET(USE_REGEXP)) {
|
||||
search_match_count = regmatches[0].rm_eo -
|
||||
regmatches[0].rm_so;
|
||||
new_line_size = replace_regexp(NULL, 0);
|
||||
/* If they specified an invalid subexpression in the replace
|
||||
* text, return NULL indicating an error */
|
||||
if (new_line_size < 0)
|
||||
return NULL;
|
||||
} else {
|
||||
#else
|
||||
{
|
||||
#endif
|
||||
search_match_count = strlen(last_search);
|
||||
new_line_size = strlen(current->data) - strlen(last_search) +
|
||||
strlen(last_replace) + 1;
|
||||
}
|
||||
|
||||
/* Create buffer */
|
||||
copy = nmalloc(new_line_size);
|
||||
|
||||
/* Head of Original Line */
|
||||
strncpy(copy, current->data, current_x);
|
||||
copy[current_x] = 0;
|
||||
|
||||
/* Replacement Text */
|
||||
if (!ISSET(USE_REGEXP))
|
||||
strcat(copy, last_replace);
|
||||
#ifdef HAVE_REGEX_H
|
||||
else
|
||||
(void)replace_regexp(copy + current_x, 1);
|
||||
#endif
|
||||
|
||||
/* The tail of the original line */
|
||||
/* This may expose other bugs, because it no longer
|
||||
goes through each character on the string
|
||||
and tests for string goodness. But because
|
||||
we can assume the invariant that current->data
|
||||
is less than current_x + strlen(last_search) long,
|
||||
this should be safe. Or it will expose bugs ;-) */
|
||||
tmp = current->data + current_x + search_match_count;
|
||||
strcat(copy, tmp);
|
||||
|
||||
return copy;
|
||||
}
|
||||
|
||||
/* Replace a string */
|
||||
int do_replace(void)
|
||||
{
|
||||
int i, replaceall = 0, numreplaced = 0, beginx;
|
||||
filestruct *fileptr, *begin;
|
||||
char *tmp, *copy, prevanswer[132] = "";
|
||||
char *copy, prevanswer[132] = "";
|
||||
|
||||
if ((i = search_init(1)) == -1) {
|
||||
statusbar(_("Replace Cancelled"));
|
||||
@@ -214,7 +383,6 @@ int do_replace(void)
|
||||
do_replace();
|
||||
return 1;
|
||||
} else if (i == -2) {
|
||||
replace_abort();
|
||||
do_search();
|
||||
return 0;
|
||||
} else if (i == -3) {
|
||||
@@ -242,7 +410,7 @@ int do_replace(void)
|
||||
|
||||
do_replace();
|
||||
return 0;
|
||||
} else { /* First page, last page, for example could get here */
|
||||
} else if (i != -2 ) { /* First page, last page, for example could get here */
|
||||
|
||||
do_early_abort();
|
||||
replace_abort();
|
||||
@@ -297,33 +465,19 @@ int do_replace(void)
|
||||
if (i == 2)
|
||||
replaceall = 1;
|
||||
|
||||
/* Create buffer */
|
||||
copy = nmalloc(strlen(current->data) - strlen(last_search) +
|
||||
strlen(last_replace) + 1);
|
||||
|
||||
/* Head of Original Line */
|
||||
strncpy(copy, current->data, current_x);
|
||||
copy[current_x] = 0;
|
||||
|
||||
/* Replacement Text */
|
||||
strcat(copy, last_replace);
|
||||
|
||||
/* The tail of the original line */
|
||||
/* This may expose other bugs, because it no longer
|
||||
goes through each character on the string
|
||||
and tests for string goodness. But because
|
||||
we can assume the invariant that current->data
|
||||
is less than current_x + strlen(last_search) long,
|
||||
this should be safe. Or it will expose bugs ;-) */
|
||||
tmp = current->data + current_x + strlen(last_search);
|
||||
strcat(copy, tmp);
|
||||
copy = replace_line();
|
||||
if (!copy) {
|
||||
statusbar("Replace failed: unknown subexpression!");
|
||||
replace_abort();
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Cleanup */
|
||||
free(current->data);
|
||||
current->data = copy;
|
||||
|
||||
/* Stop bug where we replace a substring of the replacement text */
|
||||
current_x += strlen(last_replace);
|
||||
current_x += strlen(last_replace) - 1;
|
||||
|
||||
edit_refresh();
|
||||
set_modified();
|
||||
@@ -335,7 +489,7 @@ int do_replace(void)
|
||||
current = begin;
|
||||
current_x = beginx;
|
||||
renumber_all();
|
||||
edit_update(current);
|
||||
edit_update(current, CENTER);
|
||||
print_replaced(numreplaced);
|
||||
replace_abort();
|
||||
return 1;
|
||||
@@ -369,7 +523,7 @@ int do_gotoline(long defline)
|
||||
if (!strcmp(answer, "$")) {
|
||||
current = filebot;
|
||||
current_x = 0;
|
||||
edit_update(current);
|
||||
edit_update(current, CENTER);
|
||||
goto_abort();
|
||||
return 1;
|
||||
}
|
||||
@@ -387,14 +541,14 @@ int do_gotoline(long defline)
|
||||
filebot->lineno);
|
||||
current = filebot;
|
||||
current_x = 0;
|
||||
edit_update(current);
|
||||
edit_update(current, CENTER);
|
||||
} else {
|
||||
for (fileptr = fileage; fileptr != NULL && i < line; i++)
|
||||
fileptr = fileptr->next;
|
||||
|
||||
current = fileptr;
|
||||
current_x = 0;
|
||||
edit_update(current);
|
||||
edit_update(current, CENTER);
|
||||
}
|
||||
|
||||
goto_abort();
|
||||
|
||||
23
utils.c
23
utils.c
@@ -1,3 +1,4 @@
|
||||
/* $Id$ */
|
||||
/**************************************************************************
|
||||
* utils.c *
|
||||
* *
|
||||
@@ -18,6 +19,7 @@
|
||||
* *
|
||||
**************************************************************************/
|
||||
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
@@ -80,7 +82,14 @@ char *strcasestr(char *haystack, char *needle)
|
||||
|
||||
char *strstrwrapper(char *haystack, char *needle)
|
||||
{
|
||||
|
||||
#ifdef HAVE_REGEX_H
|
||||
if (ISSET(USE_REGEXP)) {
|
||||
int result=regexec(&search_regexp, haystack, 10, regmatches, 0);
|
||||
if (!result)
|
||||
return haystack+regmatches[0].rm_so;
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
if (ISSET(CASE_SENSITIVE))
|
||||
return strstr(haystack, needle);
|
||||
else
|
||||
@@ -109,3 +118,15 @@ void *nrealloc(void *ptr, size_t howmuch)
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
/* Append a new magic-line to filebot */
|
||||
void new_magicline(void) {
|
||||
filebot->next = nmalloc(sizeof(filestruct));
|
||||
filebot->next->data = nmalloc(1);
|
||||
filebot->next->data[0] = '\0';
|
||||
filebot->next->prev = filebot;
|
||||
filebot->next->next = NULL;
|
||||
filebot->next->lineno = filebot->lineno + 1;
|
||||
filebot = filebot->next;
|
||||
totlines++;
|
||||
}
|
||||
|
||||
232
winio.c
232
winio.c
@@ -1,3 +1,4 @@
|
||||
/* $Id$ */
|
||||
/**************************************************************************
|
||||
* winio.c *
|
||||
* *
|
||||
@@ -20,6 +21,7 @@
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include "config.h"
|
||||
#include "proto.h"
|
||||
#include "nano.h"
|
||||
@@ -47,7 +49,7 @@ int do_first_line(void)
|
||||
current = fileage;
|
||||
placewewant = 0;
|
||||
current_x = 0;
|
||||
edit_update(current);
|
||||
edit_update(current, CENTER);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -56,7 +58,7 @@ int do_last_line(void)
|
||||
current = filebot;
|
||||
placewewant = 0;
|
||||
current_x = 0;
|
||||
edit_update(current);
|
||||
edit_update(current, CENTER);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -72,9 +74,9 @@ int xpt(filestruct * fileptr, int index)
|
||||
tabs++;
|
||||
|
||||
if (fileptr->data[i] == NANO_CONTROL_I) {
|
||||
if (tabs % TABSIZE == 0);
|
||||
if (tabs % tabsize == 0);
|
||||
else
|
||||
tabs += TABSIZE - (tabs % TABSIZE);
|
||||
tabs += tabsize - (tabs % tabsize);
|
||||
} else if (fileptr->data[i] & 0x80)
|
||||
/* Make 8 bit chars only 1 collumn! */
|
||||
;
|
||||
@@ -105,10 +107,10 @@ int actual_x_from_start(filestruct * fileptr, int xplus, int start)
|
||||
|
||||
for (i = start; tot <= xplus && fileptr->data[i] != 0; i++, tot++)
|
||||
if (fileptr->data[i] == NANO_CONTROL_I) {
|
||||
if (tot % TABSIZE == 0)
|
||||
if (tot % tabsize == 0)
|
||||
tot++;
|
||||
else
|
||||
tot += TABSIZE - (tot % TABSIZE);
|
||||
tot += tabsize - (tot % tabsize);
|
||||
} else if (fileptr->data[i] & 0x80)
|
||||
tot++; /* Make 8 bit chars only 1 column (again) */
|
||||
else if (fileptr->data[i] < 32)
|
||||
@@ -139,9 +141,9 @@ int strlenpt(char *buf)
|
||||
tabs++;
|
||||
|
||||
if (buf[i] == NANO_CONTROL_I) {
|
||||
if (tabs % TABSIZE == 0);
|
||||
if (tabs % tabsize == 0);
|
||||
else
|
||||
tabs += TABSIZE - (tabs % TABSIZE);
|
||||
tabs += tabsize - (tabs % tabsize);
|
||||
} else if (buf[i] & 0x80)
|
||||
/* Make 8 bit chars only 1 collumn! */
|
||||
;
|
||||
@@ -237,14 +239,10 @@ int nanogetstr(char *buf, char *def, shortcut s[], int slen, int start_x)
|
||||
strcpy(answer, def);
|
||||
strcpy(inputbuf, def);
|
||||
}
|
||||
/* Go into raw mode so we can actually get ^C, for example */
|
||||
raw();
|
||||
|
||||
while ((kbinput = wgetch(bottomwin)) != 13) {
|
||||
for (j = 0; j <= slen - 1; j++) {
|
||||
if (kbinput == s[j].val) {
|
||||
noraw();
|
||||
cbreak();
|
||||
strcpy(answer, "");
|
||||
return s[j].val;
|
||||
}
|
||||
@@ -417,8 +415,6 @@ int nanogetstr(char *buf, char *def, shortcut s[], int slen, int start_x)
|
||||
|
||||
strncpy(answer, inputbuf, 132);
|
||||
|
||||
noraw();
|
||||
cbreak();
|
||||
if (!strcmp(answer, ""))
|
||||
return -2;
|
||||
else
|
||||
@@ -466,7 +462,7 @@ void onekey(char *keystroke, char *desc)
|
||||
{
|
||||
char description[80];
|
||||
|
||||
snprintf(description, 12, " %-11s", desc);
|
||||
snprintf(description, 12, " %-10s", desc);
|
||||
wattron(bottomwin, A_REVERSE);
|
||||
waddstr(bottomwin, keystroke);
|
||||
wattroff(bottomwin, A_REVERSE);
|
||||
@@ -480,7 +476,6 @@ void clear_bottomwin(void)
|
||||
|
||||
mvwaddstr(bottomwin, 1, 0, hblank);
|
||||
mvwaddstr(bottomwin, 2, 0, hblank);
|
||||
wrefresh(bottomwin);
|
||||
}
|
||||
|
||||
void bottombars(shortcut s[], int slen)
|
||||
@@ -497,7 +492,7 @@ void bottombars(shortcut s[], int slen)
|
||||
clear_bottomwin();
|
||||
wmove(bottomwin, 1, 0);
|
||||
for (i = 0; i <= slen - 1; i += 2) {
|
||||
sprintf(keystr, "^%c", s[i].val + 64);
|
||||
snprintf(keystr, 10, "^%c", s[i].val + 64);
|
||||
onekey(keystr, s[i].desc);
|
||||
|
||||
for (j = 0; j < k; j++)
|
||||
@@ -506,7 +501,7 @@ void bottombars(shortcut s[], int slen)
|
||||
|
||||
wmove(bottomwin, 2, 0);
|
||||
for (i = 1; i <= slen - 1; i += 2) {
|
||||
sprintf(keystr, "^%c", s[i].val + 64);
|
||||
snprintf(keystr, 10, "^%c", s[i].val + 64);
|
||||
onekey(keystr, s[i].desc);
|
||||
|
||||
for (j = 0; j < k; j++)
|
||||
@@ -527,6 +522,10 @@ void set_modified(void)
|
||||
}
|
||||
}
|
||||
|
||||
/* And so start the display update routines */
|
||||
/* Given a column, this returns the "page" it is on */
|
||||
/* "page" in the case of the display columns, means which set of 80 */
|
||||
/* characters is viewable (ie: page 1 shows from 1 to COLS) */
|
||||
inline int get_page_from_virtual(int virtual)
|
||||
{
|
||||
int page = 2;
|
||||
@@ -543,6 +542,7 @@ inline int get_page_from_virtual(int virtual)
|
||||
return page;
|
||||
}
|
||||
|
||||
/* The inverse of the above function */
|
||||
inline int get_page_start_virtual(int page)
|
||||
{
|
||||
int virtual;
|
||||
@@ -558,16 +558,25 @@ inline int get_page_end_virtual(int page)
|
||||
}
|
||||
|
||||
#ifndef NANO_SMALL
|
||||
/* Called only from edit_add, and therefore expects a
|
||||
* converted-to-only-spaces line */
|
||||
/* This takes care of the case where there is a mark that covers only */
|
||||
/* the current line. */
|
||||
|
||||
/* It expects a line with no tab characers (ie: the type that edit_add */
|
||||
/* deals with */
|
||||
void add_marked_sameline(int begin, int end, filestruct * fileptr, int y,
|
||||
int virt_cur_x, int this_page)
|
||||
{
|
||||
/*
|
||||
* The general idea is to break the line up into 3 sections: before
|
||||
* the mark, the mark, and after the mark. We then paint each in
|
||||
* turn (for those that are currently visible, of course
|
||||
*
|
||||
* 3 start points: 0 -> begin, begin->end, end->strlen(data)
|
||||
* in data : pre sel post
|
||||
*/
|
||||
int this_page_start = get_page_start_virtual(this_page),
|
||||
this_page_end = get_page_end_virtual(this_page);
|
||||
|
||||
/* 3 start points: 0 -> begin, begin->end, end->strlen(data) */
|
||||
/* in data : pre sel post */
|
||||
/* likewise, 3 data lengths */
|
||||
int pre_data_len = begin, sel_data_len = end - begin, post_data_len = 0; /* Determined from the other two */
|
||||
|
||||
@@ -584,17 +593,17 @@ void add_marked_sameline(int begin, int end, filestruct * fileptr, int y,
|
||||
if (end < this_page_start)
|
||||
end = this_page_start;
|
||||
|
||||
/* we don't care about end, because it will just get cropped
|
||||
* due to length */
|
||||
if (begin > this_page_end)
|
||||
begin = this_page_end;
|
||||
|
||||
if (end > this_page_end)
|
||||
end = this_page_end;
|
||||
|
||||
/* Now calculate the lengths */
|
||||
sel_data_len = end - begin;
|
||||
post_data_len = this_page_end - end;
|
||||
|
||||
/* Paint this line! */
|
||||
mvwaddnstr(edit, y, 0, &fileptr->data[this_page_start], pre_data_len);
|
||||
wattron(edit, A_REVERSE);
|
||||
mvwaddnstr(edit, y, begin - this_page_start,
|
||||
@@ -605,39 +614,57 @@ void add_marked_sameline(int begin, int end, filestruct * fileptr, int y,
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Called only from update_line. Expects a converted-to-not-have-tabs
|
||||
/* edit_add takes care of the job of actually painting a line into the
|
||||
* edit window.
|
||||
*
|
||||
* Called only from update_line. Expects a converted-to-not-have-tabs
|
||||
* line */
|
||||
void edit_add(filestruct * fileptr, int yval, int start, int virt_cur_x,
|
||||
int virt_mark_beginx, int this_page)
|
||||
{
|
||||
#ifndef NANO_SMALL
|
||||
if (ISSET(MARK_ISSET)) {
|
||||
if ((fileptr->lineno > mark_beginbuf->lineno
|
||||
/* There are quite a few cases that could take place, we'll deal
|
||||
* with them each in turn */
|
||||
if (ISSET(MARK_ISSET)
|
||||
&& !((fileptr->lineno > mark_beginbuf->lineno
|
||||
&& fileptr->lineno > current->lineno)
|
||||
|| (fileptr->lineno < mark_beginbuf->lineno
|
||||
&& fileptr->lineno < current->lineno)) {
|
||||
|
||||
/* We're on a normal, unselected line */
|
||||
mvwaddnstr(edit, yval, 0, fileptr->data, COLS);
|
||||
} else {
|
||||
&& fileptr->lineno < current->lineno)))
|
||||
{
|
||||
/* If we get here we are on a line that is atleast
|
||||
* partially selected. The lineno checks above determined
|
||||
* that */
|
||||
if (fileptr != mark_beginbuf && fileptr != current) {
|
||||
/* We're on selected text */
|
||||
/* We are on a completely marked line, paint it all
|
||||
* inverse */
|
||||
wattron(edit, A_REVERSE);
|
||||
mvwaddnstr(edit, yval, 0, fileptr->data, COLS);
|
||||
wattroff(edit, A_REVERSE);
|
||||
} else if (fileptr == mark_beginbuf && fileptr == current) {
|
||||
/* Special case, we're still on the same line we started
|
||||
* marking */
|
||||
if (virt_cur_x < virt_mark_beginx)
|
||||
* marking -- so we call our helper function */
|
||||
if (virt_cur_x < virt_mark_beginx) {
|
||||
/* To the right of us is marked */
|
||||
add_marked_sameline(virt_cur_x, virt_mark_beginx,
|
||||
fileptr, yval, virt_cur_x,
|
||||
this_page);
|
||||
else
|
||||
} else {
|
||||
/* To the left of us is marked */
|
||||
add_marked_sameline(virt_mark_beginx, virt_cur_x,
|
||||
fileptr, yval, virt_cur_x,
|
||||
this_page);
|
||||
}
|
||||
} else if (fileptr == mark_beginbuf) {
|
||||
/* we're updating the line that was first marked */
|
||||
/*
|
||||
* we're updating the line that was first marked
|
||||
* but we're not currently on it. So we want to
|
||||
* figur out which half to invert based on our
|
||||
* relative line numbers.
|
||||
*
|
||||
* i.e. If we're above the "beginbuf" line, we want to
|
||||
* mark the left side. Otherwise we're below, so we
|
||||
* mark the right
|
||||
*/
|
||||
int target;
|
||||
|
||||
if (mark_beginbuf->lineno > current->lineno)
|
||||
@@ -666,7 +693,7 @@ void edit_add(filestruct * fileptr, int yval, int start, int virt_cur_x,
|
||||
|
||||
} else if (fileptr == current) {
|
||||
/* we're on the cursors line, but it's not the first
|
||||
* one we marked... */
|
||||
* one we marked. Similar to the previous logic. */
|
||||
int this_page_start = get_page_start_virtual(this_page),
|
||||
this_page_end = get_page_end_virtual(this_page);
|
||||
|
||||
@@ -697,17 +724,18 @@ void edit_add(filestruct * fileptr, int yval, int start, int virt_cur_x,
|
||||
|
||||
if (mark_beginbuf->lineno > current->lineno)
|
||||
wattroff(edit, A_REVERSE);
|
||||
}
|
||||
}
|
||||
|
||||
} else
|
||||
#endif
|
||||
/* Just paint the string (no mark on this line) */
|
||||
mvwaddnstr(edit, yval, 0, &fileptr->data[start],
|
||||
get_page_end_virtual(this_page) - start);
|
||||
}
|
||||
|
||||
/*
|
||||
* Just update one line in the edit buffer
|
||||
* Just update one line in the edit buffer. Basically a wrapper for
|
||||
* edit_add
|
||||
*
|
||||
* index gives is a place in the string to update starting from.
|
||||
* Likely args are current_x or 0.
|
||||
@@ -746,12 +774,17 @@ void update_line(filestruct * fileptr, int index)
|
||||
virt_cur_x++;
|
||||
if (i < mark_beginx)
|
||||
virt_mark_beginx++;
|
||||
} while (pos % TABSIZE);
|
||||
} while (pos % tabsize);
|
||||
/* must decrement once to account for tab-is-one-character */
|
||||
if (i < current_x)
|
||||
virt_cur_x--;
|
||||
if (i < mark_beginx)
|
||||
virt_mark_beginx--;
|
||||
}
|
||||
else if (realdata[i] >= 1 && realdata[i] <= 26) {
|
||||
/* Treat control characters as ^letter */
|
||||
fileptr->data[pos++] = '^';
|
||||
fileptr->data[pos++] = realdata[i] + 64;
|
||||
} else {
|
||||
fileptr->data[pos++] = realdata[i];
|
||||
}
|
||||
@@ -795,7 +828,8 @@ void center_cursor(void)
|
||||
/* Refresh the screen without changing the position of lines */
|
||||
void edit_refresh(void)
|
||||
{
|
||||
int lines = 0, i = 0;
|
||||
static int noloop = 0;
|
||||
int lines = 0, i = 0, currentcheck = 0;
|
||||
filestruct *temp, *hold = current;
|
||||
|
||||
if (current == NULL)
|
||||
@@ -806,9 +840,21 @@ void edit_refresh(void)
|
||||
while (lines <= editwinrows - 1 && lines <= totlines && temp != NULL) {
|
||||
hold = temp;
|
||||
update_line(temp, current_x);
|
||||
if (temp == current)
|
||||
currentcheck = 1;
|
||||
|
||||
temp = temp->next;
|
||||
lines++;
|
||||
}
|
||||
/* If noloop == 1, then we already did an edit_update without finishing
|
||||
this function. So we don't run edit_update again */
|
||||
if (!currentcheck && !noloop) /* Then current has run off the screen... */
|
||||
{
|
||||
edit_update(current, CENTER);
|
||||
noloop = 1;
|
||||
}
|
||||
else if (noloop)
|
||||
noloop = 0;
|
||||
|
||||
if (lines <= editwinrows - 1)
|
||||
while (lines <= editwinrows - 1) {
|
||||
@@ -821,67 +867,44 @@ void edit_refresh(void)
|
||||
editbot = temp;
|
||||
}
|
||||
|
||||
/*
|
||||
* Same as above, but touch the window first so everything is redrawn.
|
||||
*/
|
||||
void edit_refresh_clearok(void)
|
||||
{
|
||||
clearok(edit, TRUE);
|
||||
edit_refresh();
|
||||
clearok(edit, FALSE);
|
||||
}
|
||||
|
||||
/*
|
||||
* Nice generic routine to update the edit buffer given a pointer to the
|
||||
* file struct =)
|
||||
*/
|
||||
void edit_update(filestruct * fileptr)
|
||||
void edit_update(filestruct * fileptr, int topmidbot)
|
||||
{
|
||||
|
||||
int lines = 0, i = 0;
|
||||
int i = 0;
|
||||
filestruct *temp;
|
||||
|
||||
if (fileptr == NULL)
|
||||
return;
|
||||
|
||||
temp = fileptr;
|
||||
while (i <= editwinrows / 2 && temp->prev != NULL) {
|
||||
i++;
|
||||
temp = temp->prev;
|
||||
}
|
||||
edittop = temp;
|
||||
if (topmidbot == 2)
|
||||
;
|
||||
else if (topmidbot == 0)
|
||||
for (i = 0; i <= editwinrows - 1 && temp->prev != NULL; i++)
|
||||
temp = temp->prev;
|
||||
else
|
||||
for (i = 0; i <= editwinrows / 2 && temp->prev != NULL; i++)
|
||||
temp = temp->prev;
|
||||
|
||||
while (lines <= editwinrows - 1 && lines <= totlines && temp != NULL
|
||||
&& temp != filebot) {
|
||||
temp = temp->next;
|
||||
lines++;
|
||||
}
|
||||
editbot = temp;
|
||||
edittop = temp;
|
||||
fix_editbot();
|
||||
|
||||
edit_refresh();
|
||||
}
|
||||
|
||||
/* Now we want to update the screen using this struct as the top of the edit buffer */
|
||||
void edit_update_top(filestruct * fileptr)
|
||||
{
|
||||
int i;
|
||||
filestruct *temp = fileptr;
|
||||
|
||||
if (fileptr->next == NULL || fileptr == NULL)
|
||||
return;
|
||||
|
||||
i = 0;
|
||||
while (i <= editwinrows / 2 && temp->next != NULL) {
|
||||
i++;
|
||||
temp = temp->next;
|
||||
}
|
||||
edit_update(temp);
|
||||
}
|
||||
|
||||
/* And also for the bottom... */
|
||||
void edit_update_bot(filestruct * fileptr)
|
||||
{
|
||||
int i;
|
||||
filestruct *temp = fileptr;
|
||||
|
||||
i = 0;
|
||||
while (i <= editwinrows / 2 - 1 && temp->prev != NULL) {
|
||||
i++;
|
||||
temp = temp->prev;
|
||||
}
|
||||
edit_update(temp);
|
||||
}
|
||||
|
||||
/* This function updates current based on where current_y is, reset_cursor
|
||||
does the opposite */
|
||||
void update_cursor(void)
|
||||
@@ -921,8 +944,8 @@ int statusq(shortcut s[], int slen, char *def, char *msg, ...)
|
||||
|
||||
va_start(ap, msg);
|
||||
vsnprintf(foo, 132, msg, ap);
|
||||
strncat(foo, ": ", 132);
|
||||
va_end(ap);
|
||||
strncat(foo, ": ", 132);
|
||||
|
||||
wattron(bottomwin, A_REVERSE);
|
||||
ret = nanogetstr(foo, def, s, slen, (strlen(foo) + 3));
|
||||
@@ -965,14 +988,15 @@ int do_yesno(int all, int leavecursor, char *msg, ...)
|
||||
blank_statusbar_refresh();
|
||||
wattroff(bottomwin, A_REVERSE);
|
||||
|
||||
/* Remove gettext call for keybindings until we clear the thing up */
|
||||
if (!ISSET(NO_HELP)) {
|
||||
wmove(bottomwin, 1, 0);
|
||||
onekey(_(" Y"), _("Yes"));
|
||||
onekey(" Y", _("Yes"));
|
||||
if (all)
|
||||
onekey(_(" A"), _("All"));
|
||||
onekey(" A", _("All"));
|
||||
wmove(bottomwin, 2, 0);
|
||||
onekey(_(" N"), _("No"));
|
||||
onekey(_("^C"), _("Cancel"));
|
||||
onekey(" N", _("No"));
|
||||
onekey("^C", _("Cancel"));
|
||||
}
|
||||
va_start(ap, msg);
|
||||
vsnprintf(foo, 132, msg, ap);
|
||||
@@ -985,8 +1009,6 @@ int do_yesno(int all, int leavecursor, char *msg, ...)
|
||||
if (leavecursor == 1)
|
||||
reset_cursor();
|
||||
|
||||
raw();
|
||||
|
||||
while (ok == -1) {
|
||||
kbinput = wgetch(edit);
|
||||
|
||||
@@ -1009,8 +1031,6 @@ int do_yesno(int all, int leavecursor, char *msg, ...)
|
||||
break;
|
||||
}
|
||||
}
|
||||
noraw();
|
||||
cbreak();
|
||||
|
||||
/* Then blank the screen */
|
||||
blank_statusbar_refresh();
|
||||
@@ -1069,7 +1089,8 @@ int total_refresh(void)
|
||||
clearok(edit, FALSE);
|
||||
clearok(topwin, FALSE);
|
||||
clearok(bottomwin, FALSE);
|
||||
|
||||
edit_refresh();
|
||||
titlebar();
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -1173,7 +1194,8 @@ int do_help(void)
|
||||
for (i = 1; i < page; i++) {
|
||||
row = 0;
|
||||
j = 0;
|
||||
while (row < editwinrows && *ptr != '\0') {
|
||||
|
||||
while (row < editwinrows - 2 && *ptr != '\0') {
|
||||
if (*ptr == '\n' || j == COLS - 5) {
|
||||
j = 0;
|
||||
row++;
|
||||
@@ -1183,6 +1205,10 @@ int do_help(void)
|
||||
}
|
||||
}
|
||||
|
||||
if (i > 1) {
|
||||
|
||||
}
|
||||
|
||||
i = 0;
|
||||
j = 0;
|
||||
while (i < editwinrows && *ptr != '\0') {
|
||||
@@ -1211,7 +1237,6 @@ int do_help(void)
|
||||
continue;
|
||||
}
|
||||
} while ((kbinput = wgetch(edit)) != NANO_EXIT_KEY);
|
||||
|
||||
if (no_help_flag) {
|
||||
werase(bottomwin);
|
||||
wrefresh(bottomwin);
|
||||
@@ -1267,3 +1292,12 @@ void dump_buffer_reverse(filestruct * inptr)
|
||||
}
|
||||
#endif /* DEBUG */
|
||||
}
|
||||
|
||||
/* Fix editbot based on the assumption that edittop is correct */
|
||||
void fix_editbot(void) {
|
||||
int i;
|
||||
editbot = edittop;
|
||||
for(i = 0; (i <= editwinrows - 1) && (editbot->next != NULL)
|
||||
&& (editbot != filebot); i++, editbot = editbot->next);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user