]> git.donarmstrong.com Git - lib.git/blobdiff - emacs_el/configuration/don-configuration.org
it's debian-changelog-mode
[lib.git] / emacs_el / configuration / don-configuration.org
index 6788679b29fefd3ef0d430b671cd1a206d8b688c..7015f78e8cb682278faa99448e4f51f5c97b464e 100644 (file)
@@ -115,7 +115,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-<SPC>" . hippie-expand))
     )
 #+END_SRC
@@ -338,6 +338,7 @@ 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
@@ -349,6 +350,223 @@ value, scrolling continues until there is no more output.
            )
     )
 #+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 "<tab>" #'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 "<tab>" #'malb/indent-fold-or-complete)
+  (bind-key "C-<tab>" #'malb/toggle-fold)
+#+END_SRC
 ** Tinyprocmail
 
 #+BEGIN_SRC emacs-lisp
@@ -774,14 +992,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
@@ -917,7 +1137,12 @@ This can be used to link things pretty quickly if necessary
     :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 "Directory to change to: ")
@@ -977,6 +1202,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
@@ -1041,7 +1275,7 @@ 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
@@ -1146,15 +1380,13 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
 
   (use-package org
     :delight (org-mode "ø")
-    :config 
-
+    :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)
@@ -1288,7 +1520,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)
@@ -1310,8 +1542,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")
           )
@@ -1338,50 +1572,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 "<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>" . 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> 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
@@ -1403,11 +1630,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*"))
@@ -1422,6 +1644,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 ()
@@ -1527,7 +1754,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
@@ -2119,8 +2348,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")