1 <?xml version="1.0" encoding="utf-8"?> <!-- -*- html -*- -->
2 <!--#set var="css" value="sxemacs.css" -->
3 <!--#set var="title" value="SXEmacs Website" -->
4 <!--#set var="banner" value="Redefining Emacs" -->
5 <!--#set var="copyright" value="2004 - 2010 Steve Youngs" -->
7 <!--#include virtual="/templates/header.template" -->
8 <!--#include virtual="/templates/menu.template" -->
9 <!--#include virtual="/templates/support.template" -->
10 <h2>What is SXEmacs</h2>
12 Hmm, that's actually not an easy question to answer. At
13 least, not easy to answer completely. At the most basic of
14 levels, SXEmacs is a text editor. If you've ever used
15 <a href="http://www.gnu.org/software/emacs/">GNU/Emacs</a> or
16 <a href="http://www.xemacs.org/">XEmacs</a> you've probably
17 seen the description that goes something like...
20 ...is a highly customisable and extensible,
21 self-documenting, real-time display editor and IDE.
24 Ditto for SXEmacs. Yep, SXEmacs is JAFE (Just Another Fine
25 Editor). Though, if that's <u>all</u> you thought it was,
26 you'd be missing out. There is very little that SXEmacs can't
27 do, or at least, be made to do. You can tailor it to your
28 wildest dreams and imagination. This is where the
29 "customisable and extensible" part of the description comes
33 <h2>It's more than just an editor</h2>
34 If you looked at any of the screenshots you would have seen
35 that even though SXEmacs is a text editor, it can be oh so
39 <b>SXEmacs is my Window Manager</b>. Yes, that's right, with the
40 XWEM and XLIB packages installed, SXEmacs becomes a very
41 powerful, full featured, highly customisable Window
42 Manager for X11. Most of the screenshots here were taken
46 <b>SXEmacs is my login shell</b>. You can add
47 /usr/local/bin/sxemacs to /etc/shells and change your
48 login shell to sxemacs. It <u>does</u> work. Although we
49 wouldn't recommend trying to run an X session from it. :-)
52 <b>SXEmacs is my image viewer</b>. SXEmacs supports a number of
53 image formats right out of the box (GIF, XPM, PNG, JPEG,
54 TIFF, X-Face). If you compile SXEmacs with FFI support
55 and have ImageMagic's libWand available you have a SXEmacs
56 that supports all image formats that libWand does.
59 <b>SXEmacs is my mp3 player</b>. I used to use mpg123.el
60 for this, but now I use XWEM's xwem-mpd.el. It hooks into
61 mpd (an mp3 daemon). There are other ways to hear the
65 <b>SXEmacs balances my cheque book</b>. With an elisp
66 package called eMoney (currently only available via Steve
67 Youngs' tla repo's, but one day will be an XEmacs package)
68 SXEmacs turns into a reasonable home finance cash book
72 <b>SXEmacs can do the math</b>. With Enhanced Number
73 Types, there is very little that SXEmacs can't do
77 <b>SXEmacs lets me communicate with my friends</b>.
78 SXEmacs can be used as a MUA (Mail User Agent), a
79 newsreader, an IRC client, even an ICQ client. So you can
80 keep in touch without leaving the comfort of your
84 <b>SXEmacs helps me with my databases</b>. With support
85 for PostgreSQL compiled in you can manipulate your PgSQL
86 databases. SXEmacs also has more or less complete support for
87 sqlite, and there is also limited support for BerkeleyDB
91 <b>SXEmacs makes VC comfortable</b>. VC is short for
92 Version Control and SXEmacs can make dealing with it a lot
93 less painful. There are SXEmacs VC frontends available
94 for CVS, and GNU/Arch (tla). There are also elisp
95 libraries available that integrate with other VCs such as
99 <b>SXEmacs helps with my security</b>. SXEmacs has
100 support for OpenSSL and allows encryption, decryption, and
104 <b>SXEmacs helps me with my social life</b>. With such
105 powerful elisp libraries as lj.el, twitter.el, facebook.el,
106 and emacs-flickr.el, I can easily interact with social
107 networking sites that keep me up-to-date with my friends, and
108 easily commandeer those sites from within the comforts and
109 confines of my SXEmacs session.
113 That list is by no mean exhaustive. Oh, and I nearly
114 forgot... SXEmacs edits text too. And it even helps you
115 with that. In many, many ways. With things like syntax
116 highlighting, context sensitive completion, keyboard macros,
117 powerful search and replace, spell checking (on the fly if
118 you wish), programming language aware indentation. The list
119 just goes on and on. It would be a fair bet to say that
120 whatever "feature" you like in other editors, there's a good
121 chance SXEmacs has it too.
124 <h2>What SXEmacs has that XEmacs doesn't (yet)</h2>
126 Following is hopefully an up to date (at time of writing) list
127 of the features that are in SXEmacs but are currently not
128 (yet) in XEmacs 21.4. I say XEmacs 21.4 because SXEmacs was
129 forked from the XEmacs 21.4 code base and not the 21.5 code
130 base. With that said, however, most (all?) of what follows is
131 unique to SXEmacs and isn't in XEmacs 21.5 either.
138 SXEmacs does not support the Win32 platform and it never
139 will. Yes, we consider this a feature.
145 This is the SXEmacs Foreign Function Interface. It
146 makes it possible to bring the functionality of almost
147 any external library to elisp. Two useful examples can
148 be found in ffi-curl.el and ffi-wand.el. The former
149 allows SXEmacs to download files from the internet using
150 any protocol that libcurl supports. And the latter
151 allows SXEmacs to view any image format that libWand
158 SXEmacs can be compiled with OpenSSL that enables a
159 range of cryptography and digest functionalities.
165 SXEmacs uses autoconf version 2.60 for its configuration
166 scripts. XEmacs 21.5 is using 2.59, but XEmacs 21.4 is
167 still using autoconf 2.13.
173 SXEmacs has better support for PostgreSQL 8 and the
174 documentation has had some improvement here too. Also,
175 support for PostgreSQL is compiled in by default if
176 pg_config is present and usable.
182 SXEmacs has fairly complete support for sqlite through FFI.
188 SXEmacs does not support being compiled with a C++
189 compiler. GCC 3.4.4 or equivalent is required.
193 <b>More mouse buttons</b>.
195 In SXEmacs, you can bind up to 32 mouse buttons. The
196 first 26 of which can be used as modifiers.
202 Every decent OS has an uptime util... SXEmacs is no
207 <b>Bootstrapping PUI</b>.
209 The SXEmacs PUI (Package User Interface) can be
210 "bootstrapped" without the requirement of having
211 <u>any</u> XEmacs packages pre-installed.
215 <b>Enhanced Number Types</b>.
217 XEmacs 21.5 users might know this as "bignum". SXEmacs
218 has bignums and bigfloats and ratios like XEmacs 21.5,
219 but it also goes way beyond the XEmacs implementation.
220 Many, many, more number types and other mathematical
221 goodies are supported in SXEmacs.
227 SXEmacs has Python-style raw strings. It greatly
228 reduces "backslashitis" when writing those hairy
233 Normal regexp:
234 "\\(?:^\\|[^\\]\\)\\(?:\\\\\\\\\\)*\\(\\\\[@A-Za-z]+\\)"<br />
235 Raw string regexp: #r"\(?:^\|[^\]\)\(?:\)*\(\\[@A-Za-z]+\)"
239 XEmacs 21.5 now has raw strings.
243 <b>TTY font-locking</b>.
245 SXEmacs has improved default font-locking in a TTY.
249 <b>More image formats supported</b>.
251 This was mentioned under FFI, but it is worth noting
252 again. With FFI and libWand, SXEmacs can display any
253 image format that is supported by Imagemagick's
257 Not only can SXEmacs view images, but it can edit and
258 manipulate them as well. In fact SXEmacs is a very good
259 image manipulation program. Take a look at
260 <a href="http://lgarc.narod.ru/sxemacsen/wand-mode-en.xhtml">
261 what SXEmacs can do</a> with images.
265 <b>Embeddable kbd macros</b>.
267 This one is for JWZ. See point 1.A of
268 <a href="http://www.jwz.org/doc/xemacs-wishlist.html">JWZ's XEmacs wish list</a>
272 <b>Multimedia -- Audio</b>
274 SXEmacs has support for a wide variety of sound servers,
275 backends, drivers, and formats. Audio outputs supported
276 include: ALSA, aRts, ao, ESD, NAS, OSS, PulseAudio, and
277 Jack. Media stream handlers supported include: FFmpeg,
278 Mad, sndfile, SoX, libmagic, as well as the
279 pre-existing (from XEmacs days) internal audio support.
282 Yes, SXEmacs can play mp3 and ogg. We can even do so
283 <u>asynchronously</u>.
287 <b>Network Server Sockets</b>
289 Taking <code>open-network-stream</code> to the next
290 logical step, SXEmacs can "listen" for, and act upon,
291 incoming TCP/UDP connections. Server sockets in SXEmacs
292 are set up via <code>open-network-server-stream</code>.
296 <b>Cached Compiled Regular Expressions</b>
298 Significant speed ups are possible through the
299 application of exhaustive caching of compiled regular
304 <b>GNU Autotools Build Chain</b>
306 Not only does SXEmacs use autoconf 2.60 (and above), the
307 entire build chain is now fully "autotooled". We've done
308 away with all those Makefile.in.in files and manual
309 dependency tracking of the sources. It's now all done
310 with aclocal, automake, autoheader, autoconf.
314 <b>FHS Compliant Install Hierarchy</b>
316 SXEmacs now installs to a much more
317 <a href="http://www.pathname.com/fhs/">FHS</a> compliant
322 <b>Double Linked Lists</b>
324 Unlike ordinary lists that only have hooks into the head
325 of the list (think car, cdr), a doubly linked list has
326 hooks into both the head and the tail of the list. This
327 means you can operate on both ends of a doubly linked
328 list. You can also traverse a dllist in both
329 directions, tail-wards and head-wards. Ordinary lists
330 only allow for tail-wards traversal.
336 SXEmacs has a basic implementation of Pugh's skip
337 lists. Their efficiency is overwhelming when compared
338 to alists or plists. They also perform better on
339 insertion and removal than large hash-tables (due to
340 the resizing/rehashing which takes place). They can
341 be created almost as fast as lisp lists and thus beat
342 hash-tables there, too.
348 Bloom filters are a hash-table like data structure with
349 the purpose of performing membership tests. Unlike
350 hash-tables bloom filters do not need to be resized
351 despite the fact that they can carry an arbitrarily
352 large number of objects.
356 <b>Recursive Directory Traversal</b>
358 SXEmacs has a recursive implementation of
359 <code>directory-files</code> called
360 <code>directory-files-recur</code>. It is incredibly
361 fast. Sometimes even faster than GNU find(1).
365 <b>Support for 256 colors in XTerm and compatible terminals</b>
368 SXEmacs is now capable of properly using the
369 <code>termcap</code> and <code>terminfo</code>
370 capabilities to support more than the ANSI standard 8
373 In addition, SXEmacs will gracefully approximate the
374 colors on the face specifications to match the terminal,
375 so you can share your graphics and text terminal color
376 definitions and still have pretty syntax highlighting.
381 <h2>Why I Use SXEmacs</h2>
382 Here are a few random reasons why some folks use SXEmacs. If
383 you want to add to this list, just drop us a line on the
386 - I love the comfort of having the full power of my editor behind me
387 while I'm IRC'ing, ICQ'ing, mail, and news reading.
389 - Keyboard macros would have to be right up there in the list.
390 Being able to define a quick keyboard macro to complete repetative
393 - Bookmarks. I often find myself reading through a whole bunch of
394 documents at the same time (HOWTOs, READMEs etc), I can save where
395 I am in each doc and easily come back to the same spot in the
398 - I just love the whole "swiss-army-knife-ed-ness" of it all. I
399 mean, c'mon, if it can't be done in SXEmacs, is it worth doing?
401 - SXEmacs' extensibility. Being able to make SXEmacs do things it
402 can't do out of the box is its greatest benefit.
404 <h2>Where We Might Be Going</h2>
405 I really don't like making promises, so you'll just have to
406 wait and see. :-) OK, OK, I'll throw you a bone. Here are a
407 couple of hints…
409 <li>Multi-GUI support</li>
410 <li>Parallelised lisp engine</li>
411 <li>Embeddable video streams</li>
412 <li>Buffers embedded in buffers</li>
413 <li>Built-in lexical scoping at C level</li>
415 <!--#include virtual="/templates/copyright.template" -->
416 <!--#include virtual="/templates/google.template" -->
417 <!--#include virtual="/templates/footer.template" -->