0ab50f8563
Fixes, among others, |perl-script issues with suspending and SIGWINCH problems. Bump PKGREVISION.
110 lines
2.7 KiB
Text
110 lines
2.7 KiB
Text
$NetBSD: patch-aj,v 1.1 2009/10/22 22:01:26 wiz Exp $
|
|
|
|
--- src/prompt.c.orig 2009-01-23 16:10:39.000000000 +0100
|
|
+++ src/prompt.c
|
|
@@ -44,6 +44,7 @@
|
|
|
|
|
|
static char *prompt_slk_message; /* prompt message for prompt_slk_redraw */
|
|
+static char *prompt_yn_message;
|
|
|
|
/*
|
|
* Local prototypes
|
|
@@ -163,7 +164,7 @@ prompt_yn(
|
|
{
|
|
char *keyprompt;
|
|
char keyno[MAXKEYLEN], keyyes[MAXKEYLEN];
|
|
- int keyyes_len = 0, keyno_len = 0, maxlen;
|
|
+ int keyyes_len = 0, keyno_len = 0, maxlen, prompt_len;
|
|
t_function func;
|
|
#if defined (MULTIBYTE_ABLE) && !defined(NO_LOCALE)
|
|
wint_t yes, no, prompt_ch, ch;
|
|
@@ -194,21 +195,17 @@ prompt_yn(
|
|
keyno_len = (int) strlen(keyno);
|
|
#endif /* MULTIBYTE_ABLE && !NO_LOCALE */
|
|
maxlen = MAX(keyyes_len, keyno_len);
|
|
+ prompt_len = (int) strlen(prompt) + keyyes_len + keyno_len + maxlen + 6;
|
|
+ prompt_yn_message = my_malloc(prompt_len + 1);
|
|
+
|
|
+ input_context = cPromptYN;
|
|
|
|
do {
|
|
prompt_ch = (default_answer ? yes : no);
|
|
keyprompt = (default_answer ? keyyes : keyno);
|
|
|
|
- if (!cmd_line) {
|
|
- MoveCursor(cLINES, 0);
|
|
- CleartoEOLN();
|
|
- }
|
|
- my_printf("%s (%s/%s) %-*s", prompt, keyyes, keyno, maxlen, keyprompt);
|
|
- if (!cmd_line)
|
|
- cursoron();
|
|
- my_flush();
|
|
- if (!cmd_line)
|
|
- MoveCursor(cLINES, (int) strlen(prompt) + keyyes_len + keyno_len + 5);
|
|
+ snprintf(prompt_yn_message, prompt_len, "%s (%s/%s) %-*s", prompt, keyyes, keyno, maxlen, keyprompt);
|
|
+ prompt_yn_redraw();
|
|
|
|
#if defined (MULTIBYTE_ABLE) && !defined(NO_LOCALE)
|
|
if (((ch = ReadWch()) == '\n') || (ch == '\r'))
|
|
@@ -248,6 +245,9 @@ prompt_yn(
|
|
func = key_to_func(ch, prompt_keys);
|
|
} while (func == NOT_ASSIGNED);
|
|
|
|
+ input_context = cNone;
|
|
+ FreeAndNull(prompt_yn_message);
|
|
+
|
|
if (!cmd_line) {
|
|
clear_message();
|
|
my_flush();
|
|
@@ -256,6 +256,24 @@ prompt_yn(
|
|
}
|
|
|
|
|
|
+/* (Re)draws the prompt message for prompt_yn() */
|
|
+void
|
|
+prompt_yn_redraw(
|
|
+ void)
|
|
+{
|
|
+ if (!cmd_line) {
|
|
+ MoveCursor(cLINES, 0);
|
|
+ CleartoEOLN();
|
|
+ }
|
|
+ my_printf("%s", prompt_yn_message);
|
|
+ if (!cmd_line)
|
|
+ cursoron();
|
|
+ my_flush();
|
|
+ if (!cmd_line)
|
|
+ MoveCursor(cLINES, (int) strlen(prompt_yn_message) -1);
|
|
+}
|
|
+
|
|
+
|
|
/*
|
|
* help_text is displayed near the bottom of the screen.
|
|
* var is an index into a list containing size elements.
|
|
@@ -745,11 +763,14 @@ prompt_continue(
|
|
void)
|
|
{
|
|
int ch;
|
|
+ int save_signal_context = signal_context;
|
|
|
|
#ifdef USE_CURSES
|
|
cmd_line = TRUE;
|
|
#endif /* USE_CURSES */
|
|
info_message(_(txt_return_key));
|
|
+ signal_context = cMain;
|
|
+ input_context = cPromptCONT;
|
|
|
|
switch ((ch = ReadCh())) {
|
|
case ESC:
|
|
@@ -763,6 +784,10 @@ prompt_continue(
|
|
break;
|
|
}
|
|
|
|
+ input_context = cNone;
|
|
+ signal_context = save_signal_context;
|
|
+ my_fputc('\n', stdout);
|
|
+
|
|
#ifdef USE_CURSES
|
|
cmd_line = FALSE;
|
|
my_retouch();
|