#+BEGIN_SRC emacs-lisp
(setq debug-on-event 'siguser2)
#+END_SRC
-* Add library paths
-
+* Initial startup stuff
+** Disable startup screen
#+BEGIN_SRC emacs-lisp
- (add-to-list 'load-path '"~/lib/emacs_el/")
- (add-to-list 'load-path '"~/lib/emacs_el/tiny-tools/lisp/tiny")
- (add-to-list 'load-path '"~/lib/emacs_el/tiny-tools/lisp/other")
- (add-to-list 'load-path '"~/lib/emacs_el/magit-annex")
+ (setq inhibit-startup-screen t)
+#+END_SRC
+** Disable cluter
+#+BEGIN_SRC emacs-lisp
+ ; (if (fboundp 'menu-bar-mode) (menu-bar-mode -1))
+ (if (fboundp 'tool-bar-mode) (tool-bar-mode -1))
+ (if (fboundp 'scroll-bar-mode) (scroll-bar-mode -1))
+#+END_SRC
+** Fullscreen
+#+BEGIN_SRC emacs-lisp
+ (setq frame-resize-pixelwise t)
+ (add-to-list 'default-frame-alist '(fullscreen . maximixed))
#+END_SRC
-
* Package management
** package repositories and package manager
+Borrowed from https://github.com/nilcons/emacs-use-package-fast/ to
+load [[https://github.com/jwiegley/use-package/][use-package]] even faster
#+BEGIN_SRC emacs-lisp
- (require 'package)
+ (setq package-enable-at-startup nil)
+ (setq package--init-file-ensured t)
(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
- (package-initialize)
+ (eval-and-compile
+ (setq use-package-verbose (not (bound-and-true-p byte-compile-current-file))))
+ (mapc #'(lambda (add) (add-to-list 'load-path add))
+ (eval-when-compile
+ (package-initialize)
+ (unless (package-installed-p 'use-package)
+ (package-refresh-contents)
+ (package-install 'use-package))
+ (let ((package-user-dir-real (file-truename package-user-dir)))
+ ;; The reverse is necessary, because outside we mapc
+ ;; add-to-list element-by-element, which reverses.
+ (nreverse (apply #'nconc
+ ;; Only keep package.el provided loadpaths.
+ (mapcar #'(lambda (path)
+ (if (string-prefix-p package-user-dir-real path)
+ (list path)
+ nil))
+ load-path))))))
+
(require 'use-package)
+ (require 'diminish)
+ (require 'bind-key)
#+END_SRC
** Paradox
#+BEGIN_SRC emacs-lisp
(use-package paradox
:ensure paradox
- )
+ :commands (paradox-upgrade-packages paradox-list-packages)
+ :config (setq paradox-execute-asynchronously t)
+ )
+#+END_SRC
+* Add library paths
+
+#+BEGIN_SRC emacs-lisp
+ (add-to-list 'load-path '"~/lib/emacs_el/")
+ (add-to-list 'load-path '"~/lib/emacs_el/magit-annex")
#+END_SRC
* Disable custom-vars
#+BEGIN_SRC emacs-lisp
(add-hook 'minibuffer-exit-hook #'don/minibuffer-exit-hook)
#+END_SRC
* Modules
+** Hippie Expand
+#+BEGIN_SRC emacs-lisp
+ (use-package hippie-expand
+ :bind* (("M-<SPC>" . hippie-expand))
+ )
+#+END_SRC
** Flyspell 🐝
#+BEGIN_SRC emacs-lisp
(use-package flyspell
:ensure t
:diminish flyspell-mode 🐝
:config
- (add-hook 'message-mode-hook 'turn-on-flyspell)
(add-hook 'text-mode-hook 'turn-on-flyspell)
(add-hook 'c-mode-common-hook 'flyspell-prog-mode)
(add-hook 'cperl-mode-hook 'flyspell-prog-mode)
)
#+END_SRC
+** Flymake
+#+begin_src emacs-lisp :tangle yes
+ (use-package flymake
+ :diminish "Φ")
+#+end_src
+
** Winnermode
#+BEGIN_SRC emacs-lisp
(winner-mode 1)
** 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)
- ;; )
- ;; )
+ (use-package eyebrowse
+ :ensure t
+ :diminish eyebrowse-mode
+ :init (setq eyebrowse-keymap-prefix (kbd "C-c e"))
+ :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
#+BEGIN_SRC emacs-lisp
;; load tinyprocmail
(use-package tinyprocmail
- :ensure f
- :config (with-library 'tinyprocmail
- ;; (setq tinyprocmail--procmail-version "v3.22")
- (add-hook 'tinyprocmail--load-hook 'tinyprocmail-install))
- )
+ :load-path "~/lib/emacs_el/tiny-tools/lisp/tiny"
+ :mode (".procmailrc" . turn-on-tinyprocmail-mode)
+ )
#+END_SRC
** Magit
:bind (("C-x g" . magit-status)
("C-x C-g" . magit-status))
: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))
- ;; load magit-vcsh
- (setq load-path
- (append '("~/lib/emacs_el/magit-vcsh")
- load-path))
)
(use-package magit-annex
:ensure t
- )
+ :load-path "~/lib/emacs_el/magit-annex/"
+ )
(use-package magit-vcsh
:ensure f ; currently not in melpa, so don't try to install
- )
+ :load-path "~/lib/emacs_el/magit-vcsh/"
+ )
#+END_SRC
** Perl
))
#+END_SRC
+** Markdown mode
+#+BEGIN_SRC emacs-lisp
+ (use-package markdown-mode
+ :ensure t
+ :mode (("\\.md\\'" . markdown-mode)
+ ("\\.mdwn\\'" . markdown-mode)
+ ("README\\.md\\'" . gfm-mode)
+ )
+ :config
+ (setq markdown-enable-math t)
+ (setq markdown-follow-wiki-link-on-enter nil)
+ (bind-key "M-." #'markdown-jump markdown-mode-map)
+ (add-hook 'markdown-mode-hook #'flyspell-mode)
+ (add-hook 'markdown-mode-hook #'outline-minor-mode)
+ (bind-key "C-<tab>" #'outline-cycle markdown-mode-map)
+ )
+
+#+END_SRC
+** SQL mode
+#+BEGIN_SRC emacs-lisp
+ ; load sql-indent when sql is loaded
+(use-package sql
+ :mode (("\\.sql\\'" . sql-mode))
+ :config
+ (require sql-indent))
+#+END_SRC
+** Ediff
+#+BEGIN_SRC emacs-lisp
+ (use-package ediff
+ :commands ediff ediff3
+ :ensure f
+ :config
+ ;; ediff configuration
+ ;; don't use the multi-window configuration
+ (setq ediff-window-setup-function 'ediff-setup-windows-plain)
+ )
+#+END_SRC
+** VCL --editing varnish configuration files
+#+BEGIN_SRC emacs-lisp
+ (use-package vcl-mode
+ :ensure t
+ :mode "\\.vcl\\'"
+ )
+
+#+END_SRC
** Helm
#+BEGIN_SRC emacs-lisp
+ (defun malb/helm-omni (&rest arg)
+ ;; just in case someone decides to pass an argument, helm-omni won't fail.
+ (interactive)
+ (unless helm-source-buffers-list
+ (setq helm-source-buffers-list
+ (helm-make-source "Buffers" 'helm-source-buffers)))
+ (helm-other-buffer
+ (append
+
+ (if (projectile-project-p)
+ '(helm-source-projectile-buffers-list
+ helm-source-buffers-list)
+ '(helm-source-buffers-list)) ;; list of all open buffers
+
+ `(((name . "Virtual Workspace")
+ (candidates . ,(--map (cons (eyebrowse-format-slot it) (car it))
+ (eyebrowse--get 'window-configs)))
+ (action . (lambda (candidate)
+ (eyebrowse-switch-to-window-config candidate)))))
+
+ (if (projectile-project-p)
+ '(helm-source-projectile-recentf-list
+ helm-source-recentf)
+ '(helm-source-recentf)) ;; all recent files
+
+ ;; always make some common files easily accessible
+ ;;'(((name . "Common Files")
+ ;; (candidates . malb/common-file-targets)
+ ;; (action . (("Open" . (lambda (x) (find-file (eval x))))))))
+
+ '(helm-source-files-in-current-dir
+ helm-source-locate
+ helm-source-bookmarks
+ helm-source-buffer-not-found ;; ask to create a buffer otherwise
+ ))
+ "*Helm all the things*"))
(use-package helm
- :ensure t
+ :ensure helm
+ :diminish helm-mode
+ :bind (("M-x" . helm-M-x)
+ ("C-x C-f" . helm-find-files)
+ ("C-x b" . helm-buffers-list) ; malb/helm-omni)
+ ("C-x C-b" . helm-buffers-list) ; malb/helm-omni)
+ ("C-c <SPC>" . helm-all-mark-rings))
:config
+ (require 'helm-config)
+ (require 'helm-for-files)
+ (require 'helm-bookmark)
+
(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))
;;; stolen from https://github.com/malb/emacs.d/blob/master/malb.org
(defun malb/helm-swoop-pre-fill ()
(thing-at-point 'symbol))
- (setq malb/helm-swoop-ignore-major-mode '(dired-mode
- paradox-menu-mode doc-view-mode pdf-view-mode
- mu4e-headers-mode org-mode markdown-mode latex-mode
- ein:notebook-multilang-mode))
+ (defvar malb/helm-swoop-ignore-major-mode "List of major modes to ignore for helm-swoop")
+ (setq malb/helm-swoop-ignore-major-mode '(dired-mode
+ paradox-menu-mode doc-view-mode pdf-view-mode
+ mu4e-headers-mode org-mode markdown-mode latex-mode
+ ein:notebook-multilang-mode))
- (defun malb/swoop-or-search ()
- (interactive)
- (if (or (> (buffer-size) 1048576) ;; helm-swoop can be slow on big buffers
- (memq major-mode malb/helm-swoop-ignore-major-mode))
- (isearch-forward)
- (helm-swoop)))
+ (defun malb/swoop-or-search ()
+ (interactive)
+ (if (or (> (buffer-size) 1048576) ;; helm-swoop can be slow on big buffers
+ (memq major-mode malb/helm-swoop-ignore-major-mode))
+ (isearch-forward)
+ (helm-swoop)))
+
+ (use-package helm-swoop
+ :ensure t
+ :commands helm-swoop
+ :bind (("C-c o" . helm-multi-swoop-org)
+ ("C-s" . malb/swoop-or-search)
+ ("C-M-s" . helm-multi-swoop-all))
+ :config (progn
+
+ (setq helm-swoop-pre-input-function #'malb/helm-swoop-pre-fill
+ helm-swoop-split-with-multiple-windows nil
+ helm-swoop-split-direction #'split-window-horizontally
+ helm-swoop-split-window-function 'helm-default-display-buffer
+ helm-swoop-speed-or-color t)
+
+ ;; https://emacs.stackexchange.com/questions/28790/helm-swoop-how-to-make-it-behave-more-like-isearch
+ (defun malb/helm-swoop-C-s ()
+ (interactive)
+ (if (boundp 'helm-swoop-pattern)
+ (if (equal helm-swoop-pattern "")
+ (previous-history-element 1)
+ (helm-next-line))
+ (helm-next-line)))
+
+ (bind-key "C-S-s" #'helm-swoop-from-isearch isearch-mode-map)
+ (bind-key "C-S-s" #'helm-multi-swoop-all-from-helm-swoop helm-swoop-map)
+ (bind-key "C-r" #'helm-previous-line helm-swoop-map)
+ (bind-key "C-s" #'malb/helm-swoop-C-s helm-swoop-map)
+ (bind-key "C-r" #'helm-previous-line helm-multi-swoop-map)
+ (bind-key "C-s" #'malb/helm-swoop-C-s helm-multi-swoop-map))
+ )
- (use-package helm-swoop
- :ensure t
- :bind (("C-c o" . helm-multi-swoop-org)
- ("C-s" . malb/swoop-or-search)
- ("C-M-s" . helm-multi-swoop-all))
- :config (progn
-
- (setq helm-swoop-pre-input-function #'malb/helm-swoop-pre-fill
- helm-swoop-split-with-multiple-windows nil
- helm-swoop-split-direction #'split-window-horizontally
- helm-swoop-split-window-function 'helm-default-display-buffer
- helm-swoop-speed-or-color t)
-
- ;; https://emacs.stackexchange.com/questions/28790/helm-swoop-how-to-make-it-behave-more-like-isearch
- (defun malb/helm-swoop-C-s ()
- (interactive)
- (if (boundp 'helm-swoop-pattern)
- (if (equal helm-swoop-pattern "")
- (previous-history-element 1)
- (helm-next-line))
- (helm-next-line)))
-
- (bind-key "C-S-s" #'helm-swoop-from-isearch isearch-mode-map)
- (bind-key "C-S-s" #'helm-multi-swoop-all-from-helm-swoop helm-swoop-map)
- (bind-key "C-r" #'helm-previous-line helm-swoop-map)
- (bind-key "C-s" #'malb/helm-swoop-C-s helm-swoop-map)
- (bind-key "C-r" #'helm-previous-line helm-multi-swoop-map)
- (bind-key "C-s" #'malb/helm-swoop-C-s helm-multi-swoop-map))
- )
-
#+END_SRC
*** Helm Ag
#+BEGIN_SRC emacs-lisp
((equal arg 16) (helm-org-rifle-occur-agenda-files))
(t (helm-org-agenda-files-headings)))))))
#+END_SRC
+*** Helm Google
+This can be used to link things pretty quickly if necessary
+#+BEGIN_SRC emacs-lisp
+ (use-package helm-google
+ :ensure t
+ :bind ("C-c h g" . helm-google)
+ :config
+ (progn (add-to-list 'helm-google-actions
+ '("Copy URL" . (lambda (candidate)
+ (let ((url
+ (replace-regexp-in-string
+ "https://.*q=\\(.*\\)\&sa=.*"
+ "\\1" candidate)))
+ (kill-new url))))
+ t
+ )
+
+ (add-to-list 'helm-google-actions
+ '("Org Store Link" . (lambda (candidate)
+ (let ((title (car (split-string candidate "[\n]+")))
+ (url
+ (replace-regexp-in-string
+ "https://.*q=\\(.*\\)\&sa=.*"
+ "\\1" candidate)))
+ (push (list url title) org-stored-links))))
+ t)
+ ))
+#+END_SRC
+
+** Projectile -- Project management
+#+begin_src emacs-lisp
+ (use-package projectile
+ :ensure t
+ :bind (("<f5>" . projectile-compile-project)
+ ("<f6>" . next-error))
+ :config (progn
+ (use-package magit :ensure t)
+ (require 'helm-projectile)
+ (helm-projectile-on)
+
+ (setq projectile-make-test-cmd "make check"
+ projectile-switch-project-action 'helm-projectile
+ projectile-mode-line '(:eval (format "»{%s}" (projectile-project-name))))
+
+ (projectile-global-mode)))
+#+end_src
+*** helm integration
+#+begin_src emacs-lisp
+ (use-package helm-projectile
+ :ensure t
+ :config (progn
+ (defvar malb/helm-source-file-not-found
+ (helm-build-dummy-source
+ "Create file"
+ :action 'find-file))
+
+ (add-to-list
+ 'helm-projectile-sources-list
+ malb/helm-source-file-not-found t)
+
+ (helm-delete-action-from-source
+ "Grep in projects `C-s'"
+ helm-source-projectile-projects)
+
+ (helm-add-action-to-source
+ "Grep in projects `C-s'"
+ 'helm-do-ag helm-source-projectile-projects 4)))
+#+end_src
+** Zap to char
+#+BEGIN_SRC emacs-lisp
+ (use-package avy-zap
+ :ensure t
+ :bind ("M-z" . avy-zap-up-to-char-dwim))
+#+END_SRC
** Hydra
-#+BEGIN_SRC emacs-lisp :tangle don-configuration.el
-(require 'don-hydra)
+#+BEGIN_SRC emacs-lisp
+ (use-package hydra
+ :bind (("C-c 2" . my/hydra-orgmodes/body)
+ ("C-c @" . my/hydra-orgmodes/body)
+ ("C-c #" . my/hydra-outline/body)
+ ("C-c 3" . my/hydra-outline/body)
+ )
+ :config
+ (defhydra my/hydra-orgmodes (:color blue :hint nil)
+ "
+ _n_: notes _c_: chaim _w_: wildman _o_: ool
+ _u_: uddin _s_: steve _r_: refile _f_: fh
+ _p_: read papers _R_: paper notes
+ _h_: hpcbio
+ _q_: quit
+ _z_: quit
+ "
+ ("n" (find-file "~/projects/org-notes/notes.org"))
+ ("c" (find-file "~/projects/org-notes/chaim.org"))
+ ("w" (find-file "~/projects/org-notes/wildman.org"))
+ ("u" (find-file "~/projects/org-notes/uddin.org"))
+ ("o" (find-file "~/projects/org-notes/ool.org"))
+ ("f" (find-file "~/projects/org-notes/fh.org"))
+ ("s" (find-file "~/projects/org-notes/sndservers.org"))
+ ("r" (find-file "~/projects/org-notes/refile.org"))
+ ("p" (find-file "~/projects/research/papers_to_read.org"))
+ ("R" (find-file "~/projects/research/paper_notes.org"))
+ ("h" (find-file "~/projects/org-notes/hpcbio.org"))
+ ("q" nil "quit")
+ ("z" nil "quit")
+ )
+
+ ;; from https://github.com/abo-abo/hydra/wiki/Emacs
+ (defhydra my/hydra-outline (:color pink :hint nil)
+ "
+ ^Hide^ ^Show^ ^Move
+ ^^^^^^------------------------------------------------------
+ _q_: sublevels _a_: all _u_: up
+ _t_: body _e_: entry _n_: next visible
+ _o_: other _i_: children _p_: previous visible
+ _c_: entry _k_: branches _f_: forward same level
+ _l_: leaves _s_: subtree _b_: backward same level
+ _d_: subtree
+
+ "
+ ;; Hide
+ ("q" outline-hide-sublevels) ; Hide everything but the top-level headings
+ ("t" outline-hide-body) ; Hide everything but headings (all body lines)
+ ("o" outline-hide-other) ; Hide other branches
+ ("c" outline-hide-entry) ; Hide this entry's body
+ ("l" outline-hide-leaves) ; Hide body lines in this entry and sub-entries
+ ("d" outline-hide-subtree) ; Hide everything in this entry and sub-entries
+ ;; Show
+ ("a" outline-show-all) ; Show (expand) everything
+ ("e" outline-show-entry) ; Show this heading's body
+ ("i" outline-show-children) ; Show this heading's immediate child sub-headings
+ ("k" outline-show-branches) ; Show all sub-headings under this heading
+ ("s" outline-show-subtree) ; Show (expand) everything in this heading & below
+ ;; Move
+ ("u" outline-up-heading) ; Up
+ ("n" outline-next-visible-heading) ; Next
+ ("p" outline-previous-visible-heading) ; Previous
+ ("f" outline-forward-same-level) ; Forward - same level
+ ("b" outline-backward-same-level) ; Backward - same level
+ ("z" nil "leave"))
+ )
#+END_SRC
** Tramp
#+BEGIN_SRC emacs-lisp
- (add-to-list 'tramp-methods '("vcsh"
- (tramp-login-program "vcsh")
- (tramp-login-args
- (("enter")
- ("%h")))
- (tramp-remote-shell "/bin/sh")
- (tramp-remote-shell-args
- ("-c"))))
+ (use-package tramp
+ :config
+ (add-to-list 'tramp-methods '("vcsh"
+ (tramp-login-program "vcsh")
+ (tramp-login-args
+ (("enter")
+ ("%h")))
+ (tramp-remote-shell "/bin/sh")
+ (tramp-remote-shell-args
+ ("-c")))))
#+END_SRC
** Reftex
#+BEGIN_SRC emacs-lisp
(setq-default reftex-default-bibliography
'("~/projects/research/references.bib")))
#+END_SRC
+** BibTex
+#+BEGIN_SRC emacs-lisp
+ (use-package bibtex
+ :config (setq bibtex-user-optional-fields
+ (quote (("annote" "Personal annotation (ignored)")
+ ("abstract" "")
+ ("pmid" "")
+ ("doi" ""))))
+ )
+
+#+END_SRC
** LaTeX
#+BEGIN_SRC emacs-lisp
(use-package tex
("fixme" "{"))
)
)
+ (setq font-latex-fontify-script nil)
+ (setq font-latex-fontify-sectioning (quote color))
+ (setq font-latex-script-display (quote (nil)))
)
#+END_SRC
-*** Org-Gcal
-#+BEGIN_SRC emacs-lisp
- (use-package calfw
- :ensure f
- )
- (use-package calfw-org
- :ensure f
- )
- (use-package org-gcal
- :ensure f
- :config '((if (file-readable-p "~/.hide/org_gcal.el")
- (load-file "~/.hide/org_gcal.el"))
- )
- )
-#+END_SRC
** ESS
#+BEGIN_SRC emacs-lisp
(use-package ess
:ensure t
+ :commands R
+ :mode ("\\.R\\'" . ess-r-mode)
+ :bind (:map ess-mode-map
+ ("C-c C-R" . dla/ess-region-remote-eval))
+ :init
+ (autoload 'ess-r-mode "ess-site" nil t)
+ (autoload 'R "ess-site" nil t)
:config
+ ; actually load the rest of ess
+ (require 'ess-site)
(defun ess-change-directory (path)
"Set the current working directory to PATH for both *R* and Emacs."
- (interactive "DDirectory to change to: ")
+ (interactive "Directory to change to: ")
(when (file-exists-p path)
(ess-command (concat "setwd(\"" path "\")\n"))
((looking-at "^[a-zA-Z0-9_\.]+ ?<- ?function(.*{") 3)
(t 1000)))
))
- (add-hook 'ess-mode-hook
- '(lambda ()
- (local-set-key (kbd "C-c C-R")
- 'dla/ess-region-remote-eval)))
-
+ (defun dla/ess-region-remote-eval (start end)
+ "Evaluate region in a remote ESS instance"
+ (interactive "r")
+ (shell-command-on-region start end "eval_r" (get-buffer-create "***essregionremoteeval***"))
+ kill-buffer "***essregionremoteeval***")
;; Don't restore history or save workspace image
'(inferior-R-args "--no-restore-history --no-save")
)
*** Outline magic
#+BEGIN_SRC emacs-lisp
(use-package outline-magic)
+#+END_SRC
+*** Outline mode
+#+BEGIN_SRC emacs-lisp
+;; change the outline mode prefix from C-c @ to C-c C-2
+(setq outline-minor-mode-prefix "C-c C-2")
+;;(add-hook 'outline-minor-mode-hook
+;; (lambda () (local-set-key (kbd "C-c C-2")
+;; outline-mode-prefix-map)))
+
#+END_SRC
** Writeroom Mode
#+BEGIN_SRC emacs-lisp
[[https://github.com/magnars/multiple-cursors.el][Multiple Cursors]]
#+BEGIN_SRC emacs-lisp
(use-package multiple-cursors
- :bind (("C-;" . mc/mark-all-dwim)
- ("C-<" . mc/mark-previous-like-this)
- ("C->" . mc/mark-next-like-this)
- ("C-S-c C-S-c" . mc/edit-lines))
+ :bind* (("C-;" . mc/mark-all-dwim)
+ ("C-<" . mc/mark-previous-like-this)
+ ("C->" . mc/mark-next-like-this)
+ ("C-S-c C-S-c" . mc/edit-lines))
)
#+END_SRC
** Web Mode
'(("template-toolkit" . "\\.tmpl\\'")))
)
#+END_SRC
+** Spamassassin Mode
+#+BEGIN_SRC emacs-lisp
+ (use-package spamassassin-mode
+ :commands spamassassin-mode
+ :ensure f
+ )
+#+END_SRC
+** Password Store
+#+BEGIN_SRC emacs-lisp
+ (use-package password-store
+ :ensure f
+ :commands password-store-edit password-store-create
+ )
+#+END_SRC
+** CSS mode
+#+BEGIN_SRC emacs-lisp
+ (use-package css
+ :mode "\\.css'"
+ :config
+ ;; fix up css mode to not be silly
+ ;; from http://www.stokebloke.com/wordpress/2008/03/21/css-mode-indent-buffer-fix/
+ (setq cssm-indent-level 4)
+ (setq cssm-newline-before-closing-bracket t)
+ (setq cssm-indent-function #'cssm-c-style-indenter)
+ (setq cssm-mirror-mode nil))
+#+END_SRC
+** Abbrev Mode
+#+BEGIN_SRC emacs-lisp
+ (use-package abbrev
+ :diminish abbrev-mode
+ :config
+ ;; load abbreviations from
+ (setq abbrev-file-name
+ "~/.emacs_abbrev_def")
+
+ ;; read the abbrev file if it exists
+ (if (file-exists-p abbrev-file-name)
+ (quietly-read-abbrev-file))
+
+ ;; for now, use abbrev mode everywhere
+ (setq default-abbrev-mode t))
+#+END_SRC
+
+* Email
+** Mutt
+*** Message-mode
+#+BEGIN_SRC emacs-lisp
+ (use-package message
+ :ensure f
+ :diminish (message "✉")
+ :mode ("muttng-[a-z0-9]+-[0-9]+-" . message-mode)
+ :mode ("mutt-[a-z0-9]+-[0-9]+-" . message-mode)
+ :hook 'my/message-mode-settings
+ :hook 'turn-on-flyspell
+ :bind (:map message-mode-map
+ ("C-c C-a" . my/post-attach-file))
+ :delight (message-mode "✉")
+ :config
+ (defun my/message-mode-settings ()
+ (font-lock-add-keywords nil
+ '(("^[ \t]*>[ \t]*>[ \t]*>.*$"
+ (0 'message-multiply-quoted-text-face))
+ ("^[ \t]*>[ \t]*>.*$"
+ (0 'message-double-quoted-text-face))))
+ )
+
+ (defun my/post-attach-file ()
+ "Prompt for an attachment."
+ (interactive)
+ (let ((file (read-file-name "Attach file: " nil nil t nil)))
+ (my/header-attach-file file "")))
+
+ (defun my/header-attach-file (file description)
+ "Attach a FILE to the current message (works with Mutt).
+ Argument DESCRIPTION MIME description."
+ (interactive "fAttach file: \nsDescription: ")
+ (when (> (length file) 0)
+ (save-excursion
+ (save-match-data
+ (save-restriction
+ (widen)
+ (goto-char (point-min))
+ (search-forward-regexp "^$")
+ (insert (concat "Attach: " (replace-regexp-in-string "\\([[:space:]\\]\\)" "\\\\\\1" (file-truename file)) " "
+ description "\n"))
+ (message (concat "Attached '" file "'."))
+ (setq post-has-attachment t))))))
+
+ (setq mail-yank-prefix "> ")
+ )
+#+END_SRC
+*** Muttrc mode
+#+BEGIN_SRC emacs-lisp
+ (use-package muttrc-mode
+ :mode "muttngrc"
+ :mode "muttrc"
+ )
+
+#+END_SRC
+* Base emacs
+** Reverting buffers
+#+BEGIN_SRC emacs-lisp
+ (use-package autorevert
+ :diminish auto-revert-mode
+ :config
+ (setq global-auto-revert-non-file-buffers t
+ global-auto-revert-ignore-modes '(pdf-view-mode)
+ auto-revert-verbose nil)
+ (global-auto-revert-mode 1))
+#+END_SRC
* Org Mode
** Use-package and load things
#+BEGIN_SRC emacs-lisp
(use-package org
- :config
-
+ :delight (org-mode "ø")
+ :mode ("\\.\\(org\\|org_archive\\|txt\\)\\'" . org-mode)
+ :bind (("C-c l" . org-store-link)
+ ("C-c a" . org-agenda)
+ ("C-c b" . org-iswitchb))
#+END_SRC
** Agenda Configuration
#+BEGIN_SRC emacs-lisp
- ;; The following lines are always needed. Choose your own keys.
- (add-to-list 'auto-mode-alist '("\\.\\(org\\|org_archive\\|txt\\)$" . org-mode))
- (global-set-key "\C-cl" 'org-store-link)
- (global-set-key "\C-ca" 'org-agenda)
- (global-set-key "\C-cb" 'org-iswitchb)
+ :config
(setq-default org-log-done 'time)
(setq-default org-agenda-ndays 5)
"~/projects/org-notes/wildman.org"
"~/projects/org-notes/uddin.org"
"~/projects/org-notes/reviews.org"
- "~/projects/org-notes/hpcbio.org"
"~/org-mode/from-mobile.org"
"~/projects/org-notes/fh.org")))
(with-temp-buffer
(dolist (org-agenda-file org-agenda-files)
(insert-file-contents org-agenda-file nil)
- (end-of-buffer)
+ (goto-char (point-max))
(newline))
(write-file "/tmp/timeline.org")
(org-agenda arg "L")))
(define-key org-mode-map (kbd "C-c t") 'org-agenda-timeline-all)
- ;; add automatic reminders for appointments
- (defadvice org-agenda-redo (after org-agenda-redo-add-appts)
- "Pressing `r' on the agenda will also add appointments."
- (progn
- (setq appt-time-msg-list nil)
- (org-agenda-to-appt)))
#+END_SRC
** General config
#+END_SRC
** Org mode key bindings
#+BEGIN_SRC emacs-lisp
- ; org mode configuration from http://doc.norang.ca/org-mode.html
+ ;; org mode configuration from http://doc.norang.ca/org-mode.html
;; Custom Key Bindings
- (global-set-key (kbd "<f12>") 'org-agenda)
- (global-set-key (kbd "<f5>") 'bh/org-todo)
- (global-set-key (kbd "<S-f5>") 'bh/widen)
- (global-set-key (kbd "<f7>") 'bh/set-truncate-lines)
- (global-set-key (kbd "<f8>") 'org-cycle-agenda-files)
- (global-set-key (kbd "<f9> <f9>") 'bh/show-org-agenda)
- (global-set-key (kbd "<f9> b") 'bbdb)
- (global-set-key (kbd "<f9> c") 'calendar)
- (global-set-key (kbd "<f9> f") 'boxquote-insert-file)
- (global-set-key (kbd "<f9> h") 'bh/hide-other)
- (global-set-key (kbd "<f9> n") 'bh/toggle-next-task-display)
- (global-set-key (kbd "<f9> w") 'widen)
-
- ; change the outline mode prefix from C-c @ to C-c C-2
- (setq outline-minor-mode-prefix "C-c C-2")
- ;(add-hook 'outline-minor-mode-hook
- ; (lambda () (local-set-key (kbd "C-c C-2")
- ; outline-mode-prefix-map)))
-
- (global-set-key (kbd "<f9> I") 'bh/punch-in)
- (global-set-key (kbd "<f9> O") 'bh/punch-out)
-
- (global-set-key (kbd "<f9> o") 'bh/make-org-scratch)
-
- (global-set-key (kbd "<f9> r") 'boxquote-region)
- (global-set-key (kbd "<f9> s") 'bh/switch-to-scratch)
-
- (global-set-key (kbd "<f9> t") 'bh/insert-inactive-timestamp)
- (global-set-key (kbd "<f9> T") 'bh/toggle-insert-inactive-timestamp)
-
- (global-set-key (kbd "<f9> v") 'visible-mode)
- (global-set-key (kbd "<f9> l") 'org-toggle-link-display)
- (global-set-key (kbd "<f9> SPC") 'bh/clock-in-last-task)
- (global-set-key (kbd "C-<f9>") 'previous-buffer)
- (global-set-key (kbd "M-<f9>") 'org-toggle-inline-images)
- (global-set-key (kbd "C-x n r") 'narrow-to-region)
- (global-set-key (kbd "C-<f10>") 'next-buffer)
- (global-set-key (kbd "<f11>") 'org-clock-goto)
- (global-set-key (kbd "C-<f11>") 'org-clock-in)
- (global-set-key (kbd "C-s-<f12>") 'bh/save-then-publish)
- (global-set-key (kbd "C-c c") 'org-capture)
-
+ :bind* (("<f9> a" . org-agenda)
+ ("<f9> I" . bh/punch-in)
+ ("<f9> O" . bh/punch-out)
+ ("<f9> SPC" . bh/clock-in-last-task)
+ ("<f12>" . org-agenda)
+ ;; ("<f5>" . bh/org-todo)
+ ("<S-f5>" . bh/widen)
+ ("<f7>" . bh/set-truncate-lines)
+ ("<f8>" . org-cycle-agenda-files)
+ ("<f9> <f9>" . bh/show-org-agenda)
+ ("<f9> b" . bbdb)
+ ("<f9> c" . calendar)
+ ("<f9> f" . boxquote-insert-file)
+ ("<f9> h" . bh/hide-other)
+ ("<f9> n" . bh/toggle-next-task-display)
+ ("<f9> w" . widen)
+
+ ("<f9> o" . bh/make-org-scratch)
+
+ ("<f9> r" . boxquote-region)
+ ("<f9> s" . bh/switch-to-scratch)
+
+ ("<f9> t" . bh/insert-inactive-timestamp)
+ ("<f9> T" . bh/toggle-insert-inactive-timestamp)
+
+ ("<f9> v" . visible-mode)
+ ("<f9> l" . org-toggle-link-display)
+ ("<f9> SPC" . bh/clock-in-last-task)
+ ("C-<f9>" . previous-buffer)
+ ("M-<f9>" . org-toggle-inline-images)
+ ("C-x n r" . narrow-to-region)
+ ("C-<f10>" . next-buffer)
+ ("<f11>" . org-clock-goto)
+ ("C-<f11>" . org-clock-in)
+ ("C-s-<f12>" . bh/save-then-publish)
+ ("C-c c" . org-capture))
+ :config
#+END_SRC
** Utility Functions
#+BEGIN_SRC emacs-lisp
do not already have one."
(interactive)
(org-map-entries 'org-id-get-create))
+ (defun dla/org-update-ids-to-headlines-in-file ()
+ "Add or replace ID properties to all headlines in the current file
+ (or narrowed region)."
+ (interactive)
+ (org-map-entries '(lambda () (org-id-get-create t))))
; if we wanted to do this to every buffer, do the following:
; (add-hook 'org-mode-hook
; (lambda ()
(unless (bolp) (insert "\n"))))))))))))
#+END_SRC
-** End use-package
+** Org-Gcal
#+BEGIN_SRC emacs-lisp
- )
+ (use-package calfw
+ :ensure f
+ )
+ (use-package calfw-org
+ :ensure f
+ )
+ (use-package org-gcal
+ :ensure f
+ :config '((if (file-readable-p "~/.hide/org_gcal.el")
+ (load-file "~/.hide/org_gcal.el"))
+ )
+ )
#+END_SRC
-* Keybindings
-** Override other things
+** appt integration
#+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
-
- (defvar my-keys-minor-mode-map (make-keymap) "my-keys-minor-mode keymap.")
-
- ; use mc everywhere
- (define-key my-keys-minor-mode-map (kbd "C-;") 'mc/mark-all-dwim)
- ;; use outline mode keybindings everywhere
- ;; (define-key my-keys-minor-mode-map (kbd "C-;") 'my/mydra-outline/body)
-
- (define-minor-mode my-keys-minor-mode
- "A minor mode so that my key settings override annoying major modes."
- t " my-keys" 'my-keys-minor-mode-map)
+ (use-package appt
+ :ensure f
+ :config
+ ;; Show notification 10 minutes before event
+ (setq appt-message-warning-time 10)
+ ;; Disable multiple reminders
+ (setq appt-display-interval appt-message-warning-time)
+ (setq appt-display-mode-line nil)
+
+ ;; add automatic reminders for appointments
+ (defun my/org-agenda-to-appt ()
+ (interactive)
+ (setq appt-time-msg-list nil)
+ (org-agenda-to-appt))
+ ;; add reminders when starting emacs
+ (my/org-agenda-to-appt)
+ ;; when rebuilding the agenda
+ (defadvice org-agenda-redo (after org-agenda-redo-add-appts)
+ "Pressing `r' on the agenda will also add appointments."
+ (my/org-agenda-to-appt)
+ )
+ ;; when saving all org buffers
+ (defadvice org-save-all-org-buffers (after org-save-all-org-buffers-add-appts)
+ "Re-add appts after saving all org buffers"
+ (my/org-agenda-to-appt))
+ ;; Display appointments as a window manager notification
+ (setq appt-disp-window-function 'my/appt-display)
+ (setq appt-delete-window-function (lambda () t))
+
+ (setq my/appt-notification-app (concat (getenv "HOME") "/bin/appt_notification"))
+
+ (defun my/appt-display (min-to-app new-time msg)
+ (if (atom min-to-app)
+ (start-process "my/appt-notification-app" nil my/appt-notification-app min-to-app msg)
+ (dolist (i (number-sequence 0 (1- (length min-to-app))))
+ (start-process "my/appt-notification-app" nil my/appt-notification-app
+ (nth i min-to-app) (nth i msg))))
+ )
+ )
- (my-keys-minor-mode 1)
- (defun my-minibuffer-setup-hook ()
- (my-keys-minor-mode 0))
- (add-hook 'minibuffer-setup-hook 'my-minibuffer-setup-hook)
- (defadvice load (after give-my-keybindings-priority)
- "Try to ensure that my keybindings always have priority."
- (if (not (eq (car (car minor-mode-map-alist)) 'my-keys-minor-mode))
- (let ((mykeys (assq 'my-keys-minor-mode minor-mode-map-alist)))
- (assq-delete-all 'my-keys-minor-mode minor-mode-map-alist)
- (add-to-list 'minor-mode-map-alist mykeys))))
- (ad-activate 'load)
#+END_SRC
+** End use-package
+#+BEGIN_SRC emacs-lisp
+ )
+#+END_SRC
+* Keybindings
** Goto line
#+BEGIN_SRC emacs-lisp
(global-unset-key "\M-g")
(global-set-key (kbd "M-g l") 'goto-line)
#+END_SRC
+* Debian
+** debian-changelog
+#+BEGIN_SRC emacs-lisp
+ (use-package debian-changelog
+ :ensure f
+ :mode "debian/changelog"
+ :config
+ (setq debian-changelog-mailing-address "don@debian.org")
+ (setq debian-changelog-full-name "Don Armstrong"))
+#+END_SRC
* Misc (uncharacterized)
#+BEGIN_SRC emacs-lisp
- (setq bibtex-user-optional-fields (quote (("annote" "Personal annotation (ignored)") ("abstract" "") ("pmid" "") ("doi" ""))))
- (setq calendar-latitude 40.11)
- (setq calendar-longitude -88.24)
+ (setq calendar-latitude 38.6)
+ (setq calendar-longitude -121.5)
(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")
(display-time)
(setq display-time-24hr-format t)
(setq display-time-day-and-date 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)))
- (global-auto-revert-mode 1)
(global-font-lock-mode 1)
(icomplete-mode 1)
(setq log-edit-keep-buffer t)
(setq markdown-enable-math t)
(setq markdown-follow-wiki-link-on-enter nil)
(setq mutt-alias-file-list (quote ("~/.mutt/aliases" "~/.mail_aliases")))
- (setq post-email-address "don@donarmstrong.com")
- (setq post-kill-quoted-sig nil)
- (setq post-mail-message "mutt\\(ng\\|\\)-[a-z0-9]+-[0-9]+-.*")
- (setq post-uses-fill-mode nil)
(setq ps-footer-font-size (quote (8 . 10)))
(setq ps-header-font-size (quote (8 . 10)))
(setq ps-header-title-font-size (quote (10 . 10)))
(fset 'perl-mode 'cperl-mode)
;;(load-file "cperl-mode.el")
- (require 'vcl-mode)
-
- (require 'tex-site)
- ;;(require 'psvn)
- ;;(require 'ecasound)
- ;;(require 'emacs-wiki)
- (require 'bibtex)
- (require 'post)
- ;;(require 'fixme)
- ; (require 'google-weather)
- ; (require 'org-google-weather)
- ; (setq-default org-google-weather-format "%i %c, [%l,%h] %s %C")
-
- (global-set-key "\C-xp" 'server-edit)
-
- (setq-default auto-mode-alist (cons '("\.wml$" .
- (lambda () (html-mode) (auto-fill-mode)))
- auto-mode-alist))
-
-
- ; use markdown mode for mdwn files
- (add-to-list 'auto-mode-alist '("\\.mdwn$" . markdown-mode))
- (add-to-list 'auto-mode-alist '("\\.md$" . markdown-mode))
-
-
;; tramp configuration
(setq tramp-use-ssh-controlmaster-options nil)
- ; mail configuration
- (add-to-list 'auto-mode-alist '("muttng-[a-z0-9]+-[0-9]+-" . message-mode))
- (add-to-list 'auto-mode-alist '("muttngrc" . muttrc-mode))
-
- (add-to-list 'auto-mode-alist '("mutt-[a-z0-9]+-[0-9]+-" . message-mode))
- (add-to-list 'auto-mode-alist '("muttrc" . muttrc-mode))
- (defun my-message-mode-settings ()
- (font-lock-add-keywords nil
- '(("^[ \t]*>[ \t]*>[ \t]*>.*$"
- (0 'message-multiply-quoted-text-face))
- ("^[ \t]*>[ \t]*>.*$"
- (0 'message-double-quoted-text-face))))
- (local-set-key (kbd "C-c C-a") 'my-post-attach-file)
- )
- (add-hook 'message-mode-hook 'my-message-mode-settings)
-
- (defun my-post-attach-file ()
- "Prompt for an attachment."
- (interactive)
- (let ((file (read-file-name "Attach file: " nil nil t nil))
- (description (string-read "Description: ")))
- (my-header-attach-file file description)))
-
- (symbol-function 'my-post-attach-file)
-
- (defun my-header-attach-file (file description)
- "Attach a FILE to the current message (works with Mutt).
- Argument DESCRIPTION MIME description."
- (interactive "fAttach file: \nsDescription: ")
- (when (> (length file) 0)
- (save-excursion
- (save-match-data
- (save-restriction
- (widen)
- (goto-char (point-min))
- (search-forward-regexp "^$")
- (insert (concat "Attach: " (replace-regexp-in-string "\\([[:space:]\\]\\)" "\\\\\\1" (file-truename file)) " "
- description "\n"))
- (message (concat "Attached '" file "'."))
- (setq post-has-attachment t))))))
-
-
-
- (setq mail-yank-prefix "> ")
-
- ;; self-insert-command hack.
- ;; Without this, "if<SP>" expands to
- ;; if ( -!-) {
- ;; }
- ;; which really should be,
- ;; if (-!-) {
- ;; }
-
-
-
- ;(load-library "php-mode")
-
(setq-default c-indent-level 4)
(setq-default c-brace-imaginary-offset 0)
(setq-default c-brace-offset -4)
)
(column-number-mode t)
-
- ; (require 'mode-compile)
-
- (defadvice server-process-filter (after post-mode-message first activate)
- "If the buffer is in post mode, overwrite the server-edit
- message with a post-save-current-buffer-and-exit message."
- (if (eq major-mode 'post-mode)
- (message
- (substitute-command-keys "Type \\[describe-mode] for help composing; \\[post-save-current-buffer-and-exit] when done."))))
- ; This is also needed to see the magic message. Set to a higher
- ; number if you have a faster computer or read slower than me.
- '(font-lock-verbose 1000)
- ;(setq-default server-temp-file-regexp "mutt\(-\|ng-\)")
- ; (add-hook 'server-switch-hook
- ; (function (lambda()
- ; (cond ((string-match "Post" mode-name)
- ; (post-goto-body)))
- ; set-buffer-file-coding-system 'utf-8
- ; )))
- ;
-
- (add-hook 'post-mode-hook
- (auto-fill-mode nil)
- )
- ; abbrev mode settings
- ; load abbreviations from
- (setq abbrev-file-name
- "~/.emacs_abbrev_def")
-
- ; read the abbrev file if it exists
- (if (file-exists-p abbrev-file-name)
- (quietly-read-abbrev-file))
-
- ; for now, use abbrev mode everywhere
- (setq default-abbrev-mode t)
-
-
- (defun insert-function-documentation ()
- "Insert function documentation"
- (interactive)
- (insert-file-contents "/home/don/lib/templates/perl_function_documentation" nil))
- (global-set-key "\M-f" 'insert-function-documentation)
-
- (eval-after-load "lilypond-mode"
- '(progn
- (load-library "lyqi-mode")
- (define-key LilyPond-mode-map "\C-cq" 'lyqi-mode)))
-
- (autoload 'spamassassin-mode "spamassassin-mode" nil t)
-
- (desktop-load-default)
- (desktop-read)
+
+#+END_SRC
+** Desktop-save-mode
+If the envvar EMACS_SERVER_NAME is set, consider this a separate
+emacs, and use a different desktop file to restore history
+#+BEGIN_SRC emacs-lisp
+ (use-package emacs
+ :demand
+ :config
+ (setq desktop-base-file-name
+ (convert-standard-filename
+ (concat ".emacs"
+ (or (getenv "EMACS_SERVER_NAME")
+ "")
+ ".desktop")
+ ))
+ (setq desktop-base-lock-name
+ (convert-standard-filename
+ (concat desktop-base-file-name
+ ".lock")))
+ (setq desktop-auto-save-timeout 60)
+ (setq desktop-restore-eager 5)
+ (setq desktop-lazy-verbose nil)
+ (desktop-save-mode 1)
+ ; (desktop-read)
+ )
+#+END_SRC
+** Misc (Uncharacterized)
+#+BEGIN_SRC emacs-lisp
'(icomplete-mode on)
(custom-set-faces
;; custom-set-faces was added by Custom.
; Outline-minor-mode key map
(define-prefix-command 'cm-map nil "Outline-")
; HIDE
- (define-key cm-map "q" 'hide-sublevels) ; Hide everything but the top-level headings
- (define-key cm-map "t" 'hide-body) ; Hide everything but headings (all body lines)
- (define-key cm-map "o" 'hide-other) ; Hide other branches
- (define-key cm-map "c" 'hide-entry) ; Hide this entry's body
- (define-key cm-map "l" 'hide-leaves) ; Hide body lines in this entry and sub-entries
- (define-key cm-map "d" 'hide-subtree) ; Hide everything in this entry and sub-entries
+ (define-key cm-map "q" 'outline-hide-sublevels) ; Hide everything but the top-level headings
+ (define-key cm-map "t" 'outline-hide-body) ; Hide everything but headings (all body lines)
+ (define-key cm-map "o" 'outline-hide-other) ; Hide other branches
+ (define-key cm-map "c" 'outline-hide-entry) ; Hide this entry's body
+ (define-key cm-map "l" 'outline-hide-leaves) ; Hide body lines in this entry and sub-entries
+ (define-key cm-map "d" 'outline-hide-subtree) ; Hide everything in this entry and sub-entries
; SHOW
- (define-key cm-map "a" 'show-all) ; Show (expand) everything
- (define-key cm-map "e" 'show-entry) ; Show this heading's body
- (define-key cm-map "i" 'show-children) ; Show this heading's immediate child sub-headings
- (define-key cm-map "k" 'show-branches) ; Show all sub-headings under this heading
- (define-key cm-map "s" 'show-subtree) ; Show (expand) everything in this heading & below
+ (define-key cm-map "a" 'outline-show-all) ; Show (expand) everything
+ (define-key cm-map "e" 'outline-show-entry) ; Show this heading's body
+ (define-key cm-map "i" 'outline-show-children) ; Show this heading's immediate child sub-headings
+ (define-key cm-map "k" 'outline-show-branches) ; Show all sub-headings under this heading
+ (define-key cm-map "s" 'outline-show-subtree) ; Show (expand) everything in this heading & below
; MOVE
(define-key cm-map "u" 'outline-up-heading) ; Up
(define-key cm-map "n" 'outline-next-visible-heading) ; Next
(define-key cm-map "f" 'outline-forward-same-level) ; Forward - same level
(define-key cm-map "b" 'outline-backward-same-level) ; Backward - same level
(global-set-key "\M-o" cm-map)
-
-
- ; debian stuff
- (setq-default debian-changelog-mailing-address "don@debian.org")
- (setq-default debian-changelog-full-name "Don Armstrong")
-
- ; ediff configuration
- ; don't use the multi-window configuration
- (setq ediff-window-setup-function 'ediff-setup-windows-plain)
-
- ; fix up css mode to not be silly
- ; from http://www.stokebloke.com/wordpress/2008/03/21/css-mode-indent-buffer-fix/
- (setq cssm-indent-level 4)
- (setq cssm-newline-before-closing-bracket t)
- (setq cssm-indent-function #'cssm-c-style-indenter)
- (setq cssm-mirror-mode nil)
-
- (require 'multi-web-mode)
- (setq mweb-default-major-mode 'html-mode)
- (setq mweb-tags '((php-mode "<\\?php\\|<\\? \\|<\\?=" "\\?>")
- (js-mode "<script +\\(type=\"text/javascript\"\\|language=\"javascript\"\\)[^>]*>" "</script>")
- (css-mode "<style +type=\"text/css\"[^>]*>" "</style>")))
- (setq mweb-filename-extensions '("php" "htm" "html" "ctp" "phtml" "php4" "php5"))
- (multi-web-global-mode 1)
-
- ;;; alias the new `flymake-report-status-slim' to
- ;;; `flymake-report-status'
- (defalias 'flymake-report-status 'flymake-report-status-slim)
- (defun flymake-report-status-slim (e-w &optional status)
- "Show \"slim\" flymake status in mode line."
- (when e-w
- (setq flymake-mode-line-e-w e-w))
- (when status
- (setq flymake-mode-line-status status))
- (let* ((mode-line " Φ"))
- (when (> (length flymake-mode-line-e-w) 0)
- (setq mode-line (concat mode-line ":" flymake-mode-line-e-w)))
- (setq mode-line (concat mode-line flymake-mode-line-status))
- (setq flymake-mode-line mode-line)
- (force-mode-line-update)))
-
- ; load sql-indent when sql is loaded
- (eval-after-load "sql"
- '(load-library "sql-indent"))
-
; fix up tmux xterm keys
; stolen from http://unix.stackexchange.com/questions/24414/shift-arrow-not-working-in-emacs-within-tmux
(defun fix-up-tmux-keys ()
)
; (add-hook 'tty-setup-hook 'fix-up-tmux-keys)
- ; procmailmode configuration
- (load "procmail_mode")
-
- (load "mode-line-cleaner")
-
(defadvice ask-user-about-supersession-threat (around ask-user-about-supersession-threat-if-necessary)
"Call ask-user-about-supersession-threat only if the buffer is actually obsolete."
(if (or (buffer-modified-p)
(clear-visited-file-modtime)
(not-modified)))
(ad-activate 'ask-user-about-supersession-threat)
-
- ; 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
-
- (defvar my-keys-minor-mode-map (make-keymap) "my-keys-minor-mode keymap.")
-
- ; use iedit everywhere
- (define-key my-keys-minor-mode-map (kbd "C-;") 'mc/mark-all-dwim)
-
- (define-minor-mode my-keys-minor-mode
- "A minor mode so that my key settings override annoying major modes."
- t " my-keys" 'my-keys-minor-mode-map)
-
- (my-keys-minor-mode 1)
- (defun my-minibuffer-setup-hook ()
- (my-keys-minor-mode 0))
-
- (add-hook 'minibuffer-setup-hook 'my-minibuffer-setup-hook)
- (defadvice load (after give-my-keybindings-priority)
- "Try to ensure that my keybindings always have priority."
- (if (not (eq (car (car minor-mode-map-alist)) 'my-keys-minor-mode))
- (let ((mykeys (assq 'my-keys-minor-mode minor-mode-map-alist)))
- (assq-delete-all 'my-keys-minor-mode minor-mode-map-alist)
- (add-to-list 'minor-mode-map-alist mykeys))))
- (ad-activate 'load)
- (global-set-key "\M- " 'hippie-expand)
-
#+END_SRC
-* Server
+* Start Server
#+BEGIN_SRC emacs-lisp
- (unless (server-running-p)
- (server-start))
+ (use-package server
+ :config
+ (setq server-name
+ (or (getenv "EMACS_SERVER_NAME")
+ "server"))
+ (unless (server-running-p)
+ (global-set-key "\C-xp" 'server-edit)
+ (server-start)))
#+END_SRC