a -- Function name: symbol with a function definition.\n\
b -- Name of existing buffer.\n\
B -- Name of buffer, possibly nonexistent.\n\
-c -- Character.\n\
+c -- Character (no input method is used).\n\
C -- Command name: symbol with interactive function definition.\n\
d -- Value of point as number. Does not do I/O.\n\
D -- Directory name.\n\
Lisp_Object exp;
{
register Lisp_Object tail;
- register struct Lisp_Cons *ptr;
- for (tail = exp; CONSP (tail); tail = ptr->cdr)
+ Lisp_Object next;
+ for (tail = exp; CONSP (tail); tail = next)
{
- ptr = XCONS (tail);
- ptr->car = quotify_arg (ptr->car);
+ next = XCDR (tail);
+ XCAR (tail) = quotify_arg (XCAR (tail));
}
return exp;
}
instead of the present values. */
if (CONSP (input))
{
- car = XCONS (input)->car;
+ car = XCAR (input);
/* Skip through certain special forms. */
while (EQ (car, Qlet) || EQ (car, Qletx)
|| EQ (car, Qsave_excursion))
{
- while (CONSP (XCONS (input)->cdr))
- input = XCONS (input)->cdr;
- input = XCONS (input)->car;
+ while (CONSP (XCDR (input)))
+ input = XCDR (input);
+ input = XCAR (input);
if (!CONSP (input))
break;
- car = XCONS (input)->car;
+ car = XCAR (input);
}
if (EQ (car, Qlist))
{
{
teml = Fnthcdr (Vhistory_length, Vcommand_history);
if (CONSP (teml))
- XCONS (teml)->cdr = Qnil;
+ XCDR (teml) = Qnil;
}
}
single_kboard_state ();
event = XVECTOR (keys)->contents[next_event];
if (EVENT_HAS_PARAMETERS (event)
- && (event = XCONS (event)->cdr, CONSP (event))
- && (event = XCONS (event)->car, CONSP (event))
- && (event = XCONS (event)->car, WINDOWP (event)))
+ && (event = XCDR (event), CONSP (event))
+ && (event = XCAR (event), CONSP (event))
+ && (event = XCAR (event), WINDOWP (event)))
{
if (MINI_WINDOW_P (XWINDOW (event))
&& ! (minibuf_level > 0 && EQ (event, minibuf_window)))
break;
case 'c': /* Character */
- /* Use message_with_string rather than message1_nolog here,
- so that nothing bad happens if callint_message is changed
- within Fread_char (by a timer, for example). */
- message_with_string ("%s", build_string (callint_message), 0);
- args[i] = Fread_char ();
+ args[i] = Fread_char (build_string (callint_message), Qnil);
message1_nolog ((char *) 0);
/* Passing args[i] directly stimulates compiler bug */
teml = args[i];
int speccount1 = specpdl_ptr - specpdl;
specbind (Qcursor_in_echo_area, Qt);
args[i] = Fread_key_sequence (build_string (callint_message),
- Qnil, Qnil, Qnil);
+ Qnil, Qnil, Qnil, Qnil);
unbind_to (speccount1, Qnil);
teml = args[i];
visargs[i] = Fkey_description (teml);
+
+ /* If the key sequence ends with a down-event,
+ discard the following up-event. */
+ teml = Faref (args[i], make_number (XINT (Flength (args[i])) - 1));
+ if (CONSP (teml))
+ teml = XCAR (teml);
+ if (SYMBOLP (teml))
+ {
+ Lisp_Object tem2;
+
+ teml = Fget (teml, intern ("event-symbol-elements"));
+ /* Ignore first element, which is the base key. */
+ tem2 = Fmemq (intern ("down"), Fcdr (teml));
+ if (! NILP (tem2))
+ Fread_event (Qnil, Qnil);
+ }
}
break;
int speccount1 = specpdl_ptr - specpdl;
specbind (Qcursor_in_echo_area, Qt);
args[i] = Fread_key_sequence (build_string (callint_message),
- Qnil, Qt, Qnil);
+ Qnil, Qt, Qnil, Qnil);
teml = args[i];
visargs[i] = Fkey_description (teml);
unbind_to (speccount1, Qnil);
+
+ /* If the key sequence ends with a down-event,
+ discard the following up-event. */
+ teml = Faref (args[i], make_number (XINT (Flength (args[i])) - 1));
+ if (CONSP (teml))
+ teml = XCAR (teml);
+ if (SYMBOLP (teml))
+ {
+ Lisp_Object tem2;
+
+ teml = Fget (teml, intern ("event-symbol-elements"));
+ /* Ignore first element, which is the base key. */
+ tem2 = Fmemq (intern ("down"), Fcdr (teml));
+ if (! NILP (tem2))
+ Fread_event (Qnil, Qnil);
+ }
}
break;
{
teml = Fnthcdr (Vhistory_length, Vcommand_history);
if (CONSP (teml))
- XCONS (teml)->cdr = Qnil;
+ XCDR (teml) = Qnil;
}
}
XSETFASTINT (val, 1);
else if (EQ (raw, Qminus))
XSETINT (val, -1);
- else if (CONSP (raw) && INTEGERP (XCONS (raw)->car))
- XSETINT (val, XINT (XCONS (raw)->car));
+ else if (CONSP (raw) && INTEGERP (XCAR (raw)))
+ XSETINT (val, XINT (XCAR (raw)));
else if (INTEGERP (raw))
val = raw;
else