There is a good collection of tools for Emacs Lisp testing:
evm - Emacs Version Manager.
Cask - project management tool for Emacs that helps automate the package development cycle; development, dependencies, testing, building, packaging and more.
ert-runner - tool for Emacs projects tested using Ert.
ecukes - testing framework for integration testing.
You can use C-h P (describe-package). After entering a package name, the attributes (including version) of the package will be listed in the *Help* buffer. Besides, you can also view the version of a package from Package Menu (M-x list-packages).
At the cost of an extra top-level symbol binding, there's a very neat solution which avoids repeating the define-derived-mode form:
(if (fboundp 'prog-mode) 'prog-mode 'fundamental-mode))
(define-derived-mode my-fancy-mode my-fancy-parent-mode
Works fine in any Emacs >= 23. I came up with this for haml-mode a ...
Elisp is an interpreted language. You can put version-specific code in your .emacs, but protect it by testing at load time that it's operating on the correct version.
This code will work in all versions because (shiny-new-feature) is only evaluated when (is-new-feature-...
Using emacs-version with the various version* functions is sane, yes.
(These are convenience wrappers which use the version-list functionality behind the scenes.)
By way of example, the following is the code Tim ended up using:
(if (version< emacs-version "24.4")
(dolist (i '("php" "php3" "php5" "php7" "php-5" "...
(Community wiki. Please add yours!)
If there's a function, added in a newer Emacs version, that you'd like to use, check whether it's defined with fboundp, and define a compatibility function if it's not defined.
It's considered a bad idea to give the compatibility function the same name as the real function, as other Elisp code may be using the same ...
Do this, instead, starting with Emacs 26:
(gethash "EURO SIGN" (ucs-names))
In other words, use something like this:
(if (> emacs-major-version 25)
(gethash "EURO SIGN" (ucs-names))
(cdr (assoc-string "EURO SIGN" (ucs-names) t)))
Unfortunately, for people trying to provide backward-compatibility, they made an incompatible change in ucs-names, ...
tl;dr: Use if and your own init function:
(if (fboundp 'prog-mode)
(define-derived-mode your-cool-mode prog-mode "Cool"
(define-derived-mode your-cool-mode nil "Cool"
Then do all the mode's initialization in your-cool-init.
The problem is that the ...
Put the byte-compiled files for different Emacs versions in different directories. Make your load-path conditional on the Emacs version you are running, so that you load the appropriate byte-compiled libraries.
Packages aside, note that M-x find-library will take you to the source code for a given library name. Assuming the author has assigned a version, you will typically find that information specified in the comments at the top of the file.
Well, the solution to this problem was a very simple one. The issue was that the encoding used for putting manpages (and maybe other things) into buffers in 25.1.1 was unsuitable for pcmpl-args because it used special characters for quotation marks, hyphens, etc. These special characters are used by default in man-db, but older versions of Emacs forced ...
As amitp said in the comments, the window-system variable is 'mac on the Mac Port. Also, as pointed out by xuchunyang, emacs-version yields special output and mac-carbon-version-string is bound.
These things alone should be enough for one to detect whether you're using the Emacs Mac Port, even in a terminal frame.
At least in the more recent version of org-mode (9.4.4), one can fix this issue by modifying the variable org-show-notification-handler, e.g., by adding the following to the init file:
(setq org-show-notification-handler 'message)
org notifications (e.g., alerts related to clocking and effort) are then displayed at the bottom of the screen.
I was in a similar situation few weeks ago, I wanted to have a fresh emacs instance but still wanted the old emacs around if I needed.
I made a folder called
and when starting emacs I told emacs the home dir is that,
HOME=/Users/administrator/newhome emacs example.txt
Remember to create a .emacs.d in the newhmoe directory too.
I ended with:
(defun my--get-char (name)
"Get character by Unicode `name'."
((>= 26 emacs-major-version)
(gethash name (ucs-names)))
((>= 23 emacs-major-version)
(cdr (assoc-string name (ucs-names))))
(t (error "Emacs version is too old and lacks Unicode support..."))))
(when (>= emacs-major-version 23)
I loaded up MELPA and see sage-shell-mode listed. I don't know if this will solve the problem, but I've run into problems before with multiple package archives loading.
Here is a function I use to clear the list of packages and add MELPA. Don't forget to refresh the package list after this:
(defun my-package-load-melpa-only ()
"Load package manager with ...
Install Emacs 24.5 in your $HOME. Multiple versions of Emacs can co-exist.
Run below command line in shell,
./configure --prefix=$HOME/myemacs/24.4 --without-x-toolkit --without-x --without-xpm --without-png --without-gif --without-tiff --without-jpeg --without-rsvg --without-xft --without-xaw3d --without-xim --without-xpm --without-dbus --without-makeinfo ...