Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Sexy services in your Emacs!
branch: master

This branch is even with konr:master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.


Saaxy is just a way to use services with the dead-simple interface of IRC bots. The name comes from SaaS + Sexy, but some system tools are included, as well, and it’s easy to add your own utilities.

Obligatory Screenshot



Type Name How to use
Web Freebase Search !freebase milton friedman
Reddit - Top stories from a subreddit !reddit paleo
Duckduckgo !ddg quid est veritas
Wolfram Alpha !wa carbs in 300g of heavy cream
Transmission - Torrent Listing !trans
System Festival speech synthesizer !say cabbage-brained
Clean history !clean
Eval and pretty-print !pp ‘((1 2) (3 4))
Exit Saaxy !bye
Eval expression !eval (+ 3 4)
Run shell command !sh date
The help system !help
Portuguese Rhyme dictionary in portuguese !vadio coito 4
‘Porto’ dictionary !por amável
‘Michaelis’ dictionary !mic amável
‘Aurélio’ dictionary !au amável
Shortening TinyURL shortening !tiny
TinyCC shortening !tinycc
Productivity Current time !now
Tomatinho’s history view !th
Tomatinho’s tube view !tt
English Wordnet !dict truth
Adult Monica’s tube !monica bikini
Latin Latin->English !latin veritas
English->Latin !tolat truth


Suppose you are reading a book. Instead of having to type every time !dict scoundrel, !dict baritone etc, you can just specify that these commands are all relative to dict with @:

> @dict 
dict> scoundrel 
dict> baritone 
dict> @@
Context reset.  

Linked items

Some commands do not only list the results, but specify actions on them, accessible with “#”. For example:

> !ddg richard stallman 
Richard Matthew Stallman – Wikipédia, a enciclopédia livre
Facebook - Richard Stallman
Personal home page 

> # 

> #2 
Opening page. 


M-n and M-p go back and forth in the history

Custom commands

Add custom commands to the variable saaxy-custom-commands. You can do that by manually setting it in your dotfiles or using M-x customize-variable.

Each command must be a plist, with the keys name, class, and function, and the function must take two arguments: (1) a string containing the command’s parameters and a list of them. For example:

'((name kk class sys function saaxy-c-kk)
(name ddbr class portuguese function (lambda (a al) (saaxy-async-command (format "" (url-hexify-string a)) #'saaxy-aux-ddg))))

The previous example uses the function saaxy-async-command, which takes an URL and a function, and then asynchronously GETs the URL, transforms the html through the function and adds the resulting string to the Saaxy buffer.

Adult content

It might not be appropriate to show adult-related services, so you can hide them from !help by setting the saaxy-hide-adult variable with M-x customize-variable.

This will work for both default commands and custom commands.


[70%] v1

  1. [X] Colorize output
  2. [X] Async web stuff
  3. [X] ‘M-n’ & ‘M-p’ should work in a context
  4. [X] History
  5. [X] Some english dictionary
  6. [X] Remove useless functions
  7. [ ] Docs
  8. [ ] Must work on Windows
  9. [X] Custom functions
  10. [ ] Screencast

[%] v2

  1. [ ] Tab-completion specific to the context.
  2. [ ] More personal productivity commands
  3. [ ] Wikimedia
  4. [ ] context in shell
  5. [ ] Better transmission support
  6. [ ] Priberam
  7. [ ] On-the-fly
  8. [ ] Establish a testing scheme
  9. [ ] Funding
Something went wrong with that request. Please try again.