diff --git a/Makefile b/Makefile index 19c8c3c73..3953120b0 100644 --- a/Makefile +++ b/Makefile @@ -7,7 +7,7 @@ update: clean: @rm -rf init.elc init/*.elc contrib/*.elc core/*.elc - @rm -rf auto-save-list recentf places ido.last async-bytecomp.log elpa + @rm -rf auto-save-list recentf places ido.last async-bytecomp.log elpa projectile-bookmarks.eld projectile.cache company-statistics-cache.el tramp smex-items autoloads: @rm -rf core/autoloads.el diff --git a/core/core-ui.el b/core/core-ui.el index 0e04caba2..079b8964d 100644 --- a/core/core-ui.el +++ b/core/core-ui.el @@ -42,6 +42,10 @@ (if (string-equal (system-name) "io") (set-frame-size (selected-frame) 326 119))) +(defadvice save-buffers-kill-emacs (around no-query-kill-emacs activate) + "Prevent annoying \"Active processes exist\" query when you quit Emacs." + (flet ((process-list ())) ad-do-it)) + ;;;; Modeline ;;;;;;;;;;;;;;;;;;;;;;;;;; (use-package vim-empty-lines-mode diff --git a/core/core.el b/core/core.el index b531dd55f..4f0cde1d6 100644 --- a/core/core.el +++ b/core/core.el @@ -30,7 +30,8 @@ (auto-compression-mode t) ; Transparently open compressed files (global-font-lock-mode t) ; Enable syntax highlighting for older emacs (global-auto-revert-mode 1) ; revert buffers for changed files - (electric-indent-mode -1) ; In case of emacs >24.4 + (electric-indent-mode 1) + (setq electric-indent-chars '(? ?: ?{)) ;;; window layout undo/redo (setq winner-boring-buffers '("*Completions*" "*Compile-Log*" "*inferior-lisp*" @@ -38,13 +39,15 @@ "*Buffer List*" "*Ibuffer*" "*esh command on file*")) (winner-mode 1) + (setq semanticdb-default-save-directory (expand-file-name "semanticdb" my-tmp-dir)) + (semantic-mode 1) + ;;; UTF-8 please (setq locale-coding-system 'utf-8) ; pretty (set-terminal-coding-system 'utf-8) ; pretty (set-keyboard-coding-system 'utf-8) ; pretty (set-selection-coding-system 'utf-8) ; please (prefer-coding-system 'utf-8) ; with sugar on top - (fset 'yes-or-no-p 'y-or-n-p) ; y/n instead of yes/no ;;; Show tab characters @@ -90,8 +93,6 @@ (setq sentence-end-double-space nil) ; sentences end with periods. Period. - (setq eval-expression-print-level nil) - (setq show-paren-delay 0) (setq ediff-diff-options "-w") @@ -101,7 +102,7 @@ ;; Fixes C-i's synonymity with TAB (keyboard-translate ?\C-i ?\H-i) - ;; Save clipboard contents into kill-ring before replace them + ;; Don't save clipboard contents into kill-ring before replacing them (setq save-interprogram-paste-before-kill nil) ;; don't let the cursor go into minibuffer prompt @@ -120,7 +121,7 @@ (setq bookmark-default-file (expand-file-name "bookmarks" my-tmp-dir)) (setq auto-save-default nil) (setq auto-save-list-file-name (expand-file-name ".auto-save" my-tmp-dir-autosave)) - (setq auto-save-file-name-transforms `((".*" ,my-tmp-dir-autosave t))) + (setq auto-save-file-name-transforms `((".*" ,my-tmp-dir-autosave t))) ;; In case I want to reactivate backup files (setq make-backup-files nil) (setq create-lockfiles nil) @@ -152,6 +153,7 @@ (setq recentf-max-menu-items 0) (setq recentf-max-saved-items 1000) (setq recentf-auto-cleanup 'never) + (add-hook 'kill-emacs-hook 'recentf-cleanup) (recentf-mode 1) ;; What we do every night, Pinkie... @@ -171,7 +173,10 @@ ;; Project defuns ;;;;;;;;;;;;;;;;;;;;;; (require 'f) - (defvar project-root-files '(".git" ".hg" ".svn" "README" "README.md")) + + (defvar project-root-files '(".git" ".hg" ".svn" ".project" "local.properties" "project.properties") + "A list of files that count as 'project files', which determine whether a + folder is the root of a project or not.") (defun project-root (&optional strict-p) "Get the path to the root of your project. Uses `project-root-files' to determine if a directory is a project." @@ -277,10 +282,12 @@ the checking happens for all pairs in auto-minor-mode-alist" (push '("^\\*Flycheck.*\\*$" :regexp t :position bottom :height 0.25 :noselect t) popwin:special-display-config) (push '(inf-enh-ruby-mode :position bottom :stick t) popwin:special-display-config) (push '(snippet-mode :position bottom :stick t) popwin:special-display-config) + (push '("^\\*eclim.*\\*" :regexp t :position bottom :height 0.25) popwin:special-display-config) (push '("*ansi-term*" :position bottom :height 0.45 :stick t) popwin:special-display-config) (push '("*terminal*" :position bottom :height 0.45 :stick t) popwin:special-display-config) (push '("*Async Shell Command*" :position bottom) popwin:special-display-config) + (push '("*Shell Command Output*" :position bottom :stick t :height 15) popwin:special-display-config) (push '("* Regexp Explain *" :position top :height 0.35) popwin:special-display-config) diff --git a/dict/love-mode b/dict/love-mode index 60e5c13ad..e38022dbe 100755 --- a/dict/love-mode +++ b/dict/love-mode @@ -1,3 +1,8 @@ +love.keyboard.isDown +love.draw +love.update +love.conf +love.load draw focus joystickpressed diff --git a/init.el b/init.el index f532608a3..16a0887ec 100644 --- a/init.el +++ b/init.el @@ -63,7 +63,7 @@ init-git ; git-gutter + modes init-ido ; a search engine for your car keys init-helm ; a search engine for your life - init-project ; project tools - dired, perspective, neotree + init-project ; project tools: dired, neotree init-cc ; C/C++/Obj-C madness ;; init-d ; D - It's C, but better! diff --git a/init/init-cc.el b/init/init-cc.el index 012a6afd8..9f790119e 100644 --- a/init/init-cc.el +++ b/init/init-cc.el @@ -2,7 +2,6 @@ :mode "CMakeLists\\.txt$" :config (progn - (after "auto-complete" (add-to-list 'ac-modes 'cmake-mode)) (after "company" (use-package company-cmake :config (company--backend-on 'cmake-mode-hook 'company-cmake 'company-yasnippet))))) diff --git a/init/init-dev.el b/init/init-dev.el index 7f07a8294..f0fea9256 100644 --- a/init/init-dev.el +++ b/init/init-dev.el @@ -62,13 +62,13 @@ If ARG is nil this function calls `recompile', otherwise it calls ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (evil-define-operator my:eval-region (beg end) - :keep-visual t :move-point nil (interactive "") (cond ((eq major-mode 'emacs-lisp-mode) (eval-region beg end)) (t - (let ((interp (my--get-interpreter))) + (let ((interp (my--get-interpreter)) + (max-mini-window-height 1)) (when interp (shell-command-on-region beg end interp)))))) (evil-define-command my:eval-buffer () @@ -76,7 +76,8 @@ If ARG is nil this function calls `recompile', otherwise it calls (cond ((eq major-mode 'emacs-lisp-mode) (eval-buffer)) (t - (let ((interp (my--get-interpreter))) + (let ((interp (my--get-interpreter)) + (max-mini-window-height 1)) (when interp (shell-command-on-region (point-min) (point-max) interp)))))) (defun my--get-interpreter () diff --git a/init/init-helm.el b/init/init-helm.el index 31bad040e..7a533da42 100644 --- a/init/init-helm.el +++ b/init/init-helm.el @@ -30,6 +30,8 @@ helm-css-scss-multi helm-css-scss-insert-close-comment)) + (use-package helm-company :commands (helm-company)) + ;; Ex-mode interface for `helm-ag'. If `bang', then `search' is interpreted as ;; regexp. (evil-define-operator my:helm-ag-search (beg end &optional search hidden-files-p pwd-p regex-p) @@ -100,31 +102,11 @@ (add-to-list 'projectile-globally-ignored-directories "assets") (add-to-list 'projectile-other-file-alist '("scss" "css")) (add-to-list 'projectile-other-file-alist '("css" "scss")) - (use-package helm-projectile) ;; Don't show the project name in the prompts; I already know. - (defun projectile-prepend-project-name (string) (format helm-global-prompt string)) + (defun projectile-prepend-project-name (string) helm-global-prompt) - ;; All this for a smaller prompt (it was redundant with helm headers) - (defmacro helm-projectile-command (command source prompt) - `(defun ,(intern (concat "helm-projectile-" command)) (&optional arg) - (interactive "P") - (if (projectile-project-p) - (projectile-maybe-invalidate-cache arg)) - (let ((helm-ff-transformer-show-only-basename nil) - ;; for consistency, we should just let Projectile take care of ignored files - (helm-boring-file-regexp-list nil)) - (helm :sources ,source - :buffer "*helm projectile*" - :prompt helm-global-prompt)))) - - (helm-projectile-command "switch-project" 'helm-source-projectile-projects helm-global-prompt) - (helm-projectile-command "find-file" helm-source-projectile-files-and-dired-list helm-global-prompt) - (helm-projectile-command "find-file-in-known-projects" 'helm-source-projectile-files-in-all-projects-list helm-global-prompt) - (helm-projectile-command "find-file-dwim" 'helm-source-projectile-files-dwim-list helm-global-prompt) - (helm-projectile-command "find-dir" helm-source-projectile-directories-and-dired-list helm-global-prompt) - (helm-projectile-command "recentf" 'helm-source-projectile-recentf-list helm-global-prompt) - (helm-projectile-command "switch-to-buffer" 'helm-source-projectile-buffers-list helm-global-prompt))) + (use-package helm-projectile))) (progn ; helm hacks ;; No persistent header diff --git a/init/init-java.el b/init/init-java.el index 0aa8362e1..502015c1c 100644 --- a/init/init-java.el +++ b/init/init-java.el @@ -1,7 +1,7 @@ (defun my-java-project-package () (if (eq major-mode 'java-mode) (s-chop-suffix "." (s-replace "/" "." (f-dirname (f-relative (buffer-file-name) - (concat (project-root) "src/"))))) + (concat (project-root) "/src/"))))) "")) (defun my-java-class-name () @@ -10,14 +10,15 @@ "")) (use-package eclim - :disabled t :commands (eclim-mode global-eclim-mode) - :config + :init (progn (setq eclim-eclipse-dirs '("/Applications/eclipse") eclim-executable "/Applications/eclipse/eclim") - (add-hook 'java-mode-hook 'eclim-mode) - + (when (f-exists? eclim-executable) + (add-hook 'java-mode-hook 'eclim-mode))) + :config + (progn ;; (use-package eclim-ant) ;; (use-package eclim-maven) (use-package eclim-problems) @@ -28,23 +29,33 @@ (setq help-at-pt-timer-delay 0.1) (help-at-pt-set-timer) + (push "*eclim: problems*" winner-boring-buffers) + (after "company" (use-package company-emacs-eclim :config (company-emacs-eclim-setup))) (bind 'motion java-mode-map "gd" 'eclim-java-find-declaration))) +(use-package groovy-mode :mode "\\.gradle$") + (use-package android-mode :defer t :init - (add-hook 'android-mode-hook (set-build-command "./gradlew %s" "build.gradle")) - (add-hook! 'java-mode-hook - (let ((root (project-root))) - (when (or (project-has-files "AndroidManifest.xml" root) - (project-has-files "src/main/AndroidManifest.xml" root)) - (android-mode +1))))) + (progn + (defun my-android-mode-enable-maybe () + (let ((root (project-root))) + (when (or (project-has-files "local.properties" root) + (project-has-files "AndroidManifest.xml" root) + (project-has-files "src/main/AndroidManifest.xml" root)) + (android-mode +1) + (set-build-command "./gradlew %s" "build.gradle")))) + (after "company" (add-to-list 'company-dictionary-major-minor-modes 'android-mode)) + (add-hook 'java-mode-hook 'my-android-mode-enable-maybe) + (add-hook 'groovy-mode-hook 'my-android-mode-enable-maybe) + (add-hook 'nxml-mode-hook 'my-android-mode-enable-maybe) + (add-hook! 'android-mode-hook (my--init-yas-mode 'android-mode)))) -(use-package groovy-mode :mode "\\.gradle$") (provide 'init-java) ;;; init-java.el ends here diff --git a/init/init-js.el b/init/init-js.el index 846f237bc..7e2512a23 100644 --- a/init/init-js.el +++ b/init/init-js.el @@ -25,23 +25,14 @@ (add-hook 'js2-mode-hook 'tern-mode) (after "auto-complete" (add-hook 'js2-mode-hook 'tern-ac-setup))) :config - (progn - (after "auto-complete" - (use-package tern-auto-complete - :config - (progn - (setq tern-ac-on-dot nil) - (bind 'insert js2-mode-map [remap auto-complete] 'tern-ac-complete) - (bind 'motion js2-mode-map "gd" 'tern-find-definition)))) - - (after "company" - (use-package company-tern - :config - (company--backend-on 'js2-mode-hook 'company-tern) - ;; (setq company-tern-meta-as-single-line t) - ;; (setq company-tern-property-marker "") - ;; (setq company-tooltip-align-annotations t) - )))))) + (after "company" + (use-package company-tern + :config + (company--backend-on 'js2-mode-hook 'company-tern) + ;; (setq company-tern-meta-as-single-line t) + ;; (setq company-tern-property-marker "") + ;; (setq company-tooltip-align-annotations t) + ))))) (use-package json-mode :mode (("\\.json$" . json-mode) diff --git a/init/init-lua.el b/init/init-lua.el index 93469e717..616a954d0 100644 --- a/init/init-lua.el +++ b/init/init-lua.el @@ -15,6 +15,8 @@ (when (project-has-files "main.lua") (love-mode +1))) + (after "company" (add-to-list 'company-dictionary-major-minor-modes 'love-mode)) + (add-hook 'lua-mode-hook 'enable-tab-width-2))) diff --git a/init/init-python.el b/init/init-python.el index 88918ec38..c601cfc90 100644 --- a/init/init-python.el +++ b/init/init-python.el @@ -4,7 +4,7 @@ :init (add-hook 'python-mode-hook 'enable-tab-width-4) :config (progn - (setq python-indent-offset 4) + (setq-default python-indent-offset 4) (setq python-environment-directory my-tmp-dir) (setq python-shell-interpreter "ipython") diff --git a/init/init-ruby.el b/init/init-ruby.el index 4aafe5c1b..ed1d1bb36 100644 --- a/init/init-ruby.el +++ b/init/init-ruby.el @@ -1,20 +1,14 @@ (use-package enh-ruby-mode - :mode (("\\.rb$" . enh-ruby-mode) - ("\\.ru$" . enh-ruby-mode) - ("\\.rake$" . enh-ruby-mode) - ("\\.gemspec$" . enh-ruby-mode) - ("\\.?pryrc$" . enh-ruby-mode) - ("Gemfile$" . enh-ruby-mode) - ("Capfile$" . enh-ruby-mode) - ("Vagrantfile$" . enh-ruby-mode) - ("Rakefile$" . enh-ruby-mode)) + :mode (("\\.rb$" . enh-ruby-mode) + ("\\.ru$" . enh-ruby-mode) + ("\\.rake$" . enh-ruby-mode) + ("\\.gemspec$" . enh-ruby-mode) + ("\\.?pryrc$" . enh-ruby-mode) + ("/Gemfile$" . enh-ruby-mode) + ("/Capfile$" . enh-ruby-mode) + ("/Vagrantfile$" . enh-ruby-mode) + ("/Rakefile$" . enh-ruby-mode)) :interpreter "ruby" - :init - (progn - (associate-minor-mode "\\(/spec_helper\\|_spec\\)\\.rb$" 'rspec-mode) - (associate-minor-mode "/\\.rspec$" 'rspec-mode) - (associate-minor-mode "/\\.rake$" 'rake-mode) - (associate-mode "/\\.rspec$" 'text-mode)) :config (progn ;;; Formatting @@ -22,9 +16,11 @@ (setq ruby-deep-indent-paren t) (setq enh-ruby-check-syntax nil) + (associate-mode "/\\.rspec$" 'text-mode) (add-hook 'enh-ruby-mode-hook 'enable-tab-width-2) (add-hook! 'enh-ruby-mode-hook (set-build-command "rake %s" "Rakefile")) + ;; Don't interfere with my custom RET behavior (define-key enh-ruby-mode-map [?\n] nil) (after "emr" @@ -33,45 +29,46 @@ :title "extract method" :modes 'enh-ruby-mode :predicate (lambda () (use-region-p))) - (emr-declare-command 'ruby-refactor-extract-local-variable :title "extract local variable" :modes 'enh-ruby-mode :predicate (lambda () (use-region-p))) - (emr-declare-command 'ruby-refactor-extract-constant :title "extract constant" :modes 'enh-ruby-mode :predicate (lambda () (use-region-p))) - (emr-declare-command 'ruby-refactor-add-parameter :title "add parameter" :modes 'enh-ruby-mode) - (emr-declare-command 'ruby-refactor-extract-to-let :title "extract to let" :modes 'enh-ruby-mode :predicate (lambda () (use-region-p)))) + ;; Rakefiles ;;;;;;;;;;;;;;;;;;;;;;;;;;; (define-minor-mode rake-mode "Buffer local minor mode for rake files" - :lighter " Rake" + :lighter " Rake" :keymap (make-sparse-keymap) (my--init-yas-mode 'rake-mode)) + (associate-minor-mode "/\\(Rakefile\\|\\.rake\\)$" 'rake-mode) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - (use-package inf-ruby - :commands (inf-ruby inf-ruby-console-auto) - :config - (progn - (evil-set-initial-state 'inf-enh-ruby-mode 'insert) - - (after "company" - (use-package company-inf-ruby - :config (company--backend-on 'inf-enh-ruby-mode-hook 'company-inf-ruby))))) + ;; Vagrantfiles ;;;;;;;;;;;;;;;;;;;;;;;; + (define-minor-mode vagrant-mode + "Buffer local minor mode for vagrant files" + :lighter " Va" :keymap (make-sparse-keymap) + (my--init-yas-mode 'vagrant-mode)) + (associate-minor-mode "/Vagrantfile$" 'vagrant-mode) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; Rspec files ;;;;;;;;;;;;;;;;;;;;;;;;; (use-package rspec-mode :defer t :init (progn + (associate-minor-mode "\\(/spec_helper\\|_spec\\)\\.rb$" 'rspec-mode) + (associate-minor-mode "/\\.rspec$" 'rspec-mode) + (defvar rspec-mode-verifiable-map (make-sparse-keymap)) (defvar evilmi-ruby-match-tags '((("unless" "if") ("elsif" "else") "end") @@ -86,6 +83,16 @@ ",ta" 'rspec-verify-all ",ts" 'rspec-verify-single ",tv" 'rspec-verify)) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + (use-package inf-ruby + :commands (inf-ruby inf-ruby-console-auto) + :config + (progn + (evil-set-initial-state 'inf-enh-ruby-mode 'insert) + (after "company" + (use-package company-inf-ruby + :config (company--backend-on 'inf-enh-ruby-mode-hook 'company-inf-ruby))))) (use-package robe :config @@ -94,10 +101,16 @@ (use-package company-robe :config (company--backend-on 'enh-ruby-mode-hook 'company-robe))) - ;; (add-hook! 'enh-ruby-mode-hook - ;; (unless (f-ext? (buffer-file-name) "org") ;; in case of org-mode - ;; (robe-mode 1) - ;; (my--ruby-load-file buffer-file-name))) + (defun my-enable-robe-maybe () + (let ((file (buffer-file-name))) + ;; Don't run in gemfiles, capfiles or vagrantfiles + (unless (or (string-equal (f-filename file) "Gemfile") + (string-equal (f-filename file) "Capfile") + (string-equal (f-filename file) "Vagrantfile") + (f-ext? file "org")) ;; or org-mode + (robe-mode 1) + (my--ruby-load-file file)))) + (add-hook 'enh-ruby-mode-hook 'my-enable-robe-maybe) (defun my--ruby-load-file (&optional file) (let ((file (or file buffer-file-name))) diff --git a/init/init-web.el b/init/init-web.el index 5412729a9..6d7c29214 100644 --- a/init/init-web.el +++ b/init/init-web.el @@ -75,6 +75,7 @@ (associate-minor-mode "/_\\(layouts\\|posts\\)/.+$" 'jekyll-mode) (add-hooks '(web-mode-hook scss-mode-hook html-mode-hook markdown-mode markdown-mode-hook) 'jekyll-mode-enable-maybe) +(after "company" (add-to-list 'company-dictionary-major-minor-modes 'jekyll-mode)) (define-minor-mode wordpress-mode :init-value nil @@ -83,6 +84,7 @@ (my--init-yas-mode 'wordpress-mode)) (associate-minor-mode "/wp-\\(content\\|admin\\|includes\\)/.+$" 'wordpress-mode) (associate-minor-mode "/wp-.+\\.php$" 'wordpress-mode) +(after "company" (add-to-list 'company-dictionary-major-minor-modes 'wordpress-mode)) (provide 'init-web) diff --git a/init/init-yasnippet.el b/init/init-yasnippet.el index 8b0154893..3aeae503a 100644 --- a/init/init-yasnippet.el +++ b/init/init-yasnippet.el @@ -143,11 +143,12 @@ (defun my--init-yas-mode (&rest modes) ;; Yasnippet 0.8.1+ - (when (boundp 'yas-extra-modes) - (if (symbol-value mode) - (dolist (mode modes) - (yas-activate-extra-mode mode)) - (setq yas-extra-modes (delq mode yas-extra-modes))))) + (after "yasnippet" + (when (boundp 'yas-extra-modes) + (dolist (mode modes) + (if (symbol-value mode) + (yas-activate-extra-mode mode) + (setq yas-extra-modes (delq mode yas-extra-modes))))))) ;; keybinds (bind yas-keymap diff --git a/init/my-bindings.el b/init/my-bindings.el index e82d4f00a..eee7e0a16 100644 --- a/init/my-bindings.el +++ b/init/my-bindings.el @@ -37,12 +37,12 @@ ;; (bind my-leader-map - "," 'helm-projectile-switch-to-buffer + "," (λ (if (projectile-project-p) (helm-projectile-switch-to-buffer) (helm-buffers-list))) + "<" 'helm-buffers-list "." 'ido-find-file ">" 'my-ido-find-project-file "/" 'helm-projectile-find-file ";" 'helm-semantic-or-imenu - "<" 'helm-mini "M" 'helm-projectile-recentf ; recent PROJECT files "]" 'helm-etags-select "a" 'helm-projectile-find-other-file @@ -80,7 +80,7 @@ "g" 'git-gutter+-show-hunk "e" (λ (flycheck-buffer) (flycheck-list-errors)) "p" 'helm-show-kill-ring - "b" 'helm-projectile-switch-to-buffer + "b" 'helm-bookmarks "w" 'helm-wg) diff --git a/themes/v0-theme.el b/themes/v0-theme.el index 84a527549..07ef054b7 100644 --- a/themes/v0-theme.el +++ b/themes/v0-theme.el @@ -42,7 +42,7 @@ (selection "#4f5b66") (text "#c0c5ce") (comments "#65737e") - (punctuation "#c0c5ce") + (punctuation "#8fa1b3") (delimiters "#c0c5ce") (operators "#c0c5ce") (keywords "#b48ead")