#+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
-
-* Package management
-** package repositories and package manager
+** Disable cluter
#+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/") ))
+ ; (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
-** [[https://github.com/jwiegley/use-package/][use-package]]
+** Fullscreen
#+BEGIN_SRC emacs-lisp
- (package-initialize)
- (condition-case nil
- (require 'use-package)
- (progn (package-install 'use-package)
- (require 'use-package)))
+ (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
+ (setq package-enable-at-startup nil)
+ (setq package--init-file-ensured t)
+ (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))))))
+
+ (setq package-archives '(("gnu" . "https://elpa.gnu.org/packages/")
+ ("melpa" . "https://melpa.org/packages/")
+ ("org" . "http://orgmode.org/elpa/") ))
+ (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
)
#+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
** 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
'(("template-toolkit" . "\\.tmpl\\'")))
)
#+END_SRC
-* Email
-** Message Mode
+** Spamassassin Mode
#+BEGIN_SRC emacs-lisp
- (use-package post
- :config
- (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)
+ (use-package spamassassin-mode
+ :defer
+ :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
+* Email
** Mutt
*** Message-mode
#+BEGIN_SRC emacs-lisp
- (use-package message-mode
-
+ (use-package message
+ :ensure f
+ :diminish "✉"
:mode "muttng-[a-z0-9]+-[0-9]+-"
:mode "mutt-[a-z0-9]+-[0-9]+-"
:hook 'my/message-mode-settings
:hook 'turn-on-flyspell
:bind (:map message-mode-map
- ("C-c C-a" . my/post-attach-file))
+ ("C-c C-a" . my/post-attach-file))
: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))))
+ '(("^[ \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))
- (description (string-read "Description: ")))
- (my/header-attach-file file description)))
+ (description (string-read "Description: ")))
+ (my/header-attach-file file description)))
(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))))))
+ (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
+* Base emacs
+** Reverting buffers
+#+BEGIN_SRC emacs-lisp
+ (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
#+END_SRC
** Agenda Configuration
#+BEGIN_SRC emacs-lisp
- :mode "\\.\\(org\\|org_archive\\|txt\\)$"
+ :mode ("\\.\\(org\\|org_archive\\|txt\\)\\'" . org-mode)
:bind (("C-c l" . org-store-link)
("C-c a" . org-agenda)
- ("C-c b" . org-iswitchb)
+ ("C-c b" . 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
; 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 "<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)
(load-file "~/.hide/org_gcal.el"))
)
)
+#+END_SRC
+** appt integration
+#+BEGIN_SRC emacs-lisp
+ (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))))
+ )
+ )
+
+
#+END_SRC
** End use-package
#+BEGIN_SRC emacs-lisp
)
#+END_SRC
* Keybindings
-** Override other things
-#+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)
-
- (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
** 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 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)
- (global-auto-revert-mode 1)
(global-font-lock-mode 1)
(icomplete-mode 1)
(setq log-edit-keep-buffer t)
;; tramp configuration
(setq tramp-use-ssh-controlmaster-options nil)
- ;; 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
; 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)
'(icomplete-mode on)
; 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 "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)
(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"))
)
; (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