Przeglądaj źródła

Allow org-indent-mode only on Emacsen that do support it

* lisp/org-compat.el (org-version-check): New function.
* lisp/org-indent.el (org-indent-mode): Check for exact emacs version.
Carsten Dominik 14 lat temu
rodzic
commit
85c90e96fd
2 zmienionych plików z 28 dodań i 3 usunięć
  1. 24 0
      lisp/org-compat.el
  2. 4 3
      lisp/org-indent.el

+ 24 - 0
lisp/org-compat.el

@@ -89,6 +89,30 @@ any other entries, and any resulting duplicates will be removed entirely."
    (t specs)))
 (put 'org-compatible-face 'lisp-indent-function 1)
 
+(defun org-version-check (version feature level)
+  (let* ((v1 (mapcar 'string-to-number (split-string version "[.]")))
+	 (v2 (mapcar 'string-to-number (split-string emacs-version "[.]")))
+	 (rmaj (or (nth 0 v1) 99))
+	 (rmin (or (nth 1 v1) 99))
+	 (rbld (or (nth 2 v1) 99))
+	 (maj (or (nth 0 v2) 0))
+	 (min (or (nth 1 v2) 0))
+	 (bld (or (nth 2 v2) 0)))
+    (if (or (< maj rmaj)
+	    (and (= maj rmaj)
+		 (< min rmin))
+	    (and (= maj rmaj)
+		 (= min rmin)
+		 (< bld rbld)))
+	(if (eq level :predicate)
+	    ;; just return if we have the version
+	    nil
+	  (let ((msg (format "Emacs %s or greater is recommended for %s"
+			     version feature)))
+	    (display-warning 'org msg level)
+	    t))
+      t)))
+
 ;;;; Emacs/XEmacs compatibility
 
 ;; Keys

+ 4 - 3
lisp/org-indent.el

@@ -130,10 +130,11 @@ FIXME:  How to update when broken?"
   (cond
    ((org-bound-and-true-p org-inhibit-startup)
     (setq org-indent-mode nil))
+   ((and org-indent-mode (featurep 'xemacs))
+    (message "org-indent-mode does not work in XEmacs - refused to turn it on")
+    (setq org-indent-mode nil))
    ((and org-indent-mode
-	 (or (< emacs-major-version 23)
-	     (and (= emacs-major-version 23)
-		  (< emacs-minor-version 2))))
+	 (not (org-version-check "23.1.50" "Org Indent mode" :predicate)))
     (message "org-indent-mode is can crash Emacs 23.1 - refused to turn it on!")
     (ding)
     (sit-for 1)