* 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/") ))
- (package-initialize)
#+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
)
* Modules
** Winnermode
#+BEGIN_SRC emacs-lisp
-(winner-mode 1)
+ (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
;; 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)
- ;; refine diffs always (hilight words)
- (setq magit-diff-refine-hunk 'all)
- ;; load magit-annex
- (setq load-path
- (append '("~/lib/emacs_el/magit-annex")
- load-path))
- (require 'magit-annex)
+ (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
** Helm
#+BEGIN_SRC emacs-lisp
-(require 'don-helm)
+ (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
;; 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)
("OM" "{")
("DL" "{")
("fixme" "{")))
-
+
(setq-default TeX-parse-self t)
(setq-default TeX-auto-save t)
(setq-default TeX-master nil)
#+END_SRC
** ESS
#+BEGIN_SRC emacs-lisp
- (require 'ess_configuration)
+ (use-package ess
+ :ensure t
+ :config (require 'ess_configuration))
#+END_SRC