Mercurial > emacs
diff src/data.c @ 91041:bdb3fe0ba9fa
Merge from emacs--devo--0
Patches applied:
* emacs--devo--0 (patch 866-879)
- Merge multi-tty branch
- Update from CVS
- Merge from emacs--rel--22
Revision: emacs@sv.gnu.org/emacs--unicode--0--patch-257
| author | Miles Bader <miles@gnu.org> |
|---|---|
| date | Thu, 11 Oct 2007 16:22:07 +0000 |
| parents | 57f4ffc03d13 48251c264d8d |
| children | a0e466c4d599 |
line wrap: on
line diff
--- a/src/data.c Thu Oct 11 16:14:00 2007 +0000 +++ b/src/data.c Thu Oct 11 16:22:07 2007 +0000 @@ -30,6 +30,7 @@ #include "keyboard.h" #include "frame.h" #include "syssignal.h" +#include "termhooks.h" /* For FRAME_KBOARD reference in y-or-n-p. */ #ifdef STDC_HEADERS #include <float.h> @@ -769,8 +770,11 @@ if (SUBRP (fun)) { - if (XSUBR (fun)->prompt) - return list2 (Qinteractive, build_string (XSUBR (fun)->prompt)); + char *spec = XSUBR (fun)->intspec; + if (spec) + return list2 (Qinteractive, + (*spec != '(') ? build_string (spec) : + Fcar (Fread_from_string (build_string (spec), Qnil, Qnil))); } else if (COMPILEDP (fun)) { @@ -873,7 +877,18 @@ case Lisp_Misc_Kboard_Objfwd: offset = XKBOARD_OBJFWD (valcontents)->offset; - return *(Lisp_Object *)(offset + (char *)current_kboard); + /* We used to simply use current_kboard here, but from Lisp + code, it's value is often unexpected. It seems nicer to + allow constructions like this to work as intuitively expected: + + (with-selected-frame frame + (define-key local-function-map "\eOP" [f1])) + + On the other hand, this affects the semantics of + last-command and real-last-command, and people may rely on + that. I took a quick look at the Lisp codebase, and I + don't think anything will break. --lorentey */ + return *(Lisp_Object *)(offset + (char *)FRAME_KBOARD (SELECTED_FRAME ())); } return valcontents; } @@ -961,7 +976,7 @@ case Lisp_Misc_Kboard_Objfwd: { - char *base = (char *) current_kboard; + char *base = (char *) FRAME_KBOARD (SELECTED_FRAME ()); char *p = base + XKBOARD_OBJFWD (valcontents)->offset; *(Lisp_Object *) p = newval; } @@ -1107,7 +1122,7 @@ case Lisp_Misc_Kboard_Objfwd: return *(Lisp_Object *)(XKBOARD_OBJFWD (valcontents)->offset - + (char *)current_kboard); + + (char *)FRAME_KBOARD (SELECTED_FRAME ())); } } @@ -1868,6 +1883,51 @@ return Qnil; } + +/* This code is disabled now that we use the selected frame to return + keyboard-local-values. */ +#if 0 +extern struct terminal *get_terminal P_ ((Lisp_Object display, int)); + +DEFUN ("terminal-local-value", Fterminal_local_value, Sterminal_local_value, 2, 2, 0, + doc: /* Return the terminal-local value of SYMBOL on TERMINAL. +If SYMBOL is not a terminal-local variable, then return its normal +value, like `symbol-value'. + +TERMINAL may be a terminal id, a frame, or nil (meaning the +selected frame's terminal device). */) + (symbol, terminal) + Lisp_Object symbol; + Lisp_Object terminal; +{ + Lisp_Object result; + struct terminal *t = get_terminal (terminal, 1); + push_kboard (t->kboard); + result = Fsymbol_value (symbol); + pop_kboard (); + return result; +} + +DEFUN ("set-terminal-local-value", Fset_terminal_local_value, Sset_terminal_local_value, 3, 3, 0, + doc: /* Set the terminal-local binding of SYMBOL on TERMINAL to VALUE. +If VARIABLE is not a terminal-local variable, then set its normal +binding, like `set'. + +TERMINAL may be a terminal id, a frame, or nil (meaning the +selected frame's terminal device). */) + (symbol, terminal, value) + Lisp_Object symbol; + Lisp_Object terminal; + Lisp_Object value; +{ + Lisp_Object result; + struct terminal *t = get_terminal (terminal, 1); + push_kboard (d->kboard); + result = Fset (symbol, value); + pop_kboard (); + return result; +} +#endif /* Find the function at the end of a chain of symbol function indirections. */ @@ -3173,6 +3233,10 @@ defsubr (&Slocal_variable_p); defsubr (&Slocal_variable_if_set_p); defsubr (&Svariable_binding_locus); +#if 0 /* XXX Remove this. --lorentey */ + defsubr (&Sterminal_local_value); + defsubr (&Sset_terminal_local_value); +#endif defsubr (&Saref); defsubr (&Saset); defsubr (&Snumber_to_string);
