Collin J. Doering
a8582a7d4e
Approximately coincides with the release of emacs 24.4, Though some changes for the emacs 24.4 upgrade are not yet completed; specifically: * replace w3m with the now built in eww * no need to enable electric-indent-mode since it is now enabled by default * other things that I don't know about yet ... Now the main changes are as follows: * Use .emacs.d/init.el for emacs start-up file instead of .emacs; this new init file is much shorter in summary does the following: - auto-loads packages installed using package.el using the package-initialize function - adds .emacs.d/site-lisp-extra to the load-path - sets a few variables and functions and then recursively loads all .el files in .emacs.d/config - contains all variables set by customize at the end of the file * All other configuration is written to files with appropriate names in .emacs.d/config; currently the concatenation of these files is the same as the .emacs in the last commit not including the sexp's that went into .emacs.d/init.el Things that remain the same but are no less important to mention in regards to the setup of this emacs configuration: * custom themes are stored in .emacs.d/themes * custom yasnippets are stored in .emacs.d/snippets * templates (used by .emacs.d/config/insert-templates.el to insert a comment at the beginning of certain files using auto-insert-mode) are located at .emacs.d/templates Note: I've been considering depreciating the use of auto-insert-mode to insert content into new files and instead use yasnippets. Further though is required. Signed-off-by: Collin J. Doering <rekahsoft@gmail.com>
136 lines
5.1 KiB
EmacsLisp
136 lines
5.1 KiB
EmacsLisp
;; (C) Copyright Collin J. Doering 2014
|
|
;;
|
|
;; This program is free software: you can redistribute it and/or modify
|
|
;; it under the terms of the GNU General Public License as published by
|
|
;; the Free Software Foundation, either version 3 of the License, or
|
|
;; (at your option) any later version.
|
|
;;
|
|
;; This program is distributed in the hope that it will be useful,
|
|
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
;; GNU General Public License for more details.
|
|
;;
|
|
;; You should have received a copy of the GNU General Public License
|
|
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
;; File: lispy.el
|
|
;; Author: Collin J. Doering <collin.doering@rekahsoft.ca>
|
|
;; Date: Oct 22, 2014
|
|
|
|
;; Set default lisp program
|
|
(setq inferior-lisp-program "/usr/bin/sbcl")
|
|
|
|
;; Since there is no support for the kawa implementation of scheme
|
|
(defun run-kawa ()
|
|
"Run Kawa Scheme in an Emacs buffer."
|
|
(interactive)
|
|
(require 'cmuscheme) ;; Built-in
|
|
(let ((scheme-program-name "/usr/bin/kawa"))
|
|
(run-scheme scheme-program-name)))
|
|
|
|
;; Set usable lisp implementations
|
|
(setq slime-lisp-implementations
|
|
'((sbcl ("/usr/bin/sbcl" ""))
|
|
(clisp ("/usr/bin/clisp" "-K base"))
|
|
(clojure ("/usr/bin/clj" ""))))
|
|
|
|
;; Function to start and/or connect to slime
|
|
(defun start-slime ()
|
|
(interactive)
|
|
(unless (slime-connected-p)
|
|
(save-excursion (slime))))
|
|
|
|
;; Setup slime mode *TODO* drop in slime from ELPA
|
|
(add-to-list 'load-path "/usr/share/emacs/site-lisp/slime/")
|
|
(require 'slime) ;; AUR: emacs-slime-cvs
|
|
(slime-setup '(slime-fancy))
|
|
|
|
;; Setup swank-clojure-mode
|
|
(add-to-list 'load-path "/usr/share/emacs/site-lisp/swank-clojure")
|
|
(require 'swank-clojure) ;; ELPA
|
|
|
|
(add-hook 'clojure-mode-hook
|
|
'(lambda ()
|
|
(define-key clojure-mode-map "\C-c\C-e" 'lisp-eval-last-sexp)
|
|
(define-key clojure-mode-map "\C-x\C-e" 'lisp-eval-last-sexp)))
|
|
|
|
;; TODO: functionality needs to be re-written; assoc library obsolete
|
|
;; (eval-after-load "slime"
|
|
;; `(progn
|
|
;; (require 'assoc) ;; Built-in (OBSOLETE)
|
|
;; (setq swank-clojure-classpath
|
|
;; (list "/usr/share/clojure/clojure.jar"
|
|
;; "/usr/share/clojure/clojure-contrib.jar"
|
|
;; "/usr/share/emacs/site-lisp/swank-clojure/src"))
|
|
;; (aput 'slime-lisp-implementations 'clojure
|
|
;; (list (swank-clojure-cmd) :init 'swank-clojure-init))))
|
|
|
|
|
|
;; Setup enhanced scheme/racket mode consisting of geiser, quack and paredit
|
|
;; Setup geiser
|
|
(require 'geiser) ;; ELPA
|
|
|
|
;; Setup auto-completion for geiser (ELPA)
|
|
(require 'ac-geiser)
|
|
(add-hook 'geiser-mode-hook 'ac-geiser-setup)
|
|
(add-hook 'geiser-repl-mode-hook 'ac-geiser-setup)
|
|
(eval-after-load "auto-complete"
|
|
'(add-to-list 'ac-modes 'geiser-repl-mode))
|
|
|
|
;; Make struct stand out in scheme-mode for racket
|
|
(defun racket-faces ()
|
|
(font-lock-add-keywords nil
|
|
'(("(struct \\(\\sw+\\)" 1 font-lock-function-name-face)
|
|
("(\\(struct\\)" 1 font-lock-keyword-face)
|
|
("(\\(λ\\)" 1 font-lock-function-name-face))))
|
|
|
|
(add-hook 'scheme-mode-hook 'racket-faces)
|
|
(add-hook 'geiser-repl-mode-hook 'racket-faces)
|
|
|
|
;; Setup scribble mode (custom .el from ~/.emacs.d/site-lisp-extra)
|
|
;; See: http://www.neilvandyke.org/scribble-emacs/
|
|
(require 'scribble)
|
|
|
|
;; Setup quack
|
|
(require 'quack) ;; ELPA
|
|
|
|
;; Setup paredit
|
|
(require 'paredit) ;; ELPA
|
|
(defvar lispy-langs-hooks '(lisp-mode-hook lisp-interaction-mode-hook emacs-lisp-mode-hook scheme-mode-hook c-mode-hook c++-mode-hook python-mode-hook geiser-repl-mode-hook))
|
|
|
|
;; Apply paredit-mode to modes listed in lispy-langs-hooks
|
|
(activate-mode-with-hooks (lambda () (paredit-mode 1)) lispy-langs-hooks)
|
|
|
|
;; Highlight sexp's in lispy languages
|
|
(activate-mode-with-hooks (lambda () (highlight-sexp-mode)) lispy-langs-hooks)
|
|
|
|
;; Paredit binds to C-j globally and thus disables the binding to
|
|
;; eval-print-last-sexp in emacs-lisp-mode (e.g *scratch*, etc..)
|
|
(add-hook 'emacs-lisp-mode-hook
|
|
'(lambda ()
|
|
(define-key emacs-lisp-mode-map "\C-xj" 'eval-print-last-sexp)))
|
|
|
|
;; Match paren's in given modes [to apply globally do (show-paren-mode 1)]
|
|
(activate-mode-with-hooks (lambda () (show-paren-mode)) lispy-langs-hooks)
|
|
|
|
;; Highlight paren's near point
|
|
(require 'highlight-parentheses)
|
|
(activate-mode-with-hooks (lambda () (highlight-parentheses-mode)) lispy-langs-hooks)
|
|
|
|
;; Setup rainbow-delimiters
|
|
(require 'rainbow-delimiters) ;; ELPA
|
|
(activate-mode-with-hooks 'rainbow-delimiters-mode-enable lispy-langs-hooks)
|
|
;;(global-rainbow-delimiters-mode) ;; breaks font coloring in erc for some reason?
|
|
|
|
;; upcomming functionallity: toggle paredit-mode due to annoying things like wrapping parens when a mistake is made
|
|
;; known issue..if paredit-mode is turned on when there are unbalanced parens an error is reported
|
|
(defun toggle-paredit-mode ()
|
|
(let ((active-minor-modes (list)))
|
|
(mapatoms (lambda (sym)
|
|
(when (and (symbolp sym) (assq sym minor-mode-alist) (symbol-value sym))
|
|
(push sym active-minor-modes))))
|
|
(if (member 'paredit-mode active-minor-modes) (paredit-mode -1) (paredit-mode 1))))
|
|
|
|
(setq geiser-repl-use-other-window nil)
|
|
(setq geiser-active-implementations '(racket guile))
|