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