231 |
;; hook is run, the major mode is in the process of being changed and we do not |
;; hook is run, the major mode is in the process of being changed and we do not |
232 |
;; know what the final major mode will be. So, `font-lock-change-major-mode' |
;; know what the final major mode will be. So, `font-lock-change-major-mode' |
233 |
;; only (a) notes the name of the current buffer, and (b) adds our function |
;; only (a) notes the name of the current buffer, and (b) adds our function |
234 |
;; `turn-on-font-lock-if-enabled' to the hook variables `find-file-hook' and |
;; `turn-on-font-lock-if-enabled' to the hook variables |
235 |
;; `post-command-hook' (for buffers that are not visiting files). By the time |
;; `after-change-major-mode-hook' and `post-command-hook' (for modes |
236 |
|
;; that do not yet run `after-change-major-mode-hook'). By the time |
237 |
;; the functions on the first of these hooks to be run are run, the new major |
;; the functions on the first of these hooks to be run are run, the new major |
238 |
;; mode is assumed to be in place. This way we get a Font Lock function run |
;; mode is assumed to be in place. This way we get a Font Lock function run |
239 |
;; when a major mode is turned on, without knowing major modes or their hooks. |
;; when a major mode is turned on, without knowing major modes or their hooks. |
240 |
;; |
;; |
241 |
;; Naturally this requires that (a) major modes run `kill-all-local-variables', |
;; Naturally this requires that major modes run `kill-all-local-variables' |
242 |
;; as they are supposed to do, and (b) the major mode is in place after the |
;; and `after-change-major-mode-hook', as they are supposed to. For modes |
243 |
;; file is visited or the command that ran `kill-all-local-variables' has |
;; that do not run `after-change-major-mode-hook' yet, `post-command-hook' |
244 |
;; finished, whichever the sooner. Arguably, any major mode that does not |
;; takes care of things if the mode is set directly or indirectly by |
245 |
;; follow the convension (a) is broken, and I can't think of any reason why (b) |
;; an interactive command; however, problems can occur if the mode is |
246 |
;; would not be met (except `gnudoit' on non-files). However, it is not clean. |
;; set by a timer or process: in that case, proper handling of Font Lock mode |
247 |
;; |
;; may be delayed until the next interactive command. |
|
;; Probably the cleanest solution is to have each major mode function run some |
|
|
;; hook, e.g., `major-mode-hook', but maybe implementing that change is |
|
|
;; impractical. I am personally against making `setq' a macro or be advised, |
|
|
;; or have a special function such as `set-major-mode', but maybe someone can |
|
|
;; come up with another solution? |
|
248 |
|
|
249 |
;; User interface. |
;; User interface. |
250 |
;; |
;; |