wip
[dot-emacs] / my-init.org
index b854dbe01a2f6d1bf79f086a8584dd4bc3eb0600..87d8515b8ab36247af83561cf51b8e6864051d84 100644 (file)
@@ -19,7 +19,7 @@
 * things that should be at the beginning
 #+begin_src emacs-lisp
 ;; todo, evaluating this manually disables debug on error instead of toggling it
-;;(toggle-debug-on-error) ;uncomment to help debug and catch errors
+;(toggle-debug-on-error) ;uncomment to help debug and catch errors
 
 
 #+end_src
@@ -47,9 +47,9 @@ alternate keyboards
     m-enter (kbd "M-m")
     c-enter (kbd "C-8")))
 
+(setq tp (string= (system-name) "tp"))
 (setq x200 (string= (system-name) "x2"))
-(setq search-key (if x200 "<menu>" "<kp-add>"))
-(setq shell-key (if x200 "<S-menu>" "<S-kp-equal>"))
+(setq laptop-keyboard (or tp x200))
 #+end_src
 
 - Ubiquitous Packages which should be loaded on startup rather than
@@ -82,6 +82,7 @@ alternate keyboards
 
 (add-to-list 'package-archives
              '("melpa" . "http://melpa.milkbox.net/packages/") t)
+(add-to-list 'package-archives '("org" . "http://orgmode.org/elpa/") t)
 
 ;; if this is a new machine/config, get package list
 ;; not sure why we need it, but it is recommended in starter kit,
@@ -160,7 +161,12 @@ If it is different, emacs will give a message about recovering it when you open
 
 
 
+* TODO learn some more ivy mode stuff
+* TODO declarative package installations,
+with documentation.
 * TODO shell mode reverse search hides 2nd+ line of multi-line result
+* TODO report bug in latest emacs,
+c-c ', does't exit org-mode src editing mode.
 * TODO button for switching to scratch buffer
 * TODO figure out browsing files with broken nfs mount
 causes emacs to freeze until I kill -9 it.
@@ -170,6 +176,8 @@ and actually, putting the start of it in th emodeline might be cool
 * TODO c-<delete> in shell mode should send over
 previous line if current line is empty
 * TODO make c-m-s be just a control key for easier use
+* TODO try out avy mode for laptop
+i used to have ace jump mode, but google says avy is better.
 * TODO bind a in group mode of gnus to c-u a,
 also, make a default for number of articles
 * TODO make auto-complete be on by default in sql-mode
@@ -197,7 +205,9 @@ bad code, the comment this relates to was removed, but not the comment
 The change in status_notify's return is just passing more information
 from what it did already. No changes at all inside this function.
 
-
+* TODO consider whether to bind indent-for-tab-command
+I removed it from m-tab for terminal compatibility.
+It's the default tab command, which yasnippet replaces.
 * TODO readline-complete: remove the hardcoded rlc-no-readline-hook
 * TODO isearch doesn't automatically wrap in info
 * TODO look into fixing shell mode reverse search
@@ -373,7 +383,8 @@ if all else fails, edit the abbrev file
 
 #+begin_src emacs-lisp
 ;; auto-completion in minibuffer
-(icomplete-mode)
+;; disabled while I look for another alternative
+;;(icomplete-mode)
 
 (require 'auto-complete-config)
 (ac-config-default)
@@ -441,6 +452,8 @@ if all else fails, edit the abbrev file
 (setenv "EMACS" "")
 (setq explicit-bash-args nil)
 (setq comint-process-echoes t)
+;; default of 30 is way too slow. todo, consider pushing this upstream
+(setq rlc-attempts 5)
 
 (add-to-list 'ac-modes 'shell-mode)
 
@@ -458,8 +471,57 @@ if all else fails, edit the abbrev file
 #+RESULTS:
 : comint-exec-1
 
-debugging
+** readline complete fix
+
+I need this function here, where INSIDE_EMACS is replaced with RLC_INSIDE_EMACS.
+#+begin_src emacs-lisp
+;; ian: last update 2017-1-7. update this periodically from upstream
+;; like when we do a major emacs update
+(defun comint-exec-1 (name buffer command switches)
+  (let ((process-environment
+        (nconc
+         ;; If using termcap, we specify `emacs' as the terminal type
+         ;; because that lets us specify a width.
+         ;; If using terminfo, we specify `dumb' because that is
+         ;; a defined terminal type.  `emacs' is not a defined terminal type
+         ;; and there is no way for us to define it here.
+         ;; Some programs that use terminfo get very confused
+         ;; if TERM is not a valid terminal type.
+         ;; ;; There is similar code in compile.el.
+         (if (and (boundp 'system-uses-terminfo) system-uses-terminfo)
+             (list "TERM=dumb" "TERMCAP="
+                   (format "COLUMNS=%d" (window-width)))
+           (list "TERM=emacs"
+                 (format "TERMCAP=emacs:co#%d:tc=unknown:" (window-width))))
+         (list (format "RLC_INSIDE_EMACS=%s,comint" emacs-version))
+         process-environment))
+       (default-directory
+         (if (file-accessible-directory-p default-directory)
+             default-directory
+           "/"))
+       proc decoding encoding changed)
+    (let ((exec-path (if (and command (file-name-directory command))
+                        ;; If the command has slashes, make sure we
+                        ;; first look relative to the current directory.
+                        (cons default-directory exec-path) exec-path)))
+      (setq proc (apply 'start-file-process name buffer command switches)))
+    ;; Some file name handler cannot start a process, fe ange-ftp.
+    (unless (processp proc) (error "No process started"))
+    (let ((coding-systems (process-coding-system proc)))
+      (setq decoding (car coding-systems)
+           encoding (cdr coding-systems)))
+    ;; Even if start-file-process left the coding system for encoding data
+    ;; sent from the process undecided, we had better use the same one
+    ;; as what we use for decoding.  But, we should suppress EOL
+    ;; conversion.
+    (if (and decoding (not encoding))
+       (setq encoding (coding-system-change-eol-conversion decoding 'unix)
+             changed t))
+    (if changed
+       (set-process-coding-system proc decoding encoding))
+    proc))
 
+#+end_src
 
 * auto save & backup
 
@@ -811,8 +873,61 @@ Things I tried which didn't work, which intuitively I think should work better:
 
 * disabled but saved for documentation purposes
   :PROPERTIES:
-  :tangle:   no
+  :header-args: :tangle no
   :END:
+** indent settings for git's perl code
+don't have a way to set this automatically or a good place to put this
+#+begin_src emacs-lisp
+(setq
+ perl-indent-level 8
+ perl-continued-statement-offset 8
+ perl-continued-brace-offset -8
+ perl-brace-offset 0
+ perl-brace-imaginary-offset 0
+ indent-tabs-mode t
+ )
+#+end_src
+** org mode website
+
+#+begin_src emacs-lisp
+;; use org-publish-current-project with a project file open
+(setq org-publish-project-alist
+      '(("org"
+         :base-directory "/a/h/src"
+         :publishing-directory "/a/h/output"
+         :base-extension "org"
+         ;;:publishing-function org-org-publish-to-org
+         :publishing-function org-html-publish-to-html
+         :preserve-breaks t
+         :html-postamble "Everything here is <a rel=\"license\"
+    href=\"http://creativecommons.org/licenses/by-sa/4.0/\"><img
+    alt=\"Creative Commons License\" style=\"border-width:0\"
+    src=\"http://i.creativecommons.org/l/by-sa/4.0/80x15.png\" /></a>"
+         :html-head "<link rel=\"stylesheet\"
+                               href=\"style.css\"
+                               type=\"text/css\"/>"
+         :htmlized-source t)
+        ("othersrc"
+         :base-directory "/a/h/src"
+         :base-extension "css\\|el\\|"
+         :publishing-directory "/a/h/output"
+         :publishing-function org-publish-attachment)
+        ("other"
+         :base-directory "/a/h/other"
+         :base-extension ".*"
+         :publishing-directory "/a/h/output"
+         :publishing-function org-publish-attachment)))
+;; default is xhtml-strict. don't really care, but this is more common
+(setq org-html-doctype "html4-strict")
+
+;; this is needed for worg
+;; todo: for my own site, I need to define the css in a separate file
+;; in order to use this setting. see the variable help for info
+(setq org-export-htmlize-output-type t)
+
+
+#+end_src
+
 ** bash-completion
 #+begin_src emacs-lisp
 ;; this eventually gets set in
@@ -834,42 +949,13 @@ Things I tried which didn't work, which intuitively I think should work better:
 
 #+end_src
 
-** ace-jump
+** misc stuff
   It is an awesome mode for keyboard navigation.
-  However, using the mouse takes less thought and works as well,
-  especially with my foot mouse ;)
+  However, using the mouse takes less thought and works as well
 
   #+begin_src emacs-lisp
 
 
-
-
-    ;; this has a problem that it doesn't work with emacsclient, so I'm using a more standard method
-    ;; This has the benefit of working with less fuss otherwise, I think.
-    ;; no method works on a terminal
-    ;; makes C-i and tab be distinct. same deal is done for c-m
-    ;;(setq local-function-key-map (delete '(tab . [9]) local-function-key-map))
-    ;;  (define-key input-decode-map (kbd "C-i") [f15])
-    ;;  (define-key input-decode-map (kbd "<f15>") [?\C-i])
-    ;;  (define-key input-decode-map (kbd "<tab>") [?\C-i])
-    ;;  (global-set-key (kbd "<f15>") 'query-replace)
-
-
-                                            ; not using ace jump mode, but if mouse is ever not good,
-                                            ; here is config for it
-    (require 'ace-jump-mode)
-    (eval-after-load "ace-jump-mode"
-      '(ace-jump-mode-enable-mark-sync))
-    (define-key global-map (kbd "") 'ace-jump-mode)
-
-
-
-    ;; revert buffers automatically when underlying files are changed externally
-    ;; too dangerous, and thus disabled.
-    ;; do m-x auto-revert-mode to auto-rever a specific buffer
-    ;;(global-auto-revert-mode t)
-
-
     ;; whitespace-mode config. minimal for bad whitespace
                                             ;(setq whitespace-line-column 80) ; for style of lines-tail, but I have it disabled
     (setq whitespace-style '(face tabs empty trailing))
@@ -1079,60 +1165,6 @@ this looks nice, but it lags gnus just a bit
 
 #+end_src
 
-** readline complete fix, replaced with proper solution
-
-i had commented out a few lines here, but instead I am setting in my profile
-the environment variable I commented out here. Yes, that is not the best explanation, but I will probably delete this as
-old history anyways.
-#+begin_src emacs-lisp
-
-(defun comint-exec-1 (name buffer command switches)
-  (let ((process-environment
-        (nconc
-         ;; If using termcap, we specify `emacs' as the terminal type
-         ;; because that lets us specify a width.
-         ;; If using terminfo, we specify `dumb' because that is
-         ;; a defined terminal type.  `emacs' is not a defined terminal type
-         ;; and there is no way for us to define it here.
-         ;; Some programs that use terminfo get very confused
-         ;; if TERM is not a valid terminal type.
-         ;; ;; There is similar code in compile.el.
-         (if (and (boundp 'system-uses-terminfo) system-uses-terminfo)
-             (list "TERM=dumb" "TERMCAP="
-                   (format "COLUMNS=%d" (window-width)))
-           (list "TERM=emacs"
-                 (format "TERMCAP=emacs:co#%d:tc=unknown:" (window-width))))
-          ;; ian: commented this out
-         ;;(unless (getenv "EMACS")
-         ;;  (list "EMACS=t"))
-         (list (format "INSIDE_EMACS=%s,comint" emacs-version))
-         process-environment))
-       (default-directory
-         (if (file-accessible-directory-p default-directory)
-             default-directory
-           "/"))
-       proc decoding encoding changed)
-    (let ((exec-path (if (and command (file-name-directory command))
-                        ;; If the command has slashes, make sure we
-                        ;; first look relative to the current directory.
-                        (cons default-directory exec-path) exec-path)))
-      (setq proc (apply 'start-file-process name buffer command switches)))
-    ;; Some file name handler cannot start a process, fe ange-ftp.
-    (unless (processp proc) (error "No process started"))
-    (let ((coding-systems (process-coding-system proc)))
-      (setq decoding (car coding-systems)
-           encoding (cdr coding-systems)))
-    ;; Even if start-file-process left the coding system for encoding data
-    ;; sent from the process undecided, we had better use the same one
-    ;; as what we use for decoding.  But, we should suppress EOL
-    ;; conversion.
-    (if (and decoding (not encoding))
-       (setq encoding (coding-system-change-eol-conversion decoding 'unix)
-             changed t))
-    (if changed
-       (set-process-coding-system proc decoding encoding))
-    proc))
-#+end_src
 ** misc
 #+begin_src emacs-lisp
 
@@ -1151,10 +1183,6 @@ old history anyways.
   ;(global-set-key (kbd "<tab>")  'complete-symbol)
 
 
-  ; todo, see how mastering emacs defines this function
-  ;(global-set-key (kbd "M-j") 'ido-goto-symbol)
-
-
   ; todo, make my custom overlays have an underline if they are
   ;  overriding a paren matching overlay
   ; make right click set the mark
@@ -1294,6 +1322,21 @@ disabled, as I haven't used it in a long time. I think it was good for learning
 #+end_src
 
 
+** icomplete
+#+begin_src emacs-lisp
+;; without this, on partial completion return would exit the minibuffer, and i had to
+;; keep typing out letters do a full completion before pressing enter.
+;; super annoying. So I picked ctrl-j as a free key to put exit,
+;; but in practice, I would just use ctrl-g to quit. Anyways,
+;; ivy is doing all the minibuffer stuff, so removed this as it's
+;; unused, so it can't cause any problems in future
+(when (boundp 'icomplete-minibuffer-map)
+  (define-key icomplete-minibuffer-map (kbd "C-j") 'exit-minibuffer)
+  (define-key icomplete-minibuffer-map (kbd "<return>")
+    'minibuffer-force-complete-and-exit))
+
+
+#+end_src
 * elisp settings
 #+begin_src emacs-lisp
 ; when manually evaluating lisp, go into debugger on error
@@ -1637,117 +1680,6 @@ make all
 #+RESULTS:
 | (lambda nil (define-key haskell-interactive-mode-map (kbd <C-M-return>) (quote haskell-interactive-mode-newline-indent))) | (lambda nil (define-key haskell-interactive-mode-map \n nil) (define-key haskell-interactive-mode-map (kbd <return>) (quote haskell-interactive-mode-return))) | ac-haskell-process-setup |
 
-* ido
-#+begin_src emacs-lisp
-
-;; easier to read, and more than the default 12
-(setq ido-separator nil)
-(setq ido-max-prospects 20)
-
-(ido-mode t)
-(ido-everywhere t)  ;; file dialogs
-
-;; do out of order matching when all else fails
-(setq ido-enable-flex-matching t
-      ido-create-new-buffer 'always ;; create new buffer/file without asking
-      ido-use-filename-at-point 'guess ;; use filename at point if it makes sense
-      ido-save-directory-list-file "~/.emacs.d/.ido.last"
-      ido-default-file-method 'selected-window) ;; make duplicate windows
-;; todo, the next 2 functions seem to do roughly the same.
-;;   figure out which one is better. the first comes from emacs starter kit,
-;;   i forget about the second.
-(defun ido-imenu ()
-  "Update the imenu index and then use ido to select a symbol to navigate to.
-  Symbols matching the text at point are put first in the completion list."
-  (interactive)
-  (imenu--make-index-alist)
-  (let ((name-and-pos '())
-        (symbol-names '()))
-    (cl-flet ((addsymbols (symbol-list)
-                          (when (listp symbol-list)
-                            (dolist (symbol symbol-list)
-                              (let ((name nil) (position nil))
-                                (cond
-                                 ((and (listp symbol) (imenu--subalist-p symbol))
-                                  (addsymbols symbol))
-
-                                 ((listp symbol)
-                                  (setq name (car symbol))
-                                  (setq position (cdr symbol)))
-
-                                 ((stringp symbol)
-                                  (setq name symbol)
-                                  (setq position (get-text-property 1 'org-imenu-marker symbol))))
-
-                                (unless (or (null position) (null name))
-                                  (add-to-list 'symbol-names name)
-                                  (add-to-list 'name-and-pos (cons name position))))))))
-      (addsymbols imenu--index-alist))
-    ;; If there are matching symbols at point, put them at the beginning of `symbol-names'.
-    (let ((symbol-at-point (thing-at-point 'symbol)))
-      (when symbol-at-point
-        (let* ((regexp (concat (regexp-quote symbol-at-point) "$"))
-               (matching-symbols (delq nil (mapcar (lambda (symbol)
-                                                     (if (string-match regexp symbol) symbol))
-                                                   symbol-names))))
-          (when matching-symbols
-            (sort matching-symbols (lambda (a b) (> (length a) (length b))))
-            (mapc (lambda (symbol) (setq symbol-names (cons symbol (delete symbol symbol-names))))
-                  matching-symbols)))))
-    (let* ((selected-symbol (ido-completing-read "Symbol? " symbol-names))
-           (position (cdr (assoc selected-symbol name-and-pos))))
-      (goto-char position))))
-
-(defun ido-goto-symbol (&optional symbol-list)
-  "Refresh imenu and jump to a place in the buffer using Ido."
-  (interactive)
-  (unless (featurep 'imenu)
-    (require 'imenu nil t))
-  (cond
-   ((not symbol-list)
-    (let ((ido-mode ido-mode)
-          (ido-enable-flex-matching
-           (if (boundp 'ido-enable-flex-matching)
-               ido-enable-flex-matching t))
-          name-and-pos symbol-names position)
-      (unless ido-mode
-        (ido-mode 1)
-        (setq ido-enable-flex-matching t))
-      (while (progn
-               (imenu--cleanup)
-               (setq imenu--index-alist nil)
-               (ido-goto-symbol (imenu--make-index-alist))
-               (setq selected-symbol
-                     (ido-completing-read "Symbol? " symbol-names))
-               (string= (car imenu--rescan-item) selected-symbol)))
-      (unless (and (boundp 'mark-active) mark-active)
-        (push-mark nil t nil))
-      (setq position (cdr (assoc selected-symbol name-and-pos)))
-      (cond
-       ((overlayp position)
-        (goto-char (overlay-start position)))
-       (t
-        (goto-char position)))))
-   ((listp symbol-list)
-    (dolist (symbol symbol-list)
-      (let (name position)
-        (cond
-         ((and (listp symbol) (imenu--subalist-p symbol))
-          (ido-goto-symbol symbol))
-         ((listp symbol)
-          (setq name (car symbol))
-          (setq position (cdr symbol)))
-         ((stringp symbol)
-          (setq name symbol)
-          (setq position
-                (get-text-property 1 'org-imenu-marker symbol))))
-        (unless (or (null position) (null name)
-                    (string= (car imenu--rescan-item) name))
-          (add-to-list 'symbol-names (substring-no-properties name))
-          (add-to-list 'name-and-pos (cons (substring-no-properties name) position))))))))
-
-#+end_src
-
 * isearch
 #+begin_src emacs-lisp
 (setq
@@ -1959,10 +1891,32 @@ currently makes emacs hang a bunch. dunno why. just using eclipse instead
 * modes with little configuration needed
   #+begin_src emacs-lisp
 
+;;(require 'dtrt-indent)
+;;(setq dtrt-indent-mode t)
+
+(setq css-indent-offset 2)
+
+(load-file "/a/h/iank-mod.el")
+
 (require 'ws-butler)
 (ws-butler-global-mode)
 
 
+(defun ws-butler-clean-region (beg end)
+  "Delete trailing blanks in region BEG END."
+  (interactive "*r")
+  (ws-butler-with-save
+   (narrow-to-region beg end)
+   ;;  _much slower would be:       (replace-regexp "[ \t]+$" "")
+   (goto-char (point-min))
+   (while (not (eobp))
+     (end-of-line)
+     (delete-horizontal-space)
+     (forward-line 1)))
+  ;; clean return code for hooks
+  nil)
+
+
 (require 'nginx-mode)
 ;;The mode should automatically activate for files called nginx.conf and files under /etc/nginx - if not, you can add something like this to your init file:
 ;;(add-to-list 'auto-mode-alist '("/etc/nginx/sites-available/.*" . nginx-mode))
@@ -2022,35 +1976,7 @@ currently makes emacs hang a bunch. dunno why. just using eclipse instead
 (require 'magit)
 
 
-;; http://ergoemacs.org/emacs/emacs_CSS_colors.html
-;; there's also rainbow mode, which seems to only work for specific colors? it didn't work at all for me in a css file.
-;; todo, do config group on it, and try out one of those colors.
-(defun xah-syntax-color-hsl ()
-  "Syntax color hex color spec such as 「hsl(0,90%,41%)」 in current buffer."
-  (interactive)
-  (font-lock-add-keywords
-   nil
-   '(("hsl( *\\([0-9]\\{1,3\\}\\) *, *\\([0-9]\\{1,3\\}\\)% *, *\\([0-9]\\{1,3\\}\\)% *)"
-      (0 (put-text-property
-          (+ (match-beginning 0) 3)
-          (match-end 0)
-          'face (list :background
-                      (concat "#" (mapconcat 'identity
-                                             (mapcar
-                                              (lambda (x) (format "%02x" (round (* x 255))))
-                                              (color-hsl-to-rgb
-                                               (/ (string-to-number (match-string-no-properties 1)) 360.0)
-                                               (/ (string-to-number (match-string-no-properties 2)) 100.0)
-                                               (/ (string-to-number (match-string-no-properties 3)) 100.0)
-                                               ) )
-                                             "" )) ;  "#00aa00"
-                      ))))) )
-  (font-lock-fontify-buffer)
-  )
-
-(add-hook 'css-mode-hook 'xah-syntax-color-hsl)
-(add-hook 'php-mode-hook 'xah-syntax-color-hsl)
-(add-hook 'html-mode-hook 'xah-syntax-color-hsl)
+;; colorize hex colors: use rainbow mode
 
 
 ;; message mode prompted me on first message.
@@ -2197,9 +2123,6 @@ currently makes emacs hang a bunch. dunno why. just using eclipse instead
 ;; disable this nasty function, as I always use a gui
 (defun suspend-frame() (interactive))
 
-;; to reopen just ido-switch-buffer (c-l), *scratch*
-;;  (kill-buffer "*scratch*")
-
 ;; Seed the random-number generator
 (random t)
 
@@ -2243,8 +2166,11 @@ currently makes emacs hang a bunch. dunno why. just using eclipse instead
       mark-ring-max 160
       sort-fold-case t  ; case insensitive line sorting
       global-mark-ring-max 1000
-      ;; the bell seems to lag the ui
+      ;; the visible bell seems to lag the ui
       ;;visible-bell t
+      ;; turn off audible bell
+      ;; https://www.emacswiki.org/emacs/AlarmBell
+      ring-bell-function 'ignore
       case-replace nil
       revert-without-query '(".*")
       ;; don't pause display code on input.
@@ -3094,52 +3020,21 @@ clicking on info links
     (org-clock-in)))
 
 
-;; use org-publish-current-project with a project file open
-(setq org-publish-project-alist
-      '(("org"
-         :base-directory "/a/h/src"
-         :publishing-directory "/a/h/output"
-         :base-extension "org"
-         ;;:publishing-function org-org-publish-to-org
-         :publishing-function org-html-publish-to-html
-         :preserve-breaks t
-         :html-postamble "Everything here is <a rel=\"license\"
-    href=\"http://creativecommons.org/licenses/by-sa/4.0/\"><img
-    alt=\"Creative Commons License\" style=\"border-width:0\"
-    src=\"http://i.creativecommons.org/l/by-sa/4.0/80x15.png\" /></a>"
-         :html-head "<link rel=\"stylesheet\"
-                               href=\"style.css\"
-                               type=\"text/css\"/>"
-         :htmlized-source t)
-        ("othersrc"
-         :base-directory "/a/h/src"
-         :base-extension "css\\|el\\|"
-         :publishing-directory "/a/h/output"
-         :publishing-function org-publish-attachment)
-        ("other"
-         :base-directory "/a/h/other"
-         :base-extension ".*"
-         :publishing-directory "/a/h/output"
-         :publishing-function org-publish-attachment)))
-;; default is xhtml-strict. don't really care, but this is more common
-(setq org-html-doctype "html4-strict")
-
-;; this is needed for worg
-;; todo: for my own site, I need to define the css in a separate file
-;; in order to use this setting. see the variable help for info
-(setq org-export-htmlize-output-type t)
-
 
 ;; based on http://stackoverflow.com/questions/3758139/variable-pitch-for-org-mode-fixed-pitch-for-tables
 ;; keywords: proportional font, monospace
-(add-hook 'fundamental-mode-hook 'variable-pitch-mode)
-(add-hook 'text-mode-hook 'variable-pitch-mode)
+
+(defun variable-pitch-on ()
+  (variable-pitch-mode 1))
+(add-hook 'fundamental-mode-hook 'variable-pitch-on)
+(add-hook 'org-mode-hook 'variable-pitch-on)
+(add-hook 'text-mode-hook 'variable-pitch-on)
+
 (set-face-attribute 'org-table nil :family (face-attribute 'fixed-pitch :family))
 (set-face-attribute 'org-code nil :family (face-attribute 'fixed-pitch :family))
 (set-face-attribute 'org-formula nil :family (face-attribute 'fixed-pitch :family))
 (set-face-attribute 'org-link nil :family (face-attribute 'fixed-pitch :family))
 (set-face-attribute 'org-block nil :family (face-attribute 'fixed-pitch :family))
-(set-face-attribute 'org-block-background nil :family (face-attribute 'fixed-pitch :family))
 (set-face-attribute 'org-date nil :family (face-attribute 'fixed-pitch :family))
 
 
@@ -3224,8 +3119,8 @@ disabled cuz I have none yet
   (setq ac-sources (delq 'ac-source-dictionary ac-sources))
   (highlight-symbol-mode)
   (make-local-variable 'column-number-mode)
+  ;; this says do autofilling using newcomment.el. The "only" is a misnomer.
   (set (make-local-variable 'comment-auto-fill-only-comments) t)
-  (auto-fill-mode t)
   (column-number-mode t)
   (turn-on-smartparens-mode)
 
@@ -3373,9 +3268,6 @@ downgraded to marmalade version and everything is working fine.
 
 ;; Except in HTML
 (sp-local-pair 'html-mode "\"" nil :unless '(:rem sp-point-after-word-p))
-;; CoffeeScript PyStrings
-(push 'coffee-mode sp-autoescape-string-quote-if-empty)
-
 
 
   #+end_src
@@ -4318,10 +4210,10 @@ isearch-occur
     (isearch-toggle-regexp)
     (cond (isearch-regexp
            (global-set-key (kbd "C-r") 'isearch-backward-regexp)
-           (define-key global-map (kbd search-key) 'isearch-forward-regexp))
+           (define-key global-map (kbd "<kp-add>") 'isearch-forward-regexp))
           (t
            (global-set-key (kbd "C-r") 'isearch-backward)
-           (define-key global-map (kbd search-key) 'isearch-forward))))
+           (define-key global-map (kbd "<kp-add>") 'isearch-forward))))
   (define-key isearch-mode-map (kbd "M-r") 'my-isearch-toggle-regexp)
   #+end_src
 
@@ -4642,9 +4534,9 @@ isearch
 isearch-forward
 #+begin_src emacs-lisp
 ;; explained in http://stackoverflow.com/questions/7411920/how-to-bind-search-and-search-repeat-to-c-f-in-emacs
-(global-set-key (kbd search-key) 'isearch-forward)
+(global-set-key (kbd "<kp-add>") 'isearch-forward)
 (define-key isearch-mode-map "\t" nil)
-(define-key isearch-mode-map (kbd search-key) 'isearch-repeat-forward)
+(define-key isearch-mode-map (kbd "<kp-add>") 'isearch-repeat-forward)
 ;; get rid of the standard completion binding, always use auto-complete
 ;; this didn't work very well
 ;;(global-set-key (kbd "TAB") 'auto-complete)
@@ -4907,9 +4799,12 @@ modes like org-mode which have their own yank function."
 :END:
 shell
 #+begin_src emacs-lisp
-(global-set-key (kbd shell-key) 'shell-wrap)
+(global-set-key (kbd "<S-kp-equal>") 'shell-wrap)
 #+end_src
 *** s-right arrow
+:LOGBOOK:
+CLOCK: [2016-11-28 Mon 11:03]--[2016-11-28 Mon 11:03] =>  0:00
+:END:
 :PROPERTIES:
 :CUSTOM_ID: 2365f5a7-b89a-4a97-b272-ac8ae9c2cc66
 :END:
@@ -4929,53 +4824,30 @@ new line
 
 #+begin_src emacs-lisp
 ;; todo, this doesn't set the keybind for the help minibuffer
-(when (boundp 'icomplete-minibuffer-map)
-  (define-key icomplete-minibuffer-map (kbd "<return>")
-    'minibuffer-force-complete-and-exit))
-
-(add-hook 'ido-setup-hook
-          (lambda()
-            (define-key ido-completion-map (kbd "<return>") 'ido-exit-minibuffer)))
-(define-key minibuffer-local-completion-map (kbd "<return>") 'exit-minibuffer)
-
 
-(define-key isearch-mode-map (kbd "<return>") 'isearch-exit)
-(define-key isearch-mode-map "\r" nil)
 
+;;(global-set-key (kbd "<return>") 'indent-new-comment-line)
 
-(global-set-key (kbd "<return>") 'indent-new-comment-line)
+;; don't use enter for autocomplete, we use tab or something
 (define-key ac-completing-map (kbd "<return>") nil)
 (define-key ac-completing-map "\r" nil)
-(define-key minibuffer-local-map "\r" nil)
-(define-key minibuffer-local-map (kbd "<return>") 'exit-minibuffer)
-(define-key icomplete-minibuffer-map (kbd "C-j") 'exit-minibuffer)
-(define-key minibuffer-local-map (kbd "C-j") 'exit-minibuffer)
-(define-key minibuffer-local-must-match-map (kbd "C-j") 'exit-minibuffer)
-(define-key minibuffer-local-must-match-map "\r" nil)
-(define-key minibuffer-local-must-match-map (kbd "<return>")
-  'minibuffer-complete-and-exit)
-
-(add-hook 'Man-mode-hook
+
+(add-hook 'org-mode-hook
           (lambda ()
-            (define-key Man-mode-map "\r" nil)
-            (define-key Man-mode-map "x" 'man-follow)))
+          ;; copied from org-mode, replace org-enter with org-enter-indent
+(org-defkey org-mode-map "\C-m"     'org-return-indent)))
+
 
 (add-hook 'comint-mode-hook
           (lambda ()
             (define-key comint-mode-map "\r" nil)
             (define-key comint-mode-map (kbd "<return>") 'comint-send-input)))
 
-(add-hook 'org-mode-hook
-          (lambda ()
-            (define-key org-mode-map "\r" nil)
-            (define-key org-mode-map (kbd "<return>") 'org-return-indent)))
-
 (add-hook 'comint-mode-hook
           (lambda ()
             (define-key comint-mode-map "\C-m" nil)
             (define-key comint-mode-map "\C-d" nil)))
-;; use space instead of enter in calc mode,
-;; cuz it is not easy to rebind enter in calc mode
+
 #+end_src
 
 *** [s-return]                                                        :drill:
@@ -6150,6 +6022,7 @@ macro end / call
     [
 #+begin_src emacs-lisp
     (global-set-key (kbd "C-M-a") 'kmacro-end-or-call-macro)
+    (add-hook 'perl-mode-hook (lambda () (define-key perl-mode-map (kbd "C-M-a") nil)))
 (add-hook 'LaTeX-mode-hook (lambda () (define-key LaTeX-mode-map (kbd "C-M-a") nil)))
 (add-hook 'c-mode-hook
           (lambda () (define-key c-mode-map (kbd "C-M-a") nil)))
@@ -6671,16 +6544,9 @@ SCHEDULED: <2014-03-27 Thu>
     :DRILL_LAST_QUALITY: 5
     :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:42>
     :END:
-yas-expand
-    [
-    #+begin_src emacs-lisp
-;; yas keymaps are already initialized when this runs,
-;; but I use a hook because it the way I do it for all other minor modes
-  (add-hook 'yas-minor-mode-hook (lambda ()
-                                   (define-key yas-minor-mode-map (kbd "<C-tab>") 'yas-expand)
-                                   (define-key yas-keymap (kbd "<C-tab>") 'yas-next-field-or-maybe-expand)))
-  (global-set-key (kbd "<C-tab>") 'yas-insert-snippet)
-#+end_src
+---
+[
+in terminal, it's just TAB, duplicate keybind.
 ]
 *** [M-tab]                                                           :drill:
 SCHEDULED: <2014-03-14 Fri>
@@ -6697,14 +6563,9 @@ SCHEDULED: <2014-03-14 Fri>
     :DRILL_LAST_QUALITY: 4
     :DRILL_LAST_REVIEWED: <2014-02-19 Wed 16:35>
     :END:
-indent line
+---
     [
-#+begin_src emacs-lisp
-
-  (global-set-key (kbd "<M-tab>") 'indent-for-tab-command)
-
-  ; todo, <M-tab> overrides calculator mode map
-#+end_src
+in terminal it's duplicated of C-M-i
 ]
 *** C-M-tab
 :PROPERTIES:
@@ -7214,7 +7075,7 @@ occur
 *** [C-M-o]                                                           :drill:
 SCHEDULED: <2014-03-12 Wed>
     :PROPERTIES:
-    ido-goto-symbol
+    counsel-imenu
     :CUSTOM_ID: 05d1ef50-43ee-46d7-b1ad-dd952543ab45
     :ID:       6dfcaa31-d223-4a14-904e-2f2395b2cf75
     :DRILL_LAST_INTERVAL: 10.3122
@@ -7226,10 +7087,10 @@ SCHEDULED: <2014-03-12 Wed>
     :DRILL_LAST_QUALITY: 4
     :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:09>
     :END:
-ido-goto-symbol
+counsel-imenu
     [
 #+begin_src emacs-lisp
-  (global-set-key (kbd "C-M-o") 'ido-goto-symbol)
+  (global-set-key (kbd "C-M-o") 'counsel-imenu)
 #+end_src
     ]
 *** C-S-o
@@ -7423,7 +7284,7 @@ man
 *** [C-l]                                                             :drill:
 SCHEDULED: <2014-05-13 Tue>
     :PROPERTIES:
-    ido-switch-buffer
+    ivy-switch-buffer
     :ID:       3c7fabd9-572d-4945-ab4b-d7a8dc2cd9c5
     :CUSTOM_ID: 8a7572bd-4b5e-4464-b937-3d35adb1783f
     :DRILL_LAST_INTERVAL: 71.5839
@@ -7435,10 +7296,10 @@ SCHEDULED: <2014-05-13 Tue>
     :DRILL_LAST_QUALITY: 5
     :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:10>
     :END:
-ido-switch-buffer
+ivy-switch-buffer
     [
 #+begin_src emacs-lisp
-    (global-set-key (kbd "C-l") 'ido-switch-buffer)
+    (global-set-key (kbd "C-l") 'ivy-switch-buffer)
 #+end_src
     ]
 *** M-l
@@ -7486,18 +7347,12 @@ SCHEDULED: <2014-03-19 Wed>
     :DRILL_LAST_QUALITY: 4
     :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:45>
     :END:
-comment-dwim
-    [
-#+begin_src emacs-lisp
-  (global-set-key (kbd "C-;") 'comment-dwim)
-  (add-hook 'flyspell-mode-hook
-            (lambda () (define-key flyspell-mode-map (kbd "C-;") nil)))
-#+end_src
-]
+used in flyspell, not sure what for, otherwise unbound
 *** M-;
 :PROPERTIES:
 :CUSTOM_ID: 211e76d9-d89a-4cc6-abce-69397d456fda
 :END:
+comment-dwim
 *** [C-M-;]                                                           :drill:
 SCHEDULED: <2014-04-07 Mon>
     :PROPERTIES:
@@ -7567,7 +7422,7 @@ recursive grep
 *** [C-,]                                                             :drill:
 SCHEDULED: <2014-05-13 Tue>
     :PROPERTIES:
-    ido-find-file
+    counsel-find-file
     :CUSTOM_ID: 6cbf3a85-f260-453a-920b-850ff5e986b1
     :ID:       df0f3769-bcfc-4cb9-8943-bb86dafb2711
     :DRILL_LAST_INTERVAL: 71.5839
@@ -7579,10 +7434,10 @@ SCHEDULED: <2014-05-13 Tue>
     :DRILL_LAST_QUALITY: 5
     :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:10>
     :END:
-ido-find-file
+counsel-find-file
     [
 #+begin_src emacs-lisp
-    (global-set-key (kbd "C-,") 'ido-find-file)
+    (global-set-key (kbd "C-,") 'counsel-find-file)
 (add-hook 'flyspell-mode-hook
             (lambda () (define-key flyspell-mode-map (kbd "C-,") nil)))
 #+end_src
@@ -8044,6 +7899,9 @@ org-edit-special
 (add-hook 'org-mode-hook
           (lambda ()
             (define-key org-mode-map (kbd "C-SPC") 'org-edit-special)
+            ;; org-src-mode-map is broken in git version of emacs.
+            ;; temporarily use this for exiting edit-special mode.
+            (global-set-key (kbd "C-M--") 'org-edit-src-exit)
             (define-key org-src-mode-map (kbd "C-SPC") 'org-edit-src-exit)))
 #+end_src
 ]
@@ -8443,6 +8301,7 @@ insert-apache
 :PROPERTIES:
 :CUSTOM_ID: 6febc7ea-9cc7-488c-af34-538b8e69633b
 :END:
+org-edit-src-exit
 *** C-S--
 :PROPERTIES:
 :CUSTOM_ID: c73af1d7-61f2-4c1b-935e-43f077d8d915
@@ -8776,6 +8635,9 @@ to its output.
       subexpression for close bracket char or nothing: \\(\\]\\|\\)
 
 * keybind tables
+:LOGBOOK:
+CLOCK: [2016-11-28 Mon 10:59]--[2016-11-28 Mon 10:59] =>  0:00
+:END:
 dunno why but it takes doing ctrl-c twice to update this
   #+BEGIN: keybind-dblock
 |---------------------+------------------------|
@@ -8859,10 +8721,10 @@ dunno why but it takes doing ctrl-c twice to update this
 | p               | [[#9c2e2ba9-f34e-48fe-b4ff-b9826882c1cc][move-mouse-to-point]]            |                                 | [[#d55616d3-a3f6-4e83-8807-748578a7b726][delete-horizontal-space]]       |                          |
 | j               | [[#ebcf7c71-3c93-431b-af6b-7c5df7f2945e][register prefix]]                | [[#474a3e12-95ac-4f43-b83a-36716f3e6f76][previous-error]]                  |                               |                          |
 | k               | [[#25a7ba1c-ddf3-47f1-9516-914a552e7a36][jump to register]]               | [[#a96691bb-9e4c-414b-a093-d9961d453e21][next-error]]                      | [[#f61ea4ea-4597-422e-b7e3-d3cfad82603d][man]]                           |                          |
-| l               | [[#8a7572bd-4b5e-4464-b937-3d35adb1783f][ido-switch-buffer]]              |                                 | [[#24b660d4-3ec4-4416-8a6a-b8224ed1ee8b][move cursor top bottom mid]]    |                          |
+| l               | [[#8a7572bd-4b5e-4464-b937-3d35adb1783f][ivy-switch-buffer]]              |                                 | [[#24b660d4-3ec4-4416-8a6a-b8224ed1ee8b][move cursor top bottom mid]]    |                          |
 | ;               | [[#7e3710eb-5460-4460-8bf0-488302e4ce35][comment-dwim]]                   |                                 | [[#28680a96-5223-4632-80b9-b1facdd541e7][comment-current-line-dwim]]     |                          |
 | m               | [[#deee53ba-dfa2-4910-894c-55ae98d11aa4][pop-to-mark]]                    |                                 | [[#f283f705-cba0-45db-b80f-5d20415b2eee][recursive grep]]                |                          |
-| ,               | [[#6cbf3a85-f260-453a-920b-850ff5e986b1][ido-find-file]]                  |                                 | [[#bfdf6111-029d-462b-bcca-50a3ed2162d5][find-file-in-project]]          |                          |
+| ,               | [[#6cbf3a85-f260-453a-920b-850ff5e986b1][counsel-find-file]]                  |                                 | [[#bfdf6111-029d-462b-bcca-50a3ed2162d5][find-file-in-project]]          |                          |
 | .               | [[#0675c171-8677-44a8-882c-e7ed42715e31][recentf-ido-find-file]]          |                                 | [[#824d422c-67b6-4d68-af11-6a2135e528f5][-]]                             |                          |
 | /               | [[#941a7fa8-84b9-434d-89a0-1487385ec479][join lines]]                     |                                 | [[#37f67593-4f60-4d3b-9aad-6c9bc4882443][copy-variable]]                 |                          |
 | 8               | [[#251c4a1a-a683-4804-a706-d0d3752e42fa][calc-embedded-word]]             |                                 |                               |                          |
@@ -8910,7 +8772,9 @@ much, so the added hassle of having to set it within this file is
 worth the benefit of only having one concept in my mind.
 #+begin_src emacs-lisp
   (dolist
-      (r `((?i (file . ,"~/.emacs.d/my-init.org"))
+      (r `(
+      (?i (file . ,"~/.emacs.d/my-init.org"))
+      (?t (file . ,"/a/x.txt"))
            ))
     (set-register (car r) (cadr r)))
 #+end_src
@@ -8955,7 +8819,7 @@ command to make more accessible, ...
 * TESTING / DEVELOPMENT AREA
 
 :PROPERTIES:
-  :tangle:   no
+:header-args: :tangle no
 :END:
 ** new
 #+begin_src emacs-lisp