installing emacs in cygwin

Update: See my other post, launching emacs from cygwin

There are a few tricks to installing emacs in cygwin. Here’s what I do.

Installing cygwin

First, install cygwin.

Then, install the very nice tool apt-cyg which makes package management much easier in cygwin.

Then to save yourself lots of agony of trying to work out which cygwin packages you need to install to be able to compile emacs, here is the list of all the packages I have installed. It may be a little bit of overkill but it will save you time. I obtained the list like this:

jason@jade ~
$ apt-cyg show | tr '\n' ' '

Install them with:

$ apt-cyg install 
_autorebase _update-info-dir alternatives autoconf autoconf2.1 \
 autoconf2.5 automake automake1.10 automake1.11 automake1.12 \
automake1.4 automake1.5 automake1.6 automake1.7 automake1.8 \
 automake1.9 base-cygwin base-files bash bash-completion bc binutils \
bzip2 ca-certificates cmake coreutils cpio crypt csih curl cvs cvsps \
cygrunsrv cygutils cygwin cygwin-doc dash dbus diffutils dos2unix \
editrights file findutils gamin gawk gcc-tools-epoch1-autoconf \
gcc-tools-epoch1-automake gcc-tools-epoch2-autoconf \
gcc-tools-epoch2-automake gcc4 gcc4-core gcc4-g++ gccmakedep gettext \
gettext-devel git git-completion git-gui git-svn gitk gitk grep groff \
gsettings-desktop-schemas gsettings-desktop-schemas gzip imake \
ipc-utils less libX11_6 libX11_6 libXau6 libXau6 libXdmcp6 libXdmcp6 \
libXext6 libXext6 libXft2 libXft2 libXrender1 libXrender1 libXss1 \
libXss1 libapr1 libapr1 libaprutil1 libaprutil1 libasn1_8 libattr1 \
libblkid1 libbz2_1 libcharset1 libcloog0 libcom_err-devel libcom_err2 \
libcurl-devel libcurl4 libdb4.5 libdb4.5-devel libdb4.5-devel libdb4.8 \
libdb4.8 libdbus1_3 libdbus1_3 libedit0 libedit0 libexpat1 libfam0 \
libfam0 libffi4 libfontconfig1 libfontconfig1 libfreetype6 \
libfreetype6 libgcc1 libgcrypt11 libgdbm4 libgettextpo0 libgettextpo0 \
libggi2 libggi2-display-terminfo libgii1 libgii1 libglib2.0_0 \
libglib2.0_0 libgmp3 libgmpxx4 libgnutls26 libgomp1 libgpg-error0 \
libgssapi3 libhdb9 libhdb9 libheimbase1 libheimntlm0 libhx509_5 \
libiconv libiconv libiconv2 libidn-devel libidn-devel libidn11 \
libintl8 libkadm5clnt7 libkadm5clnt7 libkadm5srv8 libkadm5srv8 \
libkafs0 libkafs0 libkdc2 libkdc2 libkrb5-devel libkrb5-devel \
libkrb5_26 liblzma5 liblzo2_2 libmetalink3 libmpc1 libmpfr1 libmpfr4 \
libncurses-devel libncurses10 libncurses7 libncurses8 libncurses8 \
libncurses9 libncurses9 libncursesw-devel libncursesw10 libneon27 \
libneon27 libopenldap2_3_0 libopenldap2_3_0 libopenldap2_4_2 \
libopenssl098 libopenssl100 libp11-kit0 libpcre0 libpcre1 libpcre1 \
libpopt0 libppl libpq-devel libpq-devel libpq5 libpq5 libproxy1 \
libproxy1 libreadline6 libreadline6 libreadline7 libroken18 libsasl2 \
libsasl2-devel libsasl2-devel libserf0_1 libserf0_1 libserf1_0 \
libserf1_0 libsigsegv2 libsl0 libsl0 libsqlite3_0 libssh2-devel \
libssh2-devel libssh2_1 libssp0 libstdc++6 libstdc++6-devel libtasn1_3 \
libuuid1 libuuid1 libwind0 libwrap0 libxcb1 libxcb1 libxml2 login m4 \
make makedepend makedepend man mintty nano ncurses ncurses-demo \
ncursesw ncursesw-demo openldap-devel openldap-devel openssh openssl \
openssl openssl-devel openssl-devel perl perl-Error \
perl-Locale-gettext perl_vendor python rebase run sed stgit subversion \
subversion subversion-perl subversion-perl tar tcl tcl tcl-tk tcl-tk \
termcap terminfo terminfo-extra terminfo0 terminfo0 terminfo0-extra \
texinfo tzcode unzip util-linux w32api w32api-headers w32api-runtime \
wget which xorg-cf-files xorg-cf-files xz zlib zlib-devel zlib-devel \

Go and have a cup of tea while its installing.

git clone git://
cd emacs
./configure --with-w32 #  to ditch gtk and the concomitant gtk bug, thanks jlf

If make is successful, test the build by running emacs from the src directory:

src/emacs -Q

If that worked ok, you can:

make install

Setting up your home

I like my cygwin home directory to be the same as windows %USERPROFILE% so I set the environment variable HOME=%USERPROFILE%.

Set up a shortcut to launch emacs

Make a shortcut to c:\cygwin\bin\run.exe on your desktop, and rename it to emacs.
Edit the shortcut to:
Target: C:\cygwin\bin\run.exe /usr/local/bin/emacsclient "-c" "-a" "/usr/local/bin/emacs.exe" #

The target part makes sure emacs launches a new window whether or not its already running. If it is already running and as a server, it will create a new frame connected to the server.

The start in part makes sure the new instance’s default-directory is your home directory which I think makes most sense for when you are launching from a shortcut.

Drop the shortcut onto your start menu. You should now be able to launch emacs from the start menu, or by pressing the Windows key and typing emacs.

Join the Conversation


  1. Update: If you are re-installing emacs on your windows computer, and you followed the directions about creating a shortcut to emacs on your desktop, you might find that Windows deletes the shortcut for you. Annoying but true.

Leave a comment

Your email address will not be published. Required fields are marked *