diff options
| author | Richard M. Stallman | 2001-11-05 00:10:49 +0000 |
|---|---|---|
| committer | Richard M. Stallman | 2001-11-05 00:10:49 +0000 |
| commit | 79aa712d49fb1628fcee1b7e155ab3a030619bf9 (patch) | |
| tree | 8fb8c2c5947c0d09410ea71c472e1ad18392a834 /src/buffer.c | |
| parent | afd16d460a4db8d5f07479e07185e0d4700e8415 (diff) | |
| download | emacs-79aa712d49fb1628fcee1b7e155ab3a030619bf9.tar.gz emacs-79aa712d49fb1628fcee1b7e155ab3a030619bf9.zip | |
(Fbuffer_local_value): New function.
(syms_of_buffer): defsubr it.
Diffstat (limited to 'src/buffer.c')
| -rw-r--r-- | src/buffer.c | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/src/buffer.c b/src/buffer.c index 2207adcf406..0ca7ea0d329 100644 --- a/src/buffer.c +++ b/src/buffer.c | |||
| @@ -808,6 +808,58 @@ If BUFFER is not indirect, return nil. */) | |||
| 808 | return base_buffer; | 808 | return base_buffer; |
| 809 | } | 809 | } |
| 810 | 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; | ||
| 861 | } | ||
| 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. |
| @@ -5571,6 +5623,7 @@ The space is measured in pixels, and put below lines on window systems. */); | |||
| 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); |