DLR's latest patch

git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1204 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
This commit is contained in:
Chris Allegretta 2002-05-11 03:04:44 +00:00
parent 7c27be42d0
commit 4dc03d5733
12 changed files with 177 additions and 141 deletions

View File

@ -24,6 +24,11 @@ CVS code -
syntaxfile_regexp and synfilematches. Global flag -Y ,--syntax
to specify the type on the command line, if there's no good
filename regex to use. Global variable syntaxstr.
- Changed many strcmp()s and strcpy()s to their equivalent
'\0' conterparts (David Lawrence Ramsey).
- Many chanes to allow marked cutting to work with multiple
file buffers: changes to openfilestruct type in nano.h and
files.c (David Lawrence Ramsey).
- configure.ac:
- Define NDEBUG to silence asserts (David Benbennick).
- files.c:
@ -47,10 +52,15 @@ CVS code -
- nano.spec.in:
- Don't put Chris' name as the Packager in the distribution
by default (Im an idiot).
- Fixed Source line (David Lawrence Ramsey).
- nano.1:
- Changed references to Debian GNU/Linux to Debian GNU (Jordi).
- nano.1.html:
- Updated for -Y option (David Lawrence Ramsey).
- rcfile.c
- Made some rc file errors less fatal.
- Added in my patch for getpwent instead of relying on $HOME
(David Lawrence Ramsey).
- winio.c:
edit_add()
- Changed some syntax hilight computations for the sake of COLS.

151
files.c
View File

@ -50,15 +50,15 @@ static int fileformat = 0; /* 0 = *nix, 1 = DOS, 2 = Mac */
#endif
/* Load file into edit buffer - takes data from file struct */
void load_file(int quiet)
void load_file(int update)
{
current = fileage;
#ifdef ENABLE_MULTIBUFFER
/* if quiet is zero, add a new entry to the open_files structure;
/* if update is zero, add a new entry to the open_files structure;
otherwise, update the current entry (the latter is needed in the
case of the alternate spell checker) */
add_open_file(quiet);
add_open_file(update);
#endif
#ifdef ENABLE_COLOR
@ -73,7 +73,7 @@ void new_file(void)
{
fileage = nmalloc(sizeof(filestruct));
fileage->data = charalloc(1);
strcpy(fileage->data, "");
fileage->data[0] = '\0';
fileage->prev = NULL;
fileage->next = NULL;
fileage->lineno = 1;
@ -88,7 +88,7 @@ void new_file(void)
/* if there aren't any entries in open_files, create the entry for
this new file; without this, if nano is started without a filename
on the command line, a new file will be created, but it will be
given no open_files entry, leading to problems later on */
given no open_files entry */
if (!open_files) {
add_open_file(0);
/* turn off view mode in this case; this is for consistency
@ -108,7 +108,7 @@ void new_file(void)
}
filestruct *read_line(char *buf, filestruct * prev, int *line1ins)
filestruct *read_line(char *buf, filestruct *prev, int *line1ins)
{
filestruct *fileptr;
@ -156,10 +156,10 @@ filestruct *read_line(char *buf, filestruct * prev, int *line1ins)
return fileptr;
}
int read_file(FILE *f, char *filename, int quiet)
int read_file(FILE *f, const char *filename, int quiet)
{
int num_lines = 0;
char input; /* current input character */
signed char input; /* current input character */
char *buf;
long i = 0, bufx = 128;
filestruct *fileptr = current, *tmp = NULL;
@ -260,7 +260,9 @@ int read_file(FILE *f, char *filename, int quiet)
new_magicline();
totsize--;
/* Update the edit buffer */
/* Update the edit buffer; note that if using multibuffers, a
quiet load will update the current open_files entry, while a
noisy load will add a new open_files entry */
load_file(quiet);
}
@ -281,15 +283,14 @@ int read_file(FILE *f, char *filename, int quiet)
return 1;
}
/* Open the file (and decide if it exists) */
int open_file(char *filename, int insert, int quiet)
int open_file(const char *filename, int insert, int quiet)
{
int fd;
FILE *f;
struct stat fileinfo;
if (!strcmp(filename, "") || stat(filename, &fileinfo) == -1) {
if (filename[0] == '\0' || stat(filename, &fileinfo) == -1) {
if (insert && !quiet) {
statusbar(_("\"%s\" not found"), filename);
return -1;
@ -313,7 +314,6 @@ int open_file(char *filename, int insert, int quiet)
/* Don't open character or block files. Sorry, /dev/sndstat! */
statusbar(_("File \"%s\" is a device file"), filename);
if (!insert)
new_file();
return -1;
@ -331,7 +331,6 @@ int open_file(char *filename, int insert, int quiet)
return 1;
}
/* This function will return the name of the first available extension
of a filename (starting with the filename, then filename.1, etc).
Memory is allocated for the return value. If no writable extension
@ -365,7 +364,7 @@ char *get_next_filename(const char *name)
int do_insertfile(int loading_file)
{
int i;
int i, old_current_x = current_x;
char *realname = NULL;
wrap_reset();
@ -428,7 +427,7 @@ int do_insertfile(int loading_file)
if (i == NANO_EXTCMD_KEY) {
int ts;
ts = statusq(1, extcmd_list, "", _("Command to execute "));
if (ts == -1 || answer == NULL || !strcmp(answer,"")) {
if (ts == -1 || answer == NULL || answer[0] == '\0') {
statusbar(_("Cancelled"));
UNSET(KEEP_CUTBUFFER);
display_main_list();
@ -445,6 +444,9 @@ int do_insertfile(int loading_file)
new_file();
UNSET(MODIFIED);
#ifndef NANO_SMALL
UNSET(MARK_ISSET);
#endif
}
#endif
@ -489,6 +491,17 @@ int do_insertfile(int loading_file)
}
#endif
#ifdef ENABLE_MULTIBUFFER
if (!loading_file) {
#endif
/* Restore the old x-coordinate position */
current_x = old_current_x;
#ifdef ENABLE_MULTIBUFFER
}
#endif
/* If we've gone off the bottom, recenter; otherwise, just redraw */
if (current->lineno > editbot->lineno)
edit_update(current, CENTER);
@ -582,19 +595,29 @@ int add_open_file(int update)
/* save current line number */
open_files->file_lineno = current->lineno;
/* if we're updating, save current modification status (and marking
status, if available) */
if (update) {
#ifndef NANO_SMALL
open_files->file_flags = (MODIFIED & ISSET(MODIFIED)) | (MARK_ISSET & ISSET(MARK_ISSET));
if (ISSET(MARK_ISSET)) {
open_files->file_mark_beginbuf = mark_beginbuf;
open_files->file_mark_beginx = mark_beginx;
}
#else
open_files->file_flags = (MODIFIED & ISSET(MODIFIED));
#endif
}
/* if we're in view mode and updating, the file contents won't
have changed, so we won't bother resaving the filestruct
then; otherwise, we will */
if (!(ISSET(VIEW_MODE) && !update)) {
/* save current filestruct and restore full file position
afterward */
open_files->fileage = fileage;
do_gotopos(open_files->file_lineno, open_files->file_current_x, open_files->file_current_y, open_files->file_placewewant);
/* save current file buffer */
open_files->fileage = fileage;
open_files->filebot = filebot;
}
/* save current modification status */
open_files->file_modified = ISSET(MODIFIED);
#ifdef DEBUG
fprintf(stderr, _("filename is %s"), open_files->filename);
#endif
@ -602,21 +625,6 @@ int add_open_file(int update)
return 0;
}
/*
* Update only the filename stored in the current entry. Return 0 on
* success or 1 on error.
*/
int open_file_change_name(void)
{
if (!open_files || !filename)
return 1;
/* save current filename */
open_files->filename = mallocstrcpy(open_files->filename, filename);
return 0;
}
/*
* Read the current entry in the open_files structure and set up the
* currently open file using that entry's information. Return 0 on
@ -624,7 +632,6 @@ int open_file_change_name(void)
*/
int load_open_file(void)
{
if (!open_files)
return 1;
@ -633,27 +640,31 @@ int load_open_file(void)
filename = mallocstrcpy(filename, open_files->filename);
fileage = open_files->fileage;
current = fileage;
filebot = open_files->filebot;
totlines = open_files->file_totlines;
totsize = open_files->file_totsize;
/* Unset the marker because nano can't (yet) handle marked text
flipping between open files */
UNSET(MARK_ISSET);
/* restore modification status */
if (open_files->file_flags & MODIFIED)
SET(MODIFIED);
else
UNSET(MODIFIED);
#ifndef NANO_SMALL
/* restore marking status */
if (open_files->file_flags & MARK_ISSET) {
mark_beginbuf = open_files->file_mark_beginbuf;
mark_beginx = open_files->file_mark_beginx;
SET(MARK_ISSET);
} else
UNSET(MARK_ISSET);
#endif
/* restore full file position: line number, x-coordinate, y-
coordinate, place we want */
do_gotopos(open_files->file_lineno, open_files->file_current_x, open_files->file_current_y, open_files->file_placewewant);
/* restore the bottom of the file */
filebot = current;
while (filebot->next)
filebot = filebot->next;
/* set up modification status and update the titlebar */
if (open_files->file_modified)
SET(MODIFIED);
else
UNSET(MODIFIED);
/* update the titlebar */
clearok(topwin, FALSE);
titlebar(NULL);
@ -811,7 +822,11 @@ int close_open_file(void)
if (!open_files)
return 1;
/* make sure open_files->fileage and fileage, and open_files->filebot
and filebot, are in sync; they might not be if lines have been cut
from the top or bottom of the file */
open_files->fileage = fileage;
open_files->filebot = filebot;
tmp = open_files;
if (open_nextfile(1)) {
@ -1203,7 +1218,7 @@ int write_file(char *name, int tmp, int append, int nonamechange)
struct stat st, lst;
char *realname = NULL;
if (!strcmp(name, "")) {
if (name[0] == '\0') {
statusbar(_("Cancelled"));
return -1;
}
@ -1224,8 +1239,9 @@ int write_file(char *name, int tmp, int append, int nonamechange)
#ifndef DISABLE_OPERATINGDIR
if (!tmp && operating_dir) {
/* if we're writing a temporary file, we're going outside the
operating directory, so skip the operating directory test */
/* if we're writing a temporary file, we're probably going
outside the operating directory, so skip the operating
directory test */
if (check_operating_dir(realname, 0)) {
statusbar(_("Can't write outside of %s"), operating_dir);
@ -1634,21 +1650,8 @@ int do_writeout(char *path, int exiting, int append)
#ifdef ENABLE_MULTIBUFFER
/* if we're not about to exit, update the current entry in
the open_files structure */
if (!exiting) {
/* first, if the filename was changed during the save,
update the filename stored in the current entry, and
then update the current entry */
if (strcmp(open_files->filename, filename)) {
open_file_change_name();
add_open_file(1);
}
else {
/* otherwise, just update the current entry */
add_open_file(1);
}
}
if (!exiting)
add_open_file(1);
#endif
display_main_list();
@ -1825,7 +1828,7 @@ char **cwd_tab_completion(char *buf, int *num_matches)
strcat(buf, "*");
/* Okie, if there's a / in the buffer, strip out the directory part */
if (strcmp(buf, "") && strstr(buf, "/")) {
if (buf[0] != '\0' && strstr(buf, "/")) {
dirName = charalloc(strlen(buf) + 1);
tmp = buf + strlen(buf);
while (*tmp != '/' && tmp != buf)
@ -1988,7 +1991,7 @@ char *input_tab(char *buf, int place, int *lastWasTab, int *newplace, int *list)
buf = nrealloc(buf, strlen(buf) + strlen(matches[0]) + 1);
if (strcmp(buf, "") && strstr(buf, "/")) {
if (buf[0] != '\0' && strstr(buf, "/")) {
for (tmp = buf + strlen(buf); *tmp != '/' && tmp != buf;
tmp--);
tmp++;
@ -2025,7 +2028,7 @@ char *input_tab(char *buf, int place, int *lastWasTab, int *newplace, int *list)
/* Check to see if all matches share a beginning, and, if so,
tack it onto buf and then beep */
if (strcmp(buf, "") && strstr(buf, "/")) {
if (buf[0] != '\0' && strstr(buf, "/")) {
for (tmp = buf + strlen(buf); *tmp != '/' && tmp != buf;
tmp--);
tmp++;
@ -2624,7 +2627,7 @@ char *do_browser(char *inpath)
} while ((kbinput = wgetch(edit)) != NANO_EXIT_KEY);
curs_set(1);
blank_edit();
titlebar(NULL);
titlebar(NULL);
edit_refresh();
kb = keypad_on(edit, kb);

7
move.c
View File

@ -113,12 +113,8 @@ int do_down(void)
wrap_reset();
if (current->next != NULL) {
update_line(current->prev, 0);
if (placewewant > 0)
current_x = actual_x(current->next, placewewant);
if (current_x > strlen(current->next->data))
current_x = strlen(current->next->data);
} else {
UNSET(KEEP_CUTBUFFER);
check_statblank();
@ -193,9 +189,6 @@ int do_up(void)
if (current->prev != NULL) {
if (placewewant > 0)
current_x = actual_x(current->prev, placewewant);
if (current_x > strlen(current->prev->data))
current_x = strlen(current->prev->data);
}
if (current_y > 0)
current_y--;

8
nano.1
View File

@ -130,9 +130,11 @@ Nano will try to dump the buffer into an emergency file in some cases.
Mainly, this will happen if Nano receives a SIGHUP or runs out of
memory, when it will write the buffer into a file named "nano.save" if the
buffer didn't have a name already, or will add a ".save" suffix to the
current filename. In multibuffer mode, nano will write all the open buffers to
the respective emergency files. Nano will \fBnot\fP write this file if a
previous one exists in the current directory.
current filename. If an emergency file with that name already exists in
the current directory, ".save" and a number (e.g. ".save.1") will be
suffixed to the current filename in order to make it unique. In
multibuffer mode, nano will write all the open buffers to the respective
emergency files.
.SH BUGS
Please send any comments or bug reports to
.br

View File

@ -88,6 +88,10 @@ Set the size (width) of a tab.
<DD>
Show the current version number and author.
<DT><B>-Y (--syntax=[str])</B>
<DD>
Specify a specific syntax hilighting from the .nanorc to use (if available).
<DT><B>-c (--const)</B>
<DD>
@ -171,9 +175,11 @@ Nano will try to dump the buffer into an emergency file in some cases.
Mainly, this will happen if Nano receives a SIGHUP or runs out of
memory, when it will write the buffer into a file named &quot;nano.save&quot; if the
buffer didn't have a name already, or will add a &quot;.save&quot; suffix to the
current filename. In multibuffer mode, nano will write all the open buffers to
the respective emergency files. Nano will <B>not</B> write this file if a
previous one exists in the current directory.
current filename. If an emergency file with that name already exists in
the current directory, &quot;.save&quot; and a number (e.g. &quot;.save.1&quot;) will be
suffixed to the current filename in order to make it unique. In
multibuffer mode, nano will write all the open buffers to the respective
emergency files.
<A NAME="lbAG">&nbsp;</A>
<H2>BUGS</H2>
@ -201,7 +207,7 @@ subject of &quot;subscribe&quot;.
Chris Allegretta &lt;<A HREF="mailto:chrisa@asty.org">chrisa@asty.org</A>&gt;, et al (see AUTHORS and THANKS for
details).
This manual page was originally written by Jordi Mallach
&lt;<A HREF="mailto:jordi@sindominio.net">jordi@sindominio.net</A>&gt;, for the Debian GNU/Linux system (but may be
&lt;<A HREF="mailto:jordi@sindominio.net">jordi@sindominio.net</A>&gt;, for the Debian GNU system (but may be
used by others).
<P>
@ -221,6 +227,6 @@ used by others).
This document was created by
<A HREF="http://localhost/cgi-bin/man/man2html">man2html</A>,
using the manual pages.<BR>
Time: 12:14:20 GMT, March 04, 2002
Time: 19:17:30 GMT, May 08, 2002
</BODY>
</HTML>

28
nano.c
View File

@ -143,9 +143,14 @@ void die(char *msg, ...)
/* if we already saved the file above (i. e. if it was the
currently loaded file), don't save it again */
if (tmp != open_files) {
/* make sure open_files->fileage and fileage, and
open_files->filebot and filebot, are in sync; they
might not be if lines have been cut from the top or
bottom of the file */
fileage = open_files->fileage;
filebot = open_files->filebot;
/* save the file if it's been modified */
if (open_files->file_modified)
if (open_files->file_flags & MODIFIED)
die_save_file(open_files->filename);
}
@ -168,7 +173,7 @@ void die_save_file(char *die_filename)
if (die_filename[0] == '\0') {
name = "nano.save";
ret = get_next_filename(name);
if (strcmp(ret, ""))
if (ret[0] != '\0')
i = write_file(ret, 1, 0, 0);
name = ret;
}
@ -177,7 +182,7 @@ void die_save_file(char *die_filename)
strcpy(buf, die_filename);
strcat(buf, ".save");
ret = get_next_filename(buf);
if (strcmp(ret, ""))
if (ret[0] != '\0')
i = write_file(ret, 1, 0, 0);
name = ret;
free(buf);
@ -637,6 +642,7 @@ openfilestruct *make_new_opennode(openfilestruct * prevnode)
newnode = nmalloc(sizeof(openfilestruct));
newnode->filename = NULL;
newnode->fileage = NULL;
newnode->filebot = NULL;
newnode->prev = prevnode;
newnode->next = NULL;
@ -1267,7 +1273,7 @@ int do_backspace(void)
line we're on now is NOT blank. if it is blank we
can just use IT for the magic line. This is how Pico
appears to do it, in any case */
if (strcmp(current->data, "")) {
if (current->data[0] != '\0') {
new_magicline();
fix_editbot();
}
@ -1297,7 +1303,7 @@ int do_delete(void)
/* blbf -> blank line before filebot (see below) */
int blbf = 0;
if (current->next == filebot && !strcmp(current->data, ""))
if (current->next == filebot && current->data[0] == '\0')
blbf = 1;
if (current_x != strlen(current->data)) {
@ -1329,7 +1335,7 @@ int do_delete(void)
/* Please see the comment in do_backspace if you don't understand
this test */
if (current == filebot && strcmp(current->data, "")) {
if (current == filebot && current->data[0] != '\0') {
new_magicline();
fix_editbot();
totsize++;
@ -1407,7 +1413,7 @@ int do_int_spell_fix(char *word)
search_last_line = FALSE;
if (strcmp(prevanswer,answer) != 0) {
if (strcmp(prevanswer, answer)) {
j = i;
do_replace_loop(prevanswer, fileage, &beginx_top, TRUE, &j);
}
@ -1475,7 +1481,6 @@ int do_int_speller(char *tempfile_name)
}
close(tempfile_fd);
/* send spell's standard out to the pipe */
if (dup2(in_fd[1], STDOUT_FILENO) != STDOUT_FILENO) {
@ -1662,8 +1667,7 @@ int do_spell(void)
#ifdef ENABLE_MULTIBUFFER
/* update the current open_files entry before spell-checking, in case
any problems occur; the case of there being no open_files entries
is handled elsewhere (before we reach this point) */
any problems occur */
add_open_file(1);
#endif
@ -3098,8 +3102,6 @@ int main(int argc, char *argv[])
fprintf(stderr, _("Main: open file\n"));
#endif
titlebar(NULL);
/* Now we check to see if argv[optind] is non-null to determine if
we're dealing with a new file or not, not argc == 1... */
if (argv[optind] == NULL)
@ -3107,6 +3109,8 @@ int main(int argc, char *argv[])
else
open_file(filename, 0, 0);
titlebar(NULL);
if (startline > 0)
do_gotoline(startline, 0);
else

11
nano.h
View File

@ -82,9 +82,18 @@ typedef struct openfilestruct {
struct openfilestruct *next; /* Next node */
struct openfilestruct *prev; /* Previous node */
struct filestruct *fileage; /* Current file */
struct filestruct *filebot; /* Current file's last line */
#ifndef NANO_SMALL
struct filestruct *file_mark_beginbuf;
/* Current file's beginning marked line */
int file_mark_beginx; /* Current file's beginning marked line's
x-coordinate position */
#endif
int file_current_x; /* Current file's x-coordinate position */
int file_current_y; /* Current file's y-coordinate position */
int file_modified; /* Current file's modification status */
int file_flags; /* Current file's flags: modification
status (and marking status, if
available) */
int file_placewewant; /* Current file's place we want */
int file_totlines; /* Current file's total number of lines */
long file_totsize; /* Current file's total size */

View File

@ -9,7 +9,7 @@ Release : %{rel}
Copyright : GPL
Group : Console/Editors
URL : http://www.nano-editor.org
Source : http://www.nano-editor.org/dist/v1.1/%{name}/%{name}-%{ver}.tar.gz
Source : http://www.nano-editor.org/dist/v1.1/%{name}-%{ver}.tar.gz
BuildRoot : /var/tmp/%{name}-buildroot
Requires : ncurses

View File

@ -132,11 +132,11 @@ int do_cut_text(void);
int do_uncut_text(void);
int no_help(void);
int renumber_all(void);
int open_file(char *filename, int insert, int quiet);
int open_file(const char *filename, int insert, int quiet);
int do_insertfile(int loading_file);
int num_of_digits(int n);
int open_pipe(char *command);
int read_file(FILE *f, char *filename, int quiet);
int read_file(FILE *f, const char *filename, int quiet);
#ifdef ENABLE_MULTIBUFFER
int add_open_file(int update);

View File

@ -24,6 +24,8 @@
#include <string.h>
#include <stdio.h>
#include <errno.h>
#include <unistd.h>
#include <pwd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
@ -546,9 +548,7 @@ void do_rcfile(void)
char *unable = _("Unable to open ~/.nanorc file, %s");
struct stat fileinfo;
FILE *rcstream;
if (getenv("HOME") == NULL)
return;
struct passwd *userage;
nanorc = charalloc(strlen(SYSCONFDIR) + 10);
sprintf(nanorc, "%s/nanorc", SYSCONFDIR);
@ -562,10 +562,21 @@ void do_rcfile(void)
fclose(rcstream);
}
nanorc = charalloc(strlen(getenv("HOME")) + 10);
sprintf(nanorc, "%s/.nanorc", getenv("HOME"));
lineno = 0;
/* Determine home directory using getpwent(), don't rely on $HOME */
for (userage = getpwent(); userage != NULL
&& userage->pw_uid != geteuid(); userage = getpwent())
;
if (userage == NULL) {
rcfile_error(_("I can't find my home directory! Wah!"));
return;
}
nanorc = charalloc(strlen(userage->pw_dir) + 10);
sprintf(nanorc, "%s/.nanorc", userage->pw_dir);
if (stat(nanorc, &fileinfo) == -1) {
/* Abort if the file doesn't exist and there's some other kind

View File

@ -56,11 +56,11 @@ void search_init_globals(void)
{
if (last_search == NULL) {
last_search = charalloc(1);
last_search[0] = 0;
last_search[0] = '\0';
}
if (last_replace == NULL) {
last_replace = charalloc(1);
last_replace[0] = 0;
last_replace[0] = '\0';
}
}
@ -82,7 +82,7 @@ int search_init(int replacing)
search_init_globals();
buf = charalloc(strlen(last_search) + 5);
buf[0] = 0;
buf[0] = '\0';
/* Clear the backupstring if we've changed from Pico mode to regular
@ -123,7 +123,7 @@ int search_init(int replacing)
}
}
else
strcpy(buf, "");
buf[0] = '\0';
/* This is now one simple call. It just does a lot */
i = statusq(0, replacing ? replace_list : whereis_list, backupstring,
@ -247,10 +247,9 @@ int past_editbuff; /* findnextstr() is now searching lines not displayed */
filestruct *findnextstr(int quiet, int bracket_mode, filestruct * begin, int beginx,
char *needle)
{
filestruct *fileptr;
filestruct *fileptr = current;
char *searchstr, *rev_start = NULL, *found = NULL;
int current_x_find = 0;
fileptr = current;
past_editbuff = 0;
@ -278,6 +277,7 @@ filestruct *findnextstr(int quiet, int bracket_mode, filestruct * begin, int beg
return NULL;
}
update_line(fileptr, 0);
fileptr = fileptr->next;
if (fileptr == editbot)
@ -286,12 +286,12 @@ filestruct *findnextstr(int quiet, int bracket_mode, filestruct * begin, int beg
/* EOF reached ?, wrap around once */
if (fileptr == NULL) {
if (bracket_mode) /* don't wrap if looking for bracket match */
return NULL;
return NULL;
fileptr = fileage;
past_editbuff = 1;
if (!quiet) {
statusbar(_("Search Wrapped"));
SET(DISABLE_CURPOS);
statusbar(_("Search Wrapped"));
SET(DISABLE_CURPOS);
}
}
@ -340,6 +340,7 @@ filestruct *findnextstr(int quiet, int bracket_mode, filestruct * begin, int beg
return NULL;
}
update_line(fileptr, 0);
fileptr = fileptr->prev;
if (fileptr == edittop->prev)
@ -436,7 +437,7 @@ int do_search(void)
}
/* The sneaky user deleted the previous search string */
if (!ISSET(PICO_MODE) && !strcmp(answer, "")) {
if (!ISSET(PICO_MODE) && answer[0] == '\0') {
statusbar(_("Search Cancelled"));
search_abort();
return 0;
@ -445,7 +446,7 @@ int do_search(void)
/* If answer is now == "", then PICO_MODE is set. So, copy
last_search into answer... */
if (!strcmp(answer, ""))
if (answer[0] == '\0')
answer = mallocstrcpy(answer, last_search);
else
last_search = mallocstrcpy(last_search, answer);
@ -604,7 +605,7 @@ int do_replace_loop(char *prevanswer, filestruct *begin, int *beginx,
switch (*i) {
case -1: /* Aborted enter */
if (strcmp(last_replace, ""))
if (last_replace[0] != '\0')
answer = mallocstrcpy(answer, last_replace);
statusbar(_("Replace Cancelled"));
replace_abort();
@ -620,7 +621,7 @@ int do_replace_loop(char *prevanswer, filestruct *begin, int *beginx,
}
}
if (ISSET(PICO_MODE) && !strcmp(answer, ""))
if (ISSET(PICO_MODE) && answer[0] == '\0')
answer = mallocstrcpy(answer, last_replace);
last_replace = mallocstrcpy(last_replace, answer);
@ -739,7 +740,7 @@ int do_replace(void)
}
/* Again, there was a previous string, but they deleted it and hit enter */
if (!ISSET(PICO_MODE) && !strcmp(answer, "")) {
if (!ISSET(PICO_MODE) && answer[0] == '\0') {
statusbar(_("Replace Cancelled"));
replace_abort();
return 0;
@ -747,7 +748,7 @@ int do_replace(void)
/* If answer is now == "", then PICO_MODE is set. So, copy
last_search into answer (and prevanswer)... */
if (!strcmp(answer, "")) {
if (answer[0] == '\0') {
answer = mallocstrcpy(answer, last_search);
prevanswer = mallocstrcpy(prevanswer, last_search);
} else {
@ -757,7 +758,7 @@ int do_replace(void)
if (ISSET(PICO_MODE)) {
buf = charalloc(strlen(last_replace) + 5);
if (strcmp(last_replace, "")) {
if (last_replace[0] != '\0') {
if (strlen(last_replace) > (COLS / 3)) {
strncpy(buf, last_replace, COLS / 3);
sprintf(&buf[COLS / 3 - 1], "...");
@ -857,7 +858,6 @@ int do_gotoline_void(void)
#if (defined ENABLE_MULTIBUFFER || !defined DISABLE_SPELLER)
void do_gotopos(int line, int pos_x, int pos_y, int pos_placewewant)
{
/* since do_gotoline() resets the x-coordinate but not the
y-coordinate, set the coordinates up this way */
current_y = pos_y;
@ -877,7 +877,6 @@ void do_gotopos(int line, int pos_x, int pos_y, int pos_placewewant)
#endif
#if !defined(NANO_SMALL) && defined(HAVE_REGEX_H)
int do_find_bracket(void)
{
char ch_under_cursor, wanted_ch;

23
winio.c
View File

@ -91,7 +91,6 @@ int xpt(filestruct * fileptr, int index)
return tabs;
}
/* Return the actual place on the screen of current->data[current_x], which
should always be > current_x */
int xplustabs(void)
@ -99,7 +98,6 @@ int xplustabs(void)
return xpt(current, current_x);
}
/* Return what current_x should be, given xplustabs() for the line,
* given a start position in the filestruct's data */
int actual_x_from_start(filestruct * fileptr, int xplus, int start)
@ -111,19 +109,20 @@ 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)
tot++;
else
if (tot % tabsize != 0)
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)
else if (fileptr->data[i] < 32 || fileptr->data[i] == 127) {
i++;
tot += 2;
}
#ifdef DEBUG
fprintf(stderr, _("actual_x_from_start for xplus=%d returned %d\n"),
xplus, i);
#endif
return i - start;
}
@ -151,7 +150,7 @@ int strnlenpt(char *buf, int size)
} else if (buf[i] & 0x80)
/* Make 8 bit chars only 1 column! */
;
else if (buf[i] < 32)
else if (buf[i] < 32 || buf[i] == 127)
tabs++;
}
@ -163,7 +162,6 @@ int strlenpt(char *buf)
return strnlenpt(buf, strlen(buf));
}
/* resets current_y, based on the position of current, and puts the cursor at
(current_y, current_x) */
void reset_cursor(void)
@ -510,7 +508,7 @@ int nanogetstr(int allowtabs, char *buf, char *def, shortcut *s,
free(inputbuf);
/* In pico mode, just check for a blank answer here */
if (((ISSET(PICO_MODE)) && !strcmp(answer, "")))
if (ISSET(PICO_MODE) && answer[0] == '\0')
return -2;
else
return 0;
@ -546,7 +544,7 @@ void titlebar(char *path)
namelen = strlen(what);
if (!strcmp(what, ""))
if (what[0] == '\0')
mvwaddstr(topwin, 0, COLS / 2 - 6, _("New Buffer"));
else {
if (namelen > space) {
@ -567,7 +565,8 @@ void titlebar(char *path)
}
if (ISSET(MODIFIED))
mvwaddstr(topwin, 0, COLS - 10, _("Modified"));
else if (ISSET(VIEW_MODE))
mvwaddstr(topwin, 0, COLS - 10, _("View"));
#ifdef ENABLE_COLOR
color_off(topwin, COLOR_TITLEBAR);
@ -1170,7 +1169,7 @@ void update_line(filestruct * fileptr, int index)
fileptr->data[pos] = '\0';
/* Now, Paint the line */
/* Now, paint the line */
if (current == fileptr && index > COLS - 2) {
/* This handles when the current line is beyond COLS */
/* It requires figuring out what page we're on */