comparison src/buffer.c @ 40725:a8af2e89346c

(Fbuffer_local_value): New function. (syms_of_buffer): defsubr it.
author Richard M. Stallman <rms@gnu.org>
date Mon, 05 Nov 2001 00:10:49 +0000
parents cdfd4d09b79a
children d3065bec433f
comparison
equal deleted inserted replaced
40724:867ed25daefa 40725:a8af2e89346c
804 804
805 if (! base) 805 if (! base)
806 return Qnil; 806 return Qnil;
807 XSETBUFFER (base_buffer, base); 807 XSETBUFFER (base_buffer, base);
808 return base_buffer; 808 return base_buffer;
809 }
810
811 DEFUN ("buffer-local-value", Fbuffer_local_value,
812 Sbuffer_local_value, 2, 2, 0,
813 doc: /* Return the value of VARIABLE in BUFFER.
814 If VARIABLE does not have a buffer-local binding in BUFFER, the value
815 is the default binding of variable. */)
816 (symbol, buffer)
817 register Lisp_Object symbol;
818 register Lisp_Object buffer;
819 {
820 register struct buffer *buf;
821 register Lisp_Object result;
822
823 CHECK_SYMBOL (symbol, 0);
824 CHECK_BUFFER (buffer, 0);
825 buf = XBUFFER (buffer);
826
827 /* Look in local_var_list */
828 result = Fassoc (symbol, buf->local_var_alist);
829 if (NILP (result))
830 {
831 int offset, idx;
832 int found = 0;
833
834 /* Look in special slots */
835 for (offset = PER_BUFFER_VAR_OFFSET (name);
836 offset < sizeof (struct buffer);
837 /* sizeof EMACS_INT == sizeof Lisp_Object */
838 offset += (sizeof (EMACS_INT)))
839 {
840 idx = PER_BUFFER_IDX (offset);
841 if ((idx == -1 || PER_BUFFER_VALUE_P (buf, idx))
842 && SYMBOLP (PER_BUFFER_SYMBOL (offset))
843 && EQ (PER_BUFFER_SYMBOL (offset), symbol))
844 {
845 result = PER_BUFFER_VALUE (buf, offset);
846 found = 1;
847 break;
848 }
849 }
850
851 if (!found)
852 result = Fdefault_value (symbol);
853 }
854 else
855 result = XCDR (result);
856
857 if (EQ (result, Qunbound))
858 return Fsignal (Qvoid_variable, Fcons (symbol, Qnil));
859
860 return result;
809 } 861 }
810 862
811 DEFUN ("buffer-local-variables", Fbuffer_local_variables, 863 DEFUN ("buffer-local-variables", Fbuffer_local_variables,
812 Sbuffer_local_variables, 0, 1, 0, 864 Sbuffer_local_variables, 0, 1, 0,
813 doc: /* Return an alist of variables that are buffer-local in BUFFER. 865 doc: /* Return an alist of variables that are buffer-local in BUFFER.
5569 defsubr (&Sgenerate_new_buffer_name); 5621 defsubr (&Sgenerate_new_buffer_name);
5570 defsubr (&Sbuffer_name); 5622 defsubr (&Sbuffer_name);
5571 /*defsubr (&Sbuffer_number);*/ 5623 /*defsubr (&Sbuffer_number);*/
5572 defsubr (&Sbuffer_file_name); 5624 defsubr (&Sbuffer_file_name);
5573 defsubr (&Sbuffer_base_buffer); 5625 defsubr (&Sbuffer_base_buffer);
5626 defsubr (&Sbuffer_local_value);
5574 defsubr (&Sbuffer_local_variables); 5627 defsubr (&Sbuffer_local_variables);
5575 defsubr (&Sbuffer_modified_p); 5628 defsubr (&Sbuffer_modified_p);
5576 defsubr (&Sset_buffer_modified_p); 5629 defsubr (&Sset_buffer_modified_p);
5577 defsubr (&Sbuffer_modified_tick); 5630 defsubr (&Sbuffer_modified_tick);
5578 defsubr (&Srename_buffer); 5631 defsubr (&Srename_buffer);