diff options
| author | Richard M. Stallman | 2003-12-29 11:29:18 +0000 |
|---|---|---|
| committer | Richard M. Stallman | 2003-12-29 11:29:18 +0000 |
| commit | 7abd90ea9841ef2a09c1226dd3163b15e617d6b3 (patch) | |
| tree | d5eb343a29e87573d76707d04429542f545d7820 /src/data.c | |
| parent | dea7e2ba8497d12ccbaf648253a10573220516b6 (diff) | |
| download | emacs-7abd90ea9841ef2a09c1226dd3163b15e617d6b3.tar.gz emacs-7abd90ea9841ef2a09c1226dd3163b15e617d6b3.zip | |
(store_symval_forwarding): Handle setting default-fill-column, etc.,
by changing buffers that use the default.
Diffstat (limited to 'src/data.c')
| -rw-r--r-- | src/data.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/data.c b/src/data.c index a246271c1f6..c4e3937f3fa 100644 --- a/src/data.c +++ b/src/data.c | |||
| @@ -873,6 +873,8 @@ store_symval_forwarding (symbol, valcontents, newval, buf) | |||
| 873 | register Lisp_Object valcontents, newval; | 873 | register Lisp_Object valcontents, newval; |
| 874 | struct buffer *buf; | 874 | struct buffer *buf; |
| 875 | { | 875 | { |
| 876 | int offset; | ||
| 877 | |||
| 876 | switch (SWITCH_ENUM_CAST (XTYPE (valcontents))) | 878 | switch (SWITCH_ENUM_CAST (XTYPE (valcontents))) |
| 877 | { | 879 | { |
| 878 | case Lisp_Misc: | 880 | case Lisp_Misc: |
| @@ -892,6 +894,36 @@ store_symval_forwarding (symbol, valcontents, newval, buf) | |||
| 892 | 894 | ||
| 893 | case Lisp_Misc_Objfwd: | 895 | case Lisp_Misc_Objfwd: |
| 894 | *XOBJFWD (valcontents)->objvar = newval; | 896 | *XOBJFWD (valcontents)->objvar = newval; |
| 897 | |||
| 898 | /* If this variable is a default for something stored | ||
| 899 | in the buffer itself, such as default-fill-column, | ||
| 900 | find the buffers that don't have local values for it | ||
| 901 | and update them. */ | ||
| 902 | if (XOBJFWD (valcontents)->objvar > (Lisp_Object *) &buffer_defaults | ||
| 903 | && XOBJFWD (valcontents)->objvar < (Lisp_Object *) (&buffer_defaults + 1)) | ||
| 904 | { | ||
| 905 | int offset = ((char *) XOBJFWD (valcontents)->objvar | ||
| 906 | - (char *) &buffer_defaults); | ||
| 907 | int idx = PER_BUFFER_IDX (offset); | ||
| 908 | |||
| 909 | Lisp_Object tail, buf; | ||
| 910 | |||
| 911 | if (idx <= 0) | ||
| 912 | break; | ||
| 913 | |||
| 914 | for (tail = Vbuffer_alist; CONSP (tail); tail = XCDR (tail)) | ||
| 915 | { | ||
| 916 | Lisp_Object buf; | ||
| 917 | struct buffer *b; | ||
| 918 | |||
| 919 | buf = Fcdr (XCAR (tail)); | ||
| 920 | if (!BUFFERP (buf)) continue; | ||
| 921 | b = XBUFFER (buf); | ||
| 922 | |||
| 923 | if (! PER_BUFFER_VALUE_P (b, idx)) | ||
| 924 | PER_BUFFER_VALUE (b, offset) = newval; | ||
| 925 | } | ||
| 926 | } | ||
| 895 | break; | 927 | break; |
| 896 | 928 | ||
| 897 | case Lisp_Misc_Buffer_Objfwd: | 929 | case Lisp_Misc_Buffer_Objfwd: |