aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhil Sainty2019-10-22 00:05:50 +1300
committerPhil Sainty2019-11-15 00:39:13 +1300
commita94f961e625aa53deaf8605f892fd8993a4f0cb8 (patch)
treec0f56aa0e54248c901b9fbea4260ee2bc678f63c
parentb28f35ac65631243b8e29856a2d13e70d2567b53 (diff)
downloademacs-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.el50
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