From 09a339839b6c9e944cb9a51432f31b67cf3e2c67 Mon Sep 17 00:00:00 2001 From: Wojciech Kozlowski Date: Mon, 28 Aug 2017 19:21:48 +0100 Subject: [PATCH] Move things around to where more appropriate --- init.el | 107 +---------------------------------------- modules/editing.el | 47 ++---------------- modules/emacs.el | 98 +++++++++++++++++++++++++++++++++++-- modules/programming.el | 60 ++++++++++++++++++++++- 4 files changed, 158 insertions(+), 154 deletions(-) diff --git a/init.el b/init.el index 3970db7..ca2a9f0 100644 --- a/init.el +++ b/init.el @@ -41,15 +41,6 @@ (menu-bar-mode -1) (blink-cursor-mode -1) - ;; Scrolling ---------------------------------------------------------------- - - (setq-default scroll-preserve-screen-position 1) - - ;; Line number -------------------------------------------------------------- - - (setq-default linum-format "%4d \u2502") ;; Line number format - (add-hook 'prog-mode-hook 'linum-mode) ;; Only in programming modes - ;; Modeline ----------------------------------------------------------------- (size-indication-mode 1) @@ -116,8 +107,8 @@ ;; *********************************************************************** ;; ;; ;; ;; ;; - ;; Any further non-package specific configuration should be set below this ;; - ;; point so that it does not get overridden by package configuration. ;; + ;; Any configuration that is not in a module or needs to override module ;; + ;; settings should be set below this point. ;; ;; ;; ;; ;; ;; ----------------------------------------------------------------------- ;; @@ -132,98 +123,4 @@ ;; -------------------------------------------------------------------------- (load custom-file 'noerror) - ;; -------------------------------------------------------------------------- - ;; Programming style. - ;; -------------------------------------------------------------------------- - - (setq-default c-default-style "linux") ;; Default C style - - ;; -------------------------------------------------------------------------- - ;; Convenience functions. - ;; -------------------------------------------------------------------------- - - (defun quit-other-window () - "Quit the next window in cyclic order" - (interactive) - (quit-window t (next-window (selected-window)))) - - (defun kill-default-buffer () - "Kill the currently active buffer with no confirmation." - (interactive) - (let (kill-buffer-query-functions) (kill-buffer))) - - (defun refresh-non-face-colours () - "Restart modes that use colours not set with face variables. - This has to be called whenever the active theme changes to - refresh these colours." - - (when (and (fboundp 'fci-mode) - (fci-mode)) - (fci-mode 1)) - - (when (and (fboundp 'highlight-parentheses-mode) - (highlight-parentheses-mode)) - (highlight-parentheses-mode 1))) - - ;; -------------------------------------------------------------------------- - ;; Convenience keyboard shortcuts. - ;; -------------------------------------------------------------------------- - - ;; Kill current buffer without prompting. - (global-set-key (kbd "C-x k") 'kill-default-buffer) - - ;; Kill other window (cyclic order). - (global-set-key (kbd "C-x C-q") 'quit-other-window) - - ;; Change active window. More convenient than "C-x o". - (global-set-key (kbd "M-o") 'other-window) - - ;; Scroll up/down. - (global-set-key (kbd "C-<") (lambda() (interactive) - (let ((scroll-preserve-screen-position nil)) - (scroll-down 1)))) - (global-set-key (kbd "C->") (lambda() (interactive) - (let ((scroll-preserve-screen-position nil)) - (scroll-up 1)))) - - ;; Setup key-bindings for switching between themes. - (global-set-key (kbd "C-x t l") '(lambda () (interactive) - (load-theme 'havoc-light t) - (refresh-non-face-colours))) - (global-set-key (kbd "C-x t d") '(lambda () (interactive) - (load-theme 'havoc-dark t) - (refresh-non-face-colours))) - - ;; -------------------------------------------------------------------------- - ;; Aliases. - ;; -------------------------------------------------------------------------- - - ;; y or n is enough. - (defalias 'yes-or-no-p 'y-or-n-p) - - ;; Always use ibuffer. - (defalias 'list-buffers 'ibuffer) - - ;; -------------------------------------------------------------------------- - ;; Configure garbage collection. - ;; - ;; Based on advice from: - ;; http://bling.github.io/blog/2016/01/18/why-are-you-changing-gc-cons-threshold/ - ;; -------------------------------------------------------------------------- - - (defun minibuffer-gc-setup-hook () - (setq gc-cons-threshold most-positive-fixnum)) - - (defun minibuffer-gc-exit-hook () - (setq gc-cons-threshold 800000)) - - (add-hook 'minibuffer-setup-hook #'minibuffer-gc-setup-hook) - (add-hook 'minibuffer-exit-hook #'minibuffer-gc-exit-hook) - - ;; -------------------------------------------------------------------------- - ;; Increase recursion limits. - ;; -------------------------------------------------------------------------- - (setq-default max-specpdl-size 20000) ;; ~15x original value - (setq-default max-lisp-eval-depth 24000) ;; 30x orignal value - ) ;; Reset garbage collection settings. diff --git a/modules/editing.el b/modules/editing.el index 665d887..6fa4535 100644 --- a/modules/editing.el +++ b/modules/editing.el @@ -53,7 +53,9 @@ (use-package fill-column-indicator :defer t - :init (add-hook 'prog-mode-hook 'fci-mode)) + :init + (add-hook 'prog-mode-hook 'fci-mode) + (add-hook 'text-mode-hook 'fci-mode)) ;; -------------------------------------------------------------------------- ;; Volatile highlights - highlight changes caused by undo, yank, etc. @@ -167,49 +169,6 @@ ;; Override the indent-region key-binding (global-set-key (kbd "C-M-\\") 'indent-region-or-buffer) - ;; -------------------------------------------------------------------------- - ;; Automatically indent yanked text in programming mode. - ;; -------------------------------------------------------------------------- - - (defvar yank-indent-modes - '(LaTeX-mode TeX-mode) - "Modes in which to indent regions that are yanked (or yank-popped). - Only modes that don't derive from `prog-mode' should be - listed here.") - - (defvar yank-indent-blacklisted-modes - '(python-mode slim-mode haml-mode) - "Modes for which auto-indenting is suppressed.") - - (defvar yank-advised-indent-threshold 10000 - "Threshold (# chars) over which indentation does not - automatically occur.") - - (defun yank-advised-indent-function (beg end) - "Do indentation, as long as the region isn't too large." - (if (<= (- end beg) yank-advised-indent-threshold) - (indent-region beg end nil))) - - (defadvice yank (after yank-indent activate) - "If current mode is one of 'yank-indent-modes, - indent yanked text (with prefix arg don't indent)." - (if (and (not (ad-get-arg 0)) - (not (member major-mode yank-indent-blacklisted-modes)) - (or (derived-mode-p 'prog-mode) - (member major-mode yank-indent-modes))) - (let ((transient-mark-mode nil)) - (yank-advised-indent-function (region-beginning) (region-end))))) - - (defadvice yank-pop (after yank-pop-indent activate) - "If current mode is one of `yank-indent-modes', - indent yanked text (with prefix arg don't indent)." - (when (and (not (ad-get-arg 0)) - (not (member major-mode yank-indent-blacklisted-modes)) - (or (derived-mode-p 'prog-mode) - (member major-mode yank-indent-modes))) - (let ((transient-mark-mode nil)) - (yank-advised-indent-function (region-beginning) (region-end))))) - ;; -------------------------------------------------------------------------- ;; Additional key-bindings. ;; -------------------------------------------------------------------------- diff --git a/modules/emacs.el b/modules/emacs.el index 07f3224..4a03b72 100644 --- a/modules/emacs.el +++ b/modules/emacs.el @@ -1,4 +1,4 @@ -;;; emacs.el --- Module file for Emacs management configuration. +;;; emacs.el --- Module file for configuring Emacs itself. ;; ;; Copyright (C) 2017 Wojciech Kozlowski ;; @@ -9,7 +9,7 @@ ;; ;;; Commentary: ;; -;; This module sets up packages and configuration for managing Emacs. +;; This module is used for generic Emacs configuration. ;; ;;; License: GPLv3 @@ -26,7 +26,99 @@ (defun init-packages/init-emacs () ;; -------------------------------------------------------------------------- - ;; Empty config. + ;; Keep point in same position on the screen when scrolling. ;; -------------------------------------------------------------------------- + (setq-default scroll-preserve-screen-position 1) + + ;; -------------------------------------------------------------------------- + ;; Convenience functions. + ;; -------------------------------------------------------------------------- + + (defun quit-other-window () + "Quit the next window in cyclic order" + (interactive) + (quit-window t (next-window (selected-window)))) + + (defun kill-default-buffer () + "Kill the currently active buffer with no confirmation." + (interactive) + (let (kill-buffer-query-functions) (kill-buffer))) + + (defun refresh-non-face-colours () + "Restart modes that use colours not set with face variables. + This has to be called whenever the active theme changes to + refresh these colours." + + (when (and (fboundp 'fci-mode) + (fci-mode)) + (fci-mode 1)) + + (when (and (fboundp 'highlight-parentheses-mode) + (highlight-parentheses-mode)) + (highlight-parentheses-mode 1))) + + ;; Key-bindings ------------------------------------------------------------- + + ;; Kill other window (cyclic order). + (global-set-key (kbd "C-x C-q") 'quit-other-window) + + ;; Kill current buffer without prompting. + (global-set-key (kbd "C-x k") 'kill-default-buffer) + + ;; -------------------------------------------------------------------------- + ;; Additional key-bindings. + ;; -------------------------------------------------------------------------- + + ;; Change active window. More convenient than "C-x o". + (global-set-key (kbd "M-o") 'other-window) + + ;; Scroll up/down, but keep point in place. + (global-set-key (kbd "C-<") (lambda() (interactive) + (let ((scroll-preserve-screen-position nil)) + (scroll-down 1)))) + (global-set-key (kbd "C->") (lambda() (interactive) + (let ((scroll-preserve-screen-position nil)) + (scroll-up 1)))) + + ;; Setup key-bindings for switching between themes. + (global-set-key (kbd "C-x t l") '(lambda () (interactive) + (load-theme 'havoc-light t) + (refresh-non-face-colours))) + (global-set-key (kbd "C-x t d") '(lambda () (interactive) + (load-theme 'havoc-dark t) + (refresh-non-face-colours))) + + ;; -------------------------------------------------------------------------- + ;; Aliases. + ;; -------------------------------------------------------------------------- + + ;; y or n is enough. + (defalias 'yes-or-no-p 'y-or-n-p) + + ;; Always use ibuffer. + (defalias 'list-buffers 'ibuffer) + + ;; -------------------------------------------------------------------------- + ;; Configure garbage collection. + ;; + ;; Based on advice from: + ;; http://bling.github.io/blog/2016/01/18/why-are-you-changing-gc-cons-threshold/ + ;; -------------------------------------------------------------------------- + + (defun minibuffer-gc-setup-hook () + (setq gc-cons-threshold most-positive-fixnum)) + + (defun minibuffer-gc-exit-hook () + (setq gc-cons-threshold 800000)) + + (add-hook 'minibuffer-setup-hook #'minibuffer-gc-setup-hook) + (add-hook 'minibuffer-exit-hook #'minibuffer-gc-exit-hook) + + ;; -------------------------------------------------------------------------- + ;; Increase recursion limits. + ;; -------------------------------------------------------------------------- + (setq-default max-specpdl-size 20000) ;; ~15x original value + (setq-default max-lisp-eval-depth 24000) ;; 30x orignal value + ) diff --git a/modules/programming.el b/modules/programming.el index 1673be6..00d2932 100644 --- a/modules/programming.el +++ b/modules/programming.el @@ -3,7 +3,7 @@ ;; Copyright (C) 2017 Wojciech Kozlowski ;; ;; Author: Wojciech Kozlowski -;; Created: 25 Aug 2017 +;; Created: 28 Aug 2017 ;; ;; This file is not part of GNU Emacs. ;; @@ -26,6 +26,19 @@ (defun init-packages/init-programming () + ;; -------------------------------------------------------------------------- + ;; Line numbers. + ;; -------------------------------------------------------------------------- + + (setq-default linum-format "%4d \u2502") ;; Line number format + (add-hook 'prog-mode-hook 'linum-mode) ;; Only in programming modes + + ;; -------------------------------------------------------------------------- + ;; Formatting settings. + ;; -------------------------------------------------------------------------- + + (setq-default c-default-style "linux") + ;; -------------------------------------------------------------------------- ;; Enable yasnippet. ;; -------------------------------------------------------------------------- @@ -33,4 +46,47 @@ (use-package yasnippet) (yas-global-mode 1) -) + ;; -------------------------------------------------------------------------- + ;; Automatically indent yanked text in programming mode. + ;; -------------------------------------------------------------------------- + + (defvar yank-indent-modes + '(LaTeX-mode TeX-mode) + "Modes in which to indent regions that are yanked (or yank-popped). + Only modes that don't derive from `prog-mode' should be + listed here.") + + (defvar yank-indent-blacklisted-modes + '(python-mode slim-mode haml-mode) + "Modes for which auto-indenting is suppressed.") + + (defvar yank-advised-indent-threshold 10000 + "Threshold (# chars) over which indentation does not + automatically occur.") + + (defun yank-advised-indent-function (beg end) + "Do indentation, as long as the region isn't too large." + (if (<= (- end beg) yank-advised-indent-threshold) + (indent-region beg end nil))) + + (defadvice yank (after yank-indent activate) + "If current mode is one of 'yank-indent-modes, + indent yanked text (with prefix arg don't indent)." + (if (and (not (ad-get-arg 0)) + (not (member major-mode yank-indent-blacklisted-modes)) + (or (derived-mode-p 'prog-mode) + (member major-mode yank-indent-modes))) + (let ((transient-mark-mode nil)) + (yank-advised-indent-function (region-beginning) (region-end))))) + + (defadvice yank-pop (after yank-pop-indent activate) + "If current mode is one of `yank-indent-modes', + indent yanked text (with prefix arg don't indent)." + (when (and (not (ad-get-arg 0)) + (not (member major-mode yank-indent-blacklisted-modes)) + (or (derived-mode-p 'prog-mode) + (member major-mode yank-indent-modes))) + (let ((transient-mark-mode nil)) + (yank-advised-indent-function (region-beginning) (region-end))))) + + )