#include "lisp.h"
#include "commands.h"
#include "buffer.h"
+#include "charset.h"
#include "dispextern.h"
#include "frame.h"
#include "window.h"
{
Finsert (1, &initial);
if (!NILP (backup_n) && INTEGERP (backup_n))
- Fforward_char (backup_n);
+ Fgoto_char (make_number (PT + XFASTINT (backup_n)));
}
echo_area_glyphs = 0;
int len;
{
register int l = len;
+ register unsigned char *start = s1;
if (completion_ignore_case)
{
if (l == 0)
return -1;
else
- return len - l;
+ {
+ int match = len - l;
+
+ /* Now *--S1 is the unmatching byte. If it is in the middle of
+ multi-byte form, we must say that the multi-byte character
+ there doesn't match. */
+ while (match && *--s1 >= 0xA0) match--;
+ return match;
+ }
}
\f
DEFUN ("all-completions", Fall_completions, Sall_completions, 2, 4, 0,
return unbind_to (count, val);
}
\f
-/* Temporarily display the string M at the end of the current
- minibuffer contents. This is used to display things like
- "[No Match]" when the user requests a completion for a prefix
- that has no possible completions, and other quick, unobtrusive
- messages. */
-
-temp_echo_area_glyphs (m)
- char *m;
-{
- int osize = ZV;
- int opoint = PT;
- Lisp_Object oinhibit;
- oinhibit = Vinhibit_quit;
-
- /* Clear out any old echo-area message to make way for our new thing. */
- message (0);
-
- SET_PT (osize);
- insert_string (m);
- SET_PT (opoint);
- Vinhibit_quit = Qt;
- Fsit_for (make_number (2), Qnil, Qnil);
- del_range (osize, ZV);
- SET_PT (opoint);
- if (!NILP (Vquit_flag))
- {
- Vquit_flag = Qnil;
- Vunread_command_events = Fcons (make_number (quit_char), Qnil);
- }
- Vinhibit_quit = oinhibit;
-}
-
Lisp_Object Fminibuffer_completion_help ();
Lisp_Object assoc_for_completion ();
/* A subroutine of Fintern_soft. */
/* Now find first word-break in the stuff found by completion.
i gets index in string of where to stop completing. */
+ {
+ int len, c;
- completion_string = XSTRING (completion)->data;
-
- for (; i < XSTRING (completion)->size; i++)
- if (SYNTAX (completion_string[i]) != Sword) break;
- if (i < XSTRING (completion)->size)
- i = i + 1;
+ completion_string = XSTRING (completion)->data;
+ for (; i < XSTRING (completion)->size; i += len)
+ {
+ c = STRING_CHAR_AND_LENGTH (completion_string + i,
+ XSTRING (completion)->size - i,
+ len);
+ if (SYNTAX (c) != Sword)
+ {
+ i += len;
+ break;
+ }
+ }
+ }
/* If got no characters, print help for user. */
return width;
}
\f
+/* Temporarily display the string M at the end of the current
+ minibuffer contents. This is used to display things like
+ "[No Match]" when the user requests a completion for a prefix
+ that has no possible completions, and other quick, unobtrusive
+ messages. */
+
+temp_echo_area_glyphs (m)
+ char *m;
+{
+ int osize = ZV;
+ int opoint = PT;
+ Lisp_Object oinhibit;
+ oinhibit = Vinhibit_quit;
+
+ /* Clear out any old echo-area message to make way for our new thing. */
+ message (0);
+
+ SET_PT (osize);
+ insert_string (m);
+ SET_PT (opoint);
+ Vinhibit_quit = Qt;
+ Fsit_for (make_number (2), Qnil, Qnil);
+ del_range (osize, ZV);
+ SET_PT (opoint);
+ if (!NILP (Vquit_flag))
+ {
+ Vquit_flag = Qnil;
+ Vunread_command_events = Fcons (make_number (quit_char), Qnil);
+ }
+ Vinhibit_quit = oinhibit;
+}
+
+DEFUN ("minibuffer-message", Fminibuffer_message, Sminibuffer_message,
+ 1, 1, 0,
+ "Temporarily display STRING at the end of the minibuffer.\n\
+The text is displayed for two seconds,\n\
+or until the next input event arrives, whichever comes first.")
+ (string)
+ Lisp_Object string;
+{
+ temp_echo_area_glyphs (XSTRING (string)->data);
+ return Qnil;
+}
+\f
init_minibuf_once ()
{
Vminibuffer_list = Qnil;
Vminibuffer_history_position = Qnil;
DEFVAR_BOOL ("minibuffer-auto-raise", &minibuffer_auto_raise,
- "*Non-nil means entering the minibuffer raises the minibuffer's frame.");
+ "*Non-nil means entering the minibuffer raises the minibuffer's frame.\n\
+Some uses of the echo area also raise that frame (since they use it too).");
minibuffer_auto_raise = 0;
DEFVAR_LISP ("completion-regexp-list", &Vcompletion_regexp_list,
defsubr (&Sself_insert_and_exit);
defsubr (&Sexit_minibuffer);
+ defsubr (&Sminibuffer_message);
}
keys_of_minibuf ()