Geiser 0.2.1 ELPA Package

Here is an ELPA package for the Geiser library.
The code is original from the author, I just packaged it up!
Here is one way to install it:

(require 'package)
(when (not (package-installed-p 'geiser))
  (package-install-file "/tmp/geiser-0.2.1.tar"))

Emacs Pretty Mode Plus ELPA Package

Here is an ELPA package for the pretty-mode.el library.
The code functionality is original from the author, I just tweaked the pretty symbols and packaged it up!
Here is one way to install it:

(require 'package)
(package-install-file "/tmp/pretty-mode-plus-1.0.tar")

Addendum: 09/29/12
Fixed the package definition and now it is on Marmalade here.
Addendum: 11/29/12
Added Jess mode support.

Hide Or Ignore Comments ELPA Package

Here is an ELPA package for the HideOrIgnoreComments software.
The code is original from the author, I just packaged it up!
Here is one way to install it:

(require 'package)
(package-install-file "/tmp/hide-comnt-40.tar")

Update 09/29/12:
Lincoln de Souza reported a fix, remove the quote nil from the package def and Marmalade should accept it, and it did. Here it is.

Debugging an ELPA Package Install on Marmalade

To get started with ELPA packages I started small by trying to package up hide-comnt.el. Marmalade wouldn’t let me upload it though giving me a “520 Bad Gateway error”. Here is the package that I’m testing with.
Here are the steps I have since followed to try to address it:

  1. Guys in #emacs said it might be Internet access. I think it could be Internet access, package format might be wrong, OS issues, or tar might be bad.
  2. Tried first with Chrome on Windows, and then Firefox on Windows. No change.
  3. Tried first with GNU Tar on Windows, and then 7zip on Windows. No change.
  4. Installed Lubuntu 12.04 then tried GNU Tar and Chrome. No change.
  5. On Windows, blew away my manually installed copy of hide-comnt and installed the package (from above) from inside Emacs using ‘package-install-file’. This worked fine; the package installed and worked as expected. The package seems ok since Emacs installed it.
  6. Tried using a web proxy from home and did not get the 502 error, but the file was not uploaded.
  7. Noticed that there is a sample multi-file TAR package here. Think mine is OK but this is a useful reference.
  8. Found this package and tried doing a programmatic upload. It didn’t work, the result was “502 Bad Gateway”.
  9. Tried uploading using 4G on my Android and got the same result, “502 Bad Gateway”.
  10. #2, #5, and #9 make it seem like the package I made is OK and it is not my Internet connection. Only Nic can check, so I’m passing it to him now.

Tweaking the modeline characters for a minor mode

The modeline characters (call the lighter in Emacs terms) weren’t displaying correctly on my system for this excellent plugin. A cent sign should have been displayed but instead ” \242″ was displayed. ‘forcer’ in #emacs explained that those display settings are stored in ‘minor-mode-alist’ so we can modify them. I added this code at the end of my config:

(let ((ccm-cons (assoc 'centered-cursor-mode minor-mode-alist)))
  (when ccm-cons
    (setcdr ccm-cons '(" ccm"))))

An asynchronous web server written in Emacs LISP

Elnode is an asynchronous web server written in Emacs LISP.
Emacs has had asynchronous socket programming facilities for some time and a few years ago asynchronous TCP server sockets were introduced. I couldn’t quite believe that no one had written an asynchronous webserver with EmacsLISP before. So now I have.
When I started looking at actually doing this I intended to knock up just a silly demo. But the more I got into it the more it seemed to me that this could be an important addition to Emacs and that, sometimes, an Emacs LISP async web server could actually be useful.

(via nic)

Toggle between Vertical and Horizontal Windows Splitting


Requested: Function that toggles between vertical and horizontal split layout of currently defined windows preferrably preserving splitting ratio.

(defun my-toggle-window-split ()
  "Vertical split shows more of each line, horizontal split shows
more lines. This code toggles between them. It only works for
frames with exactly two windows."
  (if (= (count-windows) 2)
      (let* ((this-win-buffer (window-buffer))
             (next-win-buffer (window-buffer (next-window)))
             (this-win-edges (window-edges (selected-window)))
             (next-win-edges (window-edges (next-window)))
             (this-win-2nd (not (and (<= (car this-win-edges)
                                         (car next-win-edges))
                                     (<= (cadr this-win-edges)
                                         (cadr next-win-edges)))))
              (if (= (car this-win-edges)
                     (car (window-edges (next-window))))
        (let ((first-win (selected-window)))
          (funcall splitter)
          (if this-win-2nd (other-window 1))
          (set-window-buffer (selected-window) this-win-buffer)
          (set-window-buffer (next-window) next-win-buffer)
          (select-window first-win)
          (if this-win-2nd (other-window 1))))))

Thanks Fabrice.