Mercurial > emacs
comparison src/buffer.c @ 91239:2fcaae6177a5
Merge from emacs--devo--0
Revision: emacs@sv.gnu.org/emacs--unicode--0--patch-300
author | Miles Bader <miles@gnu.org> |
---|---|
date | Sun, 16 Dec 2007 05:08:49 +0000 |
parents | 53108e6cea98 40dcde0eb331 |
children | 606f2d163a64 |
comparison
equal
deleted
inserted
replaced
91238:5cf14a2107b5 | 91239:2fcaae6177a5 |
---|---|
105 | 105 |
106 /* Number of per-buffer variables used. */ | 106 /* Number of per-buffer variables used. */ |
107 | 107 |
108 int last_per_buffer_idx; | 108 int last_per_buffer_idx; |
109 | 109 |
110 Lisp_Object Fset_buffer (); | 110 EXFUN (Fset_buffer, 1); |
111 void set_buffer_internal (); | 111 void set_buffer_internal P_ ((struct buffer *b)); |
112 void set_buffer_internal_1 (); | 112 void set_buffer_internal_1 P_ ((struct buffer *b)); |
113 static void call_overlay_mod_hooks (); | 113 static void call_overlay_mod_hooks P_ ((Lisp_Object list, Lisp_Object overlay, |
114 static void swap_out_buffer_local_variables (); | 114 int after, Lisp_Object arg1, |
115 static void reset_buffer_local_variables (); | 115 Lisp_Object arg2, Lisp_Object arg3)); |
116 static void swap_out_buffer_local_variables P_ ((struct buffer *b)); | |
117 static void reset_buffer_local_variables P_ ((struct buffer *b, int permanent_too)); | |
116 | 118 |
117 /* Alist of all buffer names vs the buffers. */ | 119 /* Alist of all buffer names vs the buffers. */ |
118 /* This used to be a variable, but is no longer, | 120 /* This used to be a variable, but is no longer, |
119 to prevent lossage due to user rplac'ing this alist or its elements. */ | 121 to prevent lossage due to user rplac'ing this alist or its elements. */ |
120 Lisp_Object Vbuffer_alist; | 122 Lisp_Object Vbuffer_alist; |
715 /* Reset buffer B's local variables info. | 717 /* Reset buffer B's local variables info. |
716 Don't use this on a buffer that has already been in use; | 718 Don't use this on a buffer that has already been in use; |
717 it does not treat permanent locals consistently. | 719 it does not treat permanent locals consistently. |
718 Instead, use Fkill_all_local_variables. | 720 Instead, use Fkill_all_local_variables. |
719 | 721 |
720 If PERMANENT_TOO is 1, then we reset permanent built-in | 722 If PERMANENT_TOO is 1, then we reset permanent |
721 buffer-local variables. If PERMANENT_TOO is 0, | 723 buffer-local variables. If PERMANENT_TOO is 0, |
722 we preserve those. */ | 724 we preserve those. */ |
723 | 725 |
724 static void | 726 static void |
725 reset_buffer_local_variables (b, permanent_too) | 727 reset_buffer_local_variables (b, permanent_too) |
753 #ifndef DOS_NT | 755 #ifndef DOS_NT |
754 b->buffer_file_type = Qnil; | 756 b->buffer_file_type = Qnil; |
755 #endif | 757 #endif |
756 | 758 |
757 /* Reset all (or most) per-buffer variables to their defaults. */ | 759 /* Reset all (or most) per-buffer variables to their defaults. */ |
758 b->local_var_alist = Qnil; | 760 if (permanent_too) |
761 b->local_var_alist = Qnil; | |
762 else | |
763 { | |
764 Lisp_Object tmp, last = Qnil; | |
765 for (tmp = b->local_var_alist; CONSP (tmp); tmp = XCDR (tmp)) | |
766 if (CONSP (XCAR (tmp)) | |
767 && SYMBOLP (XCAR (XCAR (tmp))) | |
768 && !NILP (Fget (XCAR (XCAR (tmp)), Qpermanent_local))) | |
769 /* If permanent-local, keep it. */ | |
770 last = tmp; | |
771 else if (NILP (last)) | |
772 b->local_var_alist = XCDR (tmp); | |
773 else | |
774 XSETCDR (last, XCDR (tmp)); | |
775 } | |
776 | |
759 for (i = 0; i < last_per_buffer_idx; ++i) | 777 for (i = 0; i < last_per_buffer_idx; ++i) |
760 if (permanent_too || buffer_permanent_local_flags[i] == 0) | 778 if (permanent_too || buffer_permanent_local_flags[i] == 0) |
761 SET_PER_BUFFER_VALUE_P (b, i, 0); | 779 SET_PER_BUFFER_VALUE_P (b, i, 0); |
762 | 780 |
763 /* For each slot that has a default value, | 781 /* For each slot that has a default value, |
1168 | 1186 |
1169 return make_number (BUF_CHARS_MODIFF (buf)); | 1187 return make_number (BUF_CHARS_MODIFF (buf)); |
1170 } | 1188 } |
1171 | 1189 |
1172 DEFUN ("rename-buffer", Frename_buffer, Srename_buffer, 1, 2, | 1190 DEFUN ("rename-buffer", Frename_buffer, Srename_buffer, 1, 2, |
1173 "sRename buffer (to new name): \nP", | 1191 "(list (read-string \"Rename buffer (to new name): \" \ |
1192 nil 'buffer-name-history (buffer-name (current-buffer))) \ | |
1193 current-prefix-arg)", | |
1174 doc: /* Change current buffer's name to NEWNAME (a string). | 1194 doc: /* Change current buffer's name to NEWNAME (a string). |
1175 If second arg UNIQUE is nil or omitted, it is an error if a | 1195 If second arg UNIQUE is nil or omitted, it is an error if a |
1176 buffer named NEWNAME already exists. | 1196 buffer named NEWNAME already exists. |
1177 If UNIQUE is non-nil, come up with a new name using | 1197 If UNIQUE is non-nil, come up with a new name using |
1178 `generate-new-buffer-name'. | 1198 `generate-new-buffer-name'. |
2465 | 2485 |
2466 The first thing this function does is run | 2486 The first thing this function does is run |
2467 the normal hook `change-major-mode-hook'. */) | 2487 the normal hook `change-major-mode-hook'. */) |
2468 () | 2488 () |
2469 { | 2489 { |
2470 register Lisp_Object alist, sym, tem; | |
2471 Lisp_Object oalist; | |
2472 | |
2473 if (!NILP (Vrun_hooks)) | 2490 if (!NILP (Vrun_hooks)) |
2474 call1 (Vrun_hooks, Qchange_major_mode_hook); | 2491 call1 (Vrun_hooks, Qchange_major_mode_hook); |
2475 oalist = current_buffer->local_var_alist; | 2492 |
2476 | 2493 /* Make sure none of the bindings in local_var_alist |
2477 /* Make sure none of the bindings in oalist | |
2478 remain swapped in, in their symbols. */ | 2494 remain swapped in, in their symbols. */ |
2479 | 2495 |
2480 swap_out_buffer_local_variables (current_buffer); | 2496 swap_out_buffer_local_variables (current_buffer); |
2481 | 2497 |
2482 /* Actually eliminate all local bindings of this buffer. */ | 2498 /* Actually eliminate all local bindings of this buffer. */ |
2483 | 2499 |
2484 reset_buffer_local_variables (current_buffer, 0); | 2500 reset_buffer_local_variables (current_buffer, 0); |
2485 | |
2486 /* Any which are supposed to be permanent, | |
2487 make local again, with the same values they had. */ | |
2488 | |
2489 for (alist = oalist; CONSP (alist); alist = XCDR (alist)) | |
2490 { | |
2491 sym = XCAR (XCAR (alist)); | |
2492 tem = Fget (sym, Qpermanent_local); | |
2493 if (! NILP (tem)) | |
2494 { | |
2495 Fmake_local_variable (sym); | |
2496 Fset (sym, XCDR (XCAR (alist))); | |
2497 } | |
2498 } | |
2499 | 2501 |
2500 /* Force mode-line redisplay. Useful here because all major mode | 2502 /* Force mode-line redisplay. Useful here because all major mode |
2501 commands call this function. */ | 2503 commands call this function. */ |
2502 update_mode_lines++; | 2504 update_mode_lines++; |
2503 | 2505 |