diff options
Diffstat (limited to 'lisp/ravi-init-appearance.el')
| -rw-r--r-- | lisp/ravi-init-appearance.el | 315 |
1 files changed, 315 insertions, 0 deletions
diff --git a/lisp/ravi-init-appearance.el b/lisp/ravi-init-appearance.el new file mode 100644 index 0000000..035dc1d --- /dev/null +++ b/lisp/ravi-init-appearance.el @@ -0,0 +1,315 @@ +;;; ravi-init-appearance.el --- Emacs appearance + +;; Copyright (C) 2013 + +;; Author: <ravi@nero.lan> +;; Keywords: + +;; 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 3 of the License, 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. If not, see <http://www.gnu.org/licenses/>. + +;;; Commentary: + +;; Customization of emacs appearance + +;;; Code: + +;; No splash screen please +(setq inhibit-startup-message t) + +;; Allow pasting selection outside of Emacs +(setq x-select-enable-clipboard t) + +;; Show keystrokes in progress +(setq echo-keystrokes 0.1) + +;; Real emacs knights don't use shift to mark things +(setq shift-select-mode nil) + +;; Enable syntax highlighting for older Emacsen that have it off +(global-font-lock-mode t) +(setq font-lock-maximum-decoration t) + +;; Sounds. +;; Turn off sound. +(setq bell-volume 0) +(setq sound-alist nil) + +(add-to-list 'default-frame-alist '(cursor-color . "#ffb90f") t) + +;; Answering just 'y' or 'n' will do +(defalias 'yes-or-no-p 'y-or-n-p) + +;; Customization of modeline. +(line-number-mode 1) +(column-number-mode 1) +(display-time) + +;; Change the way the buffer name is displayed in the modeline. +(setq-default mode-line-buffer-identification '("%17b")) + +;; Undo/redo window configuration with C-c <left>/<right> +(winner-mode 1) + +;; Never insert tabs +(set-default 'indent-tabs-mode nil) + +;; Show me empty lines after buffer end (replaced, see below) +;(set-default 'indicate-empty-lines t) + +(use-package whitespace + :init + (setq whitespace-style '(face trailing indentation tabs)) + :config + (progn + (global-whitespace-mode 1)) + ; No need for 'ensure: t' since whitespace mode is built in + :diminish global-whitespace-mode + ) + +(use-package ws-butler + :config + (progn + (ws-butler-global-mode 1)) + :diminish ws-butler-mode + :ensure t) + +(diminish 'abbrev-mode) + +;; Handling end of files. +(setq require-final-newline t) +;; Prevent addition of lines at end of file when down arrow is pressed. +(setq next-line-add-newlines nil) + +;; Kill the entire line, please +(setq kill-whole-line t) + +;; Delete hungrily +(use-package hungry-delete + :commands (hungry-delete-forward hungry-delete-backward) + :bind (("C-d" . hungry-delete-forward)) + :init + (progn + (defun jschaf/hungry-delete-backward (n &optional killflag) + "Delete non-vertical whitespace backwards on first key press. +Delete all whitespace on a successive key press." + (interactive "p\nP") + (if (eq last-command 'jschaf/hungry-delete-backward) + (hungry-delete-backward n killflag) + (let ((hungry-delete-chars-to-skip " \t\f\v")) + (hungry-delete-backward n killflag)))) + ;;(define-key global-map [remap backward-delete-char-untabify] 'jschaf/hungry-delete-backward) + (define-key global-map [remap backward-delete-char-untabify] 'hungry-delete-backward) + ) + :ensure t) + +(setq sentence-end-double-space nil) +(defun sacha/unfill-paragraph (&optional region) + "Takes a multi-line paragraph and makes it into a single line of text." + (interactive (progn + (barf-if-buffer-read-only) + (list t))) + (let ((fill-column (point-max))) + (fill-paragraph nil region))) +(bind-key "M-Q" 'sacha/unfill-paragraph) + +;; Easily navigate sillycased words +;(global-subword-mode 1) + +;; Keep cursor away from edges when scrolling up/down +(use-package smooth-scrolling + :ensure t + ) + +;; Enable automatic indentation, if possible +(use-package smart-newline + :commands (smart-newline) + :init + (progn + (bind-key "<return>" 'smart-newline prog-mode-map) + (bind-key "<return>" 'smart-newline emacs-lisp-mode-map)) + :ensure t) + +;; Case toggling: from Oleg Krehel http://oremacs.com/2014/12/25/ode-to-toggle/ +(defun oremacs/char-upcasep (letter) + (eq letter (upcase letter))) + +(defun oremacs/capitalize-word-toggle () + (interactive) + (let ((start + (car + (save-excursion + (backward-word) + (bounds-of-thing-at-point 'symbol))))) + (if start + (save-excursion + (goto-char start) + (funcall + (if (oremacs/char-upcasep (char-after)) + 'downcase-region + 'upcase-region) + start (1+ start))) + (capitalize-word -1)))) +(bind-key "M-c" 'oremacs/capitalize-word-toggle) + +(defun oremacs/upcase-word-toggle () + (interactive) + (let ((bounds (bounds-of-thing-at-point 'symbol)) + beg end + (regionp + (if (eq this-command last-command) + (get this-command 'regionp) + (put this-command 'regionp nil)))) + (cond + ((or (region-active-p) regionp) + (setq beg (region-beginning) + end (region-end)) + (put this-command 'regionp t)) + (bounds + (setq beg (car bounds) + end (cdr bounds))) + (t + (setq beg (point) + end (1+ beg)))) + (save-excursion + (goto-char (1- beg)) + (and (re-search-forward "[A-Za-z]" end t) + (funcall (if (oremacs/char-upcasep (char-before)) + 'downcase-region + 'upcase-region) + beg end))))) +(bind-key "M-l" 'oremacs/upcase-word-toggle) + +;; Zap up to char is more useful than zap-char +(use-package zop-to-char + :bind (("M-z" . zop-up-to-char) + ("M-Z" . zop-to-char)) + :ensure t) + +;; Automatic indentation of yanked text +(dolist (command '(yank yank-pop)) + (eval `(defadvice ,command (after indent-region activate) + (and (not current-prefix-arg) + (member major-mode '(emacs-lisp-mode lisp-mode + clojure-mode scheme-mode + haskell-mode ruby-mode + rspec-mode python-mode + c-mode c++-mode + objc-mode latex-mode + plain-tex-mode)) + (let ((mark-even-if-inactive transient-mark-mode)) + (indent-region (region-beginning) (region-end) nil)))))) + +(use-package comment-dwim-2 + :bind (("M-;" . comment-dwim-2)) + :ensure t) + +;; Keep my navigation simple +(setq line-move-visual nil) + +;; Represent undo-history as an actual tree (visualize with C-x u) +(use-package undo-tree + :init + (setq undo-tree-mode-lighter "") + :config + (progn + (global-undo-tree-mode) + (setq undo-tree-auto-save-history t) + (setq undo-tree-history-directory-alist + `(("." . ,(expand-file-name "undotree/" (ravi/emacs-file "past"))))) + ) + :ensure t + ) + +;; Discover emacs +;; Since discover.el replaces keymaps wholesale for "C-x r" and "M-s", it overrides +;; our additions to them. So we use guide-key for "C-x r" and "M-s". +(use-package discover + :config + (progn + (add-hook 'dired-mode-hook 'discover-turn-on-in-dired) + ) + :disabled t ;; unstable API and hosing user-provided keybindings + :ensure t + ) + +;; Help for prefix key-bindings not in discover-mode +(use-package guide-key + :config + (progn + (setq guide-key/guide-key-sequence '("C-c p" ;; projectile + "C-c d" ;; doxymacs + "C-x 4" ;; other-window + "C-x r" ;; rectangles/registers + "M-s" ;; isearch + "C-x v" ;; version control + "M-g" ;; movement + "C-x 5" ;; frames + "C-x n" ;; narrowing + )) + (when (and (boundp ravi/use-helm-instead-of-ido) ravi/use-helm-instead-of-ido) + (add-to-list 'guide-key/guide-key-sequence "<escape>")) + + (guide-key-mode 1) + + (use-package guide-key-tip + :config + (progn + (setq guide-key-tip/enabled t)) + :ensure t + :disabled t ;; popups don't always go away; need to file a bug report + ) + ) + :diminish guide-key-mode + :ensure t + ) + +(bind-key "C-h a" 'apropos) + +(use-package popwin + :init + (progn + (popwin-mode 1) + (push '("*Pp Eval Output*" :height 15) popwin:special-display-config)) + :ensure t + ) + +(use-package import-popwin + :bind (("M-i" . import-popwin)) + :ensure t + ) + +(use-package ace-window + :bind (("M-o" . ace-window)) + :init + (progn + (setq aw-keys '(?a ?s ?d ?f ?g ?h ?j ?k ?l ?i ?e))) + :ensure t + ) + +(defun ravi/split-window-vertically-and-switch (prefix) + (interactive "P") + (split-window-vertically (if (consp prefix) nil prefix)) + (other-window 1) + (unless (consp prefix) (switch-to-next-buffer))) +(bind-key "C-x 2" 'ravi/split-window-vertically-and-switch) + +(defun ravi/split-window-horizontally-and-switch (prefix) + (interactive "P") + (split-window-horizontally (if (consp prefix) nil prefix)) + (other-window 1) + (unless (consp prefix) (switch-to-next-buffer))) +(bind-key "C-x 3" 'ravi/split-window-horizontally-and-switch) + +(provide 'ravi-init-appearance) +;;; ravi-init-appearance.el ends here |
