added nose minor mode and some evil plugins

This commit is contained in:
syl20bnr 2013-01-02 17:08:45 -05:00
parent 2cc725f692
commit b7014f57ba
22 changed files with 471 additions and 27 deletions

2
.gitignore vendored
View File

@ -8,3 +8,5 @@ eproject.lst
/eshell/history
/.emacs.desktop
/.emacs.desktop.lock
/eshell/alias
/eshell/lastdir

View File

@ -6,7 +6,7 @@
(show-paren-mode t)
;; use only spaces and no tabs
(setq-default indent-tabs-mode nil)
(setq default-tab-width 4)
(setq default-tab-width 2)
;; highlight current line
(global-hl-line-mode t)
(set-face-background 'hl-line "#073642")

View File

@ -5,6 +5,3 @@
;; Also auto refresh dired, but be quiet about it
(setq global-auto-revert-non-file-buffers t)
(setq auto-revert-verbose nil)
;; no tabs and default tab width
(setq-default indent-tabs-mode nil)
(setq tab-width 4)

6
config/python.el Normal file
View File

@ -0,0 +1,6 @@
(add-hook 'python-mode-hook
'(lambda()
(setq indent-tabs-mode nil)
(setq indent-level 4)
(setq python-indent 4)
(setq tab-width 4)))

View File

@ -1,3 +1,5 @@
;; no welcome buffer
(setq inhibit-startup-screen t)
;; scratch buffer empty
(setq initial-scratch-message "")
;; auto-save

View File

@ -1,8 +1,8 @@
(defvar syl:extensions
'(
emacs-eclim
evil-plugins
flymake
linum-relativenumber
))
;; load extensions

View File

@ -0,0 +1,91 @@
(require 'evil)
(require 'mode-line-color)
(defgroup evil-mode-line nil
"Mode line color and message for Evil"
:group 'evil)
(defcustom evil-mode-line-color
`((normal . ,(face-background 'mode-line))
(insert . "#575735")
(replace . "#575735")
(operator . "DarkSeaGreen4")
(visual . "SteelBlue4")
(emacs . "#8c5353"))
"Mode line color corresponds to Evil state.")
(defcustom evil-normal-state-msg ""
"Mode line message for Evil normal state."
:type 'string
:group 'evil-mode-line)
(defcustom evil-insert-state-msg "INSERT"
"Mode line message for Evil insert state."
:type 'string
:group 'evil-mode-line)
(defcustom evil-replace-state-msg "REPLACE"
"Mode line message for Evil replace state."
:type 'string
:group 'evil-mode-line)
(defcustom evil-emacs-state-msg "x"
"Mode line message for Evil emacs state."
:type 'string
:group 'evil-mode-line)
(defcustom evil-visual-state-msg-alist
'((normal . "VISUAL") (line . "VLINE") (block . "VBLOCK"))
"Mode line messages for Evil visual states."
:type '(list (cons symbol string))
:group 'evil-mode-line)
(defun evil-mode-line-state-msg (&optional state)
"Find a message string for STATE.
If `evil-STATE-state-msg' is bound, use that value. Otherwise,
if STATE is a visual state, then `evil-visual-state-msg-alist' is
looked up by the return value of `evil-visual-type'. If no
message string is found, return an empty string."
(unless state (setq state evil-state))
(let ((sym (intern (concat "evil-" (symbol-name state) "-state-msg"))))
(cond
((boundp sym) (symbol-value sym))
((evil-visual-state-p)
(or (cdr (assq (evil-visual-type) evil-visual-state-msg-alist))
(cdr (assq 'normal evil-visual-state-msg-alist))))
(t ""))))
(defun evil-mode-line-state-msg-format (&optional state)
"Make mode string for STATE.
If `evil-mode-line-state-msg' returns non-empty string, the mode string
is \"--STATE MESSAGE--\". Otherwise, the mode string is \"-\"."
(let* ((msg (evil-mode-line-state-msg state)) (line msg)
(empty (= (length msg) 0)) (tail (if empty "-" "--")))
(unless empty (setq line (concat "--" msg)))
(list "" line tail)))
(defadvice skk-mode-string-to-indicator
(before evil-remove----from-skk-mode-string (mode string) activate)
"Do not put \"--\" at the beginning of mode string.
We have our own \"--\" put by `evil-mode-line-state-msg-format'."
(when (string-match "^--" string)
(setq string (substring string 2))))
(defvar evil-mode-line-msg (evil-mode-line-state-msg-format 'emacs-state))
(defun evil-update-mode-line-state-msg ()
"Update `evil-mode-line-msg' and update mode line color."
(condition-case ()
(progn
(set (make-local-variable 'evil-mode-line-msg)
(evil-mode-line-state-msg-format))
(mode-line-color-update))
(error nil)))
(defadvice evil-refresh-mode-line (after evil-update-mode-line-msg activate)
"Update our own mode string by `evil-update-mode-line-msg'."
(evil-update-mode-line-state-msg))
;; setup
(define-mode-line-color (color)
(unless color (cdr (assq evil-state evil-mode-line-color))))
(setq-default mode-line-format
(append '("" evil-mode-line-msg) mode-line-format))
(provide 'evil-mode-line)

View File

@ -0,0 +1,62 @@
(require 'evil)
(defgroup evil-operator-comment nil
"Comment/uncomment operator for Evil"
:prefix "evil-operator-comment-"
:group 'evil)
(defcustom evil-operator-comment-key (kbd "C")
"A key for comment/uncomment operator"
:type `,(if (get 'key-sequence 'widget-type)
'key-sequence
'sexp)
:group 'evil-operator-comment)
(defun evil-mark-on-lines (beg end lines)
(let ((beg-marker (save-excursion (goto-char beg) (point-marker)))
(end-marker (save-excursion (goto-char end) (point-marker))))
(set-marker-insertion-type end-marker t)
(setcdr lines (cons (cons beg-marker end-marker) (cdr lines)))))
(defun evil-apply-on-block-markers (func beg end &rest args)
"Like `evil-apply-on-block' but first mark all lines and then
call functions on the marked ranges."
(let ((lines (list nil)))
(evil-apply-on-block #'evil-mark-on-lines beg end lines)
(dolist (range (nreverse (cdr lines)))
(let ((beg (car range)) (end (cdr range)))
(apply func beg end args)
(set-marker beg nil)
(set-marker end nil)))))
(evil-define-operator evil-comment-or-uncomment-region (beg end type)
"Comment out text from BEG to END with TYPE."
(interactive "<R>")
(if (eq type 'block)
(evil-apply-on-block-markers #'comment-or-uncomment-region beg end)
(comment-or-uncomment-region beg end))
;; place cursor on beginning of line
(when (and (evil-called-interactively-p) (eq type 'line))
(evil-first-non-blank)))
;;;###autoload
(define-minor-mode evil-operator-comment-mode
"Buffer local minor mode of comment/uncomment operator for Evil."
:lighter ""
:keymap (make-sparse-keymap)
:group 'evil-operator-comment
(evil-normalize-keymaps))
(defun evil-operator-comment-mode-install () (evil-operator-comment-mode 1))
;;;###autoload
(define-globalized-minor-mode global-evil-operator-comment-mode
evil-operator-comment-mode evil-operator-comment-mode-install
"Global minor mode of comment/uncomment operator for Evil.")
(evil-define-key 'normal evil-operator-comment-mode-map
evil-operator-comment-key 'evil-comment-or-uncomment-region)
(evil-define-key 'visual evil-operator-comment-mode-map
evil-operator-comment-key 'evil-comment-or-uncomment-region)
(provide 'evil-operator-comment)

View File

@ -0,0 +1,53 @@
(require 'color-moccur)
(require 'evil)
(defgroup evil-operator-moccur nil
"Moccur operator for Evil"
:prefix "evil-operator-moccur-"
:group 'evil)
(defcustom evil-operator-moccur-grep-find-key (kbd "M")
"A key for moccur-grep-find operator"
:type `,(if (get 'key-sequence 'widget-type)
'key-sequence
'sexp)
:group 'evil-operator-moccur)
(defcustom evil-operator-moccur-use-current-directory nil
"Uses current directory for grep and does not ask interactively."
:type 'boolean
:group 'evil-operator-moccur)
(evil-define-operator evil-moccur-grep-find-region (beg end &optional dir)
"Moccur on text from BEG to END."
:move-point nil
(interactive "<r>")
(unless dir
(setq dir (or (and (not evil-operator-moccur-use-current-directory)
(moccur-grep-read-directory))
(file-name-directory (buffer-file-name)))))
(moccur-grep-find dir (list (buffer-substring-no-properties beg end))))
;;;###autoload
(define-minor-mode evil-operator-moccur-mode
"Buffer local minor mode of moccur operator for Evil."
:lighter ""
:keymap (make-sparse-keymap)
:group 'evil-operator-moccur
(evil-normalize-keymaps))
(defun evil-operator-moccur-mode-install () (evil-operator-moccur-mode 1))
;;;###autoload
(define-globalized-minor-mode global-evil-operator-moccur-mode
evil-operator-moccur-mode evil-operator-moccur-mode-install
"Global minor mode of moccur operator for Evil.")
(evil-define-key 'normal evil-operator-moccur-mode-map
evil-operator-moccur-grep-find-key
'evil-moccur-grep-find-region)
(evil-define-key 'visual evil-operator-moccur-mode-map
evil-operator-moccur-grep-find-key
'evil-moccur-grep-find-region)
(provide 'evil-operator-moccur)

View File

@ -0,0 +1,52 @@
(require 'linum+) ;; See http://github.com/tarao/elisp/raw/master/linum+.el
(require 'evil)
(defgroup evil-relative-linum nil
"Relative line numbers when operators are activated."
:prefix "evil-relative-linum-"
:group 'evil)
(defcustom evil-relative-linum-delay 0.3
"Delay in showing line numbers after the operator is activated."
:group 'evil-relative-linum
:type 'float)
(defvar evil-relative-linum-timer nil)
(defvar evil-relative-linum-activated nil)
(define-minor-mode evil-relative-linum-mode
"Show relative line numbers when operators are activated."
:group 'evil-relative-linum
(let ((exit-cmd `(lambda ()
(interactive)
(save-excursion (set-buffer ,(current-buffer))
(evil-relative-linum-off)))))
(if evil-relative-linum-mode
(progn
(add-hook 'pre-command-hook exit-cmd)
(add-hook 'post-command-hook exit-cmd)
(setq evil-relative-linum-timer
(run-with-idle-timer evil-relative-linum-delay nil
'evil-relative-linum-activate)))
(cancel-timer evil-relative-linum-timer)
(when evil-relative-linum-activated
(relative-linum-mode 0)
(setq evil-relative-linum-activated nil))
(remove-hook 'pre-command-hook exit-cmd)
(remove-hook 'post-command-hook exit-cmd))))
(defun evil-relative-linum-off ()
(interactive)
(evil-relative-linum-mode 0))
(defun evil-relative-linum-on ()
(interactive)
(evil-relative-linum-mode 1))
(defun evil-relative-linum-activate ()
(setq evil-relative-linum-activated t)
(relative-linum-mode 1))
(add-hook 'evil-operator-state-entry-hook 'evil-relative-linum-on)
(provide 'evil-relative-linum)

View File

@ -0,0 +1,135 @@
;;; linum+.el --- Extension to linum.el displaying line numbers
;; Author: INA Lintaro <ina@kuis.kyoto-u.ac.jp>
;;; License:
;; NYSL Version 0.9982 (en)
;; ----------------------------------------
;; A. This software is "Everyone'sWare". It means:
;; Anybody who has this software can use it as if you're
;; the author.
;;
;; A-1. Freeware. No fee is required.
;; A-2. You can freely redistribute this software.
;; A-3. You can freely modify this software. And the source
;; may be used in any software with no limitation.
;; A-4. When you release a modified version to public, you
;; must publish it with your name.
;;
;; B. The author is not responsible for any kind of damages or loss
;; while using or misusing this software, which is distributed
;; "AS IS". No warranty of any kind is expressed or implied.
;; You use AT YOUR OWN RISK.
;;
;; C. Copyrighted to INA Lintaro
;;
;; D. Above three clauses are applied both to source and binary
;; form of this software.
;;; Commentary:
;; An extension to linum.el, which provides display of line numbers on the left
;; side of buffers.
;; Currently, this file provides only relative-linum-mode, which is to display
;; relative line numbers for the current buffer. It is convenient to show line
;; numbers counted from the line of the cursor position when you are using
;; vi emulation mode such as viper.el and about to operate multi-line commands
;; e.g. 'y15j'.
;; To use this mode, copy linum.el (written by Markus Triska) and
;; linum+.el (this file) to your load path and add to your .emacs:
;; (require 'linum+)
;; Then toggle display of line numbers with M-x relative-linum-mode.
;;; Change Log:
;; Code:
(require 'linum)
(defvar relative-linum-mode nil)
(defcustom relative-disable-if-changed t
"Whether relative line number mode should be disabled if buffer is changed."
:group 'linum
:type 'boolean)
(defadvice linum-mode
(before ensure-relative-disabled first (&optional arg) activate)
(if relative-linum-mode (relative-linum-mode 0)))
(defvar rel-linum-last 0 "Last state of linum-mode")
(defvar rel-linum-format 'dynamic "Last value of linum-format")
(defun rel-linum-restore ()
(setq linum-format rel-linum-format)
(internal-linum-mode rel-linum-last))
(defun internal-linum-mode (&optional arg)
(ad-disable-advice 'linum-mode 'before 'ensure-relative-disabled)
(ad-activate 'linum-mode)
(linum-mode arg)
(ad-enable-advice 'linum-mode 'before 'ensure-relative-disabled)
(ad-activate 'linum-mode))
(defvar rel-linum-point nil)
(defun rel-linum-save-point () (setq rel-linum-point (point)))
(defun rel-linum-update (buf)
(linum-delete-overlays)
(rel-linum-save-point)
(linum-update buf))
(defun rel-linum-schedule ()
(run-with-idle-timer 0 nil #'rel-linum-update-current))
(defun rel-linum-update-current ()
(rel-linum-update (current-buffer)))
(defun rel-linum-after-scroll (win start)
(rel-linum-update (window-buffer win)))
(defun rel-linum-after-size (frame)
(rel-linum-after-config))
(defun rel-linum-after-config ()
(walk-windows (lambda (w) (rel-linum-update (window-buffer))) nil 'visible))
(defun rel-linum-after-change (beg end len)
(if relative-disable-if-changed (relative-linum-mode 0)))
(define-minor-mode relative-linum-mode
"Toggle display of relative line numbers in the left marginal area."
:lighter ""
(if relative-linum-mode
(progn
(if linum-mode (setq rel-linum-last 1) (setq rel-linum-last 0))
(setq rel-linum-format
(if linum-format linum-format 'dynamic))
(internal-linum-mode 0)
(setq linum-format
(lambda (line)
(let ((w (length (number-to-string
(count-lines (point-min) (point-max))))))
(let ((fmt
(cond ((stringp rel-linum-format) rel-linum-format)
((eq rel-linum-format 'dynamic)
(concat "%" (number-to-string w) "d"))))
(rline (abs (- (line-number-at-pos rel-linum-point)
line))))
(if fmt
(propertize (format fmt rline) 'face 'linum)
(funcall rel-linum-format rline))))))
(add-hook 'after-change-functions 'rel-linum-after-change nil t)
(add-hook 'post-command-hook (if linum-delay
'rel-linum-schedule
'rel-linum-update-current) nil t)
(add-hook 'window-scroll-functions 'rel-linum-after-scroll nil t)
(add-hook 'window-size-change-functions 'rel-linum-after-size)
(add-hook 'window-configuration-change-hook
'rel-linum-after-config nil t)
(rel-linum-save-point)
(internal-linum-mode 1))
(remove-hook 'after-change-functions 'rel-linum-after-change t)
(remove-hook 'post-command-hook 'rel-linum-update t)
(remove-hook 'window-scroll-functions 'rel-linum-update t)
(remove-hook 'window-size-change-functions 'rel-linum-update)
(remove-hook 'window-configuration-change-hook 'rel-linum-update t)
(rel-linum-restore)))
(provide 'linum+)
;;; linum+.el ends here

View File

@ -122,4 +122,27 @@
(find-file (concat "/sudo:root@localhost:" (ido-read-file-name "File: ")))
(find-alternate-file (concat "/sudo:root@localhost:" buffer-file-name))))
;; Following code was take from:
;; http://emacswiki.org/emacs/MultiTerm
(defun last-multi-term-buffer (l)
"Return most recently used term buffer."
(when l
(if (eq 'term-mode (with-current-buffer (car l) major-mode))
(car l) (zoo/last-term-buffer (cdr l)))))
(defun last-used-multi-term ()
"Switch to the term buffer last used, or create a new one if
none exists, or if the current buffer is already a term."
(interactive)
(let ((b (last-multi-term-buffer (buffer-list))))
(if (or (not b) (eq 'term-mode major-mode))
(multi-term)
(switch-to-buffer b))))
;; found at http://emacswiki.org/emacs/KillingBuffers
(defun kill-other-buffers ()
"Kill all other buffers."
(interactive)
(mapc 'kill-buffer (delq (current-buffer) (buffer-list))))
(provide 'funcs)

View File

@ -0,0 +1,7 @@
(require 'evil-relative-linum)
(require 'evil-operator-moccur)
(global-evil-operator-moccur-mode 1)
(require 'evil-operator-comment)
(global-evil-operator-comment-mode 1)

View File

@ -1,2 +1 @@
(load-file (concat user-extensions-directory "linum-relativenumber/linum-relativenumber.el"))
(global-linum-mode t)

View File

@ -0,0 +1 @@
(require 'color-moccur)

View File

@ -1,9 +0,0 @@
;; Setup ipython integration with python-mode"
(setq
python-shell-interpreter "ipython"
python-shell-interpreter-args ""
python-shell-prompt-regexp "In \[[0-9]+\]: "
python-shell-prompt-output-regexp "Out\[[0-9]+\]: "
python-shell-completion-setup-code ""
python-shell-completion-string-code "';'.join(get_ipython().complete('''%s''')[1])\n")

View File

@ -1,3 +1,4 @@
(setq jedi:setup-keys t)
(require 'jedi)
(add-hook 'python-mode-hook 'jedi:setup)
(setq jedi:setup-keys t)
(setq jedi:complete-on-dot t)
(require 'jedi)

View File

@ -1,2 +1,2 @@
(key-chord-mode 1)
(setq key-chord-two-keys-delay 0.1)
(setq key-chord-two-keys-delay 0.5)

View File

@ -1,6 +1,13 @@
(require 'multi-term)
;; zsh
(setq multi-term-program "/usr/bin/zsh")
;; for solarized dark theme
(custom-set-variables
'(term-default-bg-color "#002b36")
'(term-default-fg-color "#93a1a1"))
;; enable evil
(evil-set-initial-state 'term-mode 'emacs)
;; don't switch to other multi-term when closing
;; the current one
(setq multi-term-switch-after-close nil)
;; let TAB key for the terminal

View File

@ -0,0 +1,9 @@
(require 'nose)
(add-hook 'python-mode-hook
(lambda ()
(local-set-key "\C-ca" 'nosetests-all)
(local-set-key "\C-cm" 'nosetests-module)
(local-set-key "\C-c." 'nosetests-one)
(local-set-key "\C-cpa" 'nosetests-pdb-all)
(local-set-key "\C-cpm" 'nosetests-pdb-module)
(local-set-key "\C-cp." 'nosetests-pdb-one)))

View File

@ -1,32 +1,37 @@
;; emacs
(key-chord-define evil-normal-state-map "em" 'smex)
;; elisp
(key-chord-define evil-normal-state-map "ed"
'elisp-slime-nav-find-elisp-thing-at-point)
(key-chord-define evil-normal-state-map "ev" 'eval-sexp)
(key-chord-define evil-normal-state-map "EV" 'eval-and-replace)
(key-chord-define evil-normal-state-map "EV" 'eval-and-replace)
(key-chord-define evil-normal-state-map "ed"
'elisp-slime-nav-find-elisp-thing-at-point)
;; windows
(key-chord-define evil-normal-state-map "wm" 'toggle-maximize-buffer)
(key-chord-define evil-normal-state-map "wr" 'rotate-windows)
(key-chord-define evil-normal-state-map "wp" 'evil-window-prev)
(key-chord-define evil-normal-state-map "wh" 'evil-window-left)
(key-chord-define evil-normal-state-map "wj" 'evil-window-down)
(key-chord-define evil-normal-state-map "wk" 'evil-window-up)
(key-chord-define evil-normal-state-map "wl" 'evil-window-right)
(key-chord-define evil-normal-state-map "wm" 'toggle-maximize-buffer)
(key-chord-define evil-normal-state-map "wr" 'rotate-windows)
;; buffers
(key-chord-define evil-normal-state-map "bs" 'ido-switch-buffer)
(key-chord-define evil-normal-state-map "br" 'rename-current-buffer-file)
(key-chord-define evil-normal-state-map "bk" 'ido-kill-buffer)
(key-chord-define evil-normal-state-map "BK" 'delete-current-buffer-file)
(key-chord-define evil-normal-state-map "bo" 'kill-other-buffers)
(key-chord-define evil-normal-state-map "br" 'rename-current-buffer-file)
(key-chord-define evil-normal-state-map "bs" 'ido-switch-buffer)
;; files
(key-chord-define evil-normal-state-map "fo" 'ido-find-file)
(key-chord-define evil-normal-state-map "fp" 'find-file-in-project)
;; terminals
(key-chord-define evil-normal-state-map "tn" 'multi-term)
(key-chord-define evil-normal-state-map "te" 'eshell)
(key-chord-define evil-normal-state-map "th" 'multi-term-prev)
(key-chord-define evil-normal-state-map "tl" 'multi-term-next)
(key-chord-define evil-normal-state-map "tn" 'multi-term)
(key-chord-define evil-normal-state-map "tt" 'last-used-multi-term)
;; git
(key-chord-define evil-normal-state-map "gs" 'magit-status)
;; errors
(key-chord-define evil-normal-state-map "rh" 'previous-error)
(key-chord-define evil-normal-state-map "rl" 'next-error)
(provide 'keybindings)

View File

@ -11,6 +11,7 @@
ace-jump-mode
auto-complete
autopair
color-moccur
deferred
diminish
elisp-slime-nav
@ -24,12 +25,12 @@
fuzzy
highlight-symbol
ido-ubiquitous
ipython
jedi
key-chord
magit
multiple-cursors
multi-term
nose
p4
paredit
powerline