ditch org for init, various improvements
[dot-emacs] / init-notes.org
diff --git a/init-notes.org b/init-notes.org
deleted file mode 100644 (file)
index af7bad9..0000000
+++ /dev/null
@@ -1,1505 +0,0 @@
-* python disabled due to long load time
-todo: get smart-operator to work
-todo, checkout https://github.com/python-rope/ropemacs refactoring python,
-todo, try py-autopep8, autoformatter
-todo, check out some python linting stuff. pychecker is one, others are in *packages*
-todo, finish reading through python-mode.el functions
-;; todo, figure out multi-line input in shell mode
-
-
-usefull m-x commands:
-m-x py-describe-mode: doc for mode which is extensive
-m-x py-sort-imports
-m-x py-guess-indent-offset: setup indent for code i didn't write
-
-possibly usefull commands:
-found via looking through python-mode.el, quit like 1/4 through, cuz its tedious, last spot was at:
-(defun py-comment-region (beg end &optional arg)
-after finding py-describe-mode, it seemed to do a good job of documenting all the most important stuff
-
-py-switch-to-python
-python-shell-completion-complete-or-indent may be usefull to get completion working in the shell
-py-insert-default-shebang
-py-electric-*
-py-indent-line-outmost
-py-newline-and-close-block
-py-indent-and-forward (indent line, move to next)
-py-fill-*
-py-which-function (for showing in the modeline)
-py-help-at-point
-py-execute-import-or-reload
-py-execute-def-or-class
-various pdb functions
-
-
-installing jedi
-#+begin_src sh :tangle no
-pi python-pip
-s pip install jedi virtualenv
-#+end_src
-then do m-x jedi:install-server
-
-
-
-disabled because it takes 152 ms to load,
-and I don't know how to do it conditioally
-#+begin_src emacs-lisp :tangle no
-
-;; change from default python3 to be compatibile with Pywikibot
-(setq py-shell-name "/usr/bin/python")
-(require 'python-mode)
-
-(setq py-autopep8-options '("--max-line-length=110"))
-
-(defun py-execute-block-or-clause-create-shell ()
-  (interactive)
-  (cond ((get-buffer "*Python*")
-         (py--execute-prepare "block-or-clause")
-         (py-execute-block-or-clause)
-         (call-interactively 'next-line))
-        (t
-         (py-shell)
-         ;; py-shell starts the shell but not display the buffer on the first run
-         ;; subsequent runs, it does. I grabbed this command from inside to
-         ;; do just the relevant part from the second run, as a hack.
-         ;; todo: report a bug on this
-         (py--shell-manage-windows py-buffer-name))))
-(setq py-tab-shifts-region-p t)
-(setq py-tab-indents-region-p t)
-
-(defun py-run ()
-  "default action to run the current buffer"
-  (basic-save-buffer)
-  (py-execute-buffer))
-
-
-(add-hook 'python-mode-hook
-          (lambda ()
-            (setq run-fun 'py-run)
-            (define-key python-mode-map (kbd "C-M-a") nil)
-            (define-key python-mode-map (kbd "C-M-d") nil)
-            (define-key python-mode-map (kbd "C-M-e") nil)
-            (define-key python-mode-map (kbd "C-M-h") nil)
-            (define-key python-mode-map (kbd "C-M-i") nil)
-            (define-key python-mode-map (kbd "C-M-u") nil)
-            (define-key python-mode-map (kbd "C-M-x") nil)
-            (define-key python-mode-map (kbd "<tab>") 'indent-for-tab-command)
-            (define-key python-mode-map (kbd "C-j") nil)
-            (define-key python-mode-map (kbd "<C-backspace>") nil)
-            ;;(define-key python-mode-map (kbd "C-(") (lambda () (interactive) (basic-save-buffer) (py-execute-buffer)))
-            ;; fix default return bindings
-            (define-key python-mode-map (kbd "C-j") nil)
-            (define-key python-mode-map (kbd "RET") nil)
-            (define-key python-mode-map (kbd "<return>") 'py-newline-and-indent)
-            (define-key python-mode-map (kbd "<M-tab>") 'py-indent-line)
-            (define-key python-mode-map (kbd "C-M-(") 'py-shift-left)
-            (define-key python-mode-map (kbd "C-M-)") 'py-shift-right)
-            (define-key python-mode-map (kbd "<home>") 'py-beginning-of-line)
-            (define-key python-mode-map (kbd "<end>") 'py-end-of-line)
-            (define-key python-mode-map (kbd "C-t") 'py-execute-block-or-clause-create-shell)
-            (define-key python-mode-map (kbd "<S-delete>") 'py-ian-execute-line-or-region)
-            ;; python mode adds these to this list, which is normally empty.
-            ;; it makes my send-python function not reuse an existing python shell window
-            ;; there are other ways to override this, but I don't know of any other value of
-            ;; having this set.
-            (setq same-window-buffer-names (delete "*Python*" same-window-buffer-names))
-            (setq same-window-buffer-names (delete "*IPython*" same-window-buffer-names))))
-
-;; i dunno, why, but this didn't work:
-;; and we can't eval-after-load cuz it is part of the greater python mode file
-(add-hook 'py-shell-hook
-          (lambda ()
-            (define-key py-shell-map "\r" nil)
-            (define-key py-shell-map (kbd "<return>") 'comint-send-input)
-            (define-key py-shell-map (kbd "C-t") 'py-shell-toggle-arrow-keys)
-            (define-key py-shell-map "\C-d" nil)
-            (define-key py-shell-map (kbd "<up>") 'my-comint-previous-input)
-            (define-key py-shell-map (kbd "<down>") 'my-comint-next-input)))
-
-
-(defun py-ian-execute-line-or-region ()
-  (interactive)
-  (cond ((get-buffer "*Python*")
-         (if mark-active
-             (py-execute-region)
-           (py-execute-statement))
-         (call-interactively 'next-line))
-        (t (py-shell))))
-
-;; http://tkf.github.io/emacs-jedi/latest/
-(add-hook 'python-mode-hook 'jedi:setup)
-(setq jedi:complete-on-dot t)
-
-(defun py-shell-toggle-arrow-keys ()
-  (interactive)
-  (toggle-arrow-keys py-shell-map))
-
-#+end_src
-
-
-;; py-shell window stuff
-;; it splits the window if the shell is in a different frame
-;; which seems to be a bug, but it can be fixed with this option
-;; (setq py-keep-windows-configuration 'force)
-;; however, with py-execute-block-or-clause, if the shell is in a different frame,
-;; you get errors "buffer is read only", when the point is near the beginning of a command
-;; todo: test with emacs -Q and file a bug
-;; if you execute py-execute-... without a python shell open,
-;; it starts one, doesn't display it, and subsequent py-execute commands
-;; give error "buffer is read only"
-;; these functions fix / improve these problems
-
-
-** initial python-mode setup
-
-python-mode seems to be the most canonical package, based on
-https://docs.python.org/devguide/emacs.html
-much more feature rich than the emacs built in one.
-
-getting it, it wants you to setup an account on launchpad by default,
-there is some way to get anonymous bzr access, but google didn't answer it right away,
-so fuck it, ill go the happy path.
-
-based on error messages,
-add public ssh key to https://launchpad.net/people/+me
-bzr launchpad-login iank
-cd  ~/.emacs.d/src/
-bzr branch lp:python-mode
-
-add lines from INSTALL to init
-
-
-** background on packages
-jedi appears most popular based on github stats
-pysmell appears dead
-ac-python appears dead
-https://github.com/proofit404/anaconda-mode seems to be kicking along
-
-
-** misc notes:
-
-python-mode has a TON of functions that are just aliases or verbatim wrappers of other functions.
-also has undocumented/unused vars all around. it is quite annoying.
-
-the dedicated argument to py-shell does nothing,
-and py-dedicated-shell just sets that, so it is a waste
-
-
-** background on sending to python shell
-
-using the builtin python execute shell functions, sending one line doesn't really work well.
-The bulit in functions don't wait for further input if a block is not closed.
-And doing a copy/paste thing gets messed up because of indents.
-With some hacking, I could probably do copy/paste and remove indents, only to a
-certain level if we have entered a block and are waiting to finish it.
-But just doing the builtin execute block is a decent work around.
-
-
-Here is the scrapped function for single line built in sending to shell.
-
-
-(setq w32-enable-num-lock nil)
-(global-set-key (kbd "<num_lock>") 'left-char)
-
-
-(defun sqlup-find-correct-keywords ()
-  "If emacs is handling the logic for syntax highlighting of SQL keywords, then we piggyback on top of that logic. If not, we use an sql-mode function to create a list of regular expressions and use that."
-    (mapcar 'car (sql-add-product-keywords sql-product '())))
-
-
-largest subarray sum, array of pos and neg ints.
-
-* disabled but saved for documentation purposes
-:PROPERTIES:
-:header-args: :tangle no
-:END:
-
-** ido keybinds
-*** C-j
-ido-find-file create file
-*** //]
-ido goto root
-*** C-k]
-ido kill buffer/file
-*** C-d]
-ido open dired buffer
-*** M-d]
-ido search within all subdirectories
-*** M-m]
-ido create subdirectory
-*** M-s]
-ido search recently used directories
-*** M-n/p]
-ido next/previous recently used directory
-*** C-s]
-**** TODO implement this keybind, normally ctrl-space
-ido use current pattern and start a new one
-
-
-** 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
-;; comint-dynamic-complete-functions
-;; (car comint-dynamic-complete-functions)
-(autoload 'bash-completion-dynamic-complete "bash-completion"
-  "BASH completion hook")
-(add-hook 'shell-dynamic-complete-functions
-          'bash-completion-dynamic-complete)
-
-;; this appears useless, but was in the recommended init code
-(add-hook 'shell-command-complete-functions
-          'bash-completion-dynamic-complete)
-
-(defun ac-rlc-setup-sources ()
-  "Add me to shell-mode-hook!"
-  (setq ac-sources '(ac-source-shell)))
-(add-hook 'shell-mode-hook 'ac-rlc-setup-sources)
-
-#+end_src
-
-** misc stuff
-  It is an awesome mode for keyboard navigation.
-  However, using the mouse takes less thought and works as well
-
-  #+begin_src emacs-lisp
-
-
-    ;; 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))
-                                            ;to enable whitespace mode
-    (whitespace-mode +1)
-
-
-
-    (defun org-set-mark-command (arg)
-      "Do set-mark-command and then org-show-context if the point
-              moves to invisible text."
-      (interactive "P")
-      (let ((initial-point (point)))
-        (setq this-command 'set-mark-command)
-        (set-mark-command (arg))
-        (if (and (not (= (point) initial-point))
-                 (or (outline-invisible-p) (org-invisible-p2)))
-            (org-show-context 'mark-goto))))
-
-    (defun org-exchange-point-and-mark (&optional arg)
-      (interactive "P")
-      (let ((initial-point (point)))
-        (exchange-point-and-mark)
-        (if (and (not (= (point) initial-point))
-                 (or (outline-invisible-p) (org-invisible-p2)))
-            (org-show-context 'mark-goto))))
-
-
-    (defun toggle-mode-line ()
-      "Toggle mode line on and off."
-      (interactive)
-      (if mode-line-format
-          (progn (setq my-saved-mode-line-format mode-line-format)
-                 (setq mode-line-format nil))
-        (setq mode-line-format my-saved-mode-line-format))
-      (force-mode-line-update))
-    (toggle-mode-line)
-    (global-set-key (kbd "M-m") 'toggle-mode-line)
-    (add-hook 'after-change-major-mode-hook
-              (lambda () (setq my-saved-mode-line-format mode-line-format)
-                (setq mode-line-format nil)))
-
-
-  #+end_src
-
-** Copy mode-line to the top
-  #+begin_src emacs-lisp
-;; Copy mode-line to the top
-(setq-default header-line-format mode-line-format
-mode-line-format nil)
-;; copied the mode-line theme into the header theme, else it is unreadable
-;; this goes after loading the theme
-(let ((class '((class color) (min-colors 89))))
-(custom-theme-set-faces
-   'leuven
-     `(header-line ((,class (:box (:line-width 1 :color "#1A2F54") :foreground "#85CEEB" :background "#335EA8"))))))
-
-  #+end_src
-
-** tab bindings for when I wanted to make tab be for search
-#+begin_src emacs-lisp
-
-  (define-key emacs-lisp-mode-map (kbd "<tab>") nil)
-  (define-key button-buffer-map "\t" nil)
-  (define-key button-buffer-map (kbd "f") 'forward-button)
-  (define-key Info-mode-map "\t" nil)
-  (define-key widget-keymap "\t" nil)
-  (define-key widget-keymap (kbd "<tab>") nil)
-
-  (add-hook 'compilation-mode-hook (lambda ()
-                                     (define-key compilation-mode-map (kbd "<tab>") nil)
-                                     (define-key compilation-mode-map "\t" nil)))
-
-;; unbind c-i for yas. it already separately binds <tab>
-  (add-hook 'yas-minor-mode-hook (lambda ()
-                                     (define-key yas-minor-mode-map "\t" nil)))
-
-  (add-hook 'haskell-interactive-mode-hook
-            (lambda ()
-              (define-key haskell-interactive-mode-map "\t" nil)
-              (define-key haskell-interactive-mode-map (kbd "<tab>") 'haskell-interactive-mode-tab)))
-
-    (define-key minibuffer-local-must-match-map "\t" nil)
-  (define-key minibuffer-local-must-match-map (kbd "<tab>") 'minibuffer-complete)
-  (define-key minibuffer-local-completion-map (kbd "<tab>") 'minibuffer-complete)
-  (define-key minibuffer-local-completion-map "\t" 'minibuffer-complete)
-
-  (add-hook 'ido-setup-hook
-            (lambda()
-              (define-key ido-completion-map (kbd "<tab>") 'ido-complete)
-              (define-key ido-completion-map "\t" nil)))
-
-#+end_src
-
-** kill buffer and window
-#+begin_src emacs-lisp
- (defun kill-buffer-and-window ()
-        "Close the current window and kill the buffer it's visiting."
-        (interactive)
-        (progn
-          (kill-buffer)
-          (delete-window)))
-#+end_src
-** sending multiple commands to a comint buffer
-without waiting for commands to finish is unreliable.
-seems like 1 in 100 times, an invisible command to restore prompt didn't work
-#+begin_src emacs-lisp
-(setq shell-unset-prompt "unset PROMPT_COMMAND; unset PS1")
-  (setq shell-set-prompt "PROMPT_COMMAND=prompt_command")
-
-(if (boundp 'shell-unset-prompt)
-              (send-invisible-string proc shell-unset-prompt))
-(if (boundp 'shell-set-prompt)
-              (send-invisible-string proc shell-set-prompt))
-
-
-  (defun send-invisible-string (proc string)
-    "Like send-invisible, but non-interactive"
-    (comint-snapshot-last-prompt)
-    (funcall comint-input-sender proc string))
-
-#+end_src
-
-
-
-
-** org-mode auto-complete source
-
-todo, someday take a look at this. it is broken.
-
-;(defvar ac-source-eshell-pcomplete
-;  '((candidates . (pcomplete-completions))))
-;(defun ac-complete-eshell-pcomplete ()
-;  (interactive)
-;  (auto-complete '(ac-source-eshell-pcomplete)))
-
-;(add-hook 'org-mode-hook (lambda () (setq ac-sources (cons 'ac-source-eshell-pcomplete ac-sources))))
-;(add-to-list 'ac-modes 'eshell-mode)
-
-
-** gnus nice unicode
-
-
-this looks nice, but it lags gnus just a bit
-#+begin_src emacs-lisp
-
-(defun gnus-pretty-chars-setup ()
-  (when window-system
-    (setq gnus-sum-thread-tree-indent "  "
-          gnus-sum-thread-tree-root "● "
-          gnus-sum-thread-tree-false-root "◯ "
-          gnus-sum-thread-tree-single-indent "◎ "
-          gnus-sum-thread-tree-leaf-with-other "├─► "
-          gnus-sum-thread-tree-vertical "│"
-          gnus-sum-thread-tree-single-leaf "╰─► ")))
-;; dunno why, but this didn't work just setting on startup
-(add-hook 'gnus-startup-hook 'gnus-pretty-chars-setup)
-
-#+end_src
-
-** misc
-#+begin_src emacs-lisp
-
-;; this makes more ergonomic sense, since our eyes are mostly on the left,
-;; but after using it a while, it's too much cognitive dissonance that
-;; every other program has it on the right
-;;(set-scroll-bar-mode 'left)
-
-
-
-; todo, is this require things necessary?
-;    (require 'flyspell)
-
-
-
-  ; whenever M-tab is completion, swap it with tab
-  ;(define-key emacs-lisp-mode-map (kbd "<tab>") 'completion-at-point)
-  ;(define-key emacs-lisp-mode-map (kbd "C-M-i") 'indent-for-tab-command)
-  ;(define-key lisp-interaction-mode-map (kbd "<tab>") 'completion-at-point)
-  ;(define-key lisp-interaction-mode-map (kbd "C-M-i") 'indent-for-tab-command)
-  ;the global tab keyind. for some reason this totally screws up mini-buffer tab.
-  ; disabled until I actually find myself using this, and find a fix for the above problem
-  ;(global-set-key (kbd "<tab>")  'complete-symbol)
-
-
-  ; todo, make my custom overlays have an underline if they are
-  ;  overriding a paren matching overlay
-  ; make right click set the mark
-  ; make search tab do completion instead of meta-tab
-  ; in isearch, move C-y to C-v
-  ; in isearch, move c-s to c-f
-
-  ;  some testing to figure out the underlining when paren highlight conflicts
-  ;      (let ((extra-overlays (overlays-at (1+ end-point))))
-  ;       (when extra-overlays (print extra-overlays)))
-
-
-
-
-  ; commented out because it messes up yank-pop.
-; todo, fix it someday
-  ; make yank linewise if it ends in a newline
-  ;(defadvice yank (before linewise-yank-advice activate)
-  ;  (let ((arg (ad-get-arg 0)))
-  ;  (when (string-match "\n[ \t]*$" (current-kill (cond
-  ;;                        ((listp arg) 0)
-  ;;                        ((eq arg '-) -2)
-  ;;                        (t (1- arg))) t))
-  ;; (move-beginning-of-line nil))))
-
-
-
-; todo, look into augmenting auto-complete with hippie expand.
-; starter kit has some hippie expand settings to look into:
-; (when (boundp 'hippie-expand-try-functions-list)
-;    (delete 'try-expand-line hippie-expand-try-functions-list)
-;    (delete 'try-expand-list hippie-expand-try-functions-list))
-
-
-;; hippie expand is dabbrev expand on steroids
-;(setq hippie-expand-try-functions-list '(try-expand-dabbrev
-;                                         try-expand-dabbrev-all-buffers
-;                                         try-expand-dabbrev-from-kill
-;                                         try-complete-file-name-partially
-;                                         try-complete-file-name
-;                                         try-expand-all-abbrevs
-;                                         try-expand-list
-;                                         try-expand-line
-;                                         try-complete-lisp-symbol-partially
-;                                         try-complete-lisp-symbol))
-;; use hippie-expand instead of dabbrev
-;(global-set-key (kbd "M-/") 'hippie-expand)
-
-
-; commented because i haven't had time to check it out yet
-;; shorter aliases for ack-and-a-half commands
-;(defalias 'ack 'ack-and-a-half)
-;(defalias 'ack-same 'ack-and-a-half-same)
-;(defalias 'ack-find-file 'ack-and-a-half-find-file)
-;(defalias 'ack-find-file-same 'ack-and-a-half-find-file-same)
-
-
-
-
-; todo. take a look at fixing this
-;delete-old-versions t ; fix description in http://www.emacswiki.org/emacs/ForceBackups
-
-
-
-
-;; prelude uses paredit mode.
-;; paredit has some useful stuff but also annoying stuff.
-;; if I ever do a ton of lisp coding, I should look into it
-
-
-
-
-
-
-  ; random notes and example code
-
-
-  ; usefull thing
-  ;(map 'list #'list tabSwapKeys (reverse (getBinds tabSwapKeys)))
-
-  ; example of getting keymap info
-  ;(car (car (minor-mode-key-binding (kbd "C-/") t)))
-  ;(cdr (car (minor-mode-key-binding (kbd "C-/") t)))
-  ;(global-key-binding (kbd "C-M-i") t)
-  ;(minor-mode-key-binding (kbd "<tab>") t)
-  ;(local-key-binding (kbd "C-M-i") t)
-  ;(current-minor-mode-maps)
-  ;(cdr (assq 'undo-tree-mode minor-mode-map-alist))
-
-
-  ; center on incremental search, instead of being at top or bottom of screen.
-  ; i'm hoping that setting Isearch Allow Scroll is good enough to fix this annoyance
-  ;from http://stackoverflow.com/questions/11052678/emacs-combine-iseach-forward-and-recenter-top-bottom
-
-  ;example of constant definition of an overlay and propreries
-  ;(defface mouse-flash-position '((t (:background "Yellow")))
-  ;  "*Face used to highlight mouse position temporarily."
-  ;  :group 'mouse)
-  ;(defface mouse-flash-position '((t (:background "Yellow")))
-  ;  "*Face used to highlight mouse position temporarily."
-  ;  :group 'mouse)
-  ;(defconst mouse-flash-posn-overlay
-  ;    ;; Create and immediately delete, to get "overlay in no buffer".
-  ;  (let ((ol  (make-overlay (point-min) (point-max))))
-  ;    ;(delete-overlay ol)
-  ;    ;(overlay-put ol 'face 'mouse-flash-position)
-  ;    (overlay-put ol 'mouse-face 'mouse-flash-position)
-  ;    (overlay-put ol 'priority 1000000)
-  ;    ol)
-  ;  "Overlay to highlight current mouse position.")
-
-
-  ;tip, put the last interactive command as elisp on the kill ring:
-  ;C-x <ESC> <ESC> C-a C-k C-g
-
-  ; example of overlay testing
-  ;(setq foo (make-overlay 2 3 nil t nil))
-  ;(setq foo2 (make-overlay 3 4 nil t nil))
-  ;(overlay-put foo 'face '(:background "red3" :foreground "black"))
-  ;(overlay-put foo2 'face '(:background "red1" :foreground "black"))
-  ;(overlay-put foo 'face 'visible-mark-face)
-  ;(overlay-put foo 'face visible-mark-face2)
-
-
-#+end_src
-
-
-** SQL
-
-disabled, as I haven't used it in a long time. I think it was good for learning some sql stuff.
-#+begin_src emacs-lisp :tangle no
-(require 'sqlup-mode)
-(add-hook 'sql-mode-hook 'sqlup-mode)
-(add-hook 'sql-interactive-mode-hook 'sqlup-mode)
-
-(setq sql-product 'postgres)
-#+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
-
-** java eclim
-
-based on https://github.com/senny/emacs-eclim
-
-
-eclim: eclipse completion, searching, validation, etc inside emacs
-install:
-cd ~/opt
-git clone git://github.com/ervandew/eclim.git
-cd eclim
-pi ant
-ant -Declipse.home=/a/opt/eclipse
-
-
-currently makes emacs hang a bunch. dunno why. just using eclipse instead
-#+begin_src emacs-lisp :tangle no
-(require 'eclim)
-(global-eclim-mode)
-
-;; just do java
-(setq eclim-accepted-file-regexps
- '("\\.java"))
-
-(custom-set-variables
-  '(eclim-eclipse-dirs '("/a/opt/eclipse"))
-  '(eclim-executable "/a/opt/eclipse/eclim"))
-
-(setq help-at-pt-display-when-idle t)
-(setq help-at-pt-timer-delay 0.1)
-(help-at-pt-set-timer)
-
-;; dunno if this line is needed
-(require 'eclimd)
-(setq eclimd-default-workspace "/a/bin/eclipse-workspace")
-
-;;add the emacs-eclim source
-(require 'ac-emacs-eclim-source)
-(add-hook 'java-mode-hook 'ac-emacs-eclim-java-setup)
-
-#+end_src
-
-#+RESULTS:
-| ac-emacs-eclim-java-setup |
-
-
-
-* broken & disabled mouse stuff
-
-all mouse stuff disabled till i have time to figure it out again.
-#+begin_src emacs-lisp :tangle no
-(defun xterm-mouse-translate-1 (&optional extension)
-  (save-excursion
-    (let* ((event (xterm-mouse-event extension))
-           (ev-command (nth 0 event))
-           (ev-data    (nth 1 event))
-           (ev-where   (nth 1 ev-data))
-           (vec (vector event))
-           (is-down (string-match "down-" (symbol-name ev-command))))
-
-      (cond
-       ((null event) nil)              ;Unknown/bogus byte sequence!
-       (is-down
-        (setf (terminal-parameter nil 'xterm-mouse-last-down) event)
-        vec)
-       (t
-        (let* ((down (terminal-parameter nil 'xterm-mouse-last-down))
-               (down-data (nth 1 down))
-               (down-where (nth 1 down-data)))
-          (setf (terminal-parameter nil 'xterm-mouse-last-down) nil)
-          (cond
-           ((null down)
-            ;; This is an "up-only" event.  Pretend there was an up-event
-            ;; right before and keep the up-event for later.
-            (push event unread-command-events)
-            (vector (cons (intern (replace-regexp-in-string
-                                   "\\`\\([ACMHSs]-\\)*" "\\&down-"
-                                   (symbol-name ev-command) t))
-                          (cdr event))))
-           ((equal ev-where down-where) vec)
-           (t
-            (let ((drag (if (symbolp ev-where)
-                            0          ;FIXME: Why?!?
-                          (list (intern (replace-regexp-in-string
-                                         "\\`\\([ACMHSs]-\\)*" "\\&drag-"
-                                         (symbol-name ev-command) t))
-                                down-data ev-data))))
-              (if (null track-mouse)
-                  (vector drag)
-                (push drag unread-command-events)
-                (vector (list 'mouse-movement ev-data))))))))))))
-
-#+end_src
-
-
-** cursor highlight
-disabled until fixed
-#+begin_src emacs-lisp :tangle no
-    (defun mouse-follow-cursor ()
-      ;(if (not (equal this-command last-command)) (print this-command))
-;debug
- ;    (print this-command)
-      (when (and this-command (not (string= this-command "show-pointer")))
-        (let* ((pos (posn-col-row (posn-at-point)))
-               (x (1+ (car pos))) ; no idea why this is off by 1
-               (y (cdr pos)))
-      (setq ignore-mouse-visibility t)
-          (set-mouse-position (selected-frame) x y))
-    ;(sleep-for 0 100)
-        (frame-make-pointer-invisible)))
-
-    ;    (when this-command
-    ;      (if (string= this-command "show-pointer")
-    ;    (frame-make-pointer-visible)
-  ;))
-
-
-
-    (defun show-pointer ()
-      (interactive)
-      (if ignore-mouse-visibility
-          (setq ignore-mouse-visibility nil)
-;  (print "visible")
-      (frame-make-pointer-visible)))
-
-      (setq ignore-mouse-visibility t)
-; disabled
- ;   (global-set-key (kbd "<mouse-movement>") 'show-pointer)
-
- ;   (add-hook 'post-command-hook 'mouse-follow-cursor t)
-
-
-    ; status. working, except that all scroll wheel actions send a mouse-movement command before doing their actual command, which makes the pointer flicker.
-   ; this is just an artifact of xbindkeys. when i do my own mouse chip, it will fix this.
-
-; we could set track-mouse to nil, then do the command, then set it back. i like that idea a bit better.
-    ; we could do the same thing in the other case of ignore-mouse-visibility.
-
-    ; there are also other issues, it doesn't work with changing buffers on a split screen.
-   ; i think a good idea along with this would be for the cursor to follow the mouse all the time.
-   ; i have done code for that in my mouse 1 function,
-   ; i just need to read it again and try it out.
-
-
-
-
-    ; this does not take care of scrolling,
-    ; a post-command hook function below does,
-    ; but it breaks when the frame is split.
-    ; the bug is specifically in mouse-pixel-position
-    ; todo, fix this eventually
-    (defun mouse-highlight-event (event)
-      (interactive "e")
-      (when (or (not event) (mouse-movement-p event)
-                (memq (car-safe event) '(switch-frame select-window)))
-        (let ((pos (posn-point (event-end event))))
-          (if (eq (overlay-buffer mouse-hi-ov) (current-buffer))
-              (move-overlay mouse-hi-ov pos (1+ pos))
-            (delete-overlay mouse-hi-ov)
-            (setq mouse-hi-ov
-                  (make-overlay pos (1+ pos)))
-            (overlay-put mouse-hi-ov
-                         'insert-in-front-hooks (list 'mouse-hi-modification))
-            (overlay-put mouse-hi-ov 'priority 1001))
-          (cond ((save-excursion (goto-char pos) (eolp))
-                 (overlay-put mouse-hi-ov 'face nil)
-                 (overlay-put mouse-hi-ov 'before-string
-                              (propertize
-                               " "
-                               'cursor t
-                               'face 'mouse-cursor-face)))
-                (t
-                 (overlay-put mouse-hi-ov 'face 'mouse-cursor-face)
-                 (overlay-put mouse-hi-ov 'before-string nil))))))
-
-
-    ; overlay changed hook function
-    (defun mouse-hi-modification (ov timing beginning end &optional length)
-      "Make an overlay of length 1 not expand when text is inserted at the front."
-      (when timing
-        (let ((start (overlay-start ov)))
-          (move-overlay ov start (1+ start)))))
-
-
-
-
-    (defun mouse-hi-command-hook ()
-    ; not sure if I need to deal with case of a nil mouse position in some unforseen situation.
-      (let ((x-y (cdr (mouse-pixel-position))))
-        (when (wholenump (car x-y))
-          (let ((pos (posn-point (posn-at-x-y (car x-y) (cdr x-y) nil t))))
-            (when pos
-              (if (eq (overlay-buffer mouse-hi-ov) (current-buffer))
-                  (move-overlay mouse-hi-ov pos (1+ pos))
-                (delete-overlay mouse-hi-ov)
-                (setq mouse-hi-ov
-                      (make-overlay pos (1+ pos)))
-
-                (overlay-put mouse-hi-ov 'priority 1001))
-              (cond ((save-excursion (goto-char pos) (eolp))
-
-                     (overlay-put mouse-hi-ov 'face nil)
-                     (overlay-put mouse-hi-ov 'before-string
-                                  (propertize
-                                   " "
-                                   'cursor t
-                                   'face 'mouse-cursor-face)))
-                    (t
-                     (overlay-put mouse-hi-ov 'face 'mouse-cursor-face)
-                     (overlay-put mouse-hi-ov 'before-string nil))))))))
-    ; (pcase-let ((`(,_ ,x . ,y) (mouse-pixel-position)))
-    ;                   (posn-point (posn-at-x-y x y)))))
-    ; equivalent of above to find pos. todo, learn about the above syntax
-
-    (setq mouse-hi-ov (make-overlay 1 1))
-    (delete-overlay mouse-hi-ov)
-    ; initialized overlay
-    ; temporarily set to nil instead of t because it is broken and
-    ; also has a bug that makes emacs not remember the column when
-    ; doing  up and down movements.
-    ; it also messes up yas/insert-snippet, dunno why.
-; i should test out whether it is something in the post-command hook
-;    (setq track-mouse t)
-    ;(add-hook 'post-command-hook 'mouse-hi-command-hook)
-
-    ;(mouse-hi-command-hook)
-    ;(setq debug-on-error nil)
-
-  #+end_src
-** mouse 1 drag func
-
-disabled as it breaks in newer emacs versions with this error, when
-clicking on info links
-
-"and: Symbol's function definition is void: mouse--remap-link-click-p"
-
-#+begin_src emacs-lisp :tangle no
-
-  ; Copied from mouse.el and modified.
-  ; my modifications have comments prefaced by "ian"
-  (defun mouse-drag-track (start-event  &optional
-                                        do-mouse-drag-region-post-process)
-    "Track mouse drags by highlighting area between point and cursor.
-  The region will be defined with mark and point.
-  DO-MOUSE-DRAG-REGION-POST-PROCESS should only be used by
-  `mouse-drag-region'."
-    (mouse-minibuffer-check start-event)
-    (setq mouse-selection-click-count-buffer (current-buffer))
-  ; ian. removed as unneeded since I don't use TMM
-  ;(deactivate-mark)
-    (let* ((scroll-margin 0) ; Avoid margin scrolling (Bug#9541).
-           (original-window (selected-window))
-           ;; We've recorded what we needed from the current buffer and
-           ;; window, now let's jump to the place of the event, where things
-           ;; are happening.
-           (_ (mouse-set-point start-event))
-           (echo-keystrokes 0)
-           (start-posn (event-start start-event))
-           (start-point (posn-point start-posn))
-           (start-window (posn-window start-posn))
-           (start-window-start (window-start start-window))
-           (start-hscroll (window-hscroll start-window))
-           (bounds (window-edges start-window))
-           (make-cursor-line-fully-visible nil)
-           (top (nth 1 bounds))
-           (bottom (if (window-minibuffer-p start-window)
-                       (nth 3 bounds)
-                     ;; Don't count the mode line.
-                     (1- (nth 3 bounds))))
-           (on-link (and mouse-1-click-follows-link
-                         ;; Use start-point before the intangibility
-                         ;; treatment, in case we click on a link inside
-                         ;; intangible text.
-                         (mouse-on-link-p start-posn)))
-           (click-count (1- (event-click-count start-event)))
-           (remap-double-click (and on-link
-                                    (eq mouse-1-click-follows-link 'double)
-                                    (= click-count 1)))
-           ;; Suppress automatic hscrolling, because that is a nuisance
-           ;; when setting point near the right fringe (but see below).
-           (auto-hscroll-mode-saved auto-hscroll-mode)
-           (auto-hscroll-mode nil)
-           moved-off-start event end end-point)
-
-      (setq mouse-selection-click-count click-count)
-      ;; In case the down click is in the middle of some intangible text,
-      ;; use the end of that text, and put it in START-POINT.
-      (if (< (point) start-point)
-          (goto-char start-point))
-      (setq start-point (point))
-      (if remap-double-click
-          (setq click-count 0))
-
-      ;; Activate the region, using `mouse-start-end' to determine where
-      ;; to put point and mark (e.g., double-click will select a word).
-      (setq transient-mark-mode
-            (if (eq transient-mark-mode 'lambda)
-                '(only)
-              (cons 'only transient-mark-mode)))
-      (delete-overlay mouse-hi-ov) ; ian, added this.
-
-      (let ((range (mouse-start-end start-point start-point click-count)))
-        (push-mark (nth 0 range) t t)
-        (goto-char (nth 1 range)))
-
-      ;; Track the mouse until we get a non-movement event.
-      (track-mouse
-        (while (progn
-                 (setq event (read-event))
-                 (or (mouse-movement-p event)
-                     (memq (car-safe event) '(switch-frame select-window))))
-          (unless (memq (car-safe event) '(switch-frame select-window))
-            ;; Automatic hscrolling did not occur during the call to
-            ;; `read-event'; but if the user subsequently drags the
-            ;; mouse, go ahead and hscroll.
-            (let ((auto-hscroll-mode auto-hscroll-mode-saved))
-              (redisplay))
-            (setq end (event-end event)
-                  end-point (posn-point end))
-            ;; Note whether the mouse has left the starting position.
-            (unless (eq end-point start-point)
-              (setq moved-off-start t))
-            (if (and (eq (posn-window end) start-window)
-                     (integer-or-marker-p end-point))
-                (mouse--drag-set-mark-and-point start-point
-                                                end-point click-count)
-              (let ((mouse-row (cdr (cdr (mouse-position)))))
-                (cond
-                 ((null mouse-row))
-                 ((< mouse-row top)
-                  (mouse-scroll-subr start-window (- mouse-row top)
-                                     nil start-point))
-                 ((>= mouse-row bottom)
-                  (mouse-scroll-subr start-window (1+ (- mouse-row bottom))
-                                     nil start-point))))))
-          (visible-mark-move-overlays))) ; ian, added this
-
-
-      ;; Handle the terminating event if possible.
-      (when (consp event)
-        ;; Ensure that point is on the end of the last event.
-        (when (and (setq end-point (posn-point (event-end event)))
-                   (eq (posn-window end) start-window)
-                   (integer-or-marker-p end-point)
-                   (/= start-point end-point))
-          (mouse--drag-set-mark-and-point start-point
-                                          end-point click-count))
-
-        ;; Find its binding.
-        (let* ((fun (key-binding (vector (car event))))
-               (do-multi-click (and (> (event-click-count event) 0)
-                                    (functionp fun)
-                                    (not (memq fun '(mouse-set-point
-                                                     mouse-set-region))))))
-          (if (and (/= (mark) (point))
-                   (not do-multi-click))
-
-              ;; If point has moved, finish the drag.
-              (let* (last-command this-command)
-                (and mouse-drag-copy-region
-                     do-mouse-drag-region-post-process
-                     (let (deactivate-mark)
-                       (copy-region-as-kill (mark) (point)))))
-
-            ;; Otherwise, run binding of terminating up-event.
-            (if do-multi-click
-                (goto-char start-point)
-              (deactivate-mark)
-              (unless moved-off-start
-                ;; ian: poping the mark is a poor choice of behavior.
-                ;; we should delete the mark instead.
-                ;; The first way I found to delete it is to pop it first
-                (pop-mark)
-                (setq mark-ring (nbutlast mark-ring))))
-
-            (when (and (functionp fun)
-                       (= start-hscroll (window-hscroll start-window))
-                       ;; Don't run the up-event handler if the window
-                       ;; start changed in a redisplay after the
-                       ;; mouse-set-point for the down-mouse event at
-                       ;; the beginning of this function.  When the
-                       ;; window start has changed, the up-mouse event
-                       ;; contains a different position due to the new
-                       ;; window contents, and point is set again.
-                       (or end-point
-                           (= (window-start start-window)
-                              start-window-start)))
-
-              (when (and on-link
-                         (= start-point (point))
-                         (mouse--remap-link-click-p start-event event))
-
-                ;; If we rebind to mouse-2, reselect previous selected
-                ;; window, so that the mouse-2 event runs in the same
-                ;; situation as if user had clicked it directly.  Fixes
-                ;; the bug reported by juri@jurta.org on 2005-12-27.
-                (if (or (vectorp on-link) (stringp on-link))
-                    (setq event (aref on-link 0))
-                  (select-window original-window)
-                  (setcar event 'mouse-2)
-                  ;; If this mouse click has never been done by the
-                  ;; user, it doesn't have the necessary property to be
-                  ;; interpreted correctly.
-                  (put 'mouse-2 'event-kind 'mouse-click)))
-              (push event unread-command-events)))))))
-#+end_src
-
-** mouse 3
-#+begin_src emacs-lisp :tangle no
-
-
-  (defun mouse3-range-mark (start click click-count)
-    (let* ((range (mouse-start-end start click click-count))
-           (beg (nth 0 range))
-           (end (nth 1 range)))
-      (cond ((<= click start)
-             (set-mark beg))
-            (t
-             (set-mark end))))
-    (visible-mark-move-overlays))
-
-
-  (defun mouse3-set-mark (event)
-    "in development"
-    (interactive "e")
-    (mouse-minibuffer-check event)
-    ;; Use event-end in case called from mouse-drag-region.
-    ;; If EVENT is a click, event-end and event-start give same value.
-    (set-mark (posn-point (event-end event)))
-    (visible-mark-move-overlays))
-
-
-  (defun mouse3-func (start-event)
-    "in development"
-    (interactive "e")
-
-    (run-hooks 'mouse-leave-buffer-hook)
-
-    (mouse-minibuffer-check start-event)
-    (setq mouse-selection-click-count-buffer (current-buffer))
-    (push-mark (posn-point (event-end start-event)))
-
-    (let* ((scroll-margin 0) ; Avoid margin scrolling (Bug#9541).
-           (original-window (selected-window))
-           ;; We've recorded what we needed from the current buffer and
-           ;; window, now let's jump to the place of the event, where things
-           ;; are happening.
-  ;(_ (mouse-set-point start-event)) ; ian: commented, replaced
-           (echo-keystrokes 0)
-           (start-posn (event-start start-event))
-           (start-point (posn-point start-posn))
-           (start-window (posn-window start-posn))
-           (start-window-start (window-start start-window))
-           (start-hscroll (window-hscroll start-window))
-           (bounds (window-edges start-window))
-           (make-cursor-line-fully-visible nil)
-           (top (nth 1 bounds))
-           (bottom (if (window-minibuffer-p start-window)
-                       (nth 3 bounds)
-                     ;; Don't count the mode line.
-                     (1- (nth 3 bounds))))
-           (click-count (1- (event-click-count start-event)))
-           ;; Suppress automatic hscrolling, because that is a nuisance
-           ;; when setting point near the right fringe (but see below).
-           (auto-hscroll-mode-saved auto-hscroll-mode)
-           (auto-hscroll-mode nil)
-           moved-off-start event end end-point)
-
-      (setq mouse-selection-click-count click-count)
-      ;; In case the down click is in the middle of some intangible text,
-      ;; use the end of that text, and put it in START-POINT.
-      (if (< (mark) start-point) ; ian: change point to the mark
-          (set-mark start-point)
-        (visible-mark-move-overlays))
-      (setq start-point (mark))
-
-      (delete-overlay mouse-hi-ov) ; ian, added this.
-
-      ;; Activate the region, using `mouse-start-end' to determine where
-      ;; to put point and mark (e.g., double-click will select a word).
-      (let ((range (mouse-start-end start-point start-point click-count)))
-        (set-mark (nth 1 range)))
-      (visible-mark-move-overlays)
-
-
-      ;; Track the mouse until we get a non-movement event.
-      (track-mouse
-
-        (while (progn
-                 (setq event (read-event))
-                 (or (mouse-movement-p event)
-                     (memq (car-safe event) '(switch-frame select-window))))
-          (unless (memq (car-safe event) '(switch-frame select-window))
-
-            ;; Automatic hscrolling did not occur during the call to
-            ;; `read-event'; but if the user subsequently drags the
-            ;; mouse, go ahead and hscroll.
-            (let ((auto-hscroll-mode auto-hscroll-mode-saved))
-              (redisplay))
-            (setq end (event-end event)
-                  end-point (posn-point end))
-            ;; Note whether the mouse has left the starting position.
-
-            (unless (eq end-point start-point)
-              (setq moved-off-start t))
-            (if (and (eq (posn-window end) start-window)
-                     (integer-or-marker-p end-point))
-                (mouse3-range-mark start-point end-point click-count); ian, set mark
-
-  ; do scrolling if needed
-              (let ((mouse-row (cdr (cdr (mouse-position)))))
-                (cond
-                 ((null mouse-row))
-                 ((< mouse-row top)
-                  (mouse-scroll-subr start-window (- mouse-row top)
-                                     nil start-point))
-                 ((>= mouse-row bottom)
-                  (mouse-scroll-subr start-window (1+ (- mouse-row bottom))
-                                     nil start-point))))))))
-
-      ;; Handle the terminating event if possible.
-      (when (consp event)
-        ;; Ensure that point is on the end of the last event.
-        (when (and (setq end-point (posn-point (event-end event)))
-                   (eq (posn-window end) start-window)
-                   (integer-or-marker-p end-point)
-                   (/= start-point end-point))
-  ;(mouse--drag-set-mark-and-point start-point ; ian, set mark
-  ;end-point click-count))
-          (mouse3-range-mark start-point end-point click-count)); ian, set mark
-
-        ;; Find its binding.
-        (let* ((fun (key-binding (vector (car event))))
-               (do-multi-click (and (> (event-click-count event) 0)
-                                    (functionp fun)
-                                    (not (memq fun '(mouse3-set-mark))))))
-          (if (and (/= end-point start-point)
-                   (not do-multi-click))
-
-              ;; If point has moved, finish the drag.
-              (let* (last-command this-command)
-                (and mouse-drag-copy-region
-                     do-mouse-drag-region-post-process
-                     (let (deactivate-mark)
-                       (copy-region-as-kill (mark) (point)))))
-
-            ;; Otherwise, run binding of terminating up-event.
-            (when do-multi-click
-              (set-mark start-point)) ; ian, change this. why?
-            (visible-mark-move-overlays)
-
-
-            (when (and (functionp fun)
-                       (= start-hscroll (window-hscroll start-window))
-                       ;; Don't run the up-event handler if the window
-                       ;; start changed in a redisplay after the
-                       ;; mouse-set-point for the down-mouse event at
-                       ;; the beginning of this function.  When the
-                       ;; window start has changed, the up-mouse event
-                       ;; contains a different position due to the new
-                       ;; window contents, and point is set again.
-                       (or end-point
-                           (= (window-start start-window)
-                              start-window-start)))
-
-              (push event unread-command-events)))))))
-
-#+end_src
-
-
-
-
-
-* disabled planning to fix
-** speedbar
-(sr-speedbar-close)
-(sr-speedbar-open)
-
-      #+begin_src emacs-lisp :tangle no
-(require 'sr-speedbar)
-  (setq speedbar-hide-button-brackets-flag t ;; didn't notice a diff
-      speedbar-file-unshown-regexp "flycheck-.*"
-      sr-speedbar-width 40
-      sr-speedbar-width-x 40
-      sr-speedbar-auto-refresh nil
-      sr-speedbar-skip-other-window-p t
-      sr-speedbar-right-side nil
-speedbar-hide-button-brackets-flag nil)
-      #+end_src
-
-* TODO fix auto save to be reliable and not rely on idle time
-sometimes emacs or computer stays busy and idle never comes
-* TODO try out which key mode
-* TODO make installed emacs package declarative
-* TODO see if there are more cool functions in sh-script
-like sh-cd-here, and bind that to a key
-* TODO assign a key to append-next-kill
-* TODO keybinds to remember
-
-keys worth memorizing
-
-c-2
-c-m-3
-
-s-return
-
-in isearch, C-o
-isearch-occur
-
-org, C-c / t
-make just todo items visible
-
-C-mouse-1
-buffer list menu
-
-C-up/down
-move up/down fast
-
-M-right-scroll
-forward/back sexp
-
-C-M-right-scroll
-scroll
-
-C-S-scroll
-change text size
-
-how to control+left scroll on kinesis
-right shift = control
-
-C-left-scroll
-forward/backward word
-
-C-M-d
-swap buffers across windows
-
-shell-cd-to-file
-M-2
-
-* TODO add simpler keybind for make-frame-command
-current one is C-x 5 2.
-
-* 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 figure out browsing files with broken nfs mount
-causes emacs to freeze until I kill -9 it.
-* TODO make a keybind to print var under cursor
-and actually, putting the start of it in th emodeline might be cool
-* TODO make recent files save periodically,
-normally it just saves on exit, but half the time I don't exit cleanly
-so they don't get saved, because I leave emacs running until it crashes
-* TODO fix undo tree outside visible buffer bug
-* 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
-* TODO make an easy bind for open previous buffer
-* TODO i think my autosave for sudo-edit might be too fast
-it sometimes leaves #_asdfjasdf files littered
-* TODO readline-compleste doesn't work when you cat a file without a newline,
-and so the prompt is messed up. not sure exactly what needs to be in end, or if its anything
-* TODO figure out how to paste a path into find file
-probably have to use the old kind of find file
-* TODO readline-complete doesn't escape special chars in filenames
-* TODO readline-complete dev
-
-
-
-** misc fixes
-
-bad code, the comment this relates to was removed, but not the comment
-             /* If waiting for this channel, arrange to return as
-                soon as no more input to be processed.  No more
-                waiting.  */
-
-
-(status_notify): New arg WAIT_PROC. this is unused, this is a bug.
-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
-and why auto-complete dies
-caveat is that it doesn't work well with certain unusual prompts, for example if $/# is not used at the end
-see if we can load history, or reverse search with history commands
-* TODO keybinds for s-delete/tab etc
-* TODO fix bbdb info packaging in melpa
-* TODO figure out why my emacs startup script doesn't work from dmenu
-* TODO post idea to make customize group show function var names so we can read doc strings
-* TODO report/fix bug that kill-whole-line doesn't work right with append kill
-* TODO make bash keybind for copy paste interoperate with x windows
-* TODO fix org stderr redirection
-make this produce output of "ok"
-#+begin_src sh
-echo ok >&2
-
-#+end_src
-* TODO make ido keybinds better
-* TODO fix indenting in org
-
-  (defun my-org-indent-region (start end)
-    "Indent region."
-    (interactive "r")
-    (save-excursion
-      (let ((line-end (org-current-line end)))
-        (goto-char start)
-        (while (< (org-current-line) line-end)
-          (cond ((org-in-src-block-p) (org-babel-do-in-edit-buffer (indent-according-to-mode)))
-                (t (call-interactively 'org-indent-line)))
-          (move-beginning-of-line 2)))))
-
-
-
-org-indent-region is broken for source blocks
-the above function works, but has several problems.
-first: it should not have separate logic from org-indent-line
-second: it runs way too slow, mainly the command
- (org-babel-do-in-edit-buffer (indent-according-to-mode)))
-
-
-* TODO figure out newline in prompt shell issue
-setting this before readline-complete is loaded allows completion to work,
-but auto-completion still fails. Need to debug readline-complete to figure this out.
-(setq shell-prompt-pattern "^[^#$%>]*[#$]\n")
-* TODO setup bind for find tag / lisp function at point
-
-* TODO org-delete-char should also work for the delete/backspace keys!
-  fix and send patch
-
-* TODO checkout projectile / graphene's project settings
-
-* TODO check up on recent changes to 3rd party default configs
-- last checked apr 24
-  https://github.com/eschulte/emacs24-starter-kit/commits/master
-
-last checked mayish
-https://github.com/bbatsov/prelude
-- redefined mouse functions from this file
-
-* TODO figure out how to setup emacs to format text nicely like thunderbird
-* TODO it appears impossible make C-[ not be the same as escape
-* TODO movement within info buffer after opening a link doesn't cancel isearch
-leads to many frustrations
-* TODO fix org resolve clock message. it is innacurate
-  i is not the same, becuase it does not make org realize there is an active clock
-
-* TODO add apropos commands to help prefix, from
-  http://stackoverflow.com/questions/3124844/what-are-your-favorite-global-key-bindings-in-emacs
-* TODO my autosave goes into an endless prompting loop
-when running save buffer, and the buffer has been changed
-outside of emacs
-* TODO smart peren does not see ?\\) as a valid paren
-
-* TODO why does org-end-of-line not go all the way to the end on a closed headline?
-* TODO org makes random ... things, and delete right before them does ctrl-i
-* TODO try mark word, which might be a useful keybind
-* TODO fix org-cycle: it assumes which key it is bound to for its last alternative
-* TODO checkout lisp-complete-symbol to augment auto-complete
-* TODO emacs keylogger to optimize key binds
-* TODO remap/investigate find tag, find tag at point
-* TODO set key to cycle buffers by mode, example below
-
-(defun cycle-buffer-by-mode (p-mode)
-  "Cycle buffers by mode name"
-  (interactive)
-  (dolist (buffer (buffer-list))
-    (with-current-buffer buffer
-      (when (buffer-live-p buffer)
-        (if (string-match p-mode mode-name) ;(regexp-quote p-mode)
-            (setq switch2buffer buffer)))))
-  (when (boundp 'switch2buffer)
-    (switch-to-buffer switch2buffer)))
-
-And I have bound this to my F9 key
-
-(global-set-key [f9]             '(lambda () (interactive) (cycle-buffer-by-mode "Shell$")))
-
-* TODO test out usefulness of forward/back sexp in different languages
-
-* TODO major mode settings to check out in future
-** emacs24 starter kit
-- Nxhtml -- utilities for web development
-[[http://ourcomments.org/Emacs/nXhtml/doc/nxhtml.html][Nxhtml]] is a large package of utilities for web development and for
-embedding multiple major modes in a single buffer.
-
-Nxhtml is not installed in this version of the starter-kit by default,
-for information on installing nxhtml see [[http://www.emacswiki.org/emacs/NxhtmlMode][EmacsWiki-Nxhtml]].
-
-web-mode is competing package and actively developed, so i'm using that instead
-
-
-  (dolist (package '(yaml-mode js2-mode))
-    (unless (package-installed-p package)
-
-- Associate modes with file extensions
-
-(add-to-list 'auto-mode-alist '("COMMIT_EDITMSG$" . diff-mode))
-(add-to-list 'auto-mode-alist '("\\.css$" . css-mode))
-(require 'yaml-mode)
-(add-to-list 'auto-mode-alist '("\\.ya?ml$" . yaml-mode))
-(add-to-list 'auto-mode-alist '("\\.rb$" . ruby-mode))
-(add-to-list 'auto-mode-alist '("Rakefile$" . ruby-mode))
-(add-to-list 'auto-mode-alist '("\\.js\\(on\\)?$" . js2-mode))
-;; (add-to-list 'auto-mode-alist '("\\.xml$" . nxml-mode))
-
-- clojure in starter-kit-lisp.org
-
-- others = gnus, js, publish, perl, python, perl, ruby
-   they each have their own starter kit file.
-
-- snippets for various modes other than org-mode
-
-* TODO update yasnippet documentation
-  yas expand key customization is rediculously hard to figure out
-  and completely undocumented
-* TODO fix org source indenting, send patch
-* TODO check out bundling aka compiling yasnippet
-* TODO try xml/html mode url func
-
-(defun view-url ()
-  "Open a new buffer containing the contents of URL."
-  (interactive)
-  (let* ((default (thing-at-point-url-at-point))
-         (url (read-from-minibfer "URL: " default)))
-    (switch-to-buffer (url-retrieve-synchronously url))
-    (rename-buffer url t)
-    ;; TODO: switch to nxml/nxhtml mode
-    (cond ((search-forward "<?xml" nil t) (xml-mode))
-          ((search-forward "<html" nil t) (html-mode)))))
-
-* TODO flyspell-buffer automatically
-
-* TODO respond to ediff thread
-* TODO fix horizontal mouse resizing
-  resizing a window horizontally with the mouse should be allowed in more places
-
-* TODO try using / making abbreviations