aboutsummaryrefslogtreecommitdiffstats
path: root/src/buffer.c
diff options
context:
space:
mode:
authorRichard M. Stallman2001-11-05 00:10:49 +0000
committerRichard M. Stallman2001-11-05 00:10:49 +0000
commit79aa712d49fb1628fcee1b7e155ab3a030619bf9 (patch)
tree8fb8c2c5947c0d09410ea71c472e1ad18392a834 /src/buffer.c
parentafd16d460a4db8d5f07479e07185e0d4700e8415 (diff)
downloademacs-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.c53
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
811DEFUN ("buffer-local-value", Fbuffer_local_value,
812 Sbuffer_local_value, 2, 2, 0,
813 doc: /* Return the value of VARIABLE in BUFFER.
814If VARIABLE does not have a buffer-local binding in BUFFER, the value
815is 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
811DEFUN ("buffer-local-variables", Fbuffer_local_variables, 863DEFUN ("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);