emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/src/buffer.c


From: Richard M . Stallman
Subject: [Emacs-diffs] Changes to emacs/src/buffer.c
Date: Thu, 17 Mar 2005 18:37:39 -0500

Index: emacs/src/buffer.c
diff -c emacs/src/buffer.c:1.475 emacs/src/buffer.c:1.476
*** emacs/src/buffer.c:1.475    Fri Feb 25 15:21:30 2005
--- emacs/src/buffer.c  Thu Mar 17 23:37:39 2005
***************
*** 182,187 ****
--- 182,188 ----
  static void free_buffer_text P_ ((struct buffer *b));
  static struct Lisp_Overlay * copy_overlays P_ ((struct buffer *, struct 
Lisp_Overlay *));
  static void modify_overlay P_ ((struct buffer *, EMACS_INT, EMACS_INT));
+ static Lisp_Object buffer_lisp_local_variables P_ ((struct buffer *));
  
  
  /* For debugging; temporary.  See set_buffer_internal.  */
***************
*** 515,530 ****
    to->overlays_before = copy_overlays (to, from->overlays_before);
    to->overlays_after = copy_overlays (to, from->overlays_after);
  
!   /* Copy the alist of local variables,
!      and all the alist elements too.  */
!   to->local_var_alist
!     = Fcopy_sequence (from->local_var_alist);
!   for (tem = to->local_var_alist; CONSP (tem);
!        tem = XCDR (tem))
!     XSETCAR (tem, Fcons (XCAR (XCAR (tem)), XCDR (XCAR (tem))));
  }
  
- 
  DEFUN ("make-indirect-buffer", Fmake_indirect_buffer, Smake_indirect_buffer,
         2, 3,
         "bMake indirect buffer (to buffer): \nBName of indirect buffer: ",
--- 516,526 ----
    to->overlays_before = copy_overlays (to, from->overlays_before);
    to->overlays_after = copy_overlays (to, from->overlays_after);
  
!   /* Get (a copy of) the alist of Lisp-level local variables of FROM
!      and install that in TO.  */
!   to->local_var_alist = buffer_lisp_local_variables (from);
  }
  
  DEFUN ("make-indirect-buffer", Fmake_indirect_buffer, Smake_indirect_buffer,
         2, 3,
         "bMake indirect buffer (to buffer): \nBName of indirect buffer: ",
***************
*** 934,939 ****
--- 930,972 ----
    return result;
  }
  
+ /* Return an alist of the Lisp-level buffer-local bindings of
+    buffer BUF.  That is, do't include  the variables maintained
+    in special slots in the buffer object.  */
+ 
+ static Lisp_Object
+ buffer_lisp_local_variables (buf)
+      struct buffer *buf;
+ {
+   Lisp_Object result = Qnil;
+   register Lisp_Object tail;
+   for (tail = buf->local_var_alist; CONSP (tail); tail = XCDR (tail))
+     {
+       Lisp_Object val, elt;
+ 
+       elt = XCAR (tail);
+ 
+       /* Reference each variable in the alist in buf.
+        If inquiring about the current buffer, this gets the current values,
+        so store them into the alist so the alist is up to date.
+        If inquiring about some other buffer, this swaps out any values
+        for that buffer, making the alist up to date automatically.  */
+       val = find_symbol_value (XCAR (elt));
+       /* Use the current buffer value only if buf is the current buffer.  */
+       if (buf != current_buffer)
+       val = XCDR (elt);
+ 
+       /* If symbol is unbound, put just the symbol in the list.  */
+       if (EQ (val, Qunbound))
+       result = Fcons (XCAR (elt), result);
+       /* Otherwise, put (symbol . value) in the list.  */
+       else
+       result = Fcons (Fcons (XCAR (elt), val), result);
+     }
+ 
+   return result;
+ }
+ 
  DEFUN ("buffer-local-variables", Fbuffer_local_variables,
         Sbuffer_local_variables, 0, 1, 0,
         doc: /* Return an alist of variables that are buffer-local in BUFFER.
***************
*** 955,988 ****
        buf = XBUFFER (buffer);
      }
  
!   result = Qnil;
! 
!   {
!     register Lisp_Object tail;
!     for (tail = buf->local_var_alist; CONSP (tail); tail = XCDR (tail))
!       {
!       Lisp_Object val, elt;
! 
!       elt = XCAR (tail);
! 
!       /* Reference each variable in the alist in buf.
!          If inquiring about the current buffer, this gets the current values,
!          so store them into the alist so the alist is up to date.
!          If inquiring about some other buffer, this swaps out any values
!          for that buffer, making the alist up to date automatically.  */
!       val = find_symbol_value (XCAR (elt));
!       /* Use the current buffer value only if buf is the current buffer.  */
!       if (buf != current_buffer)
!         val = XCDR (elt);
! 
!       /* If symbol is unbound, put just the symbol in the list.  */
!       if (EQ (val, Qunbound))
!         result = Fcons (XCAR (elt), result);
!       /* Otherwise, put (symbol . value) in the list.  */
!       else
!         result = Fcons (Fcons (XCAR (elt), val), result);
!       }
!   }
  
    /* Add on all the variables stored in special slots.  */
    {
--- 988,994 ----
        buf = XBUFFER (buffer);
      }
  
!   result = buffer_lisp_local_variables (buf);
  
    /* Add on all the variables stored in special slots.  */
    {
***************
*** 1004,1010 ****
  
    return result;
  }
- 
  
  DEFUN ("buffer-modified-p", Fbuffer_modified_p, Sbuffer_modified_p,
         0, 1, 0,
--- 1010,1015 ----




reply via email to

[Prev in Thread] Current Thread [Next in Thread]