From 510ffe7b6f5e6bc9e96d4b2675bf55d5b5f84e75 Mon Sep 17 00:00:00 2001 From: James Bunton Date: Sat, 30 Jul 2016 11:31:21 +1000 Subject: [PATCH] major config refactor - Document occur in README - Switch from popwin to shackle - Added hl-todo - Added goto-address-mode - Removed restclient - Sensible configuration for ediff-mode - Split configuration into smaller and more sensible files --- .gitmodules | 12 ++-- README.md | 25 ++++++- init.el | 19 ++++-- lisp/my-completion.el | 12 +++- lisp/my-direx.el | 7 ++ lisp/{my-defuns.el => my-editing-defuns.el} | 21 ------ lisp/my-frame-title.el | 30 +++++++++ lisp/my-gui.el | 74 ++++----------------- lisp/my-kill-buffers.el | 41 ++++++++++++ lisp/my-minor-modes.el | 33 ++++++--- lisp/my-other-modes.el | 54 --------------- lisp/my-scratch.el | 18 +++++ lisp/my-shackle.el | 14 ++++ lisp/my-vc.el | 44 ++++++++++++ packages/hl-todo | 1 + packages/popwin | 1 - packages/restclient | 1 - packages/shackle | 1 + 18 files changed, 243 insertions(+), 165 deletions(-) create mode 100644 lisp/my-direx.el rename lisp/{my-defuns.el => my-editing-defuns.el} (77%) create mode 100644 lisp/my-frame-title.el create mode 100644 lisp/my-kill-buffers.el delete mode 100644 lisp/my-other-modes.el create mode 100644 lisp/my-scratch.el create mode 100644 lisp/my-shackle.el create mode 100644 lisp/my-vc.el create mode 160000 packages/hl-todo delete mode 160000 packages/popwin delete mode 160000 packages/restclient create mode 160000 packages/shackle diff --git a/.gitmodules b/.gitmodules index d6897c3..80d2e21 100644 --- a/.gitmodules +++ b/.gitmodules @@ -19,9 +19,6 @@ [submodule "flycheck"] path = packages/flycheck url = https://github.com/flycheck/flycheck -[submodule "restclient"] - path = packages/restclient - url = https://github.com/pashky/restclient.el.git [submodule "ibuffer-vc"] path = packages/ibuffer-vc url = https://github.com/purcell/ibuffer-vc.git @@ -91,9 +88,6 @@ [submodule "direx"] path = packages/direx url = https://github.com/delxg/direx-el.git -[submodule "popwin"] - path = packages/popwin - url = https://github.com/m2ym/popwin-el.git [submodule "avy"] path = packages/avy url = https://github.com/abo-abo/avy.git @@ -106,3 +100,9 @@ [submodule "fringe-helper"] path = packages/fringe-helper url = https://github.com/nschum/fringe-helper.el.git +[submodule "shackle"] + path = packages/shackle + url = https://github.com/wasamasa/shackle.git +[submodule "hl-todo"] + path = packages/hl-todo + url = https://github.com/tarsius/hl-todo.git diff --git a/README.md b/README.md index 32e08ed..23568ee 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,8 @@ C-h v Describe variable C-h f Describe function C-h m Documentation on active modes C-h Show bindings starting with +C-c C-b Back to previous help topic (while in help-mode) +q Quit window and bury buffer ``` # Search @@ -33,10 +35,11 @@ C-h m Documentation on active modes C-s Search forward (ivy/swiper mode) C-r Resume ivy search C-7 Start a cursor for each result (while searching) +C-' Switch to avy jump mode M-q Replace searched item (while searching) M-p Search for previous item (while searching) M-n Search for symbol at point (while searching) -M-% Search and replace +C-c C-o Dump all results into a buffer (ivy-occur) ``` # Files/buffers @@ -143,6 +146,15 @@ C-c m Ask to insert extra cursor at lo M-= Display info about region ``` +# Highlighting +``` +M-s h u Unhighlight regexp +M-s h . Highlight symbol at point +M-s h p Highlight phrase +M-s h r Highlight regexp +M-s h l Highlight lines matching regexp +``` + # Killing and deleting ``` C-M-k Kill s-expression / symbol @@ -191,6 +203,8 @@ C-x C-j Open direx at current file F8 Toggle flyspell-mode F9 Toggle whitespace mode F10 Toggle word wrap +M-s o Search in buffer and display results in occur-mode +M-x multi-occur Search in buffers and display results in occur-mode M-x eshell Run eshell M-x ielm Run Emacs Lisp REPL M-x linum-mode Display line numbers @@ -203,6 +217,15 @@ M-x term Run terminal M-x yas-reload-all Reload all snippets ``` +# Occur +``` +g Reload +e Switch to edit mode +C-c C-c Switch back to occur mode +M-g M-p Previous occurence +M-g M-n Next occurence +``` + # Lisp ``` C-M-x Eval top-level form diff --git a/init.el b/init.el index 934aa81..23d4a92 100644 --- a/init.el +++ b/init.el @@ -9,15 +9,20 @@ (add-to-list 'load-path dirname))))) (load-library "my-backups") -(load-library "my-defuns") -(load-library "my-gui") (load-library "my-completion") -(load-library "my-recentf") -(load-library "my-flycheck") -(load-library "my-find-test-file") -(load-library "my-other-modes") -(load-library "my-minor-modes") +(load-library "my-direx") +(load-library "my-editing-defuns") (load-library "my-file-modes") +(load-library "my-find-test-file") +(load-library "my-flycheck") +(load-library "my-frame-title") +(load-library "my-gui") (load-library "my-keys") +(load-library "my-kill-buffers") +(load-library "my-minor-modes") +(load-library "my-recentf") +(load-library "my-scratch") +(load-library "my-shackle") +(load-library "my-vc") (message "Successfully loaded init.el") diff --git a/lisp/my-completion.el b/lisp/my-completion.el index 95bfa3e..5301947 100644 --- a/lisp/my-completion.el +++ b/lisp/my-completion.el @@ -3,10 +3,16 @@ (require 'counsel) (require 'ivy) (require 'swiper) -(ivy-mode 1) -(setq counsel-find-file-at-point t) -(setq counsel-find-file-ignore-regexp "\\(?:\\`[#.]\\)\\|\\(?:[#~]\\'\\)") + (setq ivy-wrap t) + (setq ivy-extra-directories nil) + +(setq counsel-find-file-at-point t) + +(setq counsel-find-file-ignore-regexp "\\(?:\\`[#.]\\)\\|\\(?:[#~]\\'\\)") + (setq counsel-git-cmd "git ls-files --full-name --cached --others --exclude-standard --") (setq counsel-git-grep-cmd-default "git --no-pager grep --full-name -n --no-color --untracked -i -e %S") + +(ivy-mode 1) diff --git a/lisp/my-direx.el b/lisp/my-direx.el new file mode 100644 index 0000000..89ca4b7 --- /dev/null +++ b/lisp/my-direx.el @@ -0,0 +1,7 @@ +;;; -*- lexical-binding: t -*- + +(require 'direx) +(require 'direx-project) +(require 'dired-x) + +(defalias 'direx:find-item 'direx:find-item-other-window) diff --git a/lisp/my-defuns.el b/lisp/my-editing-defuns.el similarity index 77% rename from lisp/my-defuns.el rename to lisp/my-editing-defuns.el index d9de53a..1799fde 100644 --- a/lisp/my-defuns.el +++ b/lisp/my-editing-defuns.el @@ -30,13 +30,6 @@ (forward-line (- arg)) (back-to-indentation)) -(defun my/git-reset-buffer () - "Runs git-reset to unstage all changes on the current file. Then updates the git-gutter." - (interactive) - (call-process "git" nil nil nil "reset" (buffer-file-name)) - (git-gutter) - (message "Finished git reset")) - (defun my/open-line-above (arg) "Open a new line above point with indentation. With ARG insert that many lines." (interactive "*p") @@ -52,20 +45,6 @@ (newline arg) (indent-for-tab-command)) -(defun my/scratch-buffer () - "Create a new scratch buffer to work in. (could be *scratch* - *scratchX*)" - (interactive) - (let ((n 0) - bufname) - (while (progn - (setq bufname (concat "*scratch" - (if (= n 0) "" (int-to-string n)) - "*")) - (setq n (1+ n)) - (get-buffer bufname))) - (switch-to-buffer (get-buffer-create bufname)) - (emacs-lisp-mode))) - (defun my/substitute-line (arg) "Kill the current line and leave point at correct indentation level. With ARG kill that many lines first." (interactive "*P") diff --git a/lisp/my-frame-title.el b/lisp/my-frame-title.el new file mode 100644 index 0000000..e640c45 --- /dev/null +++ b/lisp/my-frame-title.el @@ -0,0 +1,30 @@ +;;; -*- lexical-binding: t -*- + +(setq frame-title-format '((:eval (funcall #'my/generate-frame-title)))) + +(setq icon-title-format frame-title-format) + +(add-to-list 'post-command-hook #'my/terminal-update-title) + + +(defun my/generate-frame-title () + "Returns a string like 'filename (dirname) - Emacs'" + (if (buffer-file-name) + (concat + (file-name-nondirectory (buffer-file-name)) + (if (buffer-modified-p) + " +") + " (" + (abbreviate-file-name (substring (file-name-directory (buffer-file-name)) 0 -1)) + ") - Emacs" + ) + (concat + (buffer-name) + (if (buffer-modified-p) + " +") + " - Emacs"))) + +(defun my/terminal-update-title () + "If using a terminal frame then sends the escape codes to update the title." + (if (terminal-parameter (frame-terminal) 'terminal-initted) + (send-string-to-terminal (concat "\033]0;" (my/generate-frame-title) "\007")))) diff --git a/lisp/my-gui.el b/lisp/my-gui.el index 4408b31..c4f1ec3 100644 --- a/lisp/my-gui.el +++ b/lisp/my-gui.el @@ -16,74 +16,24 @@ (show-paren-mode t) +(dolist (hook '(prog-mode-hook text-mode-hook)) + (add-hook hook (lambda () + (setq show-trailing-whitespace t)))) + +(setq shift-select-mode nil) +(delete-selection-mode t) + (require 'uniquify) (setq uniquify-strip-common-suffix t) (setq uniquify-buffer-name-style 'post-forward) -(add-to-list 'delete-frame-functions #'my/kill-buffers-if-deleting-last-frame) - -(setq frame-title-format '((:eval (funcall #'my/generate-frame-title)))) -(setq icon-title-format frame-title-format) - -(add-to-list 'post-command-hook #'my/terminal-update-title) - (defalias 'yes-or-no-p 'y-or-n-p) +(setq find-file-visit-truename t) -(defun my/frame-initial-frame-p (frame) - "Returns true if the given frame is the magic 'initial frame' that always exists in GUI emacs sessions" - (equal "initial_terminal" (terminal-name frame))) - -(defun my/frame-list-ignoring-initial-frame () - "Returns all frames except the magic 'initial frame' that always exists in GUI emacs sessions" - (filtered-frame-list (lambda (frame) (not (my/frame-initial-frame-p frame))))) - -(defun my/generate-frame-title () - "Returns a string like 'filename (dirname) - Emacs'" - (if (buffer-file-name) - (concat - (file-name-nondirectory (buffer-file-name)) - (if (buffer-modified-p) - " +") - " (" - (abbreviate-file-name (substring (file-name-directory (buffer-file-name)) 0 -1)) - ") - Emacs" - ) - (concat - (buffer-name) - (if (buffer-modified-p) - " +") - " - Emacs"))) - -(defun my/kill-buffer-safely (buffer) - "Kill the buffer if it is not special or modified" - (if (and - (not (string-match "^ " (buffer-name buffer))) - (not (equal "*Messages*" (buffer-name buffer))) - (or - (not (buffer-modified-p buffer)) - (null (buffer-file-name buffer)))) - (kill-buffer buffer))) - -(defun my/kill-buffers-if-deleting-last-frame (frame) - "Kill all buffers when closing the last frame" - (when (equal (list frame) (my/frame-list-ignoring-initial-frame)) - (dolist (buffer (buffer-list)) - (my/kill-buffer-safely buffer)))) +(setq disabled-command-function nil) -(defun my/kill-buffers-not-in-frame () - "Kill buffers which are not loaded into some frame" - (interactive) - (let ((kill-count 0)) - (dolist (buffer (buffer-list)) - (let* ((window (get-buffer-window buffer t)) - (frame (window-frame window))) - (if (or (null frame) (not (window-live-p window)) (my/frame-initial-frame-p frame)) - (if (my/kill-buffer-safely buffer) - (cl-incf kill-count))))) - (message "Killed %d buffers" kill-count))) +(setq save-interprogram-paste-before-kill t) -(defun my/terminal-update-title () - "If using a terminal frame then sends the escape codes to update the title." - (if (terminal-parameter (frame-terminal) 'terminal-initted) - (send-string-to-terminal (concat "\033]0;" (my/generate-frame-title) "\007")))) +(setq undo-limit 10000000) +(setq undo-strong-limit undo-limit) diff --git a/lisp/my-kill-buffers.el b/lisp/my-kill-buffers.el new file mode 100644 index 0000000..8e262f5 --- /dev/null +++ b/lisp/my-kill-buffers.el @@ -0,0 +1,41 @@ +;;; -*- lexical-binding: t -*- + +(add-to-list 'delete-frame-functions #'my/kill-buffers-if-deleting-last-frame) + +(defun my/kill-buffers-if-deleting-last-frame (frame) + "Kill all buffers when closing the last frame" + (when (equal (list frame) (my/frame-list-ignoring-initial-frame)) + (dolist (buffer (buffer-list)) + (my/kill-buffer-safely buffer)))) + +(defun my/kill-buffers-not-in-frame () + "Kill buffers which are not loaded into some frame" + (interactive) + (let ((kill-count 0)) + (dolist (buffer (buffer-list)) + (let* ((window (get-buffer-window buffer t)) + (frame (window-frame window))) + (if (or (null frame) (not (window-live-p window)) (my/frame-initial-frame-p frame)) + (if (my/kill-buffer-safely buffer) + (cl-incf kill-count))))) + (message "Killed %d buffers" kill-count))) + + + +(defun my/frame-initial-frame-p (frame) + "Returns true if the given frame is the magic 'initial frame' that always exists in GUI emacs sessions" + (equal "initial_terminal" (terminal-name frame))) + +(defun my/frame-list-ignoring-initial-frame () + "Returns all frames except the magic 'initial frame' that always exists in GUI emacs sessions" + (filtered-frame-list (lambda (frame) (not (my/frame-initial-frame-p frame))))) + +(defun my/kill-buffer-safely (buffer) + "Kill the buffer if it is not special or modified" + (if (and + (not (string-match "^ " (buffer-name buffer))) + (not (equal "*Messages*" (buffer-name buffer))) + (or + (not (buffer-modified-p buffer)) + (null (buffer-file-name buffer)))) + (kill-buffer buffer))) diff --git a/lisp/my-minor-modes.el b/lisp/my-minor-modes.el index 3368f22..899425a 100644 --- a/lisp/my-minor-modes.el +++ b/lisp/my-minor-modes.el @@ -1,5 +1,10 @@ ;;; -*- lexical-binding: t -*- +(require 'autorevert) +(global-auto-revert-mode 1) +(setq global-auto-revert-non-file-buffers t) +(setq auto-revert-verbose nil) + (require 'avy) (setq avy-background t) (setq avy-all-windows nil) @@ -12,10 +17,15 @@ (require 'expand-region) -(require 'git-gutter) -(require 'git-gutter-fringe) -(setq git-gutter:ask-p nil) -(global-git-gutter-mode) +(require 'goto-addr) +(add-hook 'text-mode-hook #'goto-address-mode) +(add-hook 'prog-mode-hook #'goto-address-prog-mode) + +(require 'hl-line) +(global-hl-line-mode) + +(require 'hl-todo) +(add-hook 'prog-mode-hook #'hl-todo-mode) (require 'indent-guide) (indent-guide-global-mode) @@ -26,17 +36,22 @@ (require 'multiple-cursors) +(require 'saveplace) +(setq-default save-place t) + (require 'xt-mouse) (xterm-mouse-mode) (require 'yasnippet) -(setq yas-snippet-dirs '("~/.emacs.d/snippets")) (add-hook 'prog-mode-hook #'yas-minor-mode) (add-hook 'python-mode-hook (lambda () (set (make-local-variable 'yas-indent-line) 'fixed))) +(yas-reload-all) (require 'diminish) -(diminish 'git-gutter-mode) -(diminish 'indent-guide-mode) -(diminish 'ivy-mode) -(diminish 'yas-minor-mode) +(add-hook 'after-init-hook + (lambda () + (diminish 'git-gutter-mode) + (diminish 'indent-guide-mode) + (diminish 'ivy-mode) + (diminish 'yas-minor-mode))) diff --git a/lisp/my-other-modes.el b/lisp/my-other-modes.el deleted file mode 100644 index da3cff1..0000000 --- a/lisp/my-other-modes.el +++ /dev/null @@ -1,54 +0,0 @@ -;;; -*- lexical-binding: t -*- - -(require 'autorevert) -(global-auto-revert-mode 1) -(setq global-auto-revert-non-file-buffers t) -(setq auto-revert-verbose nil) - -(require 'dired-x) -(require 'direx) -(require 'direx-project) -(defalias 'direx:find-item 'direx:find-item-other-window) - -(setq disabled-command-function nil) - -(setq find-file-visit-truename t) - -(require 'hl-line) -(global-hl-line-mode) - -(require 'ibuffer-vc) -(add-hook 'ibuffer-hook - (lambda () - (ibuffer-vc-set-filter-groups-by-vc-root) - (unless (eq ibuffer-sorting-mode 'alphabetic) - (ibuffer-do-sort-by-alphabetic)))) - -(require 'popwin) -(popwin-mode 1) -(push '(direx:direx-mode :position left :width 40 :dedicated t) - popwin:special-display-config) -(push '("*git-gutter:diff*" :stick t) - popwin:special-display-config) - -(require 'restclient) - -(setq require-final-newline t) - -(setq save-interprogram-paste-before-kill t) - -(setq shift-select-mode nil) -(delete-selection-mode t) - -(require 'saveplace) -(setq-default save-place t) - -(dolist (hook '(prog-mode-hook text-mode-hook)) - (add-hook hook (lambda () - (setq show-trailing-whitespace t)))) - -(setq undo-limit 10000000) -(setq undo-strong-limit undo-limit) - -(require 'vc) -(setq vc-follow-symlinks t) diff --git a/lisp/my-scratch.el b/lisp/my-scratch.el new file mode 100644 index 0000000..dc387d8 --- /dev/null +++ b/lisp/my-scratch.el @@ -0,0 +1,18 @@ +;;; -*- lexical-binding: t -*- + +(setq initial-scratch-message nil) +(setq initial-major-mode 'emacs-lisp-mode) + +(defun my/scratch-buffer () + "Create a new scratch buffer to work in. (could be *scratch* - *scratchX*)" + (interactive) + (let ((n 0) + bufname) + (while (progn + (setq bufname (concat "*scratch" + (if (= n 0) "" (int-to-string n)) + "*")) + (setq n (1+ n)) + (get-buffer bufname))) + (switch-to-buffer (get-buffer-create bufname)) + (funcall initial-major-mode))) diff --git a/lisp/my-shackle.el b/lisp/my-shackle.el new file mode 100644 index 0000000..b81a438 --- /dev/null +++ b/lisp/my-shackle.el @@ -0,0 +1,14 @@ +;;; -*- lexical-binding: t -*- + +(require 'shackle) + +(setq shackle-rules '(((:custom buffer-file-name) :other t) + (direx:direx-mode :align left :size 40 :select t))) + +(setq shackle-default-rule '(:align t :select t :size 15)) + +(setq shackle-default-alignment 'below) + +(setq shackle-default-size 0.5) + +(shackle-mode) diff --git a/lisp/my-vc.el b/lisp/my-vc.el new file mode 100644 index 0000000..cba3ea9 --- /dev/null +++ b/lisp/my-vc.el @@ -0,0 +1,44 @@ +;;; -*- lexical-binding: t -*- + +(require 'ediff) +(setq ediff-window-setup-function 'ediff-setup-windows-plain + ediff-split-window-function 'split-window-horizontally) + + +(require 'git-gutter) +(require 'git-gutter-fringe) + +(setq git-gutter:ask-p nil) + +(defun git-gutter:popup-hunk (&optional diffinfo) + "MODIFIED!! Popup current diff hunk. Removed the `save-window-excursion' so I can control it with shackle." + (interactive) + (git-gutter:awhen (or diffinfo + (git-gutter:search-here-diffinfo git-gutter:diffinfos)) + (pop-to-buffer (git-gutter:update-popuped-buffer it)))) + +(global-git-gutter-mode) + + + +(defun my/git-reset-buffer () + "Runs git-reset to unstage all changes on the current file. Then updates the git-gutter." + (interactive) + (call-process "git" nil nil nil "reset" (buffer-file-name)) + (git-gutter) + (message "Finished git reset")) + + + +(require 'ibuffer-vc) + +(add-hook 'ibuffer-hook + (lambda () + (ibuffer-vc-set-filter-groups-by-vc-root) + (unless (eq ibuffer-sorting-mode 'alphabetic) + (ibuffer-do-sort-by-alphabetic)))) + + + +(require 'vc) +(setq vc-follow-symlinks t) diff --git a/packages/hl-todo b/packages/hl-todo new file mode 160000 index 0000000..dff381a --- /dev/null +++ b/packages/hl-todo @@ -0,0 +1 @@ +Subproject commit dff381a5b2c9235bbdbe32123751ecdf17df7432 diff --git a/packages/popwin b/packages/popwin deleted file mode 160000 index 95dea14..0000000 --- a/packages/popwin +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 95dea14c60019d6cccf9a3b33e0dec4e1f22c304 diff --git a/packages/restclient b/packages/restclient deleted file mode 160000 index 07a934d..0000000 --- a/packages/restclient +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 07a934df9a928de9602f2b6b6c6ab441f3d0713c diff --git a/packages/shackle b/packages/shackle new file mode 160000 index 0000000..730ccb2 --- /dev/null +++ b/packages/shackle @@ -0,0 +1 @@ +Subproject commit 730ccb2143e97ed69ae373edac34b460d45f9deb -- 2.39.2