;;; For Emacs 23.1.x, but might work with older versions too ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;(server-start) ;; Emacs server. ;; General stuff ;; ;;;;;;;;;;;;;;;;;;; (menu-bar-mode 0) (global-visual-line-mode 1) ;; Gets rid of the nasty down-and-right arrows on line wrap. (global-auto-revert-mode 1) (setq case-fold-search t) (setq column-number-mode t) (set-language-environment "UTF-8") (setq-default indent-tabs-mode nil) (setq mouse-wheel-follow-mouse t) (setq mouse-wheel-mode t) (scroll-bar-mode -1) (show-paren-mode 1) (tool-bar-mode -1) (winner-mode 1) ;; C-c left, C-c right .. navigate through window setup/layout history. (setq transient-mark-mode t) (setq visible-bell t) (setq inhibit-startup-screen t) (global-font-lock-mode 1) (setq font-lock-verbose nil) (add-hook 'before-save-hook 'whitespace-cleanup) ;; Why 1000? I have no fucking idea, but this seems to make scrolling in Emacs less idiotic. (setq scroll-conservatively 1000) (setq vc-follow-symlinks t) (set-default-font "DejaVu Sans Mono-10") (set-cursor-color "white") (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. '(default ((t (:background "#000000" :foreground "#ffffff"))))) (custom-set-variables ;; custom-set-variables was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. '(browse-url-browser-function (quote browse-url-generic)) '(browse-url-generic-program "xdg-open") '(safe-local-variable-values (quote ((Package . C) (Package . CLOS) (Syntax . Common-Lisp) (Package . SYSTEM) (Syntax . ANSI-Common-Lisp) (package . asdf) (Package . CCL)))) '(whitespace-action (quote (auto-cleanup)))) ;; Global keys and other globalstuff ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (global-set-key [C-tab] 'other-window) (global-set-key [C-S-left] 'previous-buffer) (global-set-key [C-S-right] 'next-buffer) (global-set-key "\r" 'newline-and-indent) (global-set-key [f1] 'switch-to-buffer) (global-set-key [f2] 'save-some-buffers) (global-set-key [f3] 'find-file) (global-set-key [f4] 'replace-string) (global-set-key [f10] 'split-window-horizontally) (global-set-key [f11] 'split-window-vertically) (global-set-key [f12] 'delete-window) ;; "minimize" current buffer (global-set-key [C-f12] 'delete-other-windows) ;; "maximize" current buffer (global-set-key [menu] 'new-frame) (setq auto-mode-alist (append '(("\.lisp$" . lisp-mode) ("\.lsp$" . lisp-mode) ("\.cl$" . lisp-mode) ("SConstruct$" . python-mode) ("\.asd$" . lisp-mode) ("\.system$" . lisp-mode)) auto-mode-alist)) (setq compilation-ask-about-save nil) (setq compilation-read-command nil) (setq compilation-scroll-output t) (setq compilation-window-height 10) (setq compile-auto-highlight t) (setq compile-command "scons -u") ;; This actually sets the global compile command. (Scons works with Java too) ;; Common Lisp / Slime stuff ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (add-to-list 'load-path "~/programming/lisp/clbuild/source/slime") (add-to-list 'load-path "~/programming/lisp/clbuild/source/slime/contrib") (require 'slime) (defun sbcl () (interactive) (setup-slime) (setq inferior-lisp-program (concat "~/programming/sbcl/bin/sbcl" " --dynamic-space-size 512" ;;" --control-stack-size 1" " --core /home/" (user-login-name) "/programming/sbcl/lib/sbcl/sbcl.core")) (slime)) (defun ccl () (interactive) (setup-slime) (setq inferior-lisp-program "~/programming/ccl/lx86cl64 -R 512M") (slime)) (defun abcl () (interactive) (setup-slime) (setq inferior-lisp-program "~/programming/abcl/abcl") (slime)) (defun clisp () (interactive) (setup-slime) (setq inferior-lisp-program "clisp") (slime)) (defun ecl () (interactive) (setup-slime) ;; NOTE: ./configure --enable-unicode=yes --enable-threads=yes (setq inferior-lisp-program "ecl") (slime)) (defun setup-slime () (interactive) (setq slime-net-coding-system 'utf-8-unix) (setq common-lisp-hyperspec-root "http://static.nostdal.org/hyperspec/") (slime-setup '(slime-fancy slime-asdf slime-sbcl-exts slime-xref-browser ;; TODO: Not sure about these indentation contribs; let's try them for a while and see what breaks. ;;slime-indentation ;;slime-indentation-fu ;;slime-sprof )) ;;(load-file (concat "~/.emacs-" (user-login-name))) ;;(define-key slime-mode-map [C-f12] 'slime-restart-inferior-lisp) ;;(define-key slime-repl-mode-map [C-f12] 'slime-restart-inferior-lisp) (define-key slime-mode-map (kbd "TAB") 'slime-fuzzy-indent-and-complete-symbol) (define-key slime-repl-mode-map (kbd "TAB") 'slime-fuzzy-indent-and-complete-symbol) ;;(define-key slime-mode-map (kbd "TAB") 'slime-indent-and-complete-symbol) ;;(define-key slime-repl-mode-map (kbd "TAB") 'slime-indent-and-complete-symbol) (define-key slime-mode-map "\M-1" 'slime-inspect) (define-key slime-repl-mode-map "\M-1" 'slime-inspect) (define-key slime-mode-map "\M-2" 'slime-inspect-presentation-at-point) (define-key slime-repl-mode-map "\M-2" 'slime-inspect-presentation-at-point) (define-key slime-mode-map [C-f1] 'slime-selector) (define-key slime-repl-mode-map [C-f1] 'slime-selector) (define-key slime-mode-map [f1] 'slime-hyperspec-lookup) (define-key slime-repl-mode-map [f1] 'slime-hyperspec-lookup) (define-key slime-mode-map [S-f1] 'slime-describe-symbol) (define-key slime-repl-mode-map [S-f1] 'slime-describe-symbol) (define-key slime-mode-map [f5] 'switch-to-buffer) (define-key slime-repl-mode-map [f5] 'switch-to-buffer) (define-key slime-mode-map [f7] (lambda () (interactive) (save-buffer) (slime-compile-and-load-file))) (define-key slime-mode-map [f8] 'slime-eval-buffer) (define-key slime-mode-map [f9] 'slime-eval-defun) (define-key slime-mode-map [C-f9] 'slime-eval-region) (define-key slime-repl-mode-map [f9] 'slime-eval-last-expression-display-output) (define-key slime-mode-map [C-return] 'slime-close-all-parens-in-sexp) (define-key slime-repl-mode-map [C-return] 'slime-close-all-parens-in-sexp) (define-key slime-repl-mode-map [C-f2] 'slime-repl-clear-buffer) ;;(define-key slime-mode-map [C-.] 'slime-edit-definition-other-frame) ;; TODO: Keybinding doesn't work. ;;(define-key slime-repl-mode-map [C-.] 'slime-edit-definition-other-frame) ;; TODO: Keybinding doesn't work. (define-key slime-mode-map "\M-e" 'slime-edit-definition-other-frame) (define-key slime-repl-mode-map "\M-e" 'slime-edit-definition-other-frame) (define-key slime-mode-map "\M-:" 'slime-edit-definition-other-frame) (define-key slime-repl-mode-map "\M-:" 'slime-edit-definition-other-frame) (define-key slime-mode-map "\M-:" 'slime-edit-definition-other-frame) (define-key slime-repl-mode-map "\M-:" 'slime-edit-definition-other-frame) (define-key slime-mode-map [pause] 'slime-reindent-defun) (define-key slime-repl-mode-map [pause] 'slime-reindent-defun) (define-key slime-mode-map [Scroll_Lock] 'slime-repl) (define-key slime-mode-map "\M-a" 'slime-insert-balanced-comments) (define-key slime-repl-mode-map "\M-a" 'slime-insert-balanced-comments) (define-key slime-mode-map "\M-A" 'slime-remove-balanced-comments) (define-key slime-repl-mode-map "\M-A" 'slime-remove-balanced-comments) (define-key slime-mode-map "\M-u" 'slime-undefine-function) (define-key slime-repl-mode-map "\M-u" 'slime-undefine-function) ;;(define-key slime-mode-map [C-|] 'slime-switch-to-output-buffer) ;; TODO: Keybinding doesn't work. ) ;; C stuff ;; ;;;;;;;;;;;;; (setq c-basic-offset 2) (add-hook 'c-mode-hook (function (lambda () (define-key c-mode-map [f5] 'compile) (define-key c-mode-map [f6] 'next-error) (define-key c-mode-map [f7] 'previous-error) (define-key c-mode-map [f8] (lambda () (interactive) (compile) ))))) (add-hook 'c++-mode-hook (function (lambda () (define-key c++-mode-map [f5] 'compile) (define-key c++-mode-map [f6] 'next-error) (define-key c++-mode-map [f7] 'previous-error)))) ;; Python stuff ;; ;;;;;;;;;;;;;;;;;; (add-hook 'python-mode-hook ;; TODO: Well, this is stupid .. but I don't do much Python and this works while editing SConstruct-files. (function (lambda () (define-key python-mode-map [f5] 'compile) ;; For SConstruct. (define-key python-mode-map [f6] 'next-error) ;; For SConstruct. (define-key python-mode-map [f7] 'previous-error) ;; For SConstruct. (define-key python-mode-map [f8] 'python-send-buffer) (define-key python-mode-map [f9] 'python-switch-to-python) ))) ;; Java stuff ;; ;;;;;;;;;;;;;;;; (add-hook 'java-mode-hook (function (lambda () (define-key java-mode-map [f5] 'compile) (define-key java-mode-map [f6] 'next-error) (define-key java-mode-map [f7] 'previous-error)))) (put 'downcase-region 'disabled nil)