remove various unused cruft
authorIan Kelling <iank@fsf.org>
Fri, 4 Sep 2020 05:28:34 +0000 (01:28 -0400)
committerIan Kelling <iank@fsf.org>
Fri, 4 Sep 2020 05:28:34 +0000 (01:28 -0400)
init.el
misc-disabled.el

diff --git a/init.el b/init.el
index e671ef40b06abb53517fab74af7249225bdd2b64..5f1bbd56181d113f324ad4f559e60dc3c89d4353 100644 (file)
--- a/init.el
+++ b/init.el
   (recentf-mode 1))
 
 (setq package-archives
-   (quote
-    (("gnu" . "https://elpa.gnu.org/packages/")
-     ("MELPA" . "https://melpa.org/packages/"))))
+      (quote
+       (("gnu" . "https://elpa.gnu.org/packages/")
+        ("MELPA" . "https://melpa.org/packages/"))))
 
 ;;(add-to-list 'package-archives
 ;;             '("marmalade" .
 
 (add-to-list 'ac-modes 'org-mode 'sql-mode)
 
-(defun ac-common-setup ()
-  (add-to-list 'ac-sources 'ac-source-yasnippet))
 
 ;; for org mode completion source taken from wiki.
 ;; it did not work. no idea why. todo, investigate
        (set-process-coding-system proc decoding encoding))
     proc))
 
-;;; auto save & backup
+;;; auto save
+
+;; todo: patch this so i can turn it off like my-as-off-local.
+;; then try it out and see if it can replace my autosave.
+;; Or maybe with the new auto-save-visited-mode.
+;; (use-package super-save
+;;   :ensure t
+;;   :config
+;;   (setq super-save-exclude '("")
+;;         super-save-triggers
+;;         '(balance-windows
+;;           next-buffer
+;;           org-babel-execute-src-block
+;;           other-window
+;;           previous-buffer
+;;           split-window-below
+;;           split-window-horizontally
+;;           start-process-shell-command
+;;           switch-to-buffer
+;;           windmove-down
+;;           windmove-left
+;;           windmove-right
+;;           windmove-up)
+;;         )
+;;   (super-save-mode +1))
+
+
+
 (setq auto-save-timeout 1) ; idle time before auto-save.
 
 ;; main hook for my auto save
@@ -523,43 +548,16 @@ A non-nil CURRENT-ONLY argument means save only current buffer."
 ;;         but new emacs version fixed all that, yay!.
 
 
-                                        ; not using, but here for documentation,
-                                        ; alternate way to enable and specify how long between autosaves.
-                                        ; number of input events between autosave.
-                                        ; lowest bound of functionality is actually about 15 input events
-                                        ;(setq auto-save-interval
-
-;;; bbdb
-;; based on bbdb manual
-;; also has instructions to integrate with gnus,
-
-(bbdb-initialize 'message)
-
-;; recommended by gnus,
-;; but seems like it could be good to have set for other stuff
-(setq user-full-name "Ian Kelling")
-;; general email setting? recommended by mu4e
-(setq message-kill-buffer-on-exit t)
-
-
-
-;; use d instead
-(add-hook 'bbdb-mode-hook
-          (lambda () (define-key bbdb-mode-map (kbd "C-k") nil))
-          ;; based on emacs24-starter-kit
-          (setq bbdb-offer-save 'auto
-                bbdb-notice-auto-save-file t
-                bbdb-expand-mail-aliases t
-                bbdb-canonicalize-redundant-nets-p t
-                bbdb-complete-name-allow-cycling t)
-          )
-
-;;(require 'bbdb-csv-import)
+;; not using, but here for documentation,
+;; alternate way to enable and specify how long between autosaves.
+;; number of input events between autosave.
+;; lowest bound of functionality is actually about 15 input events
+;; (setq auto-save-interval ...)
 
 ;;; bookmark settings
-                                        ; save bookmarks whenever they are changed instead of just when emacs quits
+;; save bookmarks whenever they are changed instead of just when emacs quits
 (setq bookmark-save-flag 1)
-                                        ; increase bookmark context size for better functionality
+;; increase bookmark context size for better functionality
 (setq bookmark-search-size 2000)
 
 ;;; c-like settings
@@ -581,9 +579,6 @@ A non-nil CURRENT-ONLY argument means save only current buffer."
 ;; themes are available through ELPA.
 
 
-;; interesting light themes
-
-
 (defun override-theme (arg)
   (interactive)
   (while custom-enabled-themes
@@ -629,8 +624,6 @@ A non-nil CURRENT-ONLY argument means save only current buffer."
 ;;(override-theme 'wombat) ; cursor not visible enough. from a wombat package, not sure which
 ;;(override-theme 'misterioso) ; cursor not visible enough
 
-
-
 ;;decent light themes
 ;;(override-theme 'alect-light) ; theres a -alt version, don't see a dif. could use this without dimming. from alect-something package
 ;;(override-theme 'occidental) ; from occidental-theme package
@@ -646,33 +639,6 @@ A non-nil CURRENT-ONLY argument means save only current buffer."
 
 
 
-;;; yasnippet
-
-;; cd ~/.emacs.d/src
-;; git clone --recursive https://github.com/capitaomorte/yasnippet
-;; touch snippets/.yas-make-groups
-
-;;   This all makes it so I can look through the default snippets
-;;   in the menu bar, but they don't show up elsewhere, because they are
-;;   mostly things I don't want.
-
-
-(require 'yasnippet)
-;; this needs to be before yas-global-mode
-(setq yas-snippet-dirs (list "~/.emacs.d/snippets"))
-(yas-global-mode 1)
-
-(setq
- yas-also-auto-indent-first-line t
- yas-choose-tables-first t
- yas-use-menu (quote full)
- ;; this sets ido-prompt as first function
- yas-prompt-functions
- '(yas-ido-prompt yas-dropdown-prompt yas-x-prompt yas-completing-prompt yas-no-prompt))
-
-;; todo, explore this option for wrapping region
-;; '(yas/wrap-around-region t))
-
 ;;; cross session settings
 
 ;; Save a list of recent files visited.
@@ -712,7 +678,6 @@ A non-nil CURRENT-ONLY argument means save only current buffer."
 (setq ediff-split-window-function 'split-window-horizontally)
 
 
-
 ;; Things I tried which didn't work, which intuitively I think should
 ;; work better: I can open the second diff buffer in a new frame, and
 ;; close it's window in the first frame after starting ediff, but when I
@@ -912,200 +877,14 @@ and Ian Kelling as the name"
 
 
 ;;; elisp settings
-                                        ; when manually evaluating lisp, go into debugger on error
+;; when manually evaluating lisp, go into debugger on error
 (setq eval-expression-debug-on-error t)
-                                        ;reminder of useful var: debug-on-error
-
-
-;;; haskell
-
-;; useful comint-shell mode commands. If not prefaced with *, it means it is not in the haskell custom repl
-;; *todo: setup haskell c-t toggle arrow keys
-;; tab completion
-;; C-q insert prev arg
-;; C-( history search
-;; c-m-left/right move to next/prev prompts
-;; *c-enter, multi-line input
-;; *s-delete, send input across windows. (i can implement this)
-;; *c-m-l clear screen
-;; *haskell-process-interrupt, c-cc terminate job (i can implement this maybe)
-
-;; nice bash/readline functions missing in comint:
-;; yank-nth-arg
-;; operate-get-next
-;; menu-complete
-
-;; usefull comint commands:
-;; c-cl : list historic command in temp buffer
-;; C-c C-o comint-delete-output
-;; comint-restore-input, todo: put this on a randomish c-c key
-
-
-
-;; todo:
-;; checkout haskell repl functions:
-;; c-cv haskell-check, hlint
-;; C-M-q           prog-indent-sexp
-;; c-c.  haskell-mode-format-imports
-;; C-c M-/         haskell-doc-check-active
-;; haskell-process-generate-tags
-;; haskell-process-cabal-build
-;; haskell-cabal-command.. or something
-;; haskell-process-restart
-;; C-h v haskell-process-log
-;; C-h v haskell-process-show-debug-tips
 
-;; various not immediately useful functions:
-;; haskell-process-add-dependency
-;; haskell-process-touch-buffer
-;; haskell-process-cd
-;; haskell-process-unignore
-;; haskell-process-reload-devel-main
-
-
-;; rebind
-;; home: C-a             haskell-interactive-mode-beginning
-;; c-return: C-j             haskell-interactive-mode-newline-indent
-;; up/down: <C-down>        haskell-interactive-mode-history-next
-
-;; todo haskell mode better binds for:
-;; 'haskell-process-load-file
-;; 'haskell-process-do-type
-;; 'haskell-process-do-info
-;; 'inferior-haskell-send-decl
-
-
-;; commands which don't work in haskell-interactive-mode(hi) vs inferior-haskell-mode(ih, default)
-;; functions not in hi:
-;; inferior-haskell-find-definition, use tags instead
-;; inferior-haskell-find-haddock, todo, test if this works
-
-;; redefined ih to hi
-;; switch-to-haskell -> 'haskell-interactive-switch
-;; haskell-process-load-file -> inferior-haskell-load-file
-;; haskell-process-do-type -> inferior-haskell-type
-;; switch-to-haskell -> haskell-interactive-switch
-;; inferior-haskell-load-file -> 'haskell-process-load-file
-
-
-;; haskell-mode installation from source, based on its readme
-;; in the git directory,
-;; make all
-
-
-
-
-;; remove default option to not link the file
-(setq haskell-compile-command "ghc -Wall -ferror-spans -fforce-recomp %s")
-(add-hook 'haskell-indentation-mode-hook
-          (lambda ()
-            (define-key haskell-indentation-mode-map [?\C-d] nil)
-            (define-key haskell-indentation-mode-map
-              (kbd "<deletechar>")
-              'haskell-indentation-delete-char)))
-
-;;copied from haskell-mode docs in order to use the new, better, nondefault
-;;interactive mode.
-(eval-after-load "haskell-mode"
-  '(progn
-     (define-key haskell-mode-map (kbd "C-x C-d") nil)
-     (define-key haskell-mode-map (kbd "C-c C-z") 'haskell-interactive-switch)
-     (define-key haskell-mode-map (kbd "C-c C-l") 'haskell-process-load-file)
-     (define-key haskell-mode-map (kbd "C-c C-b") 'haskell-interactive-switch)
-     (define-key haskell-mode-map (kbd "C-c C-t") 'haskell-process-do-type)
-     (define-key haskell-mode-map (kbd "C-c C-i") 'haskell-process-do-info)
-     (define-key haskell-mode-map (kbd "C-c M-.") nil)
-     (define-key haskell-mode-map (kbd "C-c C-d") nil)))
-
-;; ghc-mod install http://www.mew.org/~kazu/proj/ghc-mod/en/emacs.html
-;; todo, try this out
-;; (autoload 'ghc-init "ghc" nil t)
-;;(add-hook 'haskell-mode-hook (lambda () (ghc-init) (flymake-mode)))
-
-
-
-;; from the package readme for ghci-completion
-(add-hook 'inferior-haskell-mode-hook 'turn-on-ghci-completion)
-
-
-;; disable some rebinds. they are set to appropriate keys in the keybinds section
-(eval-after-load "haskell-mode"
-  '(progn
-     (define-key haskell-mode-map (kbd "C-a") 'nil)
-     (define-key haskell-mode-map (kbd "C-j") 'nil)))
 
 (eval-after-load "python-mode"
   '(progn
      (define-key python-mode-map (kbd "C-j") nil)))
 
-(defun pretty-lambdas-haskell ()
-  (font-lock-add-keywords
-   nil `((,(concat "(?\\(" (regexp-quote "\\") "\\)")
-          (0 (progn (compose-region (match-beginning 1) (match-end 1)
-                                    ,(make-char 'greek-iso8859-7 107))
-                    nil))))))
-;; from haskell-mode manual
-(add-hook 'haskell-mode-hook 'turn-on-haskell-decl-scan)
-(when (window-system)
-  (add-hook 'haskell-mode-hook 'pretty-lambdas-haskell))
-
-;; added from haskell-mode website install instructions
-                                        ;(load "/usr/share/emacs/site-lisp/haskell-mode/haskell-site-file")
-(add-hook 'haskell-mode-hook 'turn-on-haskell-doc-mode)
-;;the three indentation modules are mutually exclusive - add at most one. Trying out the "most advanced"
-(add-hook 'haskell-mode-hook 'turn-on-haskell-indentation)
-;;(add-hook 'haskell-mode-hook 'turn-on-haskell-indent)
-;;(add-hook 'haskell-mode-hook 'turn-on-haskell-simple-indent)
-
-
-;; todo, set this to some other key
-;;    (local-set-key (kbd "C-e") 'my-haskell-load-and-run)
-
-(defun my-haskell-load-and-run ()
-  "Loads and runs the current Haskell file."
-  (interactive)
-  (let ((start-buffer (current-buffer)))
-    (inferior-haskell-load-and-run inferior-haskell-run-command)
-    (sleep-for 0 100)
-    (end-of-buffer)
-    (pop-to-buffer start-buffer)))
-
-;; show haskell function in mode line
-;; todo, this broke after updating emacs
-;;(eval-after-load "which-func"
-;;  '(add-to-list 'which-func-modes 'haskell-mode))
-
-
-
-(add-hook 'interactive-haskell-mode-hook 'ac-haskell-process-setup)
-(add-hook 'haskell-interactive-mode-hook 'ac-haskell-process-setup)
-(eval-after-load "auto-complete"
-  '(add-to-list 'ac-modes 'haskell-interactive-mode))
-
-(add-hook 'haskell-mode-hook
-          (lambda () (define-key haskell-mode-map (kbd "C-(")
-                       (lambda () (interactive)
-                         (basic-save-buffer)
-                         (haskell-compile)
-                         (run-with-timer .3 nil 'repeat-shell)))))
-(add-hook 'haskell-cabal-mode-hook
-          (lambda () (define-key haskell-cabal-mode-map (kbd "C-(") 'haskell-compile)))
-
-
-
-(add-hook 'haskell-interactive-mode-hook
-          (lambda ()
-            (define-key haskell-interactive-mode-map "\r" nil)
-            (define-key haskell-interactive-mode-map (kbd "RET")
-              'haskell-interactive-mode-return)))
-(add-hook 'haskell-indentation-mode-hook (lambda () (define-key haskell-indentation-mode-map "\r" nil)))
-
-
-
-(add-hook 'haskell-interactive-mode-hook
-          (lambda ()
-            (define-key haskell-interactive-mode-map (kbd "<C-M-return>") 'haskell-interactive-mode-newline-indent)))
-
 ;;; isearch
 (setq
  isearch-allow-scroll t
@@ -1183,11 +962,7 @@ and Ian Kelling as the name"
     (isearch-yank-symbol partialp)))
 
 
-
-                                        ; lets look through emacs starter kit before we throw this out.
-
-
-                                        ;   automatically wrap to the top of the buffer when isearch fails
+;;   automatically wrap to the top of the buffer when isearch fails
 (defadvice isearch-search (after isearch-no-fail activate)
   (unless isearch-success
     (ad-disable-advice 'isearch-search 'after 'isearch-no-fail)
@@ -1243,36 +1018,11 @@ and Ian Kelling as the name"
   (turn-on-eldoc-mode))
 (add-hook 'ielm-mode-hook 'ielm-mode-defaults)
 
-;;; mediawiki
-
-(eval-after-load "mediawiki"
-  '(progn
-     (remove-hook 'outline-minor-mode-hook 'mediawiki-outline-magic-keys)
-     (add-hook 'mediawiki-mode-hook
-               (lambda () (define-key mediawiki-mode-map (kbd "C-(") 'mediawiki-save-reload)))
-
-     ;; mediawiki mode has a bug that it will claim an edit conflict unless you reload after saving.
-     ;; I also like to save with no edit summary for previewing on my local mw instance
-     (defun mediawiki-save-reload ()
-       (interactive)
-       (and (mediawiki-save "") (mediawiki-reload)))))
 ;;; modes with little configuration needed
-;; busted:
-;;(require 'csv-mode)
-;;(add-to-list 'auto-mode-alist '("\\.[Cc][Ss][Vv]\\'" . csv-mode))
 
 ;; disabled temporarily
 ;;(add-hook 'outline-minor-mode-hook 'outshine-mode)
 
-(setq org-caldav-url "https://cal.iankelling.org"
-      org-caldav-calendar-id "ian"
-      org-caldav-inbox "/p/cal.org")
-;;(org-caldav-sync)
-
-
-;;(require 'dtrt-indent)
-;;(setq dtrt-indent-mode t)
-
 (setq css-indent-offset 2)
 
 (when (file-exists-p "/a/h/iank-mod.el")
@@ -1316,67 +1066,18 @@ and Ian Kelling as the name"
   (setq-local prev-auto-revert-max (point-max)))
 
 
-;; gnu global
-(add-hook 'c-mode-common-hook
-          (lambda () (ggtags-mode 1)
-            (setq c-label-minimum-indentation 0)))
-
-(defun my-ggtags-init()
-  ;; specific to my unusual keybind setup, you may want to
-  ;; pick different keys
-  (define-key ggtags-mode-map (kbd "C-M-o") 'ggtags-find-tag-dwim)
-  (define-key ggtags-mode-map (kbd "C-M-m") 'ggtags-grep))
-(eval-after-load "ggtags" '(my-ggtags-init))
-
-
-(defun gtags-update-single(filename)
-  "Update Gtags database for changes in a single file"
-  (interactive)
-  (start-process "update-gtags" "update-gtags" "bash" "-c" (concat "cd " ggtags-project-root " ; gtags --single-update " filename )))
-
-(defun gtags-update-current-file()
-  (interactive)
-  (let ((rel-filename (replace-regexp-in-string
-                       ggtags-project-root "."
-                       (buffer-file-name (current-buffer)))))
-    (gtags-update-single rel-filename)))
-
-(defun gtags-update-hook()
-  "Update GTAGS file incrementally upon saving a file"
-  (when (and (boundp 'ggtags-mode) ggtags-mode ggtags-project-root)
-    (gtags-update-current-file)))
-
-(add-hook 'after-save-hook 'gtags-update-hook)
-
-;; i'd like to make some elisp which modifies a keymap to remove
-;; all binds which don't match a predicate.
-;; I tried setting a keymap to a new keymap,
-;; but that didn't register as functional.
-;; so I'd need to modify the list in place.
-
-;; colorize hex colors: use rainbow mode
-
-
 ;; message mode prompted me on first message.
 ;; a function which describes options then sets this
 ;; the other options were to use smtp directly or pass to another mail client
 ;; here we use the standard sendmail interface, which I use postfix for
 (setq send-mail-function (quote sendmail-send-it))
 
-(global-set-key (kbd "C-M-w") 'spray-mode)
-;; remember, h/l = move. f/s = faster/slower, space = pause, all others quit
-
 ;; delete active selection with self-insert commands
 (delete-selection-mode t)
 
 ;; Transparently open compressed files
 (auto-compression-mode t)
 
-;; Highlight matching parenthesesq when the pointq is on them.
-;; not needed since smart paren mode?
-;;  (show-paren-mode 1)
-
-
 ;; not documented, but looking at the source, I find this
 ;; stops me from being asked what command on every C-c-c
 ;; when doing a latex document.
@@ -1386,41 +1087,19 @@ and Ian Kelling as the name"
 (require 'dot-mode)
 (add-hook 'find-file-hooks 'dot-mode-on)
 
-
 ;; clean up obsolete buffers automatically at midnight
 (require 'midnight)
 
-
-;; disabled because it takes 400ms on startup
-;; ;; emacs regexes are too limited.
-;; (require 'foreign-regexp)
-;; ;; perl is most powerful, but javascript is pretty close and
-;; ;; I'd rather know javascript stuff than perl
-;; (custom-set-variables
-;;  '(foreign-regexp/regexp-type 'javascript) ;; Choose by your preference.
-;;  '(reb-re-syntax 'foreign-regexp)) ;; Tell re-builder to use foreign regexp.
-;; ;; it would be nice to add documentation to do this for more commands to that package
-;; ;; disabled because it's too slow. but I'd still m-x it for advanced replacements
-;; ;;(define-key global-map [remap isearch-forward-regexp] 'foreign-regexp/isearch-forward)
-
-
 ;; saner regex syntax
 (require 're-builder)
 (setq reb-re-syntax 'string)
 
 
-;; use shift + arrow keys to switch between visible buffers
-;; todo, set these keys to something else
-;; (require 'windmove)
-;; (windmove-default-keybindings)
-
-
 ;; show the name of the current function definition in the modeline
 ;;(require 'which-func)
 (setq which-func-modes t)
 (which-function-mode 1)
 
-
 ;; enable winner-mode to manage window configurations
 (winner-mode +1)
 
@@ -1590,7 +1269,7 @@ and Ian Kelling as the name"
 ;; todo sometime, make it work for certain modes only
 (smooth-scroll-mode t)
 ;; its too slow with the default of 2
-(setq smooth-scroll/vscroll-step-size 7)
+(setq smooth-scroll/vscroll-step-size 6)
 ;; sublimity doesn't work as good going fast by default
 ;; smooth-scrolling.el, does not do smooth scrolling. its about cursor location
 
@@ -1843,14 +1522,6 @@ Go to the next directory based on where the cursor is."
          (y (cdr pos)))
     (set-mouse-position (selected-frame) x y)))
 
-;;;; keybinds for wow mouse
-
-(global-set-key (kbd "<mouse-6>") 'move-mouse-to-point)
-(global-set-key (kbd "<kp-left>") 'indent-region)
-(global-set-key (kbd "<kp-begin>") 'mark-defun)
-(global-set-key (kbd "<kp-right>") 'ibuffer)
-(global-set-key (kbd "<kp-prior>") 'delete-horizontal-space)
-
 ;;; org mode
 
 ;; todo work on org-cycle-emulate-tab
@@ -1905,12 +1576,8 @@ Go to the next directory based on where the cursor is."
       org-completion-use-ido t
       org-catch-invisible-edits 'smart)
 
-;; non universally recommended settings
 (setq
  org-default-notes-file "/a/t.org"
- org-agenda-files (quote ("/a/t.org"))
- org-mobile-directory "/p/org-mobile"
- org-mobile-inbox-for-pull "/p/from-mobile.org"
  org-directory "/p")
 
 ;; modeilne populated from (org-clock-get-clocked-time)
@@ -1921,15 +1588,12 @@ Go to the next directory based on where the cursor is."
 (eval-after-load "org"
   '(org-clock-persistence-insinuate))
 
-
 (defun time-to-org-day (time)
   (round (time-to-number-of-days
           (time-subtract time (list 0 (* 3600 org-extend-today-until) 0)))))
 
-
 (defun my-org-confirm-babel-evaluate (lang body)
   (not (or (string= (buffer-file-name) "/a/t.org")
-           (string= (buffer-file-name) "/home/iank/.emacs.d/my-init.org")
            )))
 (setq org-confirm-babel-evaluate 'my-org-confirm-babel-evaluate)
 
@@ -1939,22 +1603,6 @@ Go to the next directory based on where the cursor is."
   ;; '(4) is the argument passed by universal prefix
   (org-time-stamp (if arg arg '(4)) t))
 
-(defun ian-org-work-time ()
-  (interactive)
-  (save-excursion
-    (set-buffer "t.org")
-    (goto-char (org-find-entry-with-id "ian-identifier-1"))
-    (org-clock-in)))
-
-(defun ian-org-idle-time ()
-  (interactive)
-  (save-excursion
-    (goto-char (org-find-entry-with-id "ian-identifier-2"))
-    (set-buffer "t.org")
-    (org-clock-in)))
-
-
-
 ;; based on http://stackoverflow.com/questions/3758139/variable-pitch-for-org-mode-fixed-pitch-for-tables
 ;; keywords: proportional font, monospace
 
@@ -2036,7 +1684,6 @@ Go to the next directory based on where the cursor is."
 (add-hook 'prog-mode-hook 'flyspell-prog-mode)
 
 
-
 ;;; yank auto-indent
 ;; automatically indenting yanked text if in programming-modes
 (defvar yank-indent-modes
@@ -2236,7 +1883,6 @@ indent yanked text (with prefix arg don't indent)."
 
 ;;; znc
 
-
 (setq erc-fill-prefix "")
 (defun chirp()
   (interactive)
@@ -2343,8 +1989,6 @@ indent yanked text (with prefix arg don't indent)."
 (define-prefix-command 'terminal-key-map)
 (global-set-key (kbd "\e[") 'terminal-key-map)
 
-
-
 (global-set-key (kbd "C-x C-b") 'ibuffer)
 
 
@@ -2378,14 +2022,12 @@ indent yanked text (with prefix arg don't indent)."
 ;;;; single/special keys
 ;;;;; tab - isearch
 ;; todo: this doesnt work. needs <tab>, which doesnt work in terminal. fix that.
-;; (define-key isearch-mode-map (kbd "TAB") 'isearch-query-replace)
-(define-key isearch-mode-map (kbd "M-f") 'isearch-query-replace)
+(define-key isearch-mode-map (kbd "TAB") 'isearch-query-replace)
 
 ;;;;; f12 - isearch-forward
 ;; explained in http://stackoverflow.com/questions/7411920/how-to-bind-search-and-search-repeat-to-c-f-in-emacs
 (global-set-key (kbd "<kp-add>") 'isearch-forward)
 (global-set-key (kbd "<f12>") 'isearch-forward)
-(define-key isearch-mode-map "\t" nil)
 (define-key isearch-mode-map (kbd "<kp-add>") 'isearch-repeat-forward)
 (define-key isearch-mode-map (kbd "<f12>") 'isearch-repeat-forward)
 ;; get rid of the standard completion binding, always use auto-complete
@@ -2836,31 +2478,31 @@ modes like org-mode which have their own yank function."
 (global-set-key (kbd "C-a") 'copy-all)
 
 ;;;;; C-s - c-x prefix
-                                        ; prefix key binds.
-                                        ; good info http://www.masteringemacs.org/articles/2011/02/08/mastering-key-bindings-emacs/
-                                        ; rebinding the prefix keys are tricky. apparently, some modes ignore any redefinition of a prefix key and use it explicitly,
-                                        ; so you have to dig into their key maps and redo things.
-                                        ; There are 2 simpler alternatives which have their own downsides.
-                                        ; One is cua mode, which I do not like because it smashes 2 keybinds onto 1 and limits what you can do.
-                                        ; The other is keyboard-translate, which translates the key presses before anything else.
-                                        ; The downside is that it translates them when you aren't using them as a prefix.
-                                        ; Since the swaps I'm using are all very accessible, the only downside is some mental jugling when reading docs etc about these keybinds.
-
-                                        ; I've seen this as an another suggestion, it was a total fail. The prefix command took over both keys.
-                                        ; (define-key key-translation-map [f12] "\C-c")
-                                        ; (define-key key-translation-map "\C-c" [left])
-
-
-                                        ;idea to remove the hook later since it is only needed at startup.
-                                        ; did not work however, and there is not a real need to fix it, so I did not investigate
-                                        ;(defun removeSwapHook ()
-                                        ;  (remove-hook 'buffer-list-update-hook 'myKeySwap)
-                                        ;  (remove-hook 'change-major-mode-hook 'removeSwapHook))
-                                        ;(add-hook 'change-major-mode-hook 'removeSwapHook)
-
-
-                                        ; went through almost all the relevant standard hooks,
-                                        ; this overcomes a known bug that (keyboard-translate) does not get applied when running emacs daemon
+;; prefix key binds.
+;; good info http://www.masteringemacs.org/articles/2011/02/08/mastering-key-bindings-emacs/
+;; rebinding the prefix keys are tricky. apparently, some modes ignore any redefinition of a prefix key and use it explicitly,
+;; so you have to dig into their key maps and redo things.
+;; There are 2 simpler alternatives which have their own downsides.
+;; One is cua mode, which I do not like because it smashes 2 keybinds onto 1 and limits what you can do.
+;; The other is keyboard-translate, which translates the key presses before anything else.
+;; The downside is that it translates them when you aren't using them as a prefix.
+;; Since the swaps I'm using are all very accessible, the only downside is some mental jugling when reading docs etc about these keybinds.
+
+;; I've seen this as an another suggestion, it was a total fail. The prefix command took over both keys.
+;; (define-key key-translation-map [f12] "\C-c")
+;; (define-key key-translation-map "\C-c" [left])
+
+
+;;idea to remove the hook later since it is only needed at startup.
+;; did not work however, and there is not a real need to fix it, so I did not investigate
+;;(defun removeSwapHook ()
+;;  (remove-hook 'buffer-list-update-hook 'myKeySwap)
+;;  (remove-hook 'change-major-mode-hook 'removeSwapHook))
+;;(add-hook 'change-major-mode-hook 'removeSwapHook)
+
+
+;; went through almost all the relevant standard hooks,
+;; this overcomes a known bug that (keyboard-translate) does not get applied when running emacs daemon
 (add-hook 'buffer-list-update-hook (lambda () (interactive)
                                      (keyboard-translate ?\C-x ?\C-s)
                                      (keyboard-translate ?\C-s ?\C-x)
@@ -2869,16 +2511,16 @@ modes like org-mode which have their own yank function."
 
 
 
-                                        ; these all don't work
-                                        ; don't know why this doesn't error but reversing the keys does
-                                        ;(keyboard-translate ?\t ?\M-\t)
-                                        ;(keyboard-translate [M-tab] [tab])
-                                        ; from what i can tell, it wants to use a keyboard-translate-table,
-                                        ; which is a char table, which is a vector indexed by chars,
-                                        ; and mod+tab is not a char (it has too many bits), it is an integer
-                                        ; it actually says it can hold vectors or strings, but that it is obsolete to do so
-                                        ;(characterp ?\M-a)
-                                        ;(characterp ?\C-a)
+;; these all don't work
+;; don't know why this doesn't error but reversing the keys does
+;;(keyboard-translate ?\t ?\M-\t)
+;;(keyboard-translate [M-tab] [tab])
+;; from what i can tell, it wants to use a keyboard-translate-table,
+;; which is a char table, which is a vector indexed by chars,
+;; and mod+tab is not a char (it has too many bits), it is an integer
+;; it actually says it can hold vectors or strings, but that it is obsolete to do so
+;;(characterp ?\M-a)
+;;(characterp ?\C-a)
 
 ;;;;; C-M-s - split-window-vertically
 
index 256433806eae608c6771f8daea6d4865565d2d32..90b63d48e0d93ba9d94068b1e2ef469bcd6c6fe8 100644 (file)
 ;; default abbreviation mode file is .emacs.d/abbrev_defs.
 ;; add-global-abbrev, add-mode-abbrev for expansion at point
 ;; if all else fails, edit the abbrev file
+
+
+;;; bbdb
+;; based on bbdb manual
+;; also has instructions to integrate with gnus,
+
+(bbdb-initialize 'message)
+
+;; recommended by gnus,
+;; but seems like it could be good to have set for other stuff
+(setq user-full-name "Ian Kelling")
+;; general email setting? recommended by mu4e
+(setq message-kill-buffer-on-exit t)
+
+
+
+;; use d instead
+(add-hook 'bbdb-mode-hook
+          (lambda () (define-key bbdb-mode-map (kbd "C-k") nil))
+          ;; based on emacs24-starter-kit
+          (setq bbdb-offer-save 'auto
+                bbdb-notice-auto-save-file t
+                bbdb-expand-mail-aliases t
+                bbdb-canonicalize-redundant-nets-p t
+                bbdb-complete-name-allow-cycling t)
+          )
+
+;;(require 'bbdb-csv-import)
+
+
+
+
+;;; yasnippet
+;;; todo: learn and use yasnippet
+
+;; cd ~/.emacs.d/src
+;; git clone --recursive https://github.com/capitaomorte/yasnippet
+;; touch snippets/.yas-make-groups
+
+;;   This all makes it so I can look through the default snippets
+;;   in the menu bar, but they don't show up elsewhere, because they are
+;;   mostly things I don't want.
+
+
+(require 'yasnippet)
+;; this needs to be before yas-global-mode
+(setq yas-snippet-dirs (list "~/.emacs.d/snippets"))
+(yas-global-mode 1)
+
+(setq
+ yas-also-auto-indent-first-line t
+ yas-choose-tables-first t
+ yas-use-menu (quote full)
+ ;; this sets ido-prompt as first function
+ yas-prompt-functions
+ '(yas-ido-prompt yas-dropdown-prompt yas-x-prompt yas-completing-prompt yas-no-prompt))
+
+;; todo, explore this option for wrapping region
+;; '(yas/wrap-around-region t))
+
+(defun ac-common-setup ()
+  (add-to-list 'ac-sources 'ac-source-yasnippet))
+
+
+
+;;; haskell
+
+;; useful comint-shell mode commands. If not prefaced with *, it means it is not in the haskell custom repl
+;; *todo: setup haskell c-t toggle arrow keys
+;; tab completion
+;; C-q insert prev arg
+;; C-( history search
+;; c-m-left/right move to next/prev prompts
+;; *c-enter, multi-line input
+;; *s-delete, send input across windows. (i can implement this)
+;; *c-m-l clear screen
+;; *haskell-process-interrupt, c-cc terminate job (i can implement this maybe)
+
+;; nice bash/readline functions missing in comint:
+;; yank-nth-arg
+;; operate-get-next
+;; menu-complete
+
+;; usefull comint commands:
+;; c-cl : list historic command in temp buffer
+;; C-c C-o comint-delete-output
+;; comint-restore-input, todo: put this on a randomish c-c key
+
+
+
+;; todo:
+;; checkout haskell repl functions:
+;; c-cv haskell-check, hlint
+;; C-M-q           prog-indent-sexp
+;; c-c.  haskell-mode-format-imports
+;; C-c M-/         haskell-doc-check-active
+;; haskell-process-generate-tags
+;; haskell-process-cabal-build
+;; haskell-cabal-command.. or something
+;; haskell-process-restart
+;; C-h v haskell-process-log
+;; C-h v haskell-process-show-debug-tips
+
+;; various not immediately useful functions:
+;; haskell-process-add-dependency
+;; haskell-process-touch-buffer
+;; haskell-process-cd
+;; haskell-process-unignore
+;; haskell-process-reload-devel-main
+
+
+;; rebind
+;; home: C-a             haskell-interactive-mode-beginning
+;; c-return: C-j             haskell-interactive-mode-newline-indent
+;; up/down: <C-down>        haskell-interactive-mode-history-next
+
+;; todo haskell mode better binds for:
+;; 'haskell-process-load-file
+;; 'haskell-process-do-type
+;; 'haskell-process-do-info
+;; 'inferior-haskell-send-decl
+
+
+;; commands which don't work in haskell-interactive-mode(hi) vs inferior-haskell-mode(ih, default)
+;; functions not in hi:
+;; inferior-haskell-find-definition, use tags instead
+;; inferior-haskell-find-haddock, todo, test if this works
+
+;; redefined ih to hi
+;; switch-to-haskell -> 'haskell-interactive-switch
+;; haskell-process-load-file -> inferior-haskell-load-file
+;; haskell-process-do-type -> inferior-haskell-type
+;; switch-to-haskell -> haskell-interactive-switch
+;; inferior-haskell-load-file -> 'haskell-process-load-file
+
+
+;; haskell-mode installation from source, based on its readme
+;; in the git directory,
+;; make all
+
+
+
+
+;; remove default option to not link the file
+(setq haskell-compile-command "ghc -Wall -ferror-spans -fforce-recomp %s")
+(add-hook 'haskell-indentation-mode-hook
+          (lambda ()
+            (define-key haskell-indentation-mode-map [?\C-d] nil)
+            (define-key haskell-indentation-mode-map
+              (kbd "<deletechar>")
+              'haskell-indentation-delete-char)))
+
+;;copied from haskell-mode docs in order to use the new, better, nondefault
+;;interactive mode.
+(eval-after-load "haskell-mode"
+  '(progn
+     (define-key haskell-mode-map (kbd "C-x C-d") nil)
+     (define-key haskell-mode-map (kbd "C-c C-z") 'haskell-interactive-switch)
+     (define-key haskell-mode-map (kbd "C-c C-l") 'haskell-process-load-file)
+     (define-key haskell-mode-map (kbd "C-c C-b") 'haskell-interactive-switch)
+     (define-key haskell-mode-map (kbd "C-c C-t") 'haskell-process-do-type)
+     (define-key haskell-mode-map (kbd "C-c C-i") 'haskell-process-do-info)
+     (define-key haskell-mode-map (kbd "C-c M-.") nil)
+     (define-key haskell-mode-map (kbd "C-c C-d") nil)))
+
+;; ghc-mod install http://www.mew.org/~kazu/proj/ghc-mod/en/emacs.html
+;; todo, try this out
+;; (autoload 'ghc-init "ghc" nil t)
+;;(add-hook 'haskell-mode-hook (lambda () (ghc-init) (flymake-mode)))
+
+
+
+;; from the package readme for ghci-completion
+(add-hook 'inferior-haskell-mode-hook 'turn-on-ghci-completion)
+
+
+;; disable some rebinds. they are set to appropriate keys in the keybinds section
+(eval-after-load "haskell-mode"
+  '(progn
+     (define-key haskell-mode-map (kbd "C-a") 'nil)
+     (define-key haskell-mode-map (kbd "C-j") 'nil)))
+
+
+(defun pretty-lambdas-haskell ()
+  (font-lock-add-keywords
+   nil `((,(concat "(?\\(" (regexp-quote "\\") "\\)")
+          (0 (progn (compose-region (match-beginning 1) (match-end 1)
+                                    ,(make-char 'greek-iso8859-7 107))
+                    nil))))))
+;; from haskell-mode manual
+(add-hook 'haskell-mode-hook 'turn-on-haskell-decl-scan)
+(when (window-system)
+  (add-hook 'haskell-mode-hook 'pretty-lambdas-haskell))
+
+;; added from haskell-mode website install instructions
+                                        ;(load "/usr/share/emacs/site-lisp/haskell-mode/haskell-site-file")
+(add-hook 'haskell-mode-hook 'turn-on-haskell-doc-mode)
+;;the three indentation modules are mutually exclusive - add at most one. Trying out the "most advanced"
+(add-hook 'haskell-mode-hook 'turn-on-haskell-indentation)
+;;(add-hook 'haskell-mode-hook 'turn-on-haskell-indent)
+;;(add-hook 'haskell-mode-hook 'turn-on-haskell-simple-indent)
+
+
+;; todo, set this to some other key
+;;    (local-set-key (kbd "C-e") 'my-haskell-load-and-run)
+
+(defun my-haskell-load-and-run ()
+  "Loads and runs the current Haskell file."
+  (interactive)
+  (let ((start-buffer (current-buffer)))
+    (inferior-haskell-load-and-run inferior-haskell-run-command)
+    (sleep-for 0 100)
+    (end-of-buffer)
+    (pop-to-buffer start-buffer)))
+
+;; show haskell function in mode line
+;; todo, this broke after updating emacs
+;;(eval-after-load "which-func"
+;;  '(add-to-list 'which-func-modes 'haskell-mode))
+
+
+
+(add-hook 'interactive-haskell-mode-hook 'ac-haskell-process-setup)
+(add-hook 'haskell-interactive-mode-hook 'ac-haskell-process-setup)
+(eval-after-load "auto-complete"
+  '(add-to-list 'ac-modes 'haskell-interactive-mode))
+
+(add-hook 'haskell-mode-hook
+          (lambda () (define-key haskell-mode-map (kbd "C-(")
+                  (lambda () (interactive)
+                    (basic-save-buffer)
+                    (haskell-compile)
+                    (run-with-timer .3 nil 'repeat-shell)))))
+(add-hook 'haskell-cabal-mode-hook
+          (lambda () (define-key haskell-cabal-mode-map (kbd "C-(") 'haskell-compile)))
+
+
+
+(add-hook 'haskell-interactive-mode-hook
+          (lambda ()
+            (define-key haskell-interactive-mode-map "\r" nil)
+            (define-key haskell-interactive-mode-map (kbd "RET")
+              'haskell-interactive-mode-return)))
+(add-hook 'haskell-indentation-mode-hook (lambda () (define-key haskell-indentation-mode-map "\r" nil)))
+
+
+
+(add-hook 'haskell-interactive-mode-hook
+          (lambda ()
+            (define-key haskell-interactive-mode-map (kbd "<C-M-return>") 'haskell-interactive-mode-newline-indent)))
+
+
+;;; mediawiki
+
+(eval-after-load "mediawiki"
+  '(progn
+     (remove-hook 'outline-minor-mode-hook 'mediawiki-outline-magic-keys)
+     (add-hook 'mediawiki-mode-hook
+               (lambda () (define-key mediawiki-mode-map (kbd "C-(") 'mediawiki-save-reload)))
+
+     ;; mediawiki mode has a bug that it will claim an edit conflict unless you reload after saving.
+     ;; I also like to save with no edit summary for previewing on my local mw instance
+     (defun mediawiki-save-reload ()
+       (interactive)
+       (and (mediawiki-save "") (mediawiki-reload)))))
+
+
+(setq org-caldav-url "https://cal.iankelling.org"
+      org-caldav-calendar-id "ian"
+      org-caldav-inbox "/p/cal.org")
+;;(org-caldav-sync)
+
+
+;;(require 'dtrt-indent)
+;;(setq dtrt-indent-mode t)
+
+
+;; gnu global
+(add-hook 'c-mode-common-hook
+          (lambda () (ggtags-mode 1)
+            (setq c-label-minimum-indentation 0)))
+
+(defun my-ggtags-init()
+  ;; specific to my unusual keybind setup, you may want to
+  ;; pick different keys
+  (define-key ggtags-mode-map (kbd "C-M-o") 'ggtags-find-tag-dwim)
+  (define-key ggtags-mode-map (kbd "C-M-m") 'ggtags-grep))
+(eval-after-load "ggtags" '(my-ggtags-init))
+
+
+(defun gtags-update-single(filename)
+  "Update Gtags database for changes in a single file"
+  (interactive)
+  (start-process "update-gtags" "update-gtags" "bash" "-c" (concat "cd " ggtags-project-root " ; gtags --single-update " filename )))
+
+(defun gtags-update-current-file()
+  (interactive)
+  (let ((rel-filename (replace-regexp-in-string
+                       ggtags-project-root "."
+                       (buffer-file-name (current-buffer)))))
+    (gtags-update-single rel-filename)))
+
+(defun gtags-update-hook()
+  "Update GTAGS file incrementally upon saving a file"
+  (when (and (boundp 'ggtags-mode) ggtags-mode ggtags-project-root)
+    (gtags-update-current-file)))
+
+(add-hook 'after-save-hook 'gtags-update-hook)
+
+;; i'd like to make some elisp which modifies a keymap to remove
+;; all binds which don't match a predicate.
+;; I tried setting a keymap to a new keymap,
+;; but that didn't register as functional.
+;; so I'd need to modify the list in place.
+
+;; colorize hex colors: use rainbow mode
+
+
+(global-set-key (kbd "C-M-w") 'spray-mode)
+;; remember, h/l = move. f/s = faster/slower, space = pause, all others quit
+
+
+;; disabled because it takes 400ms on startup
+;; ;; emacs regexes are too limited.
+;; (require 'foreign-regexp)
+;; ;; perl is most powerful, but javascript is pretty close and
+;; ;; I'd rather know javascript stuff than perl
+;; (custom-set-variables
+;;  '(foreign-regexp/regexp-type 'javascript) ;; Choose by your preference.
+;;  '(reb-re-syntax 'foreign-regexp)) ;; Tell re-builder to use foreign regexp.
+;; ;; it would be nice to add documentation to do this for more commands to that package
+;; ;; disabled because it's too slow. but I'd still m-x it for advanced replacements
+;; ;;(define-key global-map [remap isearch-forward-regexp] 'foreign-regexp/isearch-forward)
+
+
+;;;; keybinds for wow mouse
+
+(global-set-key (kbd "<mouse-6>") 'move-mouse-to-point)
+(global-set-key (kbd "<kp-left>") 'indent-region)
+(global-set-key (kbd "<kp-begin>") 'mark-defun)
+(global-set-key (kbd "<kp-right>") 'ibuffer)
+(global-set-key (kbd "<kp-prior>") 'delete-horizontal-space)