[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
[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
[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
C-h f Describe function
C-h m Documentation on active modes
<prefix> C-h Show bindings starting with <prefix>
+C-c C-b Back to previous help topic (while in help-mode)
+q Quit window and bury buffer
```
# Search
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
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
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
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
(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")
(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)
--- /dev/null
+;;; -*- lexical-binding: t -*-
+
+(require 'direx)
+(require 'direx-project)
+(require 'dired-x)
+
+(defalias 'direx:find-item 'direx:find-item-other-window)
(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")
(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")
--- /dev/null
+;;; -*- 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"))))
(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)
--- /dev/null
+;;; -*- 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)))
;;; -*- 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)
(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)
(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)))
+++ /dev/null
-;;; -*- 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)
--- /dev/null
+;;; -*- 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)))
--- /dev/null
+;;; -*- 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)
--- /dev/null
+;;; -*- 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)
--- /dev/null
+Subproject commit dff381a5b2c9235bbdbe32123751ecdf17df7432
+++ /dev/null
-Subproject commit 95dea14c60019d6cccf9a3b33e0dec4e1f22c304
+++ /dev/null
-Subproject commit 07a934df9a928de9602f2b6b6c6ab441f3d0713c
--- /dev/null
+Subproject commit 730ccb2143e97ed69ae373edac34b460d45f9deb