From 7ddb52699d45056d9acf939b6d6f83c8c7fb9e3b Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Fri, 12 Dec 2014 15:26:34 -0500 Subject: [PATCH] I think I have a problem.. --- Cask | 24 +- core/core-editor.el | 9 +- core/core-evil.el | 20 +- core/core-ui.el | 2 + core/core.el | 19 +- core/defuns-buffers.el | 20 ++ core/defuns-text.el | 2 +- {lib => elisp}/evil-ex-registers.el | 0 {lib => elisp}/evil-little-word.el | 0 {lib => elisp}/flycheck-objc.el | 0 {lib => elisp}/helm-todo.el | 0 {lib => elisp}/help-fns+.el | 0 elisp/hide-mode-line.el | 252 ++++++++++++++++++++ {lib => elisp}/hl-todo.el | 0 {lib => elisp}/rotate-text.el | 0 {lib => elisp}/ruby-mode-indent-fix.el | 0 {lib => elisp}/shaderlab-mode.el | 0 init.el | 14 +- {modules => init}/init-auto-complete.el | 0 {modules => init}/init-auto-insert.el | 2 +- {modules => init}/init-cc.el | 0 {modules => init}/init-company.el | 0 {modules => init}/init-cscope.el | 0 {modules => init}/init-csharp.el | 0 init/init-d.el | 6 + {modules => init}/init-dev.el | 9 +- {modules => init}/init-elisp.el | 0 {modules => init}/init-eshell.el | 0 {modules => init}/init-floobits.el | 0 {modules => init}/init-fly.el | 0 {modules => init}/init-git.el | 0 {modules => init}/init-go.el | 0 {modules => init}/init-helm.el | 47 ++-- {modules => init}/init-ido.el | 0 {modules => init}/init-java.el | 12 +- {modules => init}/init-js.el | 0 {modules => init}/init-lua.el | 0 init/init-org.el | 295 ++++++++++++++++++++++++ {modules => init}/init-php.el | 0 {modules => init}/init-project.el | 0 {modules => init}/init-projectile.el | 0 {modules => init}/init-python.el | 0 {modules => init}/init-regex.el | 0 {modules => init}/init-ruby.el | 62 ++--- init/init-rust.el | 12 + {modules => init}/init-scss.el | 0 {modules => init}/init-sh.el | 0 {modules => init}/init-swift.el | 0 {modules => init}/init-text.el | 41 ++-- {modules => init}/init-tmux.el | 0 {modules => init}/init-web.el | 0 {modules => init}/init-yasnippet.el | 0 {my => init}/my-bindings.el | 16 +- {my => init}/my-settings.el | 4 +- modules/init-org.el | 195 ---------------- 55 files changed, 745 insertions(+), 318 deletions(-) rename {lib => elisp}/evil-ex-registers.el (100%) rename {lib => elisp}/evil-little-word.el (100%) rename {lib => elisp}/flycheck-objc.el (100%) rename {lib => elisp}/helm-todo.el (100%) rename {lib => elisp}/help-fns+.el (100%) create mode 100644 elisp/hide-mode-line.el rename {lib => elisp}/hl-todo.el (100%) rename {lib => elisp}/rotate-text.el (100%) rename {lib => elisp}/ruby-mode-indent-fix.el (100%) rename {lib => elisp}/shaderlab-mode.el (100%) rename {modules => init}/init-auto-complete.el (100%) rename {modules => init}/init-auto-insert.el (99%) rename {modules => init}/init-cc.el (100%) rename {modules => init}/init-company.el (100%) rename {modules => init}/init-cscope.el (100%) rename {modules => init}/init-csharp.el (100%) create mode 100644 init/init-d.el rename {modules => init}/init-dev.el (84%) rename {modules => init}/init-elisp.el (100%) rename {modules => init}/init-eshell.el (100%) rename {modules => init}/init-floobits.el (100%) rename {modules => init}/init-fly.el (100%) rename {modules => init}/init-git.el (100%) rename {modules => init}/init-go.el (100%) rename {modules => init}/init-helm.el (87%) rename {modules => init}/init-ido.el (100%) rename {modules => init}/init-java.el (94%) rename {modules => init}/init-js.el (100%) rename {modules => init}/init-lua.el (100%) create mode 100644 init/init-org.el rename {modules => init}/init-php.el (100%) rename {modules => init}/init-project.el (100%) rename {modules => init}/init-projectile.el (100%) rename {modules => init}/init-python.el (100%) rename {modules => init}/init-regex.el (100%) rename {modules => init}/init-ruby.el (60%) create mode 100644 init/init-rust.el rename {modules => init}/init-scss.el (100%) rename {modules => init}/init-sh.el (100%) rename {modules => init}/init-swift.el (100%) rename {modules => init}/init-text.el (56%) rename {modules => init}/init-tmux.el (100%) rename {modules => init}/init-web.el (100%) rename {modules => init}/init-yasnippet.el (100%) rename {my => init}/my-bindings.el (100%) rename {my => init}/my-settings.el (97%) delete mode 100644 modules/init-org.el diff --git a/Cask b/Cask index 568566bdb..dc1a623ae 100644 --- a/Cask +++ b/Cask @@ -56,15 +56,15 @@ (depends-on "company-irony") (depends-on "irony-mode" :git "https://github.com/Sarcasm/irony-mode") -(depends-on "auto-complete") -(depends-on "auto-complete-clang") -(depends-on "auto-complete-c-headers") -(depends-on "ac-etags") -(depends-on "ac-ispell") -(depends-on "ac-anaconda") -(depends-on "tern-auto-complete") -(depends-on "ac-inf-ruby") -(depends-on "jedi") +; (depends-on "auto-complete") +; (depends-on "auto-complete-clang") +; (depends-on "auto-complete-c-headers") +; (depends-on "ac-etags") +; (depends-on "ac-ispell") +; (depends-on "ac-anaconda") +; (depends-on "tern-auto-complete") +; (depends-on "ac-inf-ruby") +; (depends-on "jedi") ;; Eeeevil (depends-on "god-mode") @@ -104,6 +104,7 @@ ;; Modes/mode-specific (depends-on "org-plus-contrib") (depends-on "org-opml" :git "https://github.com/edavis/org-opml") +;(depends-on "org-present") (depends-on "rainbow-mode") (depends-on "lua-mode") @@ -135,7 +136,7 @@ (depends-on "inf-ruby") (depends-on "robe") -(depends-on "anaconda") +(depends-on "anaconda-mode") (depends-on "omnisharp") (depends-on "csharp-mode") @@ -148,3 +149,6 @@ (depends-on "applescript-mode") (depends-on "cmake-mode") + +(depends-on "rust-mode") +(depends-on "d-mode") diff --git a/core/core-editor.el b/core/core-editor.el index 21d6cce85..daba8176e 100644 --- a/core/core-editor.el +++ b/core/core-editor.el @@ -1,7 +1,4 @@ ;; Global editor behavior (+ evil) -(provide 'core-editor) - -;;;; Editing plugins ;;;;;;;;;;;;;;;;;;; (use-package expand-region :commands (er/expand-region er/contract-region)) @@ -18,7 +15,7 @@ (setq sp-autowrap-region nil ; let evil-surround handle this sp-highlight-pair-overlay nil sp-show-pair-delay 0 - sp-autoescape-string-quote nil) + sp-autoescape-string-quote t) ;; Handle newlines (sp-pair "{" nil :post-handlers '(("||\n[i]" "RET"))) @@ -36,3 +33,7 @@ (after "yasnippet" (defadvice yas-expand (before advice-for-yas-expand activate) (sp-remove-active-pair-overlay))))) + + +(provide 'core-editor) +;;; core-editor.el ends here diff --git a/core/core-evil.el b/core/core-evil.el index d94881ad7..8dc4827f7 100644 --- a/core/core-evil.el +++ b/core/core-evil.el @@ -211,10 +211,11 @@ file-name)) (progn ; ex-commands - (evil-ex-define-cmd "pres[ent]" 'toggle-theme) + (evil-ex-define-cmd "pres[ent]" 'toggle-presentation-mode) + (evil-ex-define-cmd "togglet[heme]" 'toggle-theme) (evil-ex-define-cmd "full[scr]" 'toggle-frame-fullscreen) (evil-ex-define-cmd "k[ill]" 'kill-this-buffer) ; Kill current buffer - (evil-ex-define-cmd "k[ill]o" 'cleanup-buffers) ; Kill current project buffers + (evil-ex-define-cmd "k[ill]o" 'my-cleanup-buffers) ; Kill current project buffers ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -232,6 +233,13 @@ (mapc 'kill-buffer (buffer-list))) (delete-other-windows)) + (evil-ex-define-cmd "k[ill]buried" 'my:kill-buried-buffers) ; Kill all buffers (bang = project buffers only) + (evil-define-command my:kill-buried-buffers (&optional bang) + :repeat nil + (interactive "") + (mapc 'kill-buffer + (my-living-buffer-list (if bang (projectile-project-buffers) (buffer-list))))) + (evil-ex-define-cmd "ini" 'my:init-files) (evil-define-command my:init-files (&optional bang) :repeat nil @@ -254,12 +262,6 @@ (byte-recompile-directory (concat my-dir ".cask") 0 t) (byte-recompile-directory my-dir 0 t))) - (evil-ex-define-cmd "build" 'my:build) - (evil-define-command my:build (arguments &optional bang) - :repeat t - (interactive "") - (my-build arguments)) - (evil-ex-define-cmd "cd" 'my:cd) (evil-define-command my:cd (dir) :repeat nil @@ -369,4 +371,4 @@ provided." :repeat nil (interactive "") (evil-normal-state) - (narrow-to-region-indirect beg end))))) + (my-narrow-to-region-indirect beg end))))) diff --git a/core/core-ui.el b/core/core-ui.el index b4e27dd14..52e91edb7 100644 --- a/core/core-ui.el +++ b/core/core-ui.el @@ -22,6 +22,8 @@ (blink-cursor-mode 1) ; blink cursor ;; (global-hl-line-mode 1) ; highlight line +(setq linum-format " %3d") + ;; Multiple cursors across buffers cause a strange redraw delay for ;; some things, like auto-complete or evil-mode's cursor color ;; switching. diff --git a/core/core.el b/core/core.el index 3e7c377d8..502d0939a 100644 --- a/core/core.el +++ b/core/core.el @@ -1,5 +1,3 @@ -(provide 'core) - (cd "~") ; instead of / (require 'cask) @@ -18,10 +16,10 @@ (make-directory my-tmp-dir-autosave t)) (setq load-prefer-newer t) -(setq debug-on-quit *debug-mode) +(setq debug-on-quit DEBUG-MODE) (require 'shut-up) -(setq shut-up-ignore *debug-mode) +(setq shut-up-ignore DEBUG-MODE) (when noninteractive (shut-up-silence-emacs)) ; http://youtu.be/Z6woIRLnbmE (shut-up @@ -48,7 +46,7 @@ ;;; Show tab characters ;; (global-whitespace-mode 1) - (setq whitespace-style '(face tabs tab-mark) ; needs to be re-set in every buffer + (setq whitespace-style '(trailing face tabs tab-mark) ; needs to be re-set in every buffer whitespace-display-mappings '((tab-mark ?\t [?| ?\t] [?\\ ?\t]) (newline-mark 10 [36 10]))) ; for whitespace-newline-mode @@ -147,7 +145,6 @@ (setq-default tab-width 4) (setq delete-trailing-lines nil) - (add-hook 'before-save-hook 'delete-trailing-whitespace) (add-hook 'makefile-mode-hook 'indent-tabs-mode) ; Use normal tabs in makefiles ;; Make sure scratch buffer is always "in a project" (add-hook 'find-file-hook @@ -217,7 +214,8 @@ the checking happens for all pairs in auto-minor-mode-alist" ;;;; Utility plugins ;;;;;;;;;;;;;;;;;; (require 'defuns) ; all the defuns (require 'use-package) ; Package management bootstrap - (setq use-package-verbose *debug-mode) + (setq use-package-verbose DEBUG-MODE) + ;;(require 'hide-mode-line) ;; Generate autoloads if necessary (defun my-update-autoloads (&optional forcep) @@ -225,7 +223,7 @@ the checking happens for all pairs in auto-minor-mode-alist" (setq generated-autoload-file (concat my-core-dir "autoloads.el")) (when (or forcep (not (file-exists-p generated-autoload-file))) (if forcep (delete-file generated-autoload-file)) - (update-directory-autoloads my-core-dir my-modules-dir my-personal-dir my-elisp-dir)) + (update-directory-autoloads my-core-dir my-modules-dir my-elisp-dir)) (require 'autoloads)) (my-update-autoloads) @@ -258,6 +256,7 @@ the checking happens for all pairs in auto-minor-mode-alist" (push '("*Compile-Log*" :height 0.3 :position bottom :noselect t) popwin:special-display-config) (push '(" *undo-tree*" :width 0.3 :position right) popwin:special-display-config) (push '("^\\*scratch\\*.*" :regexp t :stick t) popwin:special-display-config) + (push '(image-mode) popwin:special-display-config) (after "evil" (evil-ex-define-cmd "l[ast]" 'popwin:popup-last-buffer) @@ -279,3 +278,7 @@ the checking happens for all pairs in auto-minor-mode-alist" (require 'server) (unless (server-running-p) (server-start))) + + +(provide 'core) +;;; core.el ends here diff --git a/core/defuns-buffers.el b/core/defuns-buffers.el index 9f14e36ec..5508b4cea 100644 --- a/core/defuns-buffers.el +++ b/core/defuns-buffers.el @@ -9,6 +9,25 @@ (narrow-to-region start end)) (switch-to-buffer buf))) +;;;###autoload +(defun my--set-region-read-only (begin end) + "See http://stackoverflow.com/questions/7410125" + (let ((modified (buffer-modified-p))) + (add-text-properties begin end '(read-only t)) + (set-buffer-modified-p modified))) + +;;;###autoload +(defun my--set-region-writeable (begin end) + "See http://stackoverflow.com/questions/7410125" + (let ((modified (buffer-modified-p)) + (inhibit-read-only t)) + (remove-text-properties begin end '(read-only t)) + (set-buffer-modified-p modified))) + +;;;###autoload +(defun my-living-buffer-list (&optional buffer-list) + (-remove 'get-buffer-window (or buffer-list (buffer-list)))) + ;; Killing Buffers ;;;;;;;;;;;;;;;;;;;;; ;; Buffer defuns @@ -18,6 +37,7 @@ "^\\*Compile-Log\\*$" "^\\*Ediff.*\\*$" help-mode + image-mode dired-mode reb-mode) "A list of buffer name regexps or major-mode symbols. If buried buffers diff --git a/core/defuns-text.el b/core/defuns-text.el index 9b3afac64..72eb5c64d 100644 --- a/core/defuns-text.el +++ b/core/defuns-text.el @@ -66,7 +66,7 @@ whitespace as possible, or just one char if that's not possible." (if (string-match "\\w*\\(\\s-+\\)$" (buffer-substring-no-properties (- p movement) p)) (backward-delete-char (- (match-end 1) (match-beginning 1))) - (call-interactively 'backward-delete-char-untabify))))))) + (backward-delete-char-untabify 1))))))) ;;;###autoload (defun my.dumb-indent () diff --git a/lib/evil-ex-registers.el b/elisp/evil-ex-registers.el similarity index 100% rename from lib/evil-ex-registers.el rename to elisp/evil-ex-registers.el diff --git a/lib/evil-little-word.el b/elisp/evil-little-word.el similarity index 100% rename from lib/evil-little-word.el rename to elisp/evil-little-word.el diff --git a/lib/flycheck-objc.el b/elisp/flycheck-objc.el similarity index 100% rename from lib/flycheck-objc.el rename to elisp/flycheck-objc.el diff --git a/lib/helm-todo.el b/elisp/helm-todo.el similarity index 100% rename from lib/helm-todo.el rename to elisp/helm-todo.el diff --git a/lib/help-fns+.el b/elisp/help-fns+.el similarity index 100% rename from lib/help-fns+.el rename to elisp/help-fns+.el diff --git a/elisp/hide-mode-line.el b/elisp/hide-mode-line.el new file mode 100644 index 000000000..86b739501 --- /dev/null +++ b/elisp/hide-mode-line.el @@ -0,0 +1,252 @@ +;;; hide-mode-line.el --- Hides the mode line when there is only one frame and +;;; one buffer. +;; +;; Filename: hide-mode-line.el +;; Description: Hides the mode line when there is only one frame and one +;; buffer. +;; Author: Darren Embry +;; Copyright (c) 2008, 2011 Darren Embry +;; URL: http://webonastick.com/emacs-lisp/hide-mode-line.el +;; Keywords: mode line, writeroom +;; Compatibility: GNU Emacs 22.x, GNU Emacs 23.x +;; +;; Features that might be required by this library: +;; +;; None +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; 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 2, 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; see the file COPYING. If not, write to the Free +;; Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +;; 02110-1301, USA. +;; +;; GPL 2 is available here: +;; http://www.gnu.org/licenses/old-licenses/gpl-2.0.html +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;;; Commentary: +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Basically, automatically hides the mode-line if all of the following +;; are true: +;; - there is only one frame. +;; - there is only one window displayed in that frame. +;; - there is no minibuffer. +;; - the hide-mode-line variable is set. +;; and automatically shows the mode-line when any of the above isn't true. +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; HOW TO USE +;; +;; Just put this file in your Emacs library directory and add this line to +;; your ~/.emacs: +;; +;; (autoload 'hide-mode-line "hide-mode-line" nil t) +;; +;; and use M-x hide-mode-line to toggle. Setting the hide-mode-line variable +;; won't automatically update the buffers' mode-line visibilities. +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; MYSTERY BUG: every once in a while a few lines of text will be hidden +;; for some reason until you do a redraw-display. See if you can +;; reproduce this in a reliable fashion! +;; +;; MYSTERY BUG: not specific to this module, but... load linum, run M-x +;; linum-mode, then (setq mode-line-format nil) this triggers display +;; problems more reproducibly: sometimes the last line in the buffer +;; doesn't have the line number show up; and sometimes the cursor line +;; or the one after it doesn't have the line number show up. May be +;; related to above bug. +;; +;; CAVEAT: this code does not instruct your window system to make the +;; window full-screen. +;; +;; TODO: briefly show modeline for (example) 2 seconds when the following +;; happens: +;; - hide-mode-line is about to be activated +;; - you switch to another buffer +;; +;; TODO: Emacs 21 does not implement window-tree. +;; +;; BUG: if the hide-mode-line-window-configuration-change-hook function +;; displays a (message "moo") before it does its work, the screen is blanked +;; when you resize the window until you hit C-l. +;; +;; BUG: if a frame is closed and there is only one frame remaining, and +;; there is only one buffer in that window, mode lines are not hidden. +;; +;; SEE ALSO: +;; http://www.emacswiki.org/cgi-bin/wiki/LineNumbers +;; http://www.emacswiki.org/cgi-bin/wiki/WriteRoom +;; +;;============================================================================= + +;;; History: +;; +;; 2008-01-31 r3090 initial version +;; 2008-02-01 r3097 explicitly defint default for +;; hide-mode-line-saved-mode-line-format +;; 2008-02-01 r3100 implement hide-mode-line-unaffected-by-minibuffer +;; 2008-02-01 r3101 more robust handling of case where mode-line-format is +;; nil before this code runs +;; 2008-02-01 r3106 disable in emacs21: window-tree function not available +;; 2011-03-08 r5835 fix emacsw32 bug + +;;; Code: + +(defvar hide-mode-line-saved-mode-line-format nil) +(make-variable-buffer-local 'hide-mode-line-saved-mode-line-format) +; TODO: add a hook of some kind when setting mode-line-format. + +(defvar hide-mode-line nil) +; TODO: add a hook to run hide-mode-line-update when setting hide-mode-line. +; [or just use M-x hide-mode-line for now] + +(defcustom hide-mode-line-unaffected-by-minibuffer nil + "If non-nil, a minibuffer by itself does not un-hide the modeline." + :group 'hide-mode-line + :type 'boolean) + +(defun there-is-only-one-frame () + "Return non-nil if there is only one frame, nil otherwise." + (let ((frames (frames-on-display-list))) + (if (= (length frames) 1) + (car frames) + nil))) +(defun there-is-only-one-window-in (frame) + "Return non-nil if there is only one window in the specified FRAME." + (let ((root (car (window-tree frame)))) ;FIXME: does not work with emacs21 + (not (listp root)))) +(defun there-is-only-one-frame-and-one-window () + "Return non-nil if there is only one frame and one window." + (let ((the-only-frame (there-is-only-one-frame))) + (and the-only-frame + (or hide-mode-line-unaffected-by-minibuffer + (= (minibuffer-depth) 0)) + (there-is-only-one-window-in the-only-frame)))) + +(defun hide-mode-line-in (buffer) + "Hide the specified BUFFER's mode line. + +Saves the buffer's previous `mode-line-format' value if it's not +already hidden." + (with-current-buffer buffer + (if (and (not hide-mode-line-saved-mode-line-format) + ;; minibuffers don't have modelines :p + (not (minibufferp buffer))) + (progn (setq hide-mode-line-saved-mode-line-format + (list mode-line-format)) + (setq mode-line-format nil) + ;; bug workaround + (redraw-modeline))))) +(defun show-mode-line-in (buffer) + "If the specified BUFFER's mode line is hidden, un-hides it. + +Restores the buffer's `mode-line-format' from what was saved when +hide-mode-line-in was called." + (with-current-buffer buffer + (if (and hide-mode-line-saved-mode-line-format + ;; minibuffers don't have modelines :p + (not (minibufferp buffer))) + (progn (setq mode-line-format + (car hide-mode-line-saved-mode-line-format)) + (setq hide-mode-line-saved-mode-line-format nil))))) + +(defun hide-mode-lines () + "Hide all buffers' mode lines using hide-mode-line-in." + (mapcar 'hide-mode-line-in (buffer-list))) +(defun show-mode-lines () + "Show all buffers' mode lines using show-mode-line-in." + (mapcar 'show-mode-line-in (buffer-list)) + (if (equal window-system 'w32) + ;; bug workaround + (redraw-display))) + +(defun hide-mode-line-update () + "Update the state of all buffers' mode lines. + +This uses hide-mode-lines or show-mode-lines." + (if hide-mode-line + (if (there-is-only-one-frame-and-one-window) + (hide-mode-lines) + (show-mode-lines)) + (show-mode-lines))) + +(defun hide-mode-line-minibuffer-setup-hook () + "Internal function." + (hide-mode-line-update)) +(defun hide-mode-line-minibuffer-exit-hook () + "Internal function." + (hide-mode-line-update)) +(defun hide-mode-line-make-frame-function (new-frame) + "Internal function." + (hide-mode-line-update)) +(defun hide-mode-line-delete-frame-function (dead-frame-walking) + "Internal function." + (hide-mode-line-update)) +(defun hide-mode-line-window-configuration-change-hook () + "Internal function." + (hide-mode-line-update)) + +(defun hide-mode-line-add-hooks () + "Internal function." + (interactive) + (add-hook 'minibuffer-setup-hook + 'hide-mode-line-minibuffer-setup-hook) + (add-hook 'minibuffer-exit-hook + 'hide-mode-line-minibuffer-exit-hook) + (add-hook 'after-make-frame-functions + 'hide-mode-line-make-frame-function) + (add-hook 'delete-frame-functions + 'hide-mode-line-delete-frame-function) + (add-hook 'window-configuration-change-hook + 'hide-mode-line-window-configuration-change-hook)) + +(defun hide-mode-line-remove-hooks () + "Internal function." + (interactive) + (remove-hook 'minibuffer-setup-hook + 'hide-mode-line-minibuffer-setup-hook) + (remove-hook 'minibuffer-exit-hook + 'hide-mode-line-minibuffer-exit-hook) + (remove-hook 'after-make-frame-functions + 'hide-mode-line-make-frame-function) + (remove-hook 'delete-frame-functions + 'hide-mode-line-delete-frame-function) + (remove-hook 'window-configuration-change-hook + 'hide-mode-line-window-configuration-change-hook)) + +;;;###autoload +(defun hide-mode-line () + "Toggle the hide-mode-line functionality." + (interactive) + (if (functionp 'window-tree) + (progn + (if hide-mode-line + (hide-mode-line-remove-hooks) + (hide-mode-line-add-hooks)) + (setq hide-mode-line (not hide-mode-line)) + (hide-mode-line-update)) + (error (concat "Your Emacs does not provide the window-tree function. " + "Please upgrade to GNU Emacs 22 " + "or to some other version of Emacs that provides it.")))) + +(provide 'hide-mode-line) + +;;; hide-mode-line.el ends here + diff --git a/lib/hl-todo.el b/elisp/hl-todo.el similarity index 100% rename from lib/hl-todo.el rename to elisp/hl-todo.el diff --git a/lib/rotate-text.el b/elisp/rotate-text.el similarity index 100% rename from lib/rotate-text.el rename to elisp/rotate-text.el diff --git a/lib/ruby-mode-indent-fix.el b/elisp/ruby-mode-indent-fix.el similarity index 100% rename from lib/ruby-mode-indent-fix.el rename to elisp/ruby-mode-indent-fix.el diff --git a/lib/shaderlab-mode.el b/elisp/shaderlab-mode.el similarity index 100% rename from lib/shaderlab-mode.el rename to elisp/shaderlab-mode.el diff --git a/init.el b/init.el index 8e02923eb..0a2965586 100644 --- a/init.el +++ b/init.el @@ -17,13 +17,12 @@ ;; ;;; Code: -(defconst *debug-mode nil) +(defconst DEBUG-MODE nil) (defconst my-dir user-emacs-directory) (defconst my-core-dir (concat my-dir "core/")) -(defconst my-modules-dir (concat my-dir "modules/")) -(defconst my-personal-dir (concat my-dir "my/")) -(defconst my-elisp-dir (concat my-dir "lib/")) +(defconst my-modules-dir (concat my-dir "init/")) +(defconst my-elisp-dir (concat my-dir "elisp/")) (defconst my-themes-dir (concat my-dir "themes/")) (defconst my-snippets-dir (concat my-dir "snippets/")) (defconst my-tmp-dir (concat my-dir ".cache/")) @@ -34,12 +33,11 @@ (defconst *default-font "Ubuntu Mono") (defconst *default-font-size (if (eq system-name "ganymede.local") 12 14)) -(defconst *presentation-font *default-font) -(defconst *presentation-font-size 18) +(defconst *presentation-font "Panic Sans") +(defconst *presentation-font-size 22) (add-to-list 'load-path my-core-dir) (add-to-list 'load-path my-modules-dir) -(add-to-list 'load-path my-personal-dir) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Just the... bear necessities... @@ -51,6 +49,7 @@ init-auto-insert ; for the lazy typis init-company ; see above init-cc ; C/C++/Obj-C madness + ;; init-d ; D - It's C, but better! ;; init-cscope ;; init-csharp init-dev ; general dev tools/settings @@ -77,6 +76,7 @@ init-swift ; ever wanted to name a variable an emoticon? init-text ; I got nothing... init-tmux + ;; init-rust init-web init-yasnippet ; type for me diff --git a/modules/init-auto-complete.el b/init/init-auto-complete.el similarity index 100% rename from modules/init-auto-complete.el rename to init/init-auto-complete.el diff --git a/modules/init-auto-insert.el b/init/init-auto-insert.el similarity index 99% rename from modules/init-auto-insert.el rename to init/init-auto-insert.el index 742608a35..5dd9f92af 100644 --- a/modules/init-auto-insert.el +++ b/init/init-auto-insert.el @@ -34,7 +34,7 @@ ;; ;; ;; Ruby (template "/spec_helper\\.rb$" "%helper%" 'rspec-mode t) (template "_spec\\.rb$" "%%" 'rspec-mode t) - (template "/\\.rspec$" "%.rspec%" 'rspec-mode t) + (template "/\\.rspec$" "%.rspec%" 'rspec-mode) (template "/Rakefile$" "%Rakefile%" 'ruby-mode t) (template "/Gemfile$" "%Gemfile%" 'ruby-mode t) ;; (template "\\.gemspec$" "%.gemspec%" 'ruby-mode t) diff --git a/modules/init-cc.el b/init/init-cc.el similarity index 100% rename from modules/init-cc.el rename to init/init-cc.el diff --git a/modules/init-company.el b/init/init-company.el similarity index 100% rename from modules/init-company.el rename to init/init-company.el diff --git a/modules/init-cscope.el b/init/init-cscope.el similarity index 100% rename from modules/init-cscope.el rename to init/init-cscope.el diff --git a/modules/init-csharp.el b/init/init-csharp.el similarity index 100% rename from modules/init-csharp.el rename to init/init-csharp.el diff --git a/init/init-d.el b/init/init-d.el new file mode 100644 index 000000000..e29504320 --- /dev/null +++ b/init/init-d.el @@ -0,0 +1,6 @@ +(use-package d-mode + :disabled t + :modes "\\.d$") + +(provide 'init-d) +;;; init-d.el ends here diff --git a/modules/init-dev.el b/init/init-dev.el similarity index 84% rename from modules/init-dev.el rename to init/init-dev.el index 26d504814..be908b6ea 100644 --- a/modules/init-dev.el +++ b/init/init-dev.el @@ -14,8 +14,7 @@ (progn (add-hook 'emacs-lisp-mode-hook 'rainbow-delimiters-mode) (add-hook 'js2-mode-hook 'rainbow-delimiters-mode) - (add-hook 'scss-mode-hook 'rainbow-delimiters-mode) - (add-hook 'ruby-mode-hook 'rainbow-delimiters-mode))) + (add-hook 'scss-mode-hook 'rainbow-delimiters-mode))) ;;; Config modes (use-package yaml-mode @@ -33,10 +32,14 @@ (after "evil" (evil-ex-define-cmd "ref[actor]" 'emr-show-refactor-menu)))) ;; todo's -(use-package hl-todo :init (add-hook 'find-file-hook 'hl-todo-mode)) +(use-package hl-todo + :init (add-hook! 'after-init-hook (add-hook 'find-file-hook 'hl-todo-mode))) (use-package helm-todo :commands my:helm-todo-search) (evil-ex-define-cmd "todo" 'my:helm-todo) +;; (require 'evil-snipe) +;; (global-evil-snipe-mode 1) + (provide 'init-dev) ;;; init-dev.el ends here diff --git a/modules/init-elisp.el b/init/init-elisp.el similarity index 100% rename from modules/init-elisp.el rename to init/init-elisp.el diff --git a/modules/init-eshell.el b/init/init-eshell.el similarity index 100% rename from modules/init-eshell.el rename to init/init-eshell.el diff --git a/modules/init-floobits.el b/init/init-floobits.el similarity index 100% rename from modules/init-floobits.el rename to init/init-floobits.el diff --git a/modules/init-fly.el b/init/init-fly.el similarity index 100% rename from modules/init-fly.el rename to init/init-fly.el diff --git a/modules/init-git.el b/init/init-git.el similarity index 100% rename from modules/init-git.el rename to init/init-git.el diff --git a/modules/init-go.el b/init/init-go.el similarity index 100% rename from modules/init-go.el rename to init/init-go.el diff --git a/modules/init-helm.el b/init/init-helm.el similarity index 87% rename from modules/init-helm.el rename to init/init-helm.el index 65e83c070..aea54dce3 100644 --- a/modules/init-helm.el +++ b/init/init-helm.el @@ -17,35 +17,38 @@ (evil-ex-define-cmd "a" 'helm-projectile-find-other-file) (evil-ex-define-cmd "proj[ect]" 'helm-projectile-switch-project) (evil-ex-define-cmd "ag" 'my:helm-ag-search) + (evil-ex-define-cmd "agr" 'my:helm-ag-regex-search) (evil-ex-define-cmd "ag[cw]d" 'my:helm-ag-search-cwd) + (evil-ex-define-cmd "agr[cw]d" 'my:helm-ag-regex-search-cwd) (evil-ex-define-cmd "sw[oop]" 'my:helm-swoop) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (use-package helm-ag - :commands (my:helm-ag-search my:helm-ag-search-cwd helm-ag helm-do-ag my:helm-ag-search) + :commands (my:helm-ag-search + my:helm-ag-search-cwd + my:helm-ag-regex-search + my:helm-ag-regex-search-cwd + helm-ag helm-do-ag) :config (progn ;; Ex-mode interface for `helm-ag'. If `bang', then `search' is interpreted as ;; regexp. - (evil-define-operator my:helm-ag-search (beg end &optional bang search pwd-p) - :motion nil - :move-point nil + (evil-define-operator my:helm-ag-search (beg end &optional search hidden-files-p pwd-p regex-p) :type inclusive :repeat nil - (interactive "") + (interactive "") (let* ((helm-ag-default-directory (my--project-root pwd-p)) - (header-name (format "Search in %s" helm-ag-default-directory)) + (helm-ag-command-option (concat (unless regex-p "-Q ") + (if hidden-files-p "--hidden "))) (input "") - (helm-ag--last-input "")) + (header-name (format "Search in %s" helm-ag-default-directory))) (if search (progn (helm-attrset 'search-this-file nil helm-ag-source) - (setq helm-ag--last-query - (concat "ag " (unless bang "-Q") " --nogroup --nocolor -- " - (shell-quote-argument search)))) + (setq helm-ag--last-query search)) (helm-ag-save-current-context) - (if (and beg end) + (if (and beg end (/= beg (1- end))) (setq input (buffer-substring-no-properties beg end)))) (helm-attrset 'name header-name helm-ag-source) (helm :sources (if search (helm-ag--select-source) '(helm-source-do-ag)) @@ -53,15 +56,25 @@ :input input :prompt helm-global-prompt))) - ;; Ex-mode interface for `helm-do-ag'. If `bang', then `search' is interpreted - ;; as regexp - (evil-define-operator my:helm-ag-search-cwd (beg end &optional bang search) - :motion nil - :move-point nil + (evil-define-operator my:helm-ag-regex-search (beg end &optional bang search) :type inclusive :repeat nil (interactive "") - (my:helm-ag-search beg end search bang t)))) + (my:helm-ag-search beg end search bang nil t)) + + ;; Ex-mode interface for `helm-do-ag'. If `bang', then `search' is interpreted + ;; as regexp + (evil-define-operator my:helm-ag-search-cwd (beg end &optional search bang) + :type inclusive + :repeat nil + (interactive "") + (my:helm-ag-search beg end search bang t nil)))) + + (evil-define-operator my:helm-ag-regex-search-cwd (beg end &optional search bang) + :type inclusive + :repeat nil + (interactive "") + (my:helm-ag-search beg end search bang t t)))) (use-package helm-css-scss ; https://github.com/ShingoFukuyama/helm-css-scss :commands (helm-css-scss diff --git a/modules/init-ido.el b/init/init-ido.el similarity index 100% rename from modules/init-ido.el rename to init/init-ido.el diff --git a/modules/init-java.el b/init/init-java.el similarity index 94% rename from modules/init-java.el rename to init/init-java.el index 5a8338ec8..28ad4090f 100644 --- a/modules/init-java.el +++ b/init/init-java.el @@ -1,5 +1,3 @@ -(provide 'init-java) - (use-package eclim :commands (eclim-mode global-eclim-mode) :init @@ -37,7 +35,9 @@ :mode "\\.gradle$" :config (after "auto-complete" (add-to-list 'ac-modes 'groovy-mode))) -(use-package java-mode - :config - (sp-with-modes '(java-mode) - (sp-local-pair "/**" "*/" :post-handlers '(("* ||\n[i]" "RET"))))) +(sp-with-modes '(java-mode) + (sp-local-pair "/**" "*/" :post-handlers '(("* ||\n[i]" "RET")))) + + +(provide 'init-java) +;;; init-java.el ends here diff --git a/modules/init-js.el b/init/init-js.el similarity index 100% rename from modules/init-js.el rename to init/init-js.el diff --git a/modules/init-lua.el b/init/init-lua.el similarity index 100% rename from modules/init-lua.el rename to init/init-lua.el diff --git a/init/init-org.el b/init/init-org.el new file mode 100644 index 000000000..c207b7549 --- /dev/null +++ b/init/init-org.el @@ -0,0 +1,295 @@ +(use-package org + :mode (("\\.org$" . org-mode) + ("\\.opml$" . org-mode)) + :init + (progn + (add-hook 'org-mode-hook 'enable-tab-width-2) + (add-hook 'org-mode-hook 'evil-org-mode) + (add-hook 'org-mode-hook 'turn-on-auto-fill) + + ;; Reset evil to ensure evil-org-mode's maps work + (add-hook! 'org-mode-hook (evil-mode nil) (evil-mode 1)) + + (setq org-directory "~/Dropbox/notes" + org-default-notes-file "~/Dropbox/notes/notes.org" + org-mobile-inbox-for-pull "~/Dropbox/notes/notes.org" + org-mobile-directory "~/Dropbox/Apps/MobileOrg" + org-agenda-files '("~/Dropbox/notes" + "~/Dropbox/notes/projects" + "~/Dropbox/notes/projects/dev" + "~/Dropbox/notes/projects/gamedev" + "~/Dropbox/notes/projects/webdev") + org-archive-location "~/Dropbox/notes/archive/%s.org::" + org-confirm-babel-evaluate nil + org-src-tab-acts-natively t) + + (setq org-completion-use-ido t + org-hidden-keywords '(title) + org-special-ctrl-a/e t + org-hide-leading-stars t + org-hierarchical-todo-statistics t + org-checkbox-hierarchical-statistics t + org-log-done t + org-todo-keywords + '((sequence "TODO(t)" "NEXT(n)" "|" "DONE(d)") + (sequence "DOING(s)" "PENDING(p)") + (sequence "|" "CANCELLED(c)"))) + + (setq org-src-fontify-natively t) + (setq org-blank-before-new-entry '((heading . auto) (plain-list-item . auto))) + (setq org-export-backends '(ascii html latex md opml)) + + (setq org-tag-alist '(("@home" . ?h) + ("@daily" . ?d) + ("@invoices" . ?i) + ("@personal" . ?p) + ("@learning" . ?l) + ("@dev" . ?v) + ("@writing" . ?w) + ("@projects" . ?r))) + + (setq org-capture-templates + '(("t" "TODO" entry (file+headline "~/Dropbox/notes/todo.org" "Inbox") "* TODO %? %u\n%i") + ("T" "TODO Someday" entry (file+headline "~/Dropbox/notes/todo.org" "Someday") "* TODO %? %u :someday:\n%i") + ("c" "Changelog" entry (file+headline (concat (projectile-project-root) "/CHANGELOG.org") "Unsorted") "** %u %? :unsorted:\n%i" :prepend t) + ("n" "Note" entry (file org-default-notes-file) "** %T %?\n%i" :prepend t) + ("j" "Journal" entry (file+datetree "~/Dropbox/notes/journal.org") "** %?%^g\nAdded: %U\n%i") + ("a" "Trivia" entry (file "~/Dropbox/notes/trivia.org") "* %u %?\n%i" :prepend t) + ("s" "Writing Scraps" entry (file "~/Dropbox/notes/writing.org") "* %u %?\n%i" :prepend t) + ("v" "Vocab" entry (file "~/Dropbox/notes/vocab.org") "* %?\n%i" :prepend t) + ("e" "Excerpt" entry (file "~/Dropbox/notes/excerpts.org") "* %u %?\n%i" :prepend t))) + + (setq org-agenda-custom-commands + '(("x" agenda) + ("y" agenda*) + ("w" todo "WAITING") + ("W" todo-tree "WAITING") + ("to" todo) + ("tp" tags "+Projects") + ("tg" tags-todo "+gamedev") + ("tw" tags-tree "+webdev")))) + :config + (progn + (message "Org-mode loaded") + + (push '("\\*Org.+\\*" :regexp t :width 0.3 :position bottom) popwin:special-display-config) + + (org-babel-do-load-languages 'org-babel-load-languages + '((python . t) + (ruby . t) + (sh . t) + (emacs-lisp . t) + (matlab . t) + (latex . t))) + + ;; Remove occur highlights on ESC in normal mode + (defadvice evil-force-normal-state (before evil-esc-org-remove-highlights activate) + (org-remove-occur-highlights)) + + ;; Auto update cookies + (defun my--org-mode-update-cookies () + (when (eq major-mode 'org-mode) (org-update-parent-todo-statistics) (org-update-statistics-cookies nil))) + (add-hook 'evil-normal-state-entry-hook 'my--org-mode-update-cookies) + + (define-minor-mode evil-org-mode + :init-value nil + :lighter " EvilOrg" + :keymap (make-sparse-keymap) ; defines evil-org-mode-map + :group 'evil-org) + + ;; (use-package org-present + ;; :config + ;; (progn + ;; (defun my--org-present-mode-on () + ;; (org-present-big) + ;; (org-display-inline-images) + ;; (org-present-hide-cursor) + ;; (org-present-read-only)) + + ;; (defun my--org-present-mode-off () + ;; (org-present-small) + ;; (org-remove-inline-images) + ;; (org-present-show-cursor) + ;; (org-present-read-write)) + + ;; (add-hook 'org-present-mode-hook 'my--org-present-mode-on) + ;; (add-hook 'org-present-mode-quit-hook 'my--org-present-mode-off))) + + (progn ; opml support + (defun set-buffer-file-format-to-opml () + (when (string-match "\.opml$" (buffer-file-name)) + (setq buffer-file-format '(opml)))) + + (defun my--opml-encode (begin end buffer) + "Export Org mode buffer to OPML." + (let ((org-export-show-temporary-export-buffer nil) + (name "*OPML Export Buffer*")) + (org-export-to-buffer 'opml name) + (erase-buffer) + (insert-buffer-substring (get-buffer name)) + (point-max))) + + (add-hook 'find-file-hooks 'set-buffer-file-format-to-opml) + (add-to-list 'format-alist '(opml "Outline Processor Markup Language" + "<[?]xml version=\"1.0\"[^>]*[?]>[\n]?.*[\n]?.*[\n]?" + "~/.emacs.d/elisp/org-opml/opml2org.py" my--opml-encode t)) + (shut-up (load-library "ox-opml"))) + + (progn ; key bindings + (defun my--org-in-list-p () + (and (save-excursion (search-backward-regexp "^ *\\([0-9]+[\.)]\\|[-*+]\\) " (line-beginning-position) t)) + (org-in-item-p))) + (defun my--org-insert-item-after () + "Inserts a new heading or item, depending on the context." + (interactive) + (org-end-of-line) + (cond ((org-at-item-checkbox-p) + (org-insert-heading) + (insert "[ ] ")) + ((my--org-in-list-p) + (org-insert-heading)) + ((org-on-heading-p) + (org-insert-heading-after-current)) + (t + (org-insert-heading-after-current) + (delete-char 1))) + (evil-insert-state)) + + ;; TODO Check if this and -forward can be combined + (defun my--org-insert-item-before () + "Inserts a new heading or item, depending on the context." + (interactive) + (evil-first-non-blank) + (cond ((org-at-item-checkbox-p) + (org-insert-heading) + (insert "[ ] ")) + ((my--org-in-list-p) + (org-insert-heading)) + (t (org-insert-heading))) + (evil-insert-state)) + + (defun my--toggle-checkbox () + (interactive) + (save-excursion + (org-end-of-line) + (cond ((org-in-item-p) + (if (search-backward-regexp "\\[[ +-]\\]" (line-beginning-position) t) + (delete-char 4) + (org-beginning-of-line))) + (t (org-insert-heading))) + (insert "[ ] "))) + + (bind 'insert org-mode-map [remap my.inflate-space-maybe] 'self-insert-command) + + (bind org-mode-map + "RET" nil + "C-j" nil + "C-k" nil) + + (bind '(normal insert) evil-org-mode-map + "M-l" 'org-metaright + "M-h" 'org-metaleft + "M-k" 'org-metaup + "M-j" 'org-metadown + "M-L" 'org-shiftmetaright + "M-H" 'org-shiftmetaleft + "M-K" 'org-shiftmetaup + "M-J" 'org-shiftmetadown) + + (bind 'insert evil-org-mode-map + "C-e" 'org-end-of-line + "C-a" 'org-beginning-of-line) + (bind '(insert normal) + "" 'org-beginning-of-line + "" 'org-end-of-line + "" 'org-up-element + "" 'org-down-element) + + ;; Formatting shortcuts + (defun my/org-surround (delim) + (insert delim) (save-excursion (insert delim))) + + (bind 'insert evil-org-mode-map + ;; Add new header line before this line + (kbd "") 'my--org-insert-item-before + ;; Add new header line after this line + (kbd "") 'my--org-insert-item-after + + (kbd "s-b") (λ (my/org-surround "*")) ; bold + (kbd "s-u") (λ (my/org-surround "_")) ; underline + (kbd "s-i") (λ (my/org-surround "/")) ; italics + (kbd "s-`") (λ (my/org-surround "+"))) ; strikethrough + (bind 'visual evil-org-mode-map + (kbd "s-b") "s*" + (kbd "s-u") "s_" + (kbd "s-i") "s/" + (kbd "s-`") "s+") + + (bind '(normal visual) evil-org-mode-map + ", l" 'org-insert-link) + + (bind 'normal evil-org-mode-map + ", +" 'org-align-all-tags + ", /" 'org-sparse-tree + ", ?" 'org-tags-view + ", a" 'org-attach + ", D" 'org-time-stamp-inactive + ", T" 'org-show-todo-tree + ", d" 'org-time-stamp + ", r" 'org-refile + ", s" 'org-schedule + ", t" 'org-todo + "g r" 'org-babel-execute-src-block-maybe + "g h" 'outline-up-heading + "g j" 'org-forward-heading-same-level + "g k" 'org-backward-heading-same-level + "g l" 'outline-next-visible-heading + "g o" 'org-open-at-point + "g O" 'org-attach-open + "g C-o" 'org-attach-reveal + "g i" (λ (if (> (length org-inline-image-overlays) 0) + (org-remove-inline-images) + (org-display-inline-images nil t (line-beginning-position) (line-end-position)))) + "g a" 'org-agenda + "g t" 'org-show-todo-tree + "$" 'org-end-of-line + "^" 'org-beginning-of-line + "<" 'org-metaleft + ">" 'org-metaright + "-" 'org-cycle-list-bullet + ", SPC" 'my--toggle-checkbox + ", " 'org-archive-subtree + "" 'my--org-insert-item-before + "" 'my--org-insert-item-after + "RET" (λ (cond ((org-at-item-checkbox-p) + (org-toggle-checkbox)) + ((org-entry-is-todo-p) + (org-todo 'done)))) + [tab] 'org-cycle)) + + (evil-ex-define-cmd "o[rg]edit" 'org-edit-special) + (evil-ex-define-cmd "o[rg]refile" 'org-refile) + (evil-ex-define-cmd "o[rg]archive" 'org-archive-subtree) + (evil-ex-define-cmd "o[rg]agenda" 'org-agenda) + (evil-ex-define-cmd "o[rg]attach" 'my:org-attach) + (evil-ex-define-cmd "o[rg]todo" 'org-show-todo-tree) + (evil-ex-define-cmd "o[rg]link" 'org-link) + (evil-ex-define-cmd "o[rg]align" 'org-align-all-tags) + (evil-define-command my:org-attach (&optional filename bang) + :repeat nil + (interactive "") + (if bang + (org-attach) + (unless filename + (user-error "You must specify a file to attach")) + (unless (file-exists-p filename) + (user-error "File %s does not exist" filename)) + (let ((dest (f-join org-directory "data/" (concat (format-time-string "%Y%m%d-") (f-filename filename))))) + (when (f-exists? dest) + (user-error "File %s already exists at destination!")) + (copy-file filename dest) + (insert (format "[[file:%s]]" (f-relative dest (f-dirname (buffer-file-name)))))))))) + + +(provide 'init-org) +;;; init-org.el ends here diff --git a/modules/init-php.el b/init/init-php.el similarity index 100% rename from modules/init-php.el rename to init/init-php.el diff --git a/modules/init-project.el b/init/init-project.el similarity index 100% rename from modules/init-project.el rename to init/init-project.el diff --git a/modules/init-projectile.el b/init/init-projectile.el similarity index 100% rename from modules/init-projectile.el rename to init/init-projectile.el diff --git a/modules/init-python.el b/init/init-python.el similarity index 100% rename from modules/init-python.el rename to init/init-python.el diff --git a/modules/init-regex.el b/init/init-regex.el similarity index 100% rename from modules/init-regex.el rename to init/init-regex.el diff --git a/modules/init-ruby.el b/init/init-ruby.el similarity index 60% rename from modules/init-ruby.el rename to init/init-ruby.el index ed6512243..4964b18eb 100644 --- a/modules/init-ruby.el +++ b/init/init-ruby.el @@ -1,15 +1,15 @@ (provide 'init-ruby) -(use-package ruby-mode - :mode (("\\.rb$" . ruby-mode) - ("\\.ru$" . ruby-mode) - ("\\.rake$" . ruby-mode) - ("\\.gemspec$" . ruby-mode) - ("\\.?pryrc$" . ruby-mode) - ("Gemfile$" . ruby-mode) - ("Capfile$" . ruby-mode) - ("Vagrantfile$" . ruby-mode) - ("Rakefile$" . ruby-mode)) +(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)) :interpreter "ruby" :init (progn @@ -19,38 +19,40 @@ (associate-mode "/\\.rspec$" 'text-mode)) :config (progn + (message "Ruby loaded!") ;;; Formatting (setq ruby-indent-level 2) (setq ruby-deep-indent-paren t) + (setq enh-ruby-check-syntax nil) - (add-hook 'ruby-mode-hook 'enable-tab-width-2) + (add-hook 'enh-ruby-mode-hook 'enable-tab-width-2) - (define-key ruby-mode-map [?\n] nil) + (define-key enh-ruby-mode-map [?\n] nil) (after "emr" (use-package ruby-refactor) (emr-declare-command 'ruby-refactor-extract-to-method :title "extract method" - :modes 'ruby-mode + :modes 'enh-ruby-mode :predicate (lambda () (use-region-p))) (emr-declare-command 'ruby-refactor-extract-local-variable :title "extract local variable" - :modes 'ruby-mode + :modes 'enh-ruby-mode :predicate (lambda () (use-region-p))) (emr-declare-command 'ruby-refactor-extract-constant :title "extract constant" - :modes 'ruby-mode + :modes 'enh-ruby-mode :predicate (lambda () (use-region-p))) (emr-declare-command 'ruby-refactor-add-parameter :title "add parameter" - :modes 'ruby-mode) + :modes 'enh-ruby-mode) (emr-declare-command 'ruby-refactor-extract-to-let :title "extract to let" - :modes 'ruby-mode + :modes 'enh-ruby-mode :predicate (lambda () (use-region-p)))) (define-minor-mode rake-mode @@ -61,12 +63,12 @@ :commands (inf-ruby inf-ruby-console-auto) :config (progn - (evil-set-initial-state 'inf-ruby-mode 'insert) - (push '(inf-ruby-mode :position bottom :stick t) popwin:special-display-config) + (evil-set-initial-state 'inf-enh-ruby-mode 'insert) + (push '(inf-enh-ruby-mode :position bottom :stick t) popwin:special-display-config) (after "company" (use-package company-inf-ruby - :config (company--backend-on 'inf-ruby-mode-hook 'company-inf-ruby))))) + :config (company--backend-on 'inf-enh-ruby-mode-hook 'company-inf-ruby))))) (use-package rspec-mode :defer t @@ -92,18 +94,20 @@ (progn (after "company" (use-package company-robe - :config (company--backend-on 'ruby-mode-hook 'company-robe))) + :config (company--backend-on 'enh-ruby-mode-hook 'company-robe))) - (add-hook! 'ruby-mode-hook - (robe-mode 1) - ;; (after "auto-complete" (ac-robe-setup)) - (unless robe-running (robe-start 1)) - (my--ruby-load-file buffer-file-name)) + (add-hook! 'enh-ruby-mode-hook + (unless (f-ext? (buffer-file-name) "org") ;; in case of org-mode + (robe-mode 1) + ;; (after "auto-complete" (ac-robe-setup)) + (my--ruby-load-file buffer-file-name))) (defun my--ruby-load-file (&optional file) (let ((file (or file buffer-file-name))) - (when (and (eq major-mode 'ruby-mode) - (bound-and-true-p robe-running) + (when (and (eq major-mode 'enh-ruby-mode) + (featurep 'robe) + (not (string= (f-base file) "Gemfile")) (file-exists-p buffer-file-name)) - (ruby-load-file file)))) + (unless robe-running (robe-start 1)) + (when robe-running (ruby-load-file file))))) (add-hook 'after-save-hook 'my--ruby-load-file))))) diff --git a/init/init-rust.el b/init/init-rust.el new file mode 100644 index 000000000..a1827ae2c --- /dev/null +++ b/init/init-rust.el @@ -0,0 +1,12 @@ +(use-package rust-mode + :modes "\\.rs$" + :config + (after "company" + (let ((racer-dir (concat my-elisp-dir "racer/"))) + (setq racer-rust-src-path (concat racer-dir "src")) + (setq racer-cmd (concat racer-dir "bin/racer")) + (add-to-list 'load-path (concat racer-dir "editors/")) + (require 'racer)))) + +(provide 'init-rust) +;;; init-rust.el ends here diff --git a/modules/init-scss.el b/init/init-scss.el similarity index 100% rename from modules/init-scss.el rename to init/init-scss.el diff --git a/modules/init-sh.el b/init/init-sh.el similarity index 100% rename from modules/init-sh.el rename to init/init-sh.el diff --git a/modules/init-swift.el b/init/init-swift.el similarity index 100% rename from modules/init-swift.el rename to init/init-swift.el diff --git a/modules/init-text.el b/init/init-text.el similarity index 56% rename from modules/init-text.el rename to init/init-text.el index fcbbdb728..ac5553f1f 100644 --- a/modules/init-text.el +++ b/init/init-text.el @@ -24,26 +24,29 @@ (markdown-unwrap-thing-at-point nil 2 4) (markdown-wrap-or-insert delim delim 'word nil nil)))))) :config - (let ((map markdown-mode-map)) - (bind '(normal visual) map - ",i" 'markdown-insert-image - ",l" 'markdown-insert-link - ",L" 'markdown-insert-reference-link-dwim - ",b" 'markdown-preview) + (progn + (sp-local-pair 'markdown-mode "*" "*" :unless '(sp-point-after-bol-p sp-point-before-same-p sp-point-after-same-p)) - (bind 'normal map - "[p" 'markdown-promote - "]p" 'markdown-demote) + (let ((map markdown-mode-map)) + (bind '(normal visual) map + ",i" 'markdown-insert-image + ",l" 'markdown-insert-link + ",L" 'markdown-insert-reference-link-dwim + ",b" 'markdown-preview) - (bind 'insert map - (kbd "M--") 'markdown-insert-hr) + (bind 'normal map + "[p" 'markdown-promote + "]p" 'markdown-demote) - (bind map - (kbd "") nil - (kbd "") nil - (kbd "") nil + (bind 'insert map + (kbd "M--") 'markdown-insert-hr) - (kbd "s-*") 'markdown-insert-list-item - (kbd "s-b") 'markdown-insert-bold - (kbd "s-i") 'markdown-insert-italic - (kbd "s-`") 'markdown-insert-del))) + (bind map + (kbd "") nil + (kbd "") nil + (kbd "") nil + + (kbd "s-*") 'markdown-insert-list-item + (kbd "s-b") 'markdown-insert-bold + (kbd "s-i") 'markdown-insert-italic + (kbd "s-`") 'markdown-insert-del)))) diff --git a/modules/init-tmux.el b/init/init-tmux.el similarity index 100% rename from modules/init-tmux.el rename to init/init-tmux.el diff --git a/modules/init-web.el b/init/init-web.el similarity index 100% rename from modules/init-web.el rename to init/init-web.el diff --git a/modules/init-yasnippet.el b/init/init-yasnippet.el similarity index 100% rename from modules/init-yasnippet.el rename to init/init-yasnippet.el diff --git a/my/my-bindings.el b/init/my-bindings.el similarity index 100% rename from my/my-bindings.el rename to init/my-bindings.el index 155feb9cc..124656eab 100644 --- a/my/my-bindings.el +++ b/init/my-bindings.el @@ -56,22 +56,22 @@ "[ \\" 'er/contract-region) (bind 'normal my-mode-map + ", ," 'helm-projectile-switch-to-buffer + ", ." 'helm-resume + ", /" 'helm-projectile-find-file + ", ;" 'helm-semantic-or-imenu + ", <" 'helm-mini + ", E" 'my:init-files + ", M" 'helm-projectile-recentf ; recent PROJECT files + ", ]" 'helm-etags-select ", a" 'helm-projectile-find-other-file ", e" 'ido-find-file - ", E" 'my:init-files ", f" 'helm-projectile-find-file-dwim ", g" 'git-gutter+-show-hunk ", h" 'helm-apropos ", m" 'helm-recentf - ", M" 'helm-projectile-recentf ; recent PROJECT files ", p" 'helm-projectile-switch-project ", y" 'helm-show-kill-ring - ", ;" 'helm-semantic-or-imenu - ", ," 'helm-projectile-switch-to-buffer - ", <" 'helm-mini - ", ]" 'helm-etags-select - ", /" 'helm-projectile-find-file - ", ." 'helm-resume ;; behave like D and C; yank to end of line "Y" (λ (evil-yank (point) (point-at-eol))) diff --git a/my/my-settings.el b/init/my-settings.el similarity index 97% rename from my/my-settings.el rename to init/my-settings.el index 2f2589d89..13a609aea 100644 --- a/my/my-settings.el +++ b/init/my-settings.el @@ -23,9 +23,11 @@ (set-register ?. "~/.dotfiles/") (set-register ?d "~/Dropbox/Projects/") (set-register ?@ "~/.emacs.d/init.el") -(set-register ?% "~/.emacs.d/init.el") (add-hook 'help-mode-hook 'visual-line-mode) +(add-hook! 'before-save-hook + (unless (eq major-mode 'org-mode) + (delete-trailing-whitespace))) ;; Performance checks (add-hook! 'find-file-hook diff --git a/modules/init-org.el b/modules/init-org.el deleted file mode 100644 index 239bf2b5f..000000000 --- a/modules/init-org.el +++ /dev/null @@ -1,195 +0,0 @@ -(provide 'init-org) - -;; Defuns -(defun my/org-insert-list-item () - "Force insertion of org item" - (interactive) - (if (not (org-in-item-p)) - (insert "\n- ") - (org-insert-item))) - -(defun my/org-eol-call (fun) - "Go to end of line and call provided function" - (end-of-line) - (funcall fun) - (evil-append nil)) - -(defun my/org-surround (delim) - (insert delim) (save-excursion (insert delim))) - -(defun set-buffer-file-format-to-opml () - (when (string-match "\.opml$" (buffer-file-name)) - (setq buffer-file-format '(opml)))) - -(defun opml-encode (begin end buffer) - "Export Org mode buffer to OPML." - (let ((org-export-show-temporary-export-buffer nil) - (name "*OPML Export Buffer*")) - (org-export-to-buffer 'opml name) - (erase-buffer) - (insert-buffer-substring (get-buffer name)) - (point-max))) - -;; -(require 'org) - -(define-minor-mode evil-org-mode - "Buffer local minor mode for evil-org" - :init-value nil - :lighter " EvilOrg" - :keymap (make-sparse-keymap) ; defines evil-org-mode-map - :group 'evil-org) - -(add-hook 'org-mode-hook 'evil-org-mode) -(add-hook 'org-mode-hook 'turn-on-auto-fill) - -;; Reset evil to ensure evil-org-mode's maps work -(add-hook! 'org-mode-hook (evil-mode nil) (evil-mode 1)) - -(shut-up (load-library "ox-opml")) - -;; Remove occur highlights on ESC in normal mode -(defadvice evil-force-normal-state (before evil-esc-org-remove-highlights activate) - (org-remove-occur-highlights)) - -(setq org-export-backends '(ascii html latex md opml)) -(add-hook 'find-file-hooks 'set-buffer-file-format-to-opml) -(add-to-list 'auto-mode-alist '("\\.opml$" . org-mode)) -(add-to-list 'format-alist '(opml "Outline Processor Markup Language" - "<[?]xml version=\"1.0\"[^>]*[?]>[\n]?.*[\n]?.*[\n]?" - "~/.emacs.d/elisp/org-opml/opml2org.py" opml-encode t)) - -(setq org-directory "~/Dropbox/notes" - org-default-notes-file "~/Dropbox/notes/notes.org" - org-mobile-inbox-for-pull "~/Dropbox/notes/notes.org" - org-mobile-directory "~/Dropbox/Apps/MobileOrg" - org-agenda-files '("~/Dropbox/notes") - org-src-tab-acts-natively t) - -(setq org-completion-use-ido t - org-hide-leading-stars t - org-todo-keywords - '((sequence "TODO(t)" "|" "DONE(d)") - (sequence "DOING(s)" "PENDING(p)") - (sequence "|" "CANCELLED(c)"))) - -(org-babel-do-load-languages 'org-babel-load-languages - '((python . t) - (ruby . t) - (sh . t) - (matlab . t) - (latex . t))) - -(setq org-tag-alist '(("@work" . ?b) - ("@home" . ?h) - ("@writing" . ?w) - ("@errands" . ?e) - ("@drawing" . ?d) - ("@coding" . ?c) - ("@phone" . ?p) - ("@reading" . ?r) - ("projects" . ?q) - ("easy" . ?0) - ("hard" . ?1))) - -(setq org-capture-templates - '(("t" "TODO" entry (file+headline "~/Dropbox/notes/gtd.org" "Inbox") "* TODO %? %u\n%i") - ("T" "TODO Someday" entry (file+headline "~/Dropbox/notes/gtd.org" "Someday") "* TODO %? %u :someday:\n%i") - ("c" "Changelog" entry (file+headline (concat (projectile-project-root) "/CHANGELOG.org") "Unsorted") "** %u %? :unsorted:\n%i" :prepend t) - ("i" "Invoice" entry (file+headline "~/Dropbox/notes/invoices.org" "Invoices") "** TODO %?\n%i" :prepend t) - ("n" "Note" entry (file+datetree org-default-notes-file) "** %?\n%i") - ("b" "Blog" entry (file+datetree "~/Dropbox/notes/blog.org") "** %i%?") - ("j" "Journal" entry (file+datetree "~/Dropbox/notes/journal.org") "** %?%^g\nAdded: %U\n%i") - ("a" "Trivia" entry (file "~/Dropbox/notes/trivia.org") "* %u %?\n%i" :prepend t) - ("s" "Writing Scraps" entry (file "~/Dropbox/notes/writing.org") "* %u %?\n%i" :prepend t) - ("v" "Vocab" entry (file "~/Dropbox/notes/vocab.org") "* %u %?\n%i" :prepend t) - ("e" "Excerpt" entry (file "~/Dropbox/notes/excerpts.org") "* %u %?\n%i" :prepend t))) - -(setq org-agenda-custom-commands - '(("x" agenda) - ("y" agenda*) - ("w" todo "WAITING") - ("W" todo-tree "WAITING") - ("to" todo) - ("tp" tags "+Projects") - ("tg" tags-todo "+gamedev") - ("tw" tags-tree "+webdev"))) - - -;; Keymaps -(bind 'insert org-mode-map [remap my.inflate-space-maybe] 'self-insert-command) -(bind org-mode-map (kbd "RET") nil - (kbd "C-j") nil - (kbd "C-k") nil) - -(mapc (lambda (state) - (evil-define-key state evil-org-mode-map - (kbd "M-l") 'org-metaright - (kbd "M-h") 'org-metaleft - (kbd "M-k") 'org-metaup - (kbd "M-j") 'org-metadown - (kbd "M-L") 'org-shiftmetaright - (kbd "M-H") 'org-shiftmetaleft - (kbd "M-K") 'org-shiftmetaup - (kbd "M-J") 'org-shiftmetadown - (kbd "M-o") '(lambda () (interactive) - (evil-org-eol-call - '(lambda() - (org-insert-heading) - (org-metaright)))) - (kbd "M-t") '(lambda () (interactive) - (evil-org-eol-call - '(lambda() - (org-insert-todo-heading nil) - (org-metaright)))) - )) - '(normal insert)) - -;; Formatting shortcuts -(bind 'insert evil-org-mode-map - (kbd "s-b") (λ (my/org-surround "*")) ; bold - (kbd "s-u") (λ (my/org-surround "_")) ; underline - (kbd "s-i") (λ (my/org-surround "/")) ; italics - (kbd "s-`") (λ (my/org-surround "+")) ; strikethrough - - (kbd "") (λ (evil-move-beginning-of-line) (org-insert-heading)) - (kbd "") (λ (org-insert-heading-after-current))) - -(bind '(normal visual) evil-org-mode-map - ",l" 'org-insert-link) - -(bind 'visual evil-org-mode-map - (kbd "s-b") "s*" ; bold - (kbd "s-i") "s/") ; italics - -(bind 'normal evil-org-mode-map - ",d" 'org-time-stamp - ",D" 'org-time-stamp-inactive - ",s" 'org-schedule - ",a" 'org-attach - ",A" 'org-attach-open - ",t" 'org-todo - ",T" 'org-show-todo-tree - ",/" 'org-sparse-tree - ",?" 'org-tags-view - ",+" 'org-align-all-tags - ",r" 'org-refile - "gh" 'outline-up-heading - "gj" 'org-forward-heading-same-level - "gk" 'org-backward-heading-same-level - "gl" 'outline-next-visible-heading - "go" 'org-open-at-point - "ga" 'org-agenda - "gt" 'org-show-todo-tree - "H" 'org-beginning-of-line - "L" 'org-end-of-line - "$" 'org-end-of-line - "^" 'org-beginning-of-line - "<" 'org-metaleft - ">" 'org-metaright - "-" 'org-cycle-list-bullet - (kbd ", SPC") 'org-archive-subtree - (kbd "") (λ (evil-move-beginning-of-line) (org-insert-heading) (evil-insert-state)) - (kbd "") (λ (org-insert-heading-after-current) (evil-insert-state)) - (kbd "RET") (λ (if (org-entry-is-todo-p) (org-todo 'done))) - (kbd "TAB") 'org-cycle)