X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=emacs_el%2Fconfiguration%2Fdon-configuration.org;h=552feec13be98698f00de4050fd82de658c5623b;hb=40db3d2a1fe38634b23135f4a9c1a4fa9cebf626;hp=2dbe39ac2a6564d0a1a01781b356da9bbe67a3af;hpb=90334475cde391c3dcf8ee2723d072a835cf8223;p=lib.git diff --git a/emacs_el/configuration/don-configuration.org b/emacs_el/configuration/don-configuration.org index 2dbe39a..552feec 100644 --- a/emacs_el/configuration/don-configuration.org +++ b/emacs_el/configuration/don-configuration.org @@ -1,14 +1,15 @@ +#+PROPERTY: header-args:emacs-lisp :tangle don-configuration.el * Load debugger # if for some reason, things get pear-shaped, we want to be able to # enter the debugger by sending -USR2 to emacs -#+BEGIN_SRC emacs-lisp :tangle don-configuration.el +#+BEGIN_SRC emacs-lisp (setq debug-on-event 'siguser2) #+END_SRC * Add library paths -#+BEGIN_SRC emacs-lisp :tangle don-configuration.el +#+BEGIN_SRC emacs-lisp (add-to-list 'load-path '"~/lib/emacs_el/") (add-to-list 'load-path '"~/lib/emacs_el/helm") (add-to-list 'load-path '"~/lib/emacs_el/tiny-tools/lisp/tiny") @@ -22,10 +23,29 @@ (add-to-list 'load-path '"~/lib/emacs_el/polymode") #+END_SRC - +* Package management +** package repositories and package manager +#+BEGIN_SRC emacs-lisp + (require 'package) + (setq package-archives '(("gnu" . "https://elpa.gnu.org/packages/") + ("melpa" . "https://melpa.org/packages/") + ("org" . "http://orgmode.org/elpa/") )) +#+END_SRC +** [[https://github.com/jwiegley/use-package/][use-package]] +#+BEGIN_SRC emacs-lisp + (require 'use-package) + (package-initialize) +#+END_SRC +** Paradox +#+BEGIN_SRC emacs-lisp + (package-initialize) + (use-package paradox + :ensure paradox + ) +#+END_SRC * Misc functions ** with-library -#+BEGIN_SRC emacs-lisp :tangle don-configuration.el +#+BEGIN_SRC emacs-lisp ;; From http://www.emacswiki.org/emacs/LoadingLispFiles ;; execute conditional code when loading libraries (defmacro with-library (symbol &rest body) @@ -35,25 +55,250 @@ #+END_SRC +* Memory +#+BEGIN_SRC emacs-lisp + (setq global-mark-ring-max 128 + mark-ring-max 128 + kill-ring-max 128) + (defun don/minibuffer-setup-hook () + (setq gc-cons-threshold most-positive-fixnum)) + + (defun don/minibuffer-exit-hook () + (setq gc-cons-threshold 1048576)) + + (add-hook 'minibuffer-setup-hook #'don/minibuffer-setup-hook) + (add-hook 'minibuffer-exit-hook #'don/minibuffer-exit-hook) +#+END_SRC * Modules +** Winnermode +#+BEGIN_SRC emacs-lisp + (winner-mode 1) +#+END_SRC +** Eyebrowse + +#+BEGIN_SRC emacs-lisp + ;; (use-package eyebrowse + ;; :ensure t + ;; :diminish eyebrowse-mode + ;; :init (setq eyebrowse-keymap-prefix (kbd "C-c C-\\")) + ;; :config (progn + ;; (setq eyebrowse-wrap-around t) + ;; (eyebrowse-mode t) + ;; + ;; (defun my/eyebrowse-new-window-config () + ;; (interactive) + ;; (let ((done nil)) + ;; (dotimes (i 10) + ;; ;; start at 1 run till 0 + ;; (let ((j (mod (+ i 1) 10))) + ;; (when (and (not done) + ;; (not (eyebrowse--window-config-present-p j))) + ;; (eyebrowse-switch-to-window-config j) + ;; (call-interactively 'eyebrowse-rename-window-config2 j) + ;; (setq done t) + ;; )) + ;; ))) + ;; + ;; ;; I don't use latex-preview-pane + ;; ;; (require 'latex-preview-pane) + ;; ;; (defun my/close-latex-preview-pane-before-eyebrowse-switch () + ;; ;; ;; latex-preview-pane uses window-parameters which are + ;; ;; ;; not preserved by eyebrowse, so we close the preview + ;; ;; ;; pane before switching, it will be regenerated when we + ;; ;; ;; edit the TeX file. + ;; ;; (when (lpp/window-containing-preview) + ;; ;; (delete-window (lpp/window-containing-preview)))) + ;; + ;; ;; (add-to-list 'eyebrowse-pre-window-switch-hook + ;; ;; #'my/close-latex-preview-pane-before-eyebrowse-switch) + ;; + ;; ;; (my/set-menu-key "[" #'my/eyebrowse-new-window-config) + ;; ;; (my/set-menu-key ";" #'eyebrowse-prev-window-config) + ;; ;; (my/set-menu-key "'" #'eyebrowse-next-window-config) + ;; ;; (my/set-menu-key "]" #'eyebrowse-close-window-config) + ;; ;; (my/set-menu-key "\\" #'eyebrowse-rename-window-config) + ;; ) + ;; ) +#+END_SRC + +** Window handling + +*** Splitting +#+BEGIN_SRC emacs-lisp + (defun my/vsplit-last-buffer () + "Split the window vertically and display the previous buffer." + (interactive) + (split-window-vertically) + (other-window 1 nil) + (switch-to-next-buffer)) + + (defun my/hsplit-last-buffer () + "Split the window horizontally and display the previous buffer." + (interactive) + (split-window-horizontally) + (other-window 1 nil) + (switch-to-next-buffer)) + + (bind-key "C-x 2" 'my/vsplit-last-buffer) + (bind-key "C-x 3" 'my/hsplit-last-buffer) + + (setq split-width-threshold 100) + (setq split-height-threshold 60) + + (defun my/split-window-prefer-horizontally (window) + "If there's only one window (excluding any possibly active + minibuffer), then split the current window horizontally." + (if (and (one-window-p t) + (not (active-minibuffer-window)) + ( > (frame-width) (frame-height)) + ) + (let ((split-height-threshold nil)) + (split-window-sensibly window)) + (split-window-sensibly window))) + + (setq split-window-preferred-function #'my/split-window-prefer-horizontally) + (setq window-combination-resize t) +#+END_SRC + +*** Compilation window + +If there is no compilation window, open one at the bottom, spanning +the complete width of the frame. Otherwise, reuse existing window. In +the former case, if there was no error the window closes +automatically. + +#+BEGIN_SRC emacs-lisp + (add-to-list 'display-buffer-alist + `(,(rx bos "*compilation*" eos) + (display-buffer-reuse-window + display-buffer-in-side-window) + (reusable-frames . visible) + (side . bottom) + (window-height . 0.4))) +#+END_SRC + +#+BEGIN_SRC emacs-lisp + (defun my/compilation-exit-autoclose (status code msg) + ;; If M-x compile exists with a 0 + (when (and (eq status 'exit) (zerop code)) + ;; and delete the *compilation* window + (let ((compilation-window (get-buffer-window (get-buffer "*compilation*")))) + (when (and (not (window-at-side-p compilation-window 'top)) + (window-at-side-p compilation-window 'left) + (window-at-side-p compilation-window 'right)) + (delete-window compilation-window)))) + ;; Always return the anticipated result of compilation-exit-message-function + (cons msg code)) + + ;; Specify my function (maybe I should have done a lambda function) + (setq compilation-exit-message-function #'my/compilation-exit-autoclose) +#+END_SRC + +If you change the variable ~compilation-scroll-output~ to a ~non-nil~ +value, the compilation buffer scrolls automatically to follow the +output. If the value is ~first-error~, scrolling stops when the first +error appears, leaving point at that error. For any other non-nil +value, scrolling continues until there is no more output. + +#+BEGIN_SRC emacs-lisp + (setq compilation-scroll-output 'first-error) +#+END_SRC + +** Mode line cleaning +*** Diminish +#+BEGIN_SRC emacs-lisp + (use-package diminish + :ensure t) +#+END_SRC + +*** Delight +#+BEGIN_SRC emacs-lisp + (use-package delight + :ensure t) +#+END_SRC + +** Jumping +*** Avy +#+BEGIN_SRC emacs-lisp +(use-package avy + :ensure t + :bind ("C-c C-SPC" . avy-goto-word-1) + :config (progn + (setq avy-background t) + (key-chord-define-global "jj" #'avy-goto-word-1))) +#+END_SRC + +** Snippets + +*** Yasnippet +#+BEGIN_SRC emacs-lisp +(use-package yasnippet + :ensure t + :diminish yas-minor-mode + :config (progn + (yas-global-mode) + (setq yas-verbosity 1))) +#+END_SRC + +** Helm Flx + +[[https://github.com/PythonNut/helm-flx][helm-flx]] implements intelligent helm fuzzy sorting, provided by [[https://github.com/lewang/flx][flx]]. + +#+BEGIN_SRC emacs-lisp +(use-package helm-flx + :ensure t + :config (progn + ;; these are helm configs, but they kind of fit here nicely + (setq helm-M-x-fuzzy-match t + helm-bookmark-show-location t + helm-buffers-fuzzy-matching t + helm-completion-in-region-fuzzy-match t + helm-file-cache-fuzzy-match t + helm-imenu-fuzzy-match t + helm-mode-fuzzy-match t + helm-locate-fuzzy-match nil + helm-quick-update t + helm-recentf-fuzzy-match nil + helm-semantic-fuzzy-match t) + (helm-flx-mode +1))) +#+END_SRC + + ** Tinyprocmail -#+BEGIN_SRC emacs-lisp :tangle don-configuration.el +#+BEGIN_SRC emacs-lisp ;; load tinyprocmail - (with-library 'tinyprocmail - ; (setq tinyprocmail--procmail-version "v3.22") - (add-hook 'tinyprocmail--load-hook 'tinyprocmail-install)) + (use-package tinyprocmail + :ensure f + :config (with-library 'tinyprocmail + ;; (setq tinyprocmail--procmail-version "v3.22") + (add-hook 'tinyprocmail--load-hook 'tinyprocmail-install)) + ) #+END_SRC ** Magit #+BEGIN_SRC emacs-lisp :tangle don-configuration.el - ; don't verify where we are pushing - (setq magit-push-always-verify nil) + (use-package magit + :ensure f + :config + ;; don't verify where we are pushing + (setq magit-push-always-verify nil) + ;; refine diffs always (hilight words) + (setq magit-diff-refine-hunk nil) + ;; load magit-annex + (setq load-path + (append '("~/lib/emacs_el/magit-annex") + load-path)) + ) + (use-package magit-annex + :ensure f + :config (require 'magit-annex) + ) #+END_SRC ** Perl -#+BEGIN_SRC emacs-lisp :tangle don-configuration.el +#+BEGIN_SRC emacs-lisp (require 'cperl-mode) ;; Use c-mode for perl .xs files (add-to-list 'auto-mode-alist '("\\.xs\\'" . c-mode)) @@ -78,8 +323,21 @@ #+END_SRC ** Helm -#+BEGIN_SRC emacs-lisp :tangle don-configuration.el -(require 'don-helm) +#+BEGIN_SRC emacs-lisp + (use-package helm + :ensure t + :config + (helm-mode 1) + (define-key global-map [remap find-file] 'helm-find-files) + (define-key global-map [remap occur] 'helm-occur) + (define-key global-map [remap list-buffers] 'helm-buffers-list) + (define-key global-map [remap dabbrev-expand] 'helm-dabbrev) + (global-set-key (kbd "M-x") 'helm-M-x) + (unless (boundp 'completion-in-region-function) + (define-key lisp-interaction-mode-map [remap completion-at-point] 'helm-lisp-completion-at-point) + (define-key emacs-lisp-mode-map [remap completion-at-point] 'helm-lisp-completion-at-point)) + (add-hook 'kill-emacs-hook #'(lambda () (and (file-exists-p "$TMP") (delete-file "$TMP")))) + ) #+END_SRC ** Hydra #+BEGIN_SRC emacs-lisp :tangle don-configuration.el @@ -87,7 +345,7 @@ #+END_SRC ** Tramp -#+BEGIN_SRC emacs-lisp :tangle don-configuration.el +#+BEGIN_SRC emacs-lisp (add-to-list 'tramp-methods '("vcsh" (tramp-login-program "vcsh") (tramp-login-args @@ -98,7 +356,7 @@ ("-c")))) #+END_SRC ** LaTeX -#+BEGIN_SRC emacs-lisp :tangle don-configuration.el +#+BEGIN_SRC emacs-lisp (load "auctex.el" nil t t) (load "preview-latex.el" nil t t) (load "latex.el" nil t t) @@ -106,6 +364,7 @@ ;; this is in the very newest auctex; avoid for now (add-to-list 'LaTeX-fill-excluded-macros '("Sexpr")) + (add-to-list 'TeX-style-path '"/home/don/lib/emacs_el/auctex/style") ;; REFTEX (much enhanced management of cross-ref, labels, etc) ;; http://www.strw.leidenuniv.nl/~dominik/Tools/reftex/ (autoload 'reftex-mode "reftex" "RefTeX Minor Mode" t) @@ -158,7 +417,7 @@ ("OM" "{") ("DL" "{") ("fixme" "{"))) - + (setq-default TeX-parse-self t) (setq-default TeX-auto-save t) (setq-default TeX-master nil) @@ -196,17 +455,19 @@ #+END_SRC ** Org -#+BEGIN_SRC emacs-lisp :tangle don-configuration.el +#+BEGIN_SRC emacs-lisp (require 'org-mode-configuration) #+END_SRC ** ESS -#+BEGIN_SRC emacs-lisp :tangle don-configuration.el - (require 'ess_configuration) +#+BEGIN_SRC emacs-lisp + (use-package ess + :ensure t + :config (require 'ess_configuration)) #+END_SRC ** Polymode -#+BEGIN_SRC emacs-lisp :tangle don-configuration.el +#+BEGIN_SRC emacs-lisp (setq load-path (append '("~/lib/emacs_el/polymode/modes") load-path)) @@ -221,7 +482,7 @@ * Keybindings ** Override other things -#+BEGIN_SRC emacs-lisp :tangle don-configuration.el +#+BEGIN_SRC emacs-lisp ; apparently things like to step on C-;, so we'll use a hack from ; http://stackoverflow.com/questions/683425/globally-override-key-binding-in-emacs/5340797#5340797 to fix this @@ -251,24 +512,24 @@ #+END_SRC * Misc (uncharacterized) -#+BEGIN_SRC emacs-lisp :tangle don-configuration.el +#+BEGIN_SRC emacs-lisp (setq bibtex-user-optional-fields (quote (("annote" "Personal annotation (ignored)") ("abstract" "") ("pmid" "") ("doi" "")))) - (setq calendar-latitude [33 57 north]) - (setq calendar-longitude [117 24 west]) + (setq calendar-latitude 40.11) + (setq calendar-longitude -88.24) (setq case-fold-search t) (setq confirm-kill-emacs (quote y-or-n-p)) (setq cperl-lazy-help-time nil) (setq debian-changelog-mailing-address "don@debian.org") - (setq display-time t) + (display-time) (setq display-time-24hr-format t) (setq display-time-day-and-date t) - (setq display-time-mode t) + (display-time-mode 1) (setq font-latex-fontify-script nil) (setq font-latex-fontify-sectioning (quote color)) (setq font-latex-script-display (quote (nil))) - (setq global-auto-revert-mode t) - (setq global-font-lock-mode t) - (setq icomplete-mode t) + (global-auto-revert-mode 1) + (global-font-lock-mode 1) + (icomplete-mode 1) (setq log-edit-keep-buffer t) (setq mail-user-agent (quote sendmail-user-agent)) (setq markdown-enable-math t) @@ -289,7 +550,8 @@ (setq sentence-end "[.?!][]\"')]*\\($\\| \\| \\)[ ]*") (setq sentence-end-double-space nil) - (setq show-paren-mode t) + ; enable matching parenthesis + (show-paren-mode 1) (tool-bar-mode -1) (setq user-mail-address "don@donarmstrong.com") (setq vc-delete-logbuf-window nil) @@ -723,6 +985,6 @@ #+END_SRC * END -#+BEGIN_SRC emacs-lisp :tangle don-configuration.el +#+BEGIN_SRC emacs-lisp (provide 'don-configuration) #+END_SRC