Mercurial > emacs
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); |