X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=emacs_el%2Fconfiguration%2Fdon-configuration.org;h=aa6653bab706bd79e64ffd931a1787f53952f0cd;hb=377c89e2123fab28c401953b2557b94dbef6731d;hp=e432840f43802492526da32f0f2a629649b0b77f;hpb=f421fa664d75a3b2661d970c9fb5738bd30a4bae;p=lib.git diff --git a/emacs_el/configuration/don-configuration.org b/emacs_el/configuration/don-configuration.org index e432840..aa6653b 100644 --- a/emacs_el/configuration/don-configuration.org +++ b/emacs_el/configuration/don-configuration.org @@ -28,9 +28,13 @@ 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 package-enable-at-startup nil) + (setq package--init-file-ensured t) + (setq package-user-dir "~/var/emacs/elpa") + (setq package-archives '(("gnu" . "https://elpa.gnu.org/packages/") + ("melpa" . "https://melpa.org/packages/") + ("org" . "http://orgmode.org/elpa/"))) (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 @@ -49,10 +53,19 @@ load [[https://github.com/jwiegley/use-package/][use-package]] even faster 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) + ;;; fix up info paths for packages + (with-eval-after-load "info" + (info-initialize) + (dolist (dir (directory-files package-user-dir)) + (let ((fdir (concat (file-name-as-directory package-user-dir) dir))) + (unless (or (member dir '("." ".." "archives" "gnupg")) + (not (file-directory-p fdir)) + (not (file-exists-p (concat (file-name-as-directory fdir) "dir")))) + (add-to-list 'Info-directory-list fdir))))) + + + (eval-when-compile + (require 'use-package)) (require 'diminish) (require 'bind-key) #+END_SRC @@ -115,7 +128,7 @@ load [[https://github.com/jwiegley/use-package/][use-package]] even faster * Modules ** Hippie Expand #+BEGIN_SRC emacs-lisp - (use-package hippie-expand + (use-package hippie-exp :bind* (("M-" . hippie-expand)) ) #+END_SRC @@ -338,17 +351,236 @@ value, scrolling continues until there is no more output. "~/lib/emacs_el/yasnippet-snippets/snippets/")) (add-to-list 'hippie-expand-try-functions-list 'yas-hippie-try-expand) + (yas-reload-all) ) ) #+END_SRC *** Auto-YASnippet #+BEGIN_SRC emacs-lisp (use-package auto-yasnippet + :ensure t :bind (("H-w" . aya-create) ("H-y" . aya-expand) ) ) #+END_SRC +** Company +#+BEGIN_SRC emacs-lisp + (use-package company + :ensure t + :bind (("M-/" . company-complete)) + :config + (setq company-echo-delay 0 ; remove blinking + company-show-numbers t ; show numbers for easy selection + company-selection-wrap-around t + company-require-match nil + company-dabbrev-ignore-case t + company-dabbrev-ignore-invisible t + company-dabbrev-other-buffers t + company-dabbrev-downcase nil + company-dabbrev-code-everywhere t + company-tooltip-align-annotations t + company-minimum-prefix-length 1 + company-global-modes '(not) + company-lighter-base "(C)") + (global-company-mode 1) + + (bind-key "C-n" #'company-select-next company-active-map) + (bind-key "C-p" #'company-select-previous company-active-map) + (bind-key "" #'company-complete company-active-map) + (bind-key "M-?" #'company-show-doc-buffer company-active-map) + (bind-key "M-." #'company-show-location company-active-map) + (bind-key "M-/" #'company-complete-common org-mode-map) + ) +#+END_SRC +*** C/C++ +#+BEGIN_SRC emacs-lisp + (use-package company-c-headers + :ensure t + :config (progn + (defun malb/ede-object-system-include-path () + "Return the system include path for the current buffer." + (when ede-object + (ede-system-include-path ede-object))) + + (setq company-c-headers-path-system + #'malb/ede-object-system-include-path) + + (add-to-list 'company-backends #'company-c-headers))) +#+END_SRC +*** Python +#+BEGIN_SRC emacs-lisp +(use-package company-anaconda + :ensure t + :config (add-to-list 'company-backends #'company-anaconda)) +#+END_SRC +*** Perl +#+BEGIN_SRC emacs-lisp + (use-package company-plsense + :ensure t + ) +#+END_SRC +*** LaTeX +#+BEGIN_SRC emacs-lisp + (use-package company-math + :ensure t) +#+END_SRC +#+BEGIN_SRC emacs-lisp + (use-package company-auctex + :ensure t + :config (progn + (defun company-auctex-labels (command &optional arg &rest ignored) + "company-auctex-labels backend" + (interactive (list 'interactive)) + (case command + (interactive (company-begin-backend 'company-auctex-labels)) + (prefix (company-auctex-prefix "\\\\.*ref{\\([^}]*\\)\\=")) + (candidates (company-auctex-label-candidates arg)))) + + (add-to-list 'company-backends + '(company-auctex-macros + company-auctex-environments + company-math-symbols-unicode + company-math-symbols-latex)) + + (add-to-list 'company-backends #'company-auctex-labels) + (add-to-list 'company-backends #'company-auctex-bibs) + ) + ) +#+END_SRC +#+BEGIN_SRC emacs-lisp + (use-package company-bibtex + :ensure t + ) +#+END_SRC +*** Shell + + #+BEGIN_SRC emacs-lisp + (use-package company-shell + :ensure t + :config (progn + (setq company-shell-modes '(sh-mode shell-mode)) + (add-to-list 'company-backends 'company-shell))) + #+END_SRC + +*** YaSnippet + + Add YasSippet support for all company backends. ([[https://github.com/syl20bnr/spacemacs/pull/179][source]]) + + *Note:* Do this at the end of =company-mode= config. + + #+BEGIN_SRC emacs-lisp + (defvar malb/company-mode/enable-yas t + "Enable yasnippet for all backends.") + + (defun malb/company-mode/backend-with-yas (backend) + (if (or (not malb/company-mode/enable-yas) + (and (listp backend) + (member 'company-yasnippet backend))) + backend + (append (if (consp backend) backend (list backend)) + '(:with company-yasnippet)))) + + (setq company-backends + (mapcar #'malb/company-mode/backend-with-yas company-backends)) + #+END_SRC + +*** All the words + + Enable/disable company completion from ispell dictionaries ([[https://github.com/redguardtoo/emacs.d/blob/master/lisp/init-company.el][source]]) + + #+BEGIN_SRC emacs-lisp + (defun malb/toggle-company-ispell () + (interactive) + (cond + ((member '(company-ispell :with company-yasnippet) company-backends) + (setq company-backends (delete '(company-ispell :with company-yasnippet) company-backends)) + (add-to-list 'company-backends '(company-dabbrev :with company-yasnippet) t) + (message "company-ispell disabled")) + (t + (setq company-backends (delete '(company-dabbrev :with company-yasnippet) company-backends)) + (add-to-list 'company-backends '(company-ispell :with company-yasnippet) t) + (message "company-ispell enabled!")))) + + (defun malb/company-ispell-setup () + ;; @see https://github.com/company-mode/company-mode/issues/50 + (when (boundp 'company-backends) + (make-local-variable 'company-backends) + (setq company-backends (delete '(company-dabbrev :with company-yasnippet) company-backends)) + (add-to-list 'company-backends '(company-ispell :with company-yasnippet) t) + ;; https://github.com/redguardtoo/emacs.d/issues/473 + (if (and (boundp 'ispell-alternate-dictionary) + ispell-alternate-dictionary) + (setq company-ispell-dictionary ispell-alternate-dictionary)))) + #+END_SRC + +*** Tab DWIM + + 1. =yas-expand= is run first and does what it has to, then it calls =malb/indent-fold-or-complete=. + + 2. This function then hopefully does what I want: + + a. if a region is active, just indent + b. if we’re looking at a space after a non-whitespace character, we try some company-expansion + c. If =hs-minor-mode= or =outline-minor-mode= is active, try those next + d. otherwise call whatever would have been called otherwise. + + ([[http://emacs.stackexchange.com/q/21182/8930][source]], [[http://emacs.stackexchange.com/q/7908/8930][source]]) + +#+BEGIN_SRC emacs-lisp + (defun malb/indent-fold-or-complete (&optional arg) + (interactive "P") + (cond + ;; if a region is active, indent + ((use-region-p) + (indent-region (region-beginning) + (region-end))) + ;; if the next char is space or eol, but prev char not whitespace + ((and (not (active-minibuffer-window)) + (or (looking-at " ") + (looking-at "$")) + (looking-back "[^[:space:]]") + (not (looking-back "^"))) + + (cond (company-mode (company-complete-common)) + (auto-complete-mode (auto-complete)))) + + ;; no whitespace anywhere + ((and (not (active-minibuffer-window)) + (looking-at "[^[:space:]]") + (looking-back "[^[:space:]]") + (not (looking-back "^"))) + (cond + ((bound-and-true-p hs-minor-mode) + (save-excursion (end-of-line) (hs-toggle-hiding))) + ((bound-and-true-p outline-minor-mode) + (save-excursion (outline-cycle))))) + + ;; by default just call whatever was bound + (t + (let ((fn (or (lookup-key (current-local-map) (kbd "TAB")) + 'indent-for-tab-command))) + (if (not (called-interactively-p 'any)) + (fn arg) + (setq this-command fn) + (call-interactively fn)))))) + + (defun malb/toggle-fold () + (interactive) + (cond ((eq major-mode 'org-mode) + (org-force-cycle-archived)) + ((bound-and-true-p hs-minor-mode) + (save-excursion + (end-of-line) + (hs-toggle-hiding))) + + ((bound-and-true-p outline-minor-mode) + (save-excursion + (outline-cycle))))) + + (bind-key "" #'malb/indent-fold-or-complete) + (bind-key "C-" #'malb/toggle-fold) +#+END_SRC ** Tinyprocmail #+BEGIN_SRC emacs-lisp @@ -407,6 +639,51 @@ value, scrolling continues until there is no more output. )) #+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-" #'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) @@ -729,14 +1006,16 @@ This can be used to link things pretty quickly if necessary ** 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 @@ -869,13 +1148,18 @@ This can be used to link things pretty quickly if necessary (use-package ess :ensure t :commands R - :mode "\\.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")) @@ -932,6 +1216,15 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori *** 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 @@ -988,7 +1281,7 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori ** Spamassassin Mode #+BEGIN_SRC emacs-lisp (use-package spamassassin-mode - :defer + :commands spamassassin-mode :ensure f ) #+END_SRC @@ -996,53 +1289,82 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori #+BEGIN_SRC emacs-lisp (use-package password-store :ensure f - :commands password-store-edit password-store-create + :commands password-store-edit password-store-generate ) #+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 "✉" - :mode "muttng-[a-z0-9]+-[0-9]+-" - :mode "mutt-[a-z0-9]+-[0-9]+-" + :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)) - :config + ("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)))) + '(("^[ \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))) + (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)))))) + (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 "> ") ) @@ -1058,25 +1380,27 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori * 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) + (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 - :mode ("\\.\\(org\\|org_archive\\|txt\\)\\'" . org-mode) - :bind (("C-c l" . org-store-link) - ("C-c a" . org-agenda) - ("C-c b" . org-iswitchb)) :config (setq-default org-log-done 'time) (setq-default org-agenda-ndays 5) @@ -1210,7 +1534,7 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori ** Capture Templates #+BEGIN_SRC emacs-lisp (setq org-capture-templates ;; mail-specific note template, identified by "m" - '(("m" "Mail" entry (file "~/projects/org-notes/refile.org") + `(("m" "Mail" entry (file "~/projects/org-notes/refile.org") "* %?\n\n Source: %u, [[%:link][%:description]]\n %:initial") ("t" "todo" entry (file "~/projects/org-notes/refile.org") "* TODO %?\n :PROPERTIES:\n :END:\n :LOGBOOK:\n :END:\n%U\n%a\n" :clock-in t :clock-resume t) @@ -1232,8 +1556,10 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori "* TODO Get/Read %? \n%U" :clock-in t :clock-resume t) ("p" "Phone call" entry (file "~/projects/org-notes/refile.org") "* PHONE %? :PHONE:\n%U" :clock-in t :clock-resume t) - ("J" "job" entry (file "~/projects/org-notes/refile.org") - "* TODO Apply for %a%? :job:\nSCHEDULED: %(format-time-string \"<%Y-%m-%d 17:00-17:30>\")\n%U\n%a\n" :clock-in t :clock-resume t) + ("J" "job" entry (file+olp "~/projects/org-notes/notes.org" + "Jobs" + ,(format-time-string "Positions %Y")) + "* TODO Apply for %? :job:\nSCHEDULED: <%<%Y-%m-%d>>\n%U\n%x\n" :clock-in t :clock-resume t) ("h" "Habit" entry (file "~/projects/org-notes/refile.org") "* NEXT %?\n%U\n%a\nSCHEDULED: %(format-time-string \"<%Y-%m-%d .+1d/3d>\")\n:PROPERTIES:\n:STYLE: habit\n:REPEAT_TO_STATE: NEXT\n:END:\n%a\n") ) @@ -1260,50 +1586,43 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori #+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 "") 'org-agenda) - ; (global-set-key (kbd "") 'bh/org-todo) - (global-set-key (kbd "") 'bh/widen) - (global-set-key (kbd "") 'bh/set-truncate-lines) - (global-set-key (kbd "") 'org-cycle-agenda-files) - (global-set-key (kbd " ") 'bh/show-org-agenda) - (global-set-key (kbd " b") 'bbdb) - (global-set-key (kbd " c") 'calendar) - (global-set-key (kbd " f") 'boxquote-insert-file) - (global-set-key (kbd " h") 'bh/hide-other) - (global-set-key (kbd " n") 'bh/toggle-next-task-display) - (global-set-key (kbd " 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 " I") 'bh/punch-in) - (global-set-key (kbd " O") 'bh/punch-out) - - (global-set-key (kbd " o") 'bh/make-org-scratch) - - (global-set-key (kbd " r") 'boxquote-region) - (global-set-key (kbd " s") 'bh/switch-to-scratch) - - (global-set-key (kbd " t") 'bh/insert-inactive-timestamp) - (global-set-key (kbd " T") 'bh/toggle-insert-inactive-timestamp) - - (global-set-key (kbd " v") 'visible-mode) - (global-set-key (kbd " l") 'org-toggle-link-display) - (global-set-key (kbd " SPC") 'bh/clock-in-last-task) - (global-set-key (kbd "C-") 'previous-buffer) - (global-set-key (kbd "M-") 'org-toggle-inline-images) - (global-set-key (kbd "C-x n r") 'narrow-to-region) - (global-set-key (kbd "C-") 'next-buffer) - (global-set-key (kbd "") 'org-clock-goto) - (global-set-key (kbd "C-") 'org-clock-in) - (global-set-key (kbd "C-s-") 'bh/save-then-publish) - (global-set-key (kbd "C-c c") 'org-capture) - + :bind* ((" a" . org-agenda) + (" I" . bh/punch-in) + (" O" . bh/punch-out) + (" SPC" . bh/clock-in-last-task) + ("" . org-agenda) + ;; ("" . bh/org-todo) + ("" . bh/widen) + ("" . bh/set-truncate-lines) + ("" . org-cycle-agenda-files) + (" " . org-agenda) + (" b" . bbdb) + (" c" . calendar) + (" f" . boxquote-insert-file) + (" h" . bh/hide-other) + (" n" . bh/toggle-next-task-display) + (" w" . widen) + + (" r" . boxquote-region) + (" s" . bh/switch-to-scratch) + + (" t" . bh/insert-inactive-timestamp) + (" T" . bh/toggle-insert-inactive-timestamp) + + (" v" . visible-mode) + (" l" . org-toggle-link-display) + (" SPC" . bh/clock-in-last-task) + ("C-" . previous-buffer) + ("M-" . org-toggle-inline-images) + ("C-x n r" . narrow-to-region) + ("C-" . next-buffer) + ("" . org-clock-goto) + ("C-" . org-clock-in) + ("C-s-" . bh/save-then-publish) + ("C-c c" . org-capture)) + :config #+END_SRC ** Utility Functions #+BEGIN_SRC emacs-lisp @@ -1325,11 +1644,6 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori (set-window-start (selected-window) (window-start (selected-window))))) - (defun bh/make-org-scratch () - (interactive) - (find-file "/tmp/publish/scratch.org") - (gnus-make-directory "/tmp/publish")) - (defun bh/switch-to-scratch () (interactive) (switch-to-buffer "*scratch*")) @@ -1344,6 +1658,11 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori 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 () @@ -1449,7 +1768,9 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori (setq my-org-protocol-flag t)) (defadvice org-insert-todo-heading (after dla/create-id activate) - (org-id-get-create) + (unless (org-in-item-p) + (org-id-get-create) + ) ) ;; org modules @@ -2041,8 +2362,7 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori * Debian ** debian-changelog #+BEGIN_SRC emacs-lisp - (use-package debian-changelog - :ensure f + (use-package debian-changelog-mode :mode "debian/changelog" :config (setq debian-changelog-mailing-address "don@debian.org") @@ -2055,10 +2375,6 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori (setq case-fold-search t) (setq confirm-kill-emacs (quote y-or-n-p)) (setq cperl-lazy-help-time nil) - (display-time) - (setq display-time-24hr-format t) - (setq display-time-day-and-date t) - (display-time-mode 1) (global-font-lock-mode 1) (icomplete-mode 1) (setq log-edit-keep-buffer t) @@ -2095,20 +2411,6 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori (fset 'perl-mode 'cperl-mode) ;;(load-file "cperl-mode.el") - (require 'vcl-mode) - - (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) @@ -2145,20 +2447,34 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori (column-number-mode t) - ; 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) - - (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 desktop + :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. @@ -2200,30 +2516,6 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori (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) - - ; 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 "") - (css-mode ""))) - (setq mweb-filename-extensions '("php" "htm" "html" "ctp" "phtml" "php4" "php5")) - (multi-web-global-mode 1) - - ; 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 () @@ -2331,10 +2623,16 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori (ad-activate 'ask-user-about-supersession-threat) #+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