This page documents known bugs, brainstorms cool new features, and wishes for Emacs. (Try to keep humor in CategoryHumor…)

Note: If you want Emacs developers to consider your suggestion, don’t just post it here (but do that too), send it to the Emacs-developer mailing list: mailto:emacs-devel@gnu.org. There are also opportunities which could provide solutions to these wishes; for instance GoogleSummerOfCode

Maintaining the Page

This is a large page that is inclined to only grow larger. It needs to be continuously refactored. Wishes are organized by topic and by what degree the change would cause to Emacs. Other categorizations might also be useful to adopt.

Some wishes exist as features, or can be accomplished simply by using other parts of Emacs. These will be moved to those relevant pages.

Some unmet wishes and discussion can from time to time be moved to more relevant pages, or could be moved to archive pages of the WishList, or could be permanently deleted.

The other possibility would move wishlist items on to UserName pages, and could be linked to from this page.

Usage Wishes

      • This type of collaborative editing is possible in Emacs with Rudel. Currently the obby protocol (introduced by the Gobby collaborative editor) is supported. Support for the protocol used by SubEthaEdit is under development. – JanMoringen (disclaimer: Rudel author)
  • I’d like to be able to make the scratch buffer persist between sessions. I realise that it is meant for things I don’t want to save. But every few months, I get interrupted or distracted, and realise I have quit emacs or rebooted a machine while there was something significant in scratch. To know that I wouldn’t lose stuff when that happened, I’d happily pay the price of having to flush the buffer occasionally.

Configuration Wishes

Software Design Wishes

This category is a bit vague. It is the place for discussing improvements to design decisions that affect Emacs broadly. Issues are commonly related to using files generally or of what tasks Emacs is expected to do (tasks even beyond text editing for example).

Portability and Internationalisation Wishes

Here is where requests for using Emacs on other software and operating system platforms or to support other human languages and compatibility issues between other Emacsen.

Editing Wishes

These are wishes for better support for text editing, especially writers, but not exclusively.

User-Interface Wishes

These are wishes related to interacting with Emacs or with the graphical user interface of Emacs.

    • A start at something like this is available in CSharpMode. It relies on flymake which performs a compile check, then inspects the compiler errors and proposes quick fixes in a popup menu. The fixes that are proposed are all coded into the csharp-mode extension for flymake, they are all custom-engineered. Basic common errors like a missing semicolon are handled with a menu choice, “insert a semicolon”. Almost as trivially, missing namespaces result in a menu choice like “import the XXXX namespace”. Figuring out reasonable fixes for compiler errors is not so easy, though.
    • I suppose you could extend the idea to run static analysis (FxCop, StyleCop) on the buffer, in addition to the csc.exe compiler. Then emacs could propose somewhat more useful fixes or changes. (Eg, “use appropriate capitalization on Methods” etc.)
    • Currently the csharp stuff is all very language-specific. It wouldn’t be difficult to modularize and generalize it.

    • You can always associate Emacs (with higher or lower priority) with the files you might want to open with it. But the whole topic of KDE-Emacs (emaKs?) integration is much wider:
      • KDE menus and toolbars.
      • If you use gnuserv and you like having only one frame, raising it on file opening doesn’t work fine: it doesn’t raise over other KDE windows. Or if you have the Emacs frame in one virtual desktop and you open a file from, e.g., Konqueror while in another one, you can’t make the Emacs frame (in its KDE window) come to your current virtual desktop.
      • if you have Alt-F4 mapped to “close window” in KDE, it will do fine closing programs, but if you try to re-define it in Emacs for, e.g., “kill buffer and close frame”, it won’t work because it will kill the window (KDE-wise) before Emacs “reads” the keystroke.
      • I’d love to start Emacs as a service (gnuserv) without any frame initially associated (starting it with --iconic) and having it represented by an icon in the “system tray” which would support drag-n-drop (well, I assume this goes rather in “utopian wishes”).
        • Since 23.1 there is the --daemon option, dunno about “system tray” or drag-n-drop

    • Good idea! Anyone know how this might be done?
    • I get the impression it cannot be done currently. Unlike the mode-line, it looks like all mouse buttons have the same effect wrt ToolBar buttons. I took a look in `bindings.el’ and in various C source files (dispextern.c, xdisp.c, w32term.c, macterm.c), but I don’t see a way to fiddle with this. The C function that handles mouse clicks in the ToolBar seems to be `[w32]handle_tool_bar_click, and it looks like the only thing tested is the down_modifier for any mouse button – all buttons are treated alike. On the other hand, the click event seems to be stored as a TOOL_BAR_EVENT along with its modifier keys (Control, Meta etc.), so maybe I’m reading the code wrong and there is a way to get at this info. I tried binding [tool-bar mouse-2] etc., but to no avail. The ToolBar seems to be treated half-way between how the MenuBar and the ModeLine are treated: the menu-bar doesn’t even recognize keyboard modifiers; the mode-line recognizes mouse buttons and keyboard modifiers. – DrewAdams
  • That ought to be possible; usually (speaking of the X11 code and C), there is an assignment somewhere stating with which mouse „ears” the buttonPress action is associated (if it is omitted, the default implies „all mouse buttons”, like with the modifiers –– if omitted, means „none and any modifier”). So it should be quite easy to insert code which differentiates between the mouse ears. Concerning the ELisp side, the handler scripts ought to be updated/modified accordingly. ––mangledmind

Extensibility Wishes

These are wishes about Emacs lisp or generally extending Emacs.

Mode Wishes

These are wishes for new modes or for changes to modes existing in Emacs.

How about:

(require 'tar-mode)

(defun tar-find-file (tar-filename filename)
  "Visit TAR-FILENAME and extract FILENAME into its own buffer."
   (let* ((tar-file
	   (read-file-name "Visit tar file: "
			   nil nil t nil
			   (lambda (file)
			     (string-match "/\\'\\|\\.tar\\>" file))))
	   (with-current-buffer (find-file-noselect tar-file)
	     (completing-read (format "Extract %s file: "
				      (file-name-nondirectory tar-file))
			      (mapcar (function (lambda (tar-desc)
						   (tar-desc-tokens tar-desc))))
     (list tar-file file)))
  (with-current-buffer (find-file-noselect tar-filename)
    (goto-char (point-min))
;;     (format "^.\\{%d\\}%s$"
;; 	    (if tar-mode-show-date 54 36) (regexp-quote filename))
     (if (re-search-forward (format " %s$" (regexp-quote filename))
			   nil t)
       (error "%s not found in %s" filename tar-filename))))

Documentation Wishes

These are wishes related to Emacs’s documentation or with the Info system.

Programming Wishes

Below are wishes related to Emacs support of computer programming, not about programming Emacs. Those are filed above under extensibility.

    • word-count.el does this for a single file; it should take just a few minutes to script it to count all marked files.

  (defvar format-string-regexp
    "%" "*\
A regexp to match format strings.  It will be match against the
string including the beginning and quotes.")

  (defface format-string-face
    ' ((t (:background "lightyellow2" :foreground "Red" :slant
    italic :weight bold)))
    "Face to use when the string is a format string (e.g. for printf)"

  (defun my-font-lock-syntactic-face-function (state)
    "Fontify comments as comments and strings as strings or as formatting strings (e.g. for printf)"
    ;; see `parse-partial-sexp' for information about state
    (if (not (nth 3 state))
      (let* ((beg-char (nth 8 state))
             (end-char (save-excursion  ; There is probably a better way to do this, but I don't know it
                         (goto-char beg-char)
             (string (buffer-substring-no-properties beg-char end-char)))
        (if (string-match format-string-regexp string)
    (setq font-lock-syntactic-face-function (function my-font-lock-syntactic-face-function))

Other Wishes

Utopian Wishes

This is the place for wishes, that would require a complete rewrite of emacs or are in another way very very unlikely to ever happen. If you find any utopian wishes above, please move them here.

    $ gconftool-2 --get /desktop/gnome/interface/gtk_key_theme

Different extension/implentation language

“I’d like someone else to rewrite it in…”



Add useless wishes here – wishes that can be satisfied with some code, wishes that have been implemented. If you disagree, refine the wish, and move it to the top again. On the other hand, if some of these resolved wishes attract a lot of comments, move them to their own page.


    • Isn’t this wish satisfied by Emacs 21? From etc/NEWS:
      • Mouse-1 on the buffer name in the mode line goes to the next buffer.
      • Mouse-3 on the buffer-name goes to the previous buffer.

      • What version did this correspond to? 23.x?