- Emacs key bindings, Paredit and saving macros
- Emacs Color Themes, CTags, CEDET, ECB and other Customizations
- Autocompletion, Jump to documentation, Swank and Slime
- ECB method browsing for PicoLisp
- Emacs 24 and Clojure
- Hiding Clojure and Elisp docstrings in Emacs
- Emacs as a Multi Mode Web Dev IDE is Now Possible
- Code Completion with Exuberant Ctags in Emacs
I’ve now found a color theme I like by way of the color theme browser.
I chose gray30 with two minor changes for far, click the image above to check out what my setup currently looks like. The reason I chose gray30 is that it seems geared towards Lisp coding. It has a dark background with lighter text but the parenthesises are darker than the other code which makes them almost invisible. For me this is a plus as I can read the code without them (any Pythonista can testify that that is by no means a mean feat), white spaces are information.
Let’s check the pertinent section of henrik.el:
(add-to-list 'load-path "~/.emacs.d/henrik/color-theme-6.6.0") (require 'color-theme) (eval-after-load "color-theme" '(progn (color-theme-initialize) (color-theme-hober))) (eval-after-load "color-theme" '(color-theme-gray30)) (set-face-attribute 'default nil :height 60) (setq font-lock-builtin-face '((t (:foreground "LightSkyBlue"))))
The two last lines here are the minor changes I mentioned above, the first one sets the font size and the second one removes underlining of keywords, something I found to be annoying with gray30.
(global-linum-mode 1) (setq column-number-mode t) (defun switch-full-screen () (interactive) (shell-command "wmctrl -r :ACTIVE: -btoggle,fullscreen")) (global-set-key [f11] 'switch-full-screen)
To get the full screen stuff to work an apt-get install wmctrl is required too.
I also like the Emacs Code Browser (ECB), here are the lines:
(load-file "/home/henrik/.emacs.d/henrik/cedet/common/cedet.el") (add-to-list 'load-path "~/.emacs.d/henrik/ecb-2.40") (require 'ecb) (setq ecb-tree-buffer-style 'ascii-guides) (global-set-key (kbd "C-p") 'ecb-activate) (setq my-projects '("/opt/clojure/phive" "/opt/picolisp/projects/db-server")) (setq tags-table-list my-projects) (setq ecb-source-path my-projects) (global-set-key (kbd "C-<tab>") 'complete-tag)
The three last lines require some more discussion, they tell Emacs where my tags files are so I don’t have to load them manually later. C-TAB will start code completion with the help of the tags, I had to remap the default M-TAB as that will switch windows in my WM.
M-. will jump to a definition, here TAB can be used to cycle alternatives.
Your mileage will vary when it comes to generating the tag files. Start with apt-get install ctags.
Going to the project root of my Clojure project and doing
took care of that. But PicoLisp was harder. There I first had to add this in ~/henrik/.ctags:
--langdef=picolisp --langmap=picolisp:.l --regex-picolisp=/^\(de[ \t]*([^ \t]+)/\1/d,definition/ --regex-picolisp=/^\(dm[ \t]*([^ \t]+)/\1/d,definition/ --regex-picolisp=/^\(class[ \t]*([^ \t]+)/\1/d,definition/
Then it was just enough to do
ctags-exuberant -e -R --languages=picolisp in my PicoLisp project.
I’m pretty happy with the functionality so far, I have two gripes though:
1.) The tags lookup / completion will use both my tags files without any regard to which type of major-mode and/or file type I’m working with. This needs to get smarter as I don’t want Clojure functions to appear when I want completion in a PicoLisp file for instance.
2.) There is no completion of basic language constructs, or being able to jump to the documentation, this is what I will take a look at in the next part of this series.