/* Minibuffer input and completion.
-Copyright (C) 1985-1986, 1993-2014 Free Software Foundation, Inc.
+Copyright (C) 1985-1986, 1993-2015 Free Software Foundation, Inc.
This file is part of GNU Emacs.
#include <errno.h>
#include <stdio.h>
-#ifdef WINDOWSNT
-#include <fcntl.h> /* For O_BINARY, O_TEXT. */
-#endif
+#include <binary-io.h>
#include "lisp.h"
#include "commands.h"
#include "intervals.h"
#include "keymap.h"
#include "termhooks.h"
-
#include "systty.h"
-extern void emacs_get_tty (int, struct emacs_tty *);
-extern int emacs_set_tty (int, struct emacs_tty *, bool);
-extern void suppress_echo_on_tty (int);
/* List of buffers for use as minibuffers.
The first element of the list is used for the outermost minibuffer
EMACS_INT minibuf_level;
-/* The maximum length of a minibuffer history. */
-
-static Lisp_Object Qhistory_length;
-
/* Fread_minibuffer leaves the input here as a string. */
Lisp_Object last_minibuf_string;
-static Lisp_Object Qminibuffer_history, Qbuffer_name_history;
-
-static Lisp_Object Qread_file_name_internal;
-
-/* Normal hooks for entry to and exit from minibuffer. */
-
-static Lisp_Object Qminibuffer_setup_hook;
-static Lisp_Object Qminibuffer_exit_hook;
-
-Lisp_Object Qcompletion_ignore_case;
-static Lisp_Object Qminibuffer_completion_table;
-static Lisp_Object Qminibuffer_completion_predicate;
-static Lisp_Object Qminibuffer_completion_confirm;
-static Lisp_Object Qcustom_variable_p;
-
-static Lisp_Object Qminibuffer_default;
-
-static Lisp_Object Qcurrent_input_method, Qactivate_input_method;
-
-static Lisp_Object Qcase_fold_search;
-
-static Lisp_Object Qread_expression_history;
-
/* Prompt to display in front of the mini-buffer contents. */
static Lisp_Object minibuf_prompt;
int c;
unsigned char hide_char = 0;
struct emacs_tty etty;
+ bool etty_valid;
/* Check, whether we need to suppress echoing. */
if (CHARACTERP (Vread_hide_char))
/* Manipulate tty. */
if (hide_char)
{
- emacs_get_tty (fileno (stdin), &etty);
-#ifdef WINDOWSNT
- _setmode (fileno (stdin), O_BINARY);
-#endif
+ etty_valid = emacs_get_tty (fileno (stdin), &etty) == 0;
+ if (etty_valid)
+ set_binary_mode (fileno (stdin), O_BINARY);
suppress_echo_on_tty (fileno (stdin));
}
if (hide_char)
{
fprintf (stdout, "\n");
- emacs_set_tty (fileno (stdin), &etty, 0);
-#ifdef WINDOWSNT
- _setmode (fileno (stdin), O_TEXT);
-#endif
+ if (etty_valid)
+ {
+ emacs_set_tty (fileno (stdin), &etty, 0);
+ set_binary_mode (fileno (stdin), O_TEXT);
+ }
}
if (len || c == '\n' || c == '\r')
set_window_buffer (minibuf_window, Fcurrent_buffer (), 0, 0);
Fselect_window (minibuf_window, Qnil);
XWINDOW (minibuf_window)->hscroll = 0;
+ XWINDOW (minibuf_window)->suspend_auto_hscroll = 0;
Fmake_local_variable (Qprint_escape_newlines);
print_escape_newlines = 1;
if (STRINGP (input_method) && !NILP (Ffboundp (Qactivate_input_method)))
call1 (Qactivate_input_method, input_method);
- Frun_hooks (1, &Qminibuffer_setup_hook);
+ run_hook (Qminibuffer_setup_hook);
/* Don't allow the user to undo past this point. */
bset_undo_list (current_buffer, Qnil);
{
XWINDOW (minibuf_window)->cursor.hpos = 0;
XWINDOW (minibuf_window)->cursor.x = 0;
- XWINDOW (minibuf_window)->must_be_updated_p = 1;
- update_frame (XFRAME (selected_frame), 1, 1);
+ XWINDOW (minibuf_window)->must_be_updated_p = true;
+ update_frame (XFRAME (selected_frame), true, true);
flush_frame (XFRAME (XWINDOW (minibuf_window)->frame));
}
function, instead of the usual behavior. */)
(Lisp_Object prompt, Lisp_Object def, Lisp_Object require_match)
{
- Lisp_Object args[4], result;
+ Lisp_Object result;
char *s;
ptrdiff_t len;
ptrdiff_t count = SPECPDL_INDEX ();
STRING_MULTIBYTE (prompt));
}
- args[0] = build_string ("%s (default %s): ");
- args[1] = prompt;
- args[2] = CONSP (def) ? XCAR (def) : def;
- prompt = Fformat (3, args);
+ AUTO_STRING (format, "%s (default %s): ");
+ prompt = Fformat (3, ((Lisp_Object [])
+ {format, prompt,
+ CONSP (def) ? XCAR (def) : def}));
}
result = Fcompleting_read (prompt, intern ("internal-complete-buffer"),
Qbuffer_name_history, def, Qnil);
}
else
- {
- args[0] = Vread_buffer_function;
- args[1] = prompt;
- args[2] = def;
- args[3] = require_match;
- result = Ffuncall (4, args);
- }
+ result = Ffuncall (4, ((Lisp_Object [])
+ { Vread_buffer_function, prompt, def, require_match }));
return unbind_to (count, result);
}
\f
return Qt;
}
-static Lisp_Object Qmetadata;
-
DEFUN ("internal-complete-buffer", Finternal_complete_buffer, Sinternal_complete_buffer, 3, 3, 0,
doc: /* Perform completion on buffer names.
STRING and PREDICATE have the same meanings as in `try-completion',
Fset (Qbuffer_name_history, Qnil);
DEFSYM (Qcustom_variable_p, "custom-variable-p");
+
+ /* Normal hooks for entry to and exit from minibuffer. */
DEFSYM (Qminibuffer_setup_hook, "minibuffer-setup-hook");
DEFSYM (Qminibuffer_exit_hook, "minibuffer-exit-hook");
+
+ /* The maximum length of a minibuffer history. */
DEFSYM (Qhistory_length, "history-length");
+
DEFSYM (Qcurrent_input_method, "current-input-method");
DEFSYM (Qactivate_input_method, "activate-input-method");
DEFSYM (Qcase_fold_search, "case-fold-search");