Mercurial > hg > xemacs-beta
view src/widget.c @ 4905:755ae5b97edb
Change "special form" to "special operator" in our sources.
Add a compatible function alias, and the relevant manual index entries.
src/ChangeLog addition:
2010-01-31 Aidan Kehoe <kehoea@parhasard.net>
* symbols.c (Fspecial_operator_p, syms_of_symbols):
* eval.c (print_subr, Finteractive_p, Ffuncall)
(Ffunction_min_args, Ffunction_max_args, vars_of_eval):
* editfns.c:
* data.c (Fsubr_max_args):
* doc.c (Fbuilt_in_symbol_file):
Change "special form" to "special operator" in our sources.
man/ChangeLog addition:
2010-01-31 Aidan Kehoe <kehoea@parhasard.net>
* xemacs/programs.texi (Defuns):
* lispref/variables.texi (Local Variables, Defining Variables)
(Setting Variables, Default Value):
* lispref/symbols.texi (Definitions):
* lispref/searching.texi (Saving Match Data):
* lispref/positions.texi (Excursions, Narrowing):
* lispref/objects.texi (Primitive Function Type):
* lispref/macros.texi (Defining Macros, Backquote):
* lispref/lispref.texi (Top):
* lispref/intro.texi (A Sample Function Description):
* lispref/help.texi (Help Functions):
* lispref/functions.texi (What Is a Function, Simple Lambda)
(Defining Functions, Calling Functions, Anonymous Functions):
* lispref/frames.texi (Input Focus):
* lispref/eval.texi (Forms, Function Indirection)
(Special Operators, Quoting):
* lispref/edebug-inc.texi (Instrumenting)
(Specification Examples):
* lispref/debugging.texi (Internals of Debugger):
* lispref/control.texi (Control Structures, Sequencing):
(Conditionals, Combining Conditions, Iteration):
(Catch and Throw, Handling Errors):
* lispref/commands.texi (Defining Commands, Using Interactive):
Terminology change; special operator -> special form.
Don't attempt to change this in texinfo.texi or cl.texi, which use
macros I don't understand.
* lispref/macros.texi (Defining Macros): Give an anonymous macro
example here.
* lispref/positions.texi (Excursions):
Correct some documentation that called a couple of macros special
forms.
* lispref/searching.texi (Saving Match Data):
Drop some documentation of how to write code that works with Emacs
18.
* lispref/specifiers.texi (Adding Specifications):
Correct this; #'let-specifier is a macro, not a special operator.
* lispref/windows.texi (Window Configurations)
(Selecting Windows):
Correct this, #'save-selected-window and #'save-window-excursion
are macros, not special operators.
lisp/ChangeLog addition:
2010-01-31 Aidan Kehoe <kehoea@parhasard.net>
* obsolete.el:
* loadhist.el (symbol-file):
* help.el (describe-function-1):
* bytecomp.el: (byte-compile-save-current-buffer):
* byte-optimize.el (byte-optimize-form-code-walker):
* subr.el (subr-arity):
Change "special form" to "special operator" in these files, it's
the more logical term.
* subr.el (special-form-p): Provide this alias for
#'special-operator-p.
author | Aidan Kehoe <kehoea@parhasard.net> |
---|---|
date | Sun, 31 Jan 2010 20:28:01 +0000 |
parents | 80cd90837ac5 |
children | 308d34e9f07d |
line wrap: on
line source
/* Primitives for work of the "widget" library. Copyright (C) 1997 Free Software Foundation, Inc. This file is part of XEmacs. XEmacs is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. XEmacs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with XEmacs; see the file COPYING. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Synched up with: Not in FSF. */ /* In an ideal world, this file would not have been necessary. However, elisp function calls being as slow as they are, it turns out that some functions in the widget library (wid-edit.el) are the bottleneck of Widget operation. Here is their translation to C, for the sole reason of efficiency. */ #include <config.h> #include "lisp.h" #include "buffer.h" Lisp_Object Qwidget_type; DEFUN ("widget-plist-member", Fwidget_plist_member, 2, 2, 0, /* Like `plist-get', but returns the tail of PLIST whose car is PROP. */ (plist, prop)) { while (!NILP (plist) && !EQ (Fcar (plist), prop)) { /* Check for QUIT, so a circular plist doesn't lock up the editor. */ QUIT; plist = Fcdr (Fcdr (plist)); } return plist; } DEFUN ("widget-put", Fwidget_put, 3, 3, 0, /* In WIDGET set PROPERTY to VALUE. The value can later be retrieved with `widget-get'. */ (widget, property, value)) { CHECK_CONS (widget); XCDR (widget) = Fplist_put (XCDR (widget), property, value); return widget; } DEFUN ("widget-get", Fwidget_get, 2, 2, 0, /* In WIDGET, get the value of PROPERTY. The value could either be specified when the widget was created, or later with `widget-put'. */ (widget, property)) { Lisp_Object value = Qnil; while (1) { Lisp_Object tmp = Fwidget_plist_member (Fcdr (widget), property); if (!NILP (tmp)) { value = Fcar (Fcdr (tmp)); break; } tmp = Fcar (widget); if (!NILP (tmp)) { widget = Fget (tmp, Qwidget_type, Qnil); continue; } break; } return value; } DEFUN ("widget-apply", Fwidget_apply, 2, MANY, 0, /* Apply the value of WIDGET's PROPERTY to the widget itself. ARGS are passed as extra arguments to the function. arguments: (WIDGET PROPERTY &rest ARGS) */ (int nargs, Lisp_Object *args)) { /* This function can GC */ Lisp_Object newargs[3]; struct gcpro gcpro1; newargs[0] = Fwidget_get (args[0], args[1]); newargs[1] = args[0]; newargs[2] = Flist (nargs - 2, args + 2); GCPRO1 (newargs[2]); RETURN_UNGCPRO (Fapply (3, newargs)); } void syms_of_widget (void) { DEFSYMBOL (Qwidget_type); DEFSUBR (Fwidget_plist_member); DEFSUBR (Fwidget_put); DEFSUBR (Fwidget_get); DEFSUBR (Fwidget_apply); }