really fix the resetstatus problems this time, and add a few other
miscellaneous fixes git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1969 35c25a1d-7b9e-4130-9fde-d3aeb78583b8master
parent
056c5ef4a6
commit
045883aa34
26
ChangeLog
26
ChangeLog
|
@ -76,10 +76,21 @@ CVS code -
|
|||
- Simplify by reusing variables whereever possible, and add a
|
||||
parameter execute to indicate whether or not to be in "Execute
|
||||
Command" mode. (DLR)
|
||||
- If file browsing succeeds, copy the filename we browsed to
|
||||
into ans, put back Enter, and show the prompt one last time so
|
||||
that it's exited properly and the cursor position at the
|
||||
statusbar is reset. (DLR)
|
||||
- Rework so that goto is no longer needed, using do_writeout()
|
||||
as a model. (DLR)
|
||||
- If file browsing succeeds, call statusq_abort() so that the
|
||||
cursor position at the statusbar is reset. (DLR)
|
||||
do_writeout()
|
||||
- Restructure if blocks for greater efficiency, using
|
||||
do_insertfile() as a model. (DLR)
|
||||
- Simplify where possible, and use an int retval to hold the
|
||||
return value instead of i. (DLR)
|
||||
- If file browsing succeeds, call statusq_abort() so that the
|
||||
cursor position at the statusbar is reset. (DLR)
|
||||
- Remove unneeded calls to display_main_list(). (DLR)
|
||||
do_writeout_void()
|
||||
- Call display_main_list(), for consistency with
|
||||
do_insertfile_void(). (DLR)
|
||||
open_prevfile(), open_nextfile()
|
||||
- Translate the "New Buffer" string when displaying "Switched
|
||||
to" messages on the statusbar. (DLR)
|
||||
|
@ -165,13 +176,14 @@ CVS code -
|
|||
- Refresh the screen when Ctrl-L is pressed at the statusbar
|
||||
prompt, as Pico does. (DLR)
|
||||
- Always return the key pressed by the user. (DLR)
|
||||
- Take new parameter reset_x, containing the value of
|
||||
resetstatuspos, so that resetstatuspos can be a static
|
||||
variable for just statusq(). (DLR)
|
||||
statusq()
|
||||
- Rework slightly to reset the cursor position when the user
|
||||
hits Enter as well as Cancel. This means that resetstatuspos
|
||||
no longer needs to be global. (DLR)
|
||||
statusq_abort()
|
||||
- New function to set resetstatuspos to FALSE when we don't
|
||||
properly exit the statusbar prompt, e.g. when we get a file
|
||||
from the file browser). (DLR)
|
||||
reset_cursor()
|
||||
- If this is called before any files have been opened, as it can
|
||||
be by statusbar(), put the cursor at the top left corner of
|
||||
|
|
307
src/files.c
307
src/files.c
|
@ -494,36 +494,32 @@ void do_insertfile(
|
|||
int i;
|
||||
const char *msg;
|
||||
char *ans = mallocstrcpy(NULL, "");
|
||||
/* The last answer the user typed on the statusbar. Saved for if
|
||||
* they do M-F or cancel the file browser. */
|
||||
/* The last answer the user typed on the statusbar. */
|
||||
|
||||
wrap_reset();
|
||||
|
||||
#if !defined(DISABLE_BROWSER) || (!defined(NANO_SMALL) && defined(ENABLE_MULTIBUFFER))
|
||||
start_again:
|
||||
#endif
|
||||
|
||||
while (TRUE) {
|
||||
#ifndef NANO_SMALL
|
||||
if (execute) {
|
||||
if (execute) {
|
||||
#ifdef ENABLE_MULTIBUFFER
|
||||
if (ISSET(MULTIBUFFER))
|
||||
msg = N_("Command to execute in new buffer [from %s] ");
|
||||
else
|
||||
if (ISSET(MULTIBUFFER))
|
||||
msg = N_("Command to execute in new buffer [from %s] ");
|
||||
else
|
||||
#endif
|
||||
msg = N_("Command to execute [from %s] ");
|
||||
} else {
|
||||
msg = N_("Command to execute [from %s] ");
|
||||
} else {
|
||||
#endif
|
||||
#ifdef ENABLE_MULTIBUFFER
|
||||
if (ISSET(MULTIBUFFER)) {
|
||||
msg = N_("File to insert into new buffer [from %s] ");
|
||||
} else
|
||||
if (ISSET(MULTIBUFFER)) {
|
||||
msg = N_("File to insert into new buffer [from %s] ");
|
||||
} else
|
||||
#endif
|
||||
msg = N_("File to insert [from %s] ");
|
||||
msg = N_("File to insert [from %s] ");
|
||||
#ifndef NANO_SMALL
|
||||
}
|
||||
#endif
|
||||
|
||||
i = statusq(TRUE,
|
||||
i = statusq(TRUE,
|
||||
#ifndef NANO_SMALL
|
||||
execute ? extcmd_list :
|
||||
#endif
|
||||
|
@ -538,73 +534,78 @@ void do_insertfile(
|
|||
#endif
|
||||
"./");
|
||||
|
||||
if (i < 0) {
|
||||
statusbar(_("Cancelled"));
|
||||
} else {
|
||||
int old_current_x = current_x;
|
||||
if (i < 0) {
|
||||
statusbar(_("Cancelled"));
|
||||
break;
|
||||
} else {
|
||||
int old_current_x = current_x;
|
||||
|
||||
ans = mallocstrcpy(ans, answer);
|
||||
ans = mallocstrcpy(ans, answer);
|
||||
|
||||
#if !defined(NANO_SMALL) && defined(ENABLE_MULTIBUFFER)
|
||||
if (i == TOGGLE_MULTIBUFFER_KEY) {
|
||||
/* Don't allow toggling if we're in view mode. */
|
||||
if (!ISSET(VIEW_MODE))
|
||||
TOGGLE(MULTIBUFFER);
|
||||
goto start_again;
|
||||
}
|
||||
if (i == TOGGLE_MULTIBUFFER_KEY) {
|
||||
/* Don't allow toggling if we're in view mode. */
|
||||
if (!ISSET(VIEW_MODE))
|
||||
TOGGLE(MULTIBUFFER);
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef DISABLE_BROWSER
|
||||
if (i == NANO_TOFILES_KEY) {
|
||||
char *tmp = do_browse_from(answer);
|
||||
if (i == NANO_TOFILES_KEY) {
|
||||
char *tmp = do_browse_from(answer);
|
||||
|
||||
if (tmp != NULL) {
|
||||
if (tmp == NULL)
|
||||
continue;
|
||||
free(answer);
|
||||
answer = tmp;
|
||||
ans = mallocstrcpy(ans, answer);
|
||||
unget_kbinput(NANO_ENTER_KEY, FALSE);
|
||||
|
||||
/* We have a file now. Get out of the statusbar prompt
|
||||
* cleanly. */
|
||||
statusq_abort();
|
||||
}
|
||||
goto start_again;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef NANO_SMALL
|
||||
if (i == NANO_TOOTHERINSERT_KEY) {
|
||||
execute = !execute;
|
||||
goto start_again;
|
||||
}
|
||||
if (i == NANO_TOOTHERINSERT_KEY) {
|
||||
execute = !execute;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (execute)
|
||||
execute_command(answer);
|
||||
else {
|
||||
if (execute)
|
||||
execute_command(answer);
|
||||
else {
|
||||
#endif
|
||||
answer = mallocstrassn(answer, real_dir_from_tilde(answer));
|
||||
load_buffer(answer);
|
||||
answer = mallocstrassn(answer, real_dir_from_tilde(answer));
|
||||
load_buffer(answer);
|
||||
#ifndef NANO_SMALL
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_MULTIBUFFER
|
||||
if (ISSET(MULTIBUFFER)) {
|
||||
/* Update the titlebar. */
|
||||
titlebar(NULL);
|
||||
if (ISSET(MULTIBUFFER)) {
|
||||
/* Update the titlebar. */
|
||||
titlebar(NULL);
|
||||
|
||||
/* Reinitialize the shortcut list. */
|
||||
shortcut_init(FALSE);
|
||||
} else {
|
||||
/* Reinitialize the shortcut list. */
|
||||
shortcut_init(FALSE);
|
||||
} else {
|
||||
#endif
|
||||
/* Mark the file as modified. */
|
||||
set_modified();
|
||||
/* Mark the file as modified. */
|
||||
set_modified();
|
||||
|
||||
/* Restore the old x-coordinate position. */
|
||||
current_x = old_current_x;
|
||||
/* Restore the old x-coordinate position. */
|
||||
current_x = old_current_x;
|
||||
#ifdef ENABLE_MULTIBUFFER
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Refresh the screen. */
|
||||
edit_refresh();
|
||||
}
|
||||
/* Refresh the screen. */
|
||||
edit_refresh();
|
||||
|
||||
break;
|
||||
}
|
||||
} /* while (TRUE) */
|
||||
|
||||
free(ans);
|
||||
}
|
||||
|
@ -1770,7 +1771,9 @@ int write_marked(const char *name, int tmp, int append)
|
|||
int do_writeout(bool exiting)
|
||||
{
|
||||
int i;
|
||||
int append = 0;
|
||||
int retval = 0, append = 0;
|
||||
char *ans;
|
||||
/* The last answer the user typed on the statusbar. */
|
||||
#ifdef NANO_EXTRA
|
||||
static bool did_cred = FALSE;
|
||||
#endif
|
||||
|
@ -1780,25 +1783,23 @@ int do_writeout(bool exiting)
|
|||
#endif
|
||||
|
||||
if (exiting && filename[0] != '\0' && ISSET(TEMP_FILE)) {
|
||||
i = write_file(filename, FALSE, 0, FALSE);
|
||||
if (i == 1) {
|
||||
/* Write succeeded. */
|
||||
display_main_list();
|
||||
return 1;
|
||||
}
|
||||
retval = write_file(filename, FALSE, 0, FALSE);
|
||||
|
||||
/* Write succeeded. */
|
||||
if (retval == 1)
|
||||
return retval;
|
||||
}
|
||||
|
||||
#ifndef NANO_SMALL
|
||||
if (ISSET(MARK_ISSET) && !exiting)
|
||||
answer = mallocstrcpy(answer, "");
|
||||
ans = mallocstrcpy(NULL, "");
|
||||
else
|
||||
#endif
|
||||
answer = mallocstrcpy(answer, filename);
|
||||
ans = mallocstrcpy(NULL, filename);
|
||||
|
||||
while (TRUE) {
|
||||
const char *msg;
|
||||
#ifndef NANO_SMALL
|
||||
char *ans = mallocstrcpy(NULL, answer);
|
||||
const char *formatstr, *backupstr;
|
||||
|
||||
if (ISSET(DOS_FILE))
|
||||
|
@ -1834,117 +1835,125 @@ int do_writeout(bool exiting)
|
|||
* and we're at the "Write File" prompt, disable tab
|
||||
* completion. */
|
||||
i = statusq(!ISSET(RESTRICTED) || filename[0] == '\0',
|
||||
writefile_list,
|
||||
writefile_list, ans,
|
||||
#ifndef NANO_SMALL
|
||||
ans, NULL, "%s%s%s", _(msg), formatstr, backupstr
|
||||
NULL, "%s%s%s", _(msg), formatstr, backupstr
|
||||
#else
|
||||
filename, "%s", _(msg)
|
||||
"%s", _(msg)
|
||||
#endif
|
||||
);
|
||||
|
||||
#ifndef NANO_SMALL
|
||||
free(ans);
|
||||
#endif
|
||||
|
||||
if (i < 0) {
|
||||
statusbar(_("Cancelled"));
|
||||
display_main_list();
|
||||
return -1;
|
||||
}
|
||||
retval = -1;
|
||||
break;
|
||||
} else {
|
||||
ans = mallocstrcpy(ans, answer);
|
||||
|
||||
#ifndef DISABLE_BROWSER
|
||||
if (i == NANO_TOFILES_KEY) {
|
||||
char *tmp = do_browse_from(answer);
|
||||
if (i == NANO_TOFILES_KEY) {
|
||||
char *tmp = do_browse_from(answer);
|
||||
|
||||
currshortcut = writefile_list;
|
||||
if (tmp == NULL)
|
||||
continue;
|
||||
free(answer);
|
||||
answer = tmp;
|
||||
} else
|
||||
currshortcut = writefile_list;
|
||||
|
||||
if (tmp == NULL)
|
||||
continue;
|
||||
free(answer);
|
||||
answer = tmp;
|
||||
|
||||
/* We have a file now. Get out of the statusbar prompt
|
||||
* cleanly. */
|
||||
statusq_abort();
|
||||
} else
|
||||
#endif /* !DISABLE_BROWSER */
|
||||
#ifndef NANO_SMALL
|
||||
if (i == TOGGLE_DOS_KEY) {
|
||||
UNSET(MAC_FILE);
|
||||
TOGGLE(DOS_FILE);
|
||||
continue;
|
||||
} else if (i == TOGGLE_MAC_KEY) {
|
||||
UNSET(DOS_FILE);
|
||||
TOGGLE(MAC_FILE);
|
||||
continue;
|
||||
} else if (i == TOGGLE_BACKUP_KEY) {
|
||||
TOGGLE(BACKUP_FILE);
|
||||
continue;
|
||||
} else
|
||||
if (i == TOGGLE_DOS_KEY) {
|
||||
UNSET(MAC_FILE);
|
||||
TOGGLE(DOS_FILE);
|
||||
continue;
|
||||
} else if (i == TOGGLE_MAC_KEY) {
|
||||
UNSET(DOS_FILE);
|
||||
TOGGLE(MAC_FILE);
|
||||
continue;
|
||||
} else if (i == TOGGLE_BACKUP_KEY) {
|
||||
TOGGLE(BACKUP_FILE);
|
||||
continue;
|
||||
} else
|
||||
#endif /* !NANO_SMALL */
|
||||
if (i == NANO_PREPEND_KEY) {
|
||||
append = (append == 2) ? 0 : 2;
|
||||
continue;
|
||||
} else if (i == NANO_APPEND_KEY) {
|
||||
append = (append == 1) ? 0 : 1;
|
||||
continue;
|
||||
}
|
||||
if (i == NANO_PREPEND_KEY) {
|
||||
append = (append == 2) ? 0 : 2;
|
||||
continue;
|
||||
} else if (i == NANO_APPEND_KEY) {
|
||||
append = (append == 1) ? 0 : 1;
|
||||
continue;
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
fprintf(stderr, "filename is %s\n", answer);
|
||||
fprintf(stderr, "filename is %s\n", answer);
|
||||
#endif
|
||||
|
||||
#ifdef NANO_EXTRA
|
||||
if (exiting && !ISSET(TEMP_FILE) && strcasecmp(answer, "zzy") == 0
|
||||
&& !did_cred) {
|
||||
do_credits();
|
||||
did_cred = TRUE;
|
||||
return -1;
|
||||
}
|
||||
#endif
|
||||
if (append == 0 && strcmp(answer, filename) != 0) {
|
||||
struct stat st;
|
||||
|
||||
if (!stat(answer, &st)) {
|
||||
i = do_yesno(FALSE, _("File exists, OVERWRITE ? "));
|
||||
if (i == 0 || i == -1)
|
||||
continue;
|
||||
/* If we're using restricted mode, we aren't allowed to
|
||||
* change the name of a file once it has one because that
|
||||
* would allow reading from or writing to files not
|
||||
* specified on the command line. In this case, don't
|
||||
* bother showing the "Different Name" prompt. */
|
||||
} else if (!ISSET(RESTRICTED) && filename[0] != '\0'
|
||||
#ifndef NANO_SMALL
|
||||
&& (exiting || !ISSET(MARK_ISSET))
|
||||
#endif
|
||||
) {
|
||||
i = do_yesno(FALSE, _("Save file under DIFFERENT NAME ? "));
|
||||
if (i == 0 || i == -1)
|
||||
continue;
|
||||
if (exiting && !ISSET(TEMP_FILE) &&
|
||||
strcasecmp(answer, "zzy") == 0 && !did_cred) {
|
||||
do_credits();
|
||||
did_cred = TRUE;
|
||||
retval = -1;
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
if (append == 0 && strcmp(answer, filename) != 0) {
|
||||
struct stat st;
|
||||
|
||||
if (!stat(answer, &st)) {
|
||||
i = do_yesno(FALSE, _("File exists, OVERWRITE ? "));
|
||||
if (i == 0 || i == -1)
|
||||
continue;
|
||||
/* If we're using restricted mode, we aren't allowed to
|
||||
* change the name of a file once it has one because
|
||||
* that would allow reading from or writing to files not
|
||||
* specified on the command line. In this case, don't
|
||||
* bother showing the "Different Name" prompt. */
|
||||
} else if (!ISSET(RESTRICTED) && filename[0] != '\0'
|
||||
#ifndef NANO_SMALL
|
||||
&& (exiting || !ISSET(MARK_ISSET))
|
||||
#endif
|
||||
) {
|
||||
i = do_yesno(FALSE, _("Save file under DIFFERENT NAME ? "));
|
||||
if (i == 0 || i == -1)
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef NANO_SMALL
|
||||
/* Here's where we allow the selected text to be written to a
|
||||
* separate file. If we're using restricted mode, this is
|
||||
* disabled since it allows reading from or writing to files not
|
||||
* specified on the command line. */
|
||||
if (!ISSET(RESTRICTED) && !exiting && ISSET(MARK_ISSET))
|
||||
i = write_marked(answer, FALSE, append);
|
||||
else
|
||||
/* Here's where we allow the selected text to be written to
|
||||
* a separate file. If we're using restricted mode, this is
|
||||
* disabled since it allows reading from or writing to files
|
||||
* not specified on the command line. */
|
||||
if (!ISSET(RESTRICTED) && !exiting && ISSET(MARK_ISSET))
|
||||
retval = write_marked(answer, FALSE, append);
|
||||
else
|
||||
#endif /* !NANO_SMALL */
|
||||
i = write_file(answer, FALSE, append, FALSE);
|
||||
retval = write_file(answer, FALSE, append, FALSE);
|
||||
|
||||
#ifdef ENABLE_MULTIBUFFER
|
||||
/* If we're not about to exit, update the current entry in
|
||||
* the open_files structure. */
|
||||
if (!exiting)
|
||||
add_open_file(TRUE);
|
||||
/* If we're not about to exit, update the current entry in
|
||||
* the open_files structure. */
|
||||
if (!exiting)
|
||||
add_open_file(TRUE);
|
||||
#endif
|
||||
display_main_list();
|
||||
return i;
|
||||
|
||||
break;
|
||||
}
|
||||
} /* while (TRUE) */
|
||||
|
||||
free(ans);
|
||||
return retval;
|
||||
}
|
||||
|
||||
void do_writeout_void(void)
|
||||
{
|
||||
do_writeout(FALSE);
|
||||
display_main_list();
|
||||
}
|
||||
|
||||
/* Return a malloc()ed string containing the actual directory, used
|
||||
|
|
17
src/proto.h
17
src/proto.h
|
@ -551,15 +551,21 @@ void check_statusblank(void);
|
|||
void blank_bottombars(void);
|
||||
char *display_string(const char *buf, size_t start_col, size_t len);
|
||||
void nanoget_repaint(const char *buf, const char *inputbuf, size_t x);
|
||||
int nanogetstr(int allowtabs, const char *buf, const char *def,
|
||||
int nanogetstr(bool allow_tabs, const char *buf, const char *def,
|
||||
#ifndef NANO_SMALL
|
||||
historyheadtype *history_list,
|
||||
#endif
|
||||
const shortcut *s, bool reset_x
|
||||
const shortcut *s
|
||||
#ifndef DISABLE_TABCOMP
|
||||
, bool *list
|
||||
#endif
|
||||
);
|
||||
int statusq(bool allow_tabs, const shortcut *s, const char *def,
|
||||
#ifndef NANO_SMALL
|
||||
historyheadtype *history_list,
|
||||
#endif
|
||||
const char *msg, ...);
|
||||
void statusq_abort(void);
|
||||
void titlebar(const char *path);
|
||||
void set_modified(void);
|
||||
void statusbar(const char *msg, ...);
|
||||
|
@ -579,12 +585,7 @@ void edit_scroll(updown direction, int nlines);
|
|||
void edit_redraw(const filestruct *old_current, size_t old_pww);
|
||||
void edit_refresh(void);
|
||||
void edit_update(topmidnone location);
|
||||
int statusq(int allowtabs, const shortcut *s, const char *def,
|
||||
#ifndef NANO_SMALL
|
||||
historyheadtype *history_list,
|
||||
#endif
|
||||
const char *msg, ...);
|
||||
int do_yesno(int all, const char *msg);
|
||||
int do_yesno(bool all, const char *msg);
|
||||
void total_refresh(void);
|
||||
void display_main_list(void);
|
||||
void do_cursorpos(bool constant);
|
||||
|
|
217
src/winio.c
217
src/winio.c
|
@ -33,6 +33,9 @@
|
|||
static int statusblank = 0; /* Number of keystrokes left after
|
||||
* we call statusbar(), before we
|
||||
* actually blank the statusbar. */
|
||||
static bool resetstatuspos = FALSE;
|
||||
/* Should we reset the cursor position
|
||||
* at the statusbar prompt? */
|
||||
|
||||
/* Control character compatibility:
|
||||
*
|
||||
|
@ -1755,11 +1758,11 @@ void nanoget_repaint(const char *buf, const char *inputbuf, size_t x)
|
|||
|
||||
/* Get the input from the keyboard; this should only be called from
|
||||
* statusq(). */
|
||||
int nanogetstr(int allowtabs, const char *buf, const char *def,
|
||||
int nanogetstr(bool allow_tabs, const char *buf, const char *def,
|
||||
#ifndef NANO_SMALL
|
||||
historyheadtype *history_list,
|
||||
#endif
|
||||
const shortcut *s, bool reset_x
|
||||
const shortcut *s
|
||||
#ifndef DISABLE_TABCOMP
|
||||
, bool *list
|
||||
#endif
|
||||
|
@ -1793,11 +1796,11 @@ int nanogetstr(int allowtabs, const char *buf, const char *def,
|
|||
xend = strlen(def);
|
||||
|
||||
/* Only put x at the end of the string if it's uninitialized, if it
|
||||
would be past the end of the string as it is, or if reset_x is
|
||||
TRUE. Otherwise, leave it alone. This is so the cursor position
|
||||
stays at the same place if a prompt-changing toggle is
|
||||
pressed. */
|
||||
if (x == -1 || x > xend || reset_x)
|
||||
would be past the end of the string as it is, or if
|
||||
resetstatuspos is TRUE. Otherwise, leave it alone. This is so
|
||||
the cursor position stays at the same place if a prompt-changing
|
||||
toggle is pressed. */
|
||||
if (x == -1 || x > xend || resetstatuspos)
|
||||
x = xend;
|
||||
|
||||
answer = charealloc(answer, xend + 1);
|
||||
|
@ -1944,7 +1947,7 @@ int nanogetstr(int allowtabs, const char *buf, const char *def,
|
|||
#endif
|
||||
#endif
|
||||
#ifndef DISABLE_TABCOMP
|
||||
if (allowtabs) {
|
||||
if (allow_tabs) {
|
||||
int shift = 0;
|
||||
|
||||
answer = input_tab(answer, x, &tabbed, &shift, list);
|
||||
|
@ -2090,6 +2093,106 @@ int nanogetstr(int allowtabs, const char *buf, const char *def,
|
|||
return kbinput;
|
||||
}
|
||||
|
||||
/* Ask a question on the statusbar. Answer will be stored in answer
|
||||
* global. Returns -1 on aborted enter, -2 on a blank string, and 0
|
||||
* otherwise, the valid shortcut key caught. def is any editable text
|
||||
* we want to put up by default.
|
||||
*
|
||||
* New arg tabs tells whether or not to allow tab completion. */
|
||||
int statusq(bool allow_tabs, const shortcut *s, const char *def,
|
||||
#ifndef NANO_SMALL
|
||||
historyheadtype *which_history,
|
||||
#endif
|
||||
const char *msg, ...)
|
||||
{
|
||||
va_list ap;
|
||||
char *foo = charalloc(COLS - 3);
|
||||
int ret;
|
||||
#ifndef DISABLE_TABCOMP
|
||||
bool list = FALSE;
|
||||
#endif
|
||||
|
||||
bottombars(s);
|
||||
|
||||
va_start(ap, msg);
|
||||
vsnprintf(foo, COLS - 4, msg, ap);
|
||||
va_end(ap);
|
||||
foo[COLS - 4] = '\0';
|
||||
|
||||
ret = nanogetstr(allow_tabs, foo, def,
|
||||
#ifndef NANO_SMALL
|
||||
which_history,
|
||||
#endif
|
||||
s
|
||||
#ifndef DISABLE_TABCOMP
|
||||
, &list
|
||||
#endif
|
||||
);
|
||||
free(foo);
|
||||
resetstatuspos = FALSE;
|
||||
|
||||
switch (ret) {
|
||||
case NANO_FIRSTLINE_KEY:
|
||||
case NANO_FIRSTLINE_FKEY:
|
||||
do_first_line();
|
||||
resetstatuspos = TRUE;
|
||||
break;
|
||||
case NANO_LASTLINE_KEY:
|
||||
case NANO_LASTLINE_FKEY:
|
||||
do_last_line();
|
||||
resetstatuspos = TRUE;
|
||||
break;
|
||||
#ifndef DISABLE_JUSTIFY
|
||||
case NANO_PARABEGIN_KEY:
|
||||
case NANO_PARABEGIN_ALTKEY1:
|
||||
case NANO_PARABEGIN_ALTKEY2:
|
||||
do_para_begin();
|
||||
resetstatuspos = TRUE;
|
||||
break;
|
||||
case NANO_PARAEND_KEY:
|
||||
case NANO_PARAEND_ALTKEY1:
|
||||
case NANO_PARAEND_ALTKEY2:
|
||||
do_para_end();
|
||||
resetstatuspos = TRUE;
|
||||
break;
|
||||
case NANO_FULLJUSTIFY_KEY:
|
||||
case NANO_FULLJUSTIFY_ALTKEY:
|
||||
if (!ISSET(VIEW_MODE))
|
||||
do_full_justify();
|
||||
resetstatuspos = TRUE;
|
||||
break;
|
||||
#endif
|
||||
case NANO_CANCEL_KEY:
|
||||
ret = -1;
|
||||
resetstatuspos = TRUE;
|
||||
break;
|
||||
case NANO_ENTER_KEY:
|
||||
ret = (answer[0] == '\0') ? -2 : 0;
|
||||
resetstatuspos = TRUE;
|
||||
break;
|
||||
}
|
||||
blank_statusbar();
|
||||
|
||||
#ifdef DEBUG
|
||||
fprintf(stderr, "I got \"%s\"\n", answer);
|
||||
#endif
|
||||
|
||||
#ifndef DISABLE_TABCOMP
|
||||
/* if we've done tab completion, there might be a list of
|
||||
filename matches on the edit window at this point; make sure
|
||||
they're cleared off. */
|
||||
if (list)
|
||||
edit_refresh();
|
||||
#endif
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void statusq_abort(void)
|
||||
{
|
||||
resetstatuspos = TRUE;
|
||||
}
|
||||
|
||||
void titlebar(const char *path)
|
||||
{
|
||||
size_t space;
|
||||
|
@ -2972,106 +3075,10 @@ void edit_update(topmidnone location)
|
|||
edit_refresh();
|
||||
}
|
||||
|
||||
/* Ask a question on the statusbar. Answer will be stored in answer
|
||||
* global. Returns -1 on aborted enter, -2 on a blank string, and 0
|
||||
* otherwise, the valid shortcut key caught. def is any editable text
|
||||
* we want to put up by default.
|
||||
*
|
||||
* New arg tabs tells whether or not to allow tab completion. */
|
||||
int statusq(int allowtabs, const shortcut *s, const char *def,
|
||||
#ifndef NANO_SMALL
|
||||
historyheadtype *which_history,
|
||||
#endif
|
||||
const char *msg, ...)
|
||||
{
|
||||
va_list ap;
|
||||
char *foo = charalloc(COLS - 3);
|
||||
int ret;
|
||||
static bool resetstatuspos = FALSE;
|
||||
#ifndef DISABLE_TABCOMP
|
||||
bool list = FALSE;
|
||||
#endif
|
||||
|
||||
bottombars(s);
|
||||
|
||||
va_start(ap, msg);
|
||||
vsnprintf(foo, COLS - 4, msg, ap);
|
||||
va_end(ap);
|
||||
foo[COLS - 4] = '\0';
|
||||
|
||||
ret = nanogetstr(allowtabs, foo, def,
|
||||
#ifndef NANO_SMALL
|
||||
which_history,
|
||||
#endif
|
||||
s, resetstatuspos
|
||||
#ifndef DISABLE_TABCOMP
|
||||
, &list
|
||||
#endif
|
||||
);
|
||||
free(foo);
|
||||
resetstatuspos = FALSE;
|
||||
|
||||
switch (ret) {
|
||||
case NANO_FIRSTLINE_KEY:
|
||||
case NANO_FIRSTLINE_FKEY:
|
||||
do_first_line();
|
||||
resetstatuspos = TRUE;
|
||||
break;
|
||||
case NANO_LASTLINE_KEY:
|
||||
case NANO_LASTLINE_FKEY:
|
||||
do_last_line();
|
||||
resetstatuspos = TRUE;
|
||||
break;
|
||||
#ifndef DISABLE_JUSTIFY
|
||||
case NANO_PARABEGIN_KEY:
|
||||
case NANO_PARABEGIN_ALTKEY1:
|
||||
case NANO_PARABEGIN_ALTKEY2:
|
||||
do_para_begin();
|
||||
resetstatuspos = TRUE;
|
||||
break;
|
||||
case NANO_PARAEND_KEY:
|
||||
case NANO_PARAEND_ALTKEY1:
|
||||
case NANO_PARAEND_ALTKEY2:
|
||||
do_para_end();
|
||||
resetstatuspos = TRUE;
|
||||
break;
|
||||
case NANO_FULLJUSTIFY_KEY:
|
||||
case NANO_FULLJUSTIFY_ALTKEY:
|
||||
if (!ISSET(VIEW_MODE))
|
||||
do_full_justify();
|
||||
resetstatuspos = TRUE;
|
||||
break;
|
||||
#endif
|
||||
case NANO_CANCEL_KEY:
|
||||
ret = -1;
|
||||
resetstatuspos = TRUE;
|
||||
break;
|
||||
case NANO_ENTER_KEY:
|
||||
ret = (answer[0] == '\0') ? -2 : 0;
|
||||
resetstatuspos = TRUE;
|
||||
break;
|
||||
}
|
||||
blank_statusbar();
|
||||
|
||||
#ifdef DEBUG
|
||||
fprintf(stderr, "I got \"%s\"\n", answer);
|
||||
#endif
|
||||
|
||||
#ifndef DISABLE_TABCOMP
|
||||
/* if we've done tab completion, there might be a list of
|
||||
filename matches on the edit window at this point; make sure
|
||||
they're cleared off. */
|
||||
if (list)
|
||||
edit_refresh();
|
||||
#endif
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Ask a simple yes/no question, specified in msg, on the statusbar.
|
||||
* Return 1 for Y, 0 for N, 2 for All (if all is TRUE when passed in)
|
||||
* and -1 for abort (^C). */
|
||||
int do_yesno(int all, const char *msg)
|
||||
int do_yesno(bool all, const char *msg)
|
||||
{
|
||||
int ok = -2, width = 16;
|
||||
const char *yesstr; /* String of yes characters accepted. */
|
||||
|
|
Loading…
Reference in New Issue