diff options
| author | Phil Sainty | 2019-10-22 00:05:50 +1300 |
|---|---|---|
| committer | Phil Sainty | 2019-11-15 00:39:13 +1300 |
| commit | a94f961e625aa53deaf8605f892fd8993a4f0cb8 (patch) | |
| tree | c0f56aa0e54248c901b9fbea4260ee2bc678f63c | |
| parent | b28f35ac65631243b8e29856a2d13e70d2567b53 (diff) | |
| download | emacs-a94f961e625aa53deaf8605f892fd8993a4f0cb8.tar.gz emacs-a94f961e625aa53deaf8605f892fd8993a4f0cb8.zip | |
Support loading so-long.el on top of an earlier version
* so-long.el (so-long-version, so-long--latest-version): New variables.
This enables users to safely load version 1.0 of so-long.el on top of
an earlier version, as well as making provisions for doing likewise
following any incompatible changes arising in future versions.
| -rw-r--r-- | lisp/so-long.el | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/lisp/so-long.el b/lisp/so-long.el index 982a699667a..2d551affa18 100644 --- a/lisp/so-long.el +++ b/lisp/so-long.el | |||
| @@ -411,6 +411,8 @@ | |||
| 411 | (add-to-list 'customize-package-emacs-version-alist | 411 | (add-to-list 'customize-package-emacs-version-alist |
| 412 | '(so-long ("1.0" . "27.1"))) | 412 | '(so-long ("1.0" . "27.1"))) |
| 413 | 413 | ||
| 414 | (defconst so-long--latest-version "1.0") | ||
| 415 | |||
| 414 | (declare-function longlines-mode "longlines") | 416 | (declare-function longlines-mode "longlines") |
| 415 | (defvar longlines-mode) | 417 | (defvar longlines-mode) |
| 416 | 418 | ||
| @@ -1818,6 +1820,54 @@ If it appears in `%s', you should remove it." | |||
| 1818 | (cdr hookfunc))) | 1820 | (cdr hookfunc))) |
| 1819 | (make-obsolete (car hookfunc) nil "so-long.el version 1.0"))) | 1821 | (make-obsolete (car hookfunc) nil "so-long.el version 1.0"))) |
| 1820 | 1822 | ||
| 1823 | ;; Live upgrades, for when a newer version is loaded over an older one. | ||
| 1824 | ;; | ||
| 1825 | ;; If `so-long-version' was already bound then that tells us which version we | ||
| 1826 | ;; should upgrade from. If `so-long-version' is unbound then most likely there | ||
| 1827 | ;; was no older version loaded; however, prior to version 1.0 `so-long-version' | ||
| 1828 | ;; was not defined at all, and so we also need to detect that scenario, which | ||
| 1829 | ;; we can do by testing for the presence of a symbol which was removed in 1.0. | ||
| 1830 | ;; | ||
| 1831 | ;; The variable `so-long-mode-enabled' covers versions 0.5 - 0.7.6, which is | ||
| 1832 | ;; every pre-1.0 release using the name "so-long.el". | ||
| 1833 | (defvar so-long-version (if (boundp 'so-long-mode-enabled) | ||
| 1834 | "0.5" ;; >= 0.5 and < 1.0 | ||
| 1835 | so-long--latest-version) | ||
| 1836 | "The loaded version of so-long.el.") | ||
| 1837 | |||
| 1838 | ;; Version-specific updates. | ||
| 1839 | (when (version< so-long-version so-long--latest-version) | ||
| 1840 | ;; Perform each update in sequence, as necessary. | ||
| 1841 | ;; Update to version 1.0 from earlier versions: | ||
| 1842 | (when (version< so-long-version "1.0") | ||
| 1843 | (remove-hook 'change-major-mode-hook 'so-long-change-major-mode) | ||
| 1844 | (require 'advice) | ||
| 1845 | (when (ad-find-advice 'hack-local-variables 'after 'so-long--file-local-mode) | ||
| 1846 | (ad-remove-advice 'hack-local-variables 'after 'so-long--file-local-mode) | ||
| 1847 | (ad-activate 'hack-local-variables)) | ||
| 1848 | (when (ad-find-advice 'set-auto-mode 'around 'so-long--set-auto-mode) | ||
| 1849 | (ad-remove-advice 'set-auto-mode 'around 'so-long--set-auto-mode) | ||
| 1850 | (ad-activate 'set-auto-mode)) | ||
| 1851 | (when (boundp 'so-long-mode-map) | ||
| 1852 | (define-key so-long-mode-map [remap so-long-mode-revert] #'so-long-revert)) | ||
| 1853 | (dolist (var '(so-long-mode--inhibited | ||
| 1854 | so-long-original-mode)) | ||
| 1855 | (makunbound var)) | ||
| 1856 | (dolist (func '(so-long-change-major-mode | ||
| 1857 | so-long-check-header-modes | ||
| 1858 | so-long-line-detected-p)) | ||
| 1859 | (fmakunbound func)) | ||
| 1860 | (defvar so-long-mode-enabled) | ||
| 1861 | (when so-long-mode-enabled | ||
| 1862 | (unless global-so-long-mode | ||
| 1863 | (global-so-long-mode 1))) | ||
| 1864 | (makunbound 'so-long-mode-enabled)) | ||
| 1865 | ;; Update to version 1.N: | ||
| 1866 | ;; (when (version< so-long-version "1.N") ...) | ||
| 1867 | ;; | ||
| 1868 | ;; All updates completed. | ||
| 1869 | (setq so-long-version so-long--latest-version)) | ||
| 1870 | |||
| 1821 | 1871 | ||
| 1822 | (provide 'so-long) | 1872 | (provide 'so-long) |
| 1823 | 1873 | ||