|
- (require-package 'unfill)
-
- (when (fboundp 'electric-pair-mode)
- (electric-pair-mode))
- (when (fboundp 'electric-indent-mode)
- (electric-indent-mode))
-
- ;;----------------------------------------------------------------------------
- ;; Some basic preferences
- ;;----------------------------------------------------------------------------
- (setq-default
- blink-cursor-delay 0
- blink-cursor-interval 0.4
- bookmark-default-file (expand-file-name ".bookmarks.el" user-emacs-directory)
- buffers-menu-max-size 30
- case-fold-search t
- column-number-mode t
- delete-selection-mode t
- ediff-split-window-function 'split-window-horizontally
- ediff-window-setup-function 'ediff-setup-windows-plain
- indent-tabs-mode nil
- make-backup-files nil
- mouse-yank-at-point t
- save-interprogram-paste-before-kill t
- scroll-preserve-screen-position 'always
- set-mark-command-repeat-pop t
- show-trailing-whitespace t
- tooltip-delay 1.5
- truncate-lines nil
- truncate-partial-width-windows nil
- visible-bell t)
-
- (global-auto-revert-mode)
- (setq global-auto-revert-non-file-buffers t
- auto-revert-verbose nil)
-
- (transient-mark-mode t)
-
-
- ;;; Whitespace
-
- (defun sanityinc/no-trailing-whitespace ()
- "Turn off display of trailing whitespace in this buffer."
- (setq show-trailing-whitespace nil))
-
- ;; But don't show trailing whitespace in SQLi, inf-ruby etc.
- (dolist (hook '(special-mode-hook
- eww-mode-hook
- term-mode-hook
- comint-mode-hook
- compilation-mode-hook
- twittering-mode-hook
- minibuffer-setup-hook))
- (add-hook hook #'sanityinc/no-trailing-whitespace))
-
-
- (require-package 'whitespace-cleanup-mode)
- (global-whitespace-cleanup-mode t)
-
-
-
-
- (when (eval-when-compile (string< "24.3.1" emacs-version))
- ;; https://github.com/purcell/emacs.d/issues/138
- (after-load 'subword
- (diminish 'subword-mode)))
-
-
-
- (when (fboundp 'global-prettify-symbols-mode)
- (global-prettify-symbols-mode))
-
-
- (require-package 'undo-tree)
- (global-undo-tree-mode)
- (diminish 'undo-tree-mode)
-
-
- (require-package 'highlight-symbol)
- (dolist (hook '(prog-mode-hook html-mode-hook css-mode-hook))
- (add-hook hook 'highlight-symbol-mode)
- (add-hook hook 'highlight-symbol-nav-mode))
- (eval-after-load 'highlight-symbol
- '(diminish 'highlight-symbol-mode))
-
- ;;----------------------------------------------------------------------------
- ;; Zap *up* to char is a handy pair for zap-to-char
- ;;----------------------------------------------------------------------------
- (autoload 'zap-up-to-char "misc" "Kill up to, but not including ARGth occurrence of CHAR.")
- (global-set-key (kbd "M-Z") 'zap-up-to-char)
-
-
-
- (require-package 'browse-kill-ring)
-
-
- ;;----------------------------------------------------------------------------
- ;; Don't disable narrowing commands
- ;;----------------------------------------------------------------------------
- (put 'narrow-to-region 'disabled nil)
- (put 'narrow-to-page 'disabled nil)
- (put 'narrow-to-defun 'disabled nil)
-
- ;;----------------------------------------------------------------------------
- ;; Show matching parens
- ;;----------------------------------------------------------------------------
- (show-paren-mode 1)
-
- ;;----------------------------------------------------------------------------
- ;; Expand region
- ;;----------------------------------------------------------------------------
- (require-package 'expand-region)
- (global-set-key (kbd "C-=") 'er/expand-region)
-
-
- ;;----------------------------------------------------------------------------
- ;; Don't disable case-change functions
- ;;----------------------------------------------------------------------------
- (put 'upcase-region 'disabled nil)
- (put 'downcase-region 'disabled nil)
-
-
- ;;----------------------------------------------------------------------------
- ;; Rectangle selections, and overwrite text when the selection is active
- ;;----------------------------------------------------------------------------
- (cua-selection-mode t) ; for rectangles, CUA is nice
-
-
- ;;----------------------------------------------------------------------------
- ;; Handy key bindings
- ;;----------------------------------------------------------------------------
- ;; To be able to M-x without meta
- (global-set-key (kbd "C-x C-m") 'execute-extended-command)
-
- ;; Vimmy alternatives to M-^ and C-u M-^
- (global-set-key (kbd "C-c j") 'join-line)
- (global-set-key (kbd "C-c J") (lambda () (interactive) (join-line 1)))
-
- (global-set-key (kbd "C-.") 'set-mark-command)
- (global-set-key (kbd "C-x C-.") 'pop-global-mark)
-
- (require-package 'ace-jump-mode)
- (global-set-key (kbd "C-;") 'ace-jump-mode)
- (global-set-key (kbd "C-:") 'ace-jump-word-mode)
-
-
- (require-package 'multiple-cursors)
- ;; multiple-cursors
- (global-set-key (kbd "C-<") 'mc/mark-previous-like-this)
- (global-set-key (kbd "C->") 'mc/mark-next-like-this)
- (global-set-key (kbd "C-+") 'mc/mark-next-like-this)
- (global-set-key (kbd "C-c C-<") 'mc/mark-all-like-this)
- ;; From active region to multiple cursors:
- (global-set-key (kbd "C-c c r") 'set-rectangular-region-anchor)
- (global-set-key (kbd "C-c c c") 'mc/edit-lines)
- (global-set-key (kbd "C-c c e") 'mc/edit-ends-of-lines)
- (global-set-key (kbd "C-c c a") 'mc/edit-beginnings-of-lines)
-
-
- ;; Train myself to use M-f and M-b instead
- (global-unset-key [M-left])
- (global-unset-key [M-right])
-
-
-
- (defun kill-back-to-indentation ()
- "Kill from point back to the first non-whitespace character on the line."
- (interactive)
- (let ((prev-pos (point)))
- (back-to-indentation)
- (kill-region (point) prev-pos)))
-
- (global-set-key (kbd "C-M-<backspace>") 'kill-back-to-indentation)
-
-
- ;;----------------------------------------------------------------------------
- ;; Page break lines
- ;;----------------------------------------------------------------------------
- (require-package 'page-break-lines)
- (global-page-break-lines-mode)
- (diminish 'page-break-lines-mode)
-
- ;;----------------------------------------------------------------------------
- ;; Fill column indicator
- ;;----------------------------------------------------------------------------
- (when (eval-when-compile (> emacs-major-version 23))
- (require-package 'fill-column-indicator)
- (defun sanityinc/prog-mode-fci-settings ()
- (turn-on-fci-mode)
- (when show-trailing-whitespace
- (set (make-local-variable 'whitespace-style) '(face trailing))
- (whitespace-mode 1)))
-
- ;;(add-hook 'prog-mode-hook 'sanityinc/prog-mode-fci-settings)
-
- (defun sanityinc/fci-enabled-p ()
- (and (boundp 'fci-mode) fci-mode))
-
- (defvar sanityinc/fci-mode-suppressed nil)
- (defadvice popup-create (before suppress-fci-mode activate)
- "Suspend fci-mode while popups are visible"
- (let ((fci-enabled (sanityinc/fci-enabled-p)))
- (when fci-enabled
- (set (make-local-variable 'sanityinc/fci-mode-suppressed) fci-enabled)
- (turn-off-fci-mode))))
- (defadvice popup-delete (after restore-fci-mode activate)
- "Restore fci-mode when all popups have closed"
- (when (and sanityinc/fci-mode-suppressed
- (null popup-instances))
- (setq sanityinc/fci-mode-suppressed nil)
- (turn-on-fci-mode)))
-
- ;; Regenerate fci-mode line images after switching themes
- (defadvice enable-theme (after recompute-fci-face activate)
- (dolist (buffer (buffer-list))
- (with-current-buffer buffer
- (when (sanityinc/fci-enabled-p)
- (turn-on-fci-mode))))))
-
-
- ;;----------------------------------------------------------------------------
- ;; Shift lines up and down with M-up and M-down. When paredit is enabled,
- ;; it will use those keybindings. For this reason, you might prefer to
- ;; use M-S-up and M-S-down, which will work even in lisp modes.
- ;;----------------------------------------------------------------------------
- (require-package 'move-dup)
- (global-set-key [M-up] 'md/move-lines-up)
- (global-set-key [M-down] 'md/move-lines-down)
- (global-set-key [M-S-up] 'md/move-lines-up)
- (global-set-key [M-S-down] 'md/move-lines-down)
-
- (global-set-key (kbd "C-c p") 'md/duplicate-down)
- (global-set-key (kbd "C-c P") 'md/duplicate-up)
-
- ;;----------------------------------------------------------------------------
- ;; Fix backward-up-list to understand quotes, see http://bit.ly/h7mdIL
- ;;----------------------------------------------------------------------------
- (defun backward-up-sexp (arg)
- "Jump up to the start of the ARG'th enclosing sexp."
- (interactive "p")
- (let ((ppss (syntax-ppss)))
- (cond ((elt ppss 3)
- (goto-char (elt ppss 8))
- (backward-up-sexp (1- arg)))
- ((backward-up-list arg)))))
-
- (global-set-key [remap backward-up-list] 'backward-up-sexp) ; C-M-u, C-M-up
-
-
- ;;----------------------------------------------------------------------------
- ;; Cut/copy the current line if no region is active
- ;;----------------------------------------------------------------------------
- (require-package 'whole-line-or-region)
- (whole-line-or-region-mode t)
- (diminish 'whole-line-or-region-mode)
- (make-variable-buffer-local 'whole-line-or-region-mode)
-
- (defun suspend-mode-during-cua-rect-selection (mode-name)
- "Add an advice to suspend `MODE-NAME' while selecting a CUA rectangle."
- (let ((flagvar (intern (format "%s-was-active-before-cua-rectangle" mode-name)))
- (advice-name (intern (format "suspend-%s" mode-name))))
- (eval-after-load 'cua-rect
- `(progn
- (defvar ,flagvar nil)
- (make-variable-buffer-local ',flagvar)
- (defadvice cua--activate-rectangle (after ,advice-name activate)
- (setq ,flagvar (and (boundp ',mode-name) ,mode-name))
- (when ,flagvar
- (,mode-name 0)))
- (defadvice cua--deactivate-rectangle (after ,advice-name activate)
- (when ,flagvar
- (,mode-name 1)))))))
-
- (suspend-mode-during-cua-rect-selection 'whole-line-or-region-mode)
-
-
-
-
- (defun sanityinc/open-line-with-reindent (n)
- "A version of `open-line' which reindents the start and end positions.
- If there is a fill prefix and/or a `left-margin', insert them
- on the new line if the line would have been blank.
- With arg N, insert N newlines."
- (interactive "*p")
- (let* ((do-fill-prefix (and fill-prefix (bolp)))
- (do-left-margin (and (bolp) (> (current-left-margin) 0)))
- (loc (point-marker))
- ;; Don't expand an abbrev before point.
- (abbrev-mode nil))
- (delete-horizontal-space t)
- (newline n)
- (indent-according-to-mode)
- (when (eolp)
- (delete-horizontal-space t))
- (goto-char loc)
- (while (> n 0)
- (cond ((bolp)
- (if do-left-margin (indent-to (current-left-margin)))
- (if do-fill-prefix (insert-and-inherit fill-prefix))))
- (forward-line 1)
- (setq n (1- n)))
- (goto-char loc)
- (end-of-line)
- (indent-according-to-mode)))
-
- (global-set-key (kbd "C-o") 'sanityinc/open-line-with-reindent)
-
-
- ;;----------------------------------------------------------------------------
- ;; Random line sorting
- ;;----------------------------------------------------------------------------
- (defun sort-lines-random (beg end)
- "Sort lines in region randomly."
- (interactive "r")
- (save-excursion
- (save-restriction
- (narrow-to-region beg end)
- (goto-char (point-min))
- (let ;; To make `end-of-line' and etc. to ignore fields.
- ((inhibit-field-text-motion t))
- (sort-subr nil 'forward-line 'end-of-line nil nil
- (lambda (s1 s2) (eq (random 2) 0)))))))
-
-
-
-
- (require-package 'highlight-escape-sequences)
- (hes-mode)
-
-
- (require-package 'guide-key)
- (setq guide-key/guide-key-sequence '("C-x r" "C-x 4" "C-x 5" "C-c ;" "C-c ; f" "C-c ' f" "C-x n"))
- (guide-key-mode 1)
- (diminish 'guide-key-mode)
-
-
- (provide 'init-editing-utils)
|