1 #+TITLE: My Personal Init Customization
2 #+OPTIONS: toc:nil num:nil ^:nil
4 # Copyright (C) 2016 Ian Kelling
6 # This program is free software: you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation, either version 3 of the License, or
9 # (at your option) any later version.
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License
17 # along with this program. If not, see <http://www.gnu.org/licenses/>.
19 * things that should be at the beginning
20 #+begin_src emacs-lisp
21 ;; todo, evaluating this manually disables debug on error instead of toggling it
22 ;;(toggle-debug-on-error) ;uncomment to help debug and catch errors
28 packages installed from package manager: i pretty much prioritize repos this way: gnu, then melpa, then marmalade.
30 package-activated-list:
31 ac-dabbrev ac-haskell-process ack-and-a-half alect-themes auctex bash-completion bbdb csv-mode cyberpunk-theme dot-mode expand-region f find-file-in-project flycheck foreign-regexp ggtags ghc gnuplot-mode goto-chg haskell-mode heroku-theme highlight-indentation highlight-symbol htmlize inf-ruby info+ inkpot-theme jedi auto-complete jedi-core epc ctable concurrent key-chord leuven-theme logstash-conf magit git-commit magit-popup misc-fns mouse+ naquadah-theme nginx-mode occidental-theme org paredit pcsv php-mode pkg-info epl popup py-autopep8 python-environment deferred python-info python-mode rainbow-mode rust-mode rw-hunspell s smartparens smex smooth-scroll sr-speedbar strings swiper ivy tabulated-list tangotango-theme thingatpt+ undo-tree vimrc-mode volatile-highlights web-mode with-editor dash async ws-butler yasnippet
34 #+begin_src emacs-lisp
35 ;; todo, figure out an easy way to disable this when using external keyboard
36 (if (display-graphic-p)
38 enter-key (kbd "<return>")
39 s-enter-key (kbd "<S-return>")
40 c-m-enter-key (kbd "<C-M-return>")
41 m-enter (kbd "<M-return>")
42 c-enter (kbd "<C-return>"))
45 s-enter-key (kbd "C-8")
46 c-m-enter-key (kbd "C-M-8")
50 (setq x200 (string= (system-name) "x2"))
51 (setq search-key (if x200 "<menu>" "<kp-add>"))
52 (setq shell-key (if x200 "<S-menu>" "<S-kp-equal>"))
55 - Ubiquitous Packages which should be loaded on startup rather than
56 autoloaded on demand since they are likely to be used in every
58 #+name: starter-kit-load-on-startup
59 #+begin_src emacs-lisp
69 - Better to have a list of packages in here vs installed manually.
70 However, I install manually because sometimes there are two
71 versions and it is not necessarily easy to reconcile that.
72 #+begin_src emacs-lisp
73 ;; based on marmalage website front page.
76 ;; little kit to help remove a down server
77 ;; (setq package-archives nil)
79 (add-to-list 'package-archives
81 "http://marmalade-repo.org/packages/"))
83 (add-to-list 'package-archives
84 '("melpa" . "http://melpa.milkbox.net/packages/") t)
86 ;; if this is a new machine/config, get package list
87 ;; not sure why we need it, but it is recommended in starter kit,
88 ;; and doesn't seem like a bad thing
89 (unless package-archive-contents (package-refresh-contents))
94 keep our init.el clean, by moving customization elisp to it's own file
95 #+name: m-x-customize-customizations
96 #+begin_src emacs-lisp
97 (setq custom-file "~/.emacs.d/custom.el")
98 (load custom-file 'noerror)
102 #+begin_src emacs-lisp
103 ;; more resilient undo-tree-history if we have their locations set up front.
104 (setq undo-tree-history-directory-alist '(("." . "~/.undo-tree-history")))
105 ;; Undo in region just happens accidentally, and throws me off, and it's been buggy in the past
106 (setq undo-tree-enable-undo-in-region nil)
109 * Stuff that I do not recommend that others use without reading,
110 understanding, and customizing themselves are
112 all mouse stuff disabled till i have time to figure it out again.
113 #+begin_src emacs-lisp :tangle no
114 (defun xterm-mouse-translate-1 (&optional extension)
116 (let* ((event (xterm-mouse-event extension))
117 (ev-command (nth 0 event))
118 (ev-data (nth 1 event))
119 (ev-where (nth 1 ev-data))
121 (is-down (string-match "down-" (symbol-name ev-command))))
124 ((null event) nil) ;Unknown/bogus byte sequence!
126 (setf (terminal-parameter nil 'xterm-mouse-last-down) event)
129 (let* ((down (terminal-parameter nil 'xterm-mouse-last-down))
130 (down-data (nth 1 down))
131 (down-where (nth 1 down-data)))
132 (setf (terminal-parameter nil 'xterm-mouse-last-down) nil)
135 ;; This is an "up-only" event. Pretend there was an up-event
136 ;; right before and keep the up-event for later.
137 (push event unread-command-events)
138 (vector (cons (intern (replace-regexp-in-string
139 "\\`\\([ACMHSs]-\\)*" "\\&down-"
140 (symbol-name ev-command) t))
142 ((equal ev-where down-where) vec)
144 (let ((drag (if (symbolp ev-where)
146 (list (intern (replace-regexp-in-string
147 "\\`\\([ACMHSs]-\\)*" "\\&drag-"
148 (symbol-name ev-command) t))
149 down-data ev-data))))
150 (if (null track-mouse)
152 (push drag unread-command-events)
153 (vector (list 'mouse-movement ev-data))))))))))))
156 * how to find auto-saved files that need recovering
157 find a recently dated file in ~/.emacs.d/auto-save-list/, and see the files listed in it.
158 #file# is an auto-save file. It may or may not be different than the file is corresponds to.
159 If it is different, emacs will give a message about recovering it when you open it.
163 * TODO shell mode reverse search hides 2nd+ line of multi-line result
164 * TODO button for switching to scratch buffer
165 * TODO figure out browsing files with broken nfs mount
166 causes emacs to freeze until I kill -9 it.
167 * TODO make a keybind to print var under cursor
168 and actually, putting the start of it in th emodeline might be cool
169 * TODO fix undo tree files literering filesystem
170 * TODO c-<delete> in shell mode should send over
171 previous line if current line is empty
172 * TODO make c-m-s be just a control key for easier use
173 * TODO bind a in group mode of gnus to c-u a,
174 also, make a default for number of articles
175 * TODO make auto-complete be on by default in sql-mode
176 * TODO make an easy bind for open previous buffer
177 * TODO i think my autosave for sudo-edit might be too fast
178 it sometimes leaves #_asdfjasdf files littered
179 * TODO readline-compleste doesn't work when you cat a file without a newline,
180 and so the prompt is messed up. not sure exactly what needs to be in end, or if its anything
181 * TODO figure out how to paste a path into find file
182 probably have to use the old kind of find file
183 * TODO readline-complete doesn't escape special chars in filenames
184 * TODO readline-complete dev
190 bad code, the comment this relates to was removed, but not the comment
191 /* If waiting for this channel, arrange to return as
192 soon as no more input to be processed. No more
196 (status_notify): New arg WAIT_PROC. this is unused, this is a bug.
197 The change in status_notify's return is just passing more information
198 from what it did already. No changes at all inside this function.
201 * TODO readline-complete: remove the hardcoded rlc-no-readline-hook
202 * TODO isearch doesn't automatically wrap in info
203 * TODO look into fixing shell mode reverse search
204 and why auto-complete dies
205 caveat is that it doesn't work well with certain unusual prompts, for example if $/# is not used at the end
206 see if we can load history, or reverse search with history commands
207 * TODO keybinds for s-delete/tab etc
208 * TODO fix bbdb info packaging in melpa
209 * TODO figure out why my emacs startup script doesn't work from dmenu
210 * TODO post idea to make customize group show function var names so we can read doc strings
211 * TODO report/fix bug that kill-whole-line doesn't work right with append kill
212 * TODO make bash keybind for copy paste interoperate with x windows
213 * TODO fix org stderr redirection
214 make this produce output of "ok"
219 * TODO make ido keybinds better
220 * TODO fix indenting in org
222 (defun my-org-indent-region (start end)
226 (let ((line-end (org-current-line end)))
228 (while (< (org-current-line) line-end)
229 (cond ((org-in-src-block-p) (org-babel-do-in-edit-buffer (indent-according-to-mode)))
230 (t (call-interactively 'org-indent-line)))
231 (move-beginning-of-line 2)))))
235 org-indent-region is broken for source blocks
236 the above function works, but has several problems.
237 first: it should not have separate logic from org-indent-line
238 second: it runs way too slow, mainly the command
239 (org-babel-do-in-edit-buffer (indent-according-to-mode)))
242 * TODO figure out newline in prompt shell issue
243 setting this before readline-complete is loaded allows completion to work,
244 but auto-completion still fails. Need to debug readline-complete to figure this out.
245 (setq shell-prompt-pattern "^[^#$%>]*[#$]\n")
246 * TODO setup bind for find tag / lisp function at point
248 * TODO org-delete-char should also work for the delete/backspace keys!
251 * TODO checkout projectile / graphene's project settings
253 * TODO check up on recent changes to 3rd party default configs
254 - last checked apr 24
255 https://github.com/eschulte/emacs24-starter-kit/commits/master
258 https://github.com/bbatsov/prelude
259 - redefined mouse functions from this file
261 * TODO figure out how to setup emacs to format text nicely like thunderbird
262 * TODO it appears impossible make C-[ not be the same as escape
263 * TODO movement within info buffer after opening a link doesn't cancel isearch
264 leads to many frustrations
265 * TODO fix org resolve clock message. it is innacurate
266 i is not the same, becuase it does not make org realize there is an active clock
268 * TODO add apropos commands to help prefix, from
269 http://stackoverflow.com/questions/3124844/what-are-your-favorite-global-key-bindings-in-emacs
270 * TODO my autosave goes into an endless prompting loop
271 when running save buffer, and the buffer has been changed
273 * TODO smart peren does not see ?\\) as a valid paren
275 * TODO why does org-end-of-line not go all the way to the end on a closed headline?
276 * TODO org makes random ... things, and delete right before them does ctrl-i
277 * TODO try mark word, which might be a useful keybind
278 * TODO fix org-cycle: it assumes which key it is bound to for its last alternative
279 * TODO checkout lisp-complete-symbol to augment auto-complete
281 * TODO emacs keylogger to optimize key binds
282 * TODO remap/investigate find tag, find tag at point
283 * TODO set key to cycle buffers by mode, example below
285 (defun cycle-buffer-by-mode (p-mode)
286 "Cycle buffers by mode name"
288 (dolist (buffer (buffer-list))
289 (with-current-buffer buffer
290 (when (buffer-live-p buffer)
291 (if (string-match p-mode mode-name) ;(regexp-quote p-mode)
292 (setq switch2buffer buffer)))))
293 (when (boundp 'switch2buffer)
294 (switch-to-buffer switch2buffer)))
296 And I have bound this to my F9 key
298 (global-set-key [f9] '(lambda () (interactive) (cycle-buffer-by-mode "Shell$")))
300 * TODO test out usefulness of forward/back sexp in different languages
302 * TODO major mode settings to check out in future
303 ** emacs24 starter kit
304 - Nxhtml -- utilities for web development
305 [[http://ourcomments.org/Emacs/nXhtml/doc/nxhtml.html][Nxhtml]] is a large package of utilities for web development and for
306 embedding multiple major modes in a single buffer.
308 Nxhtml is not installed in this version of the starter-kit by default,
309 for information on installing nxhtml see [[http://www.emacswiki.org/emacs/NxhtmlMode][EmacsWiki-Nxhtml]].
311 web-mode is competing package and actively developed, so i'm using that instead
314 (dolist (package '(yaml-mode js2-mode))
315 (unless (package-installed-p package)
317 - Associate modes with file extensions
319 (add-to-list 'auto-mode-alist '("COMMIT_EDITMSG$" . diff-mode))
320 (add-to-list 'auto-mode-alist '("\\.css$" . css-mode))
322 (add-to-list 'auto-mode-alist '("\\.ya?ml$" . yaml-mode))
323 (add-to-list 'auto-mode-alist '("\\.rb$" . ruby-mode))
324 (add-to-list 'auto-mode-alist '("Rakefile$" . ruby-mode))
325 (add-to-list 'auto-mode-alist '("\\.js\\(on\\)?$" . js2-mode))
326 ;; (add-to-list 'auto-mode-alist '("\\.xml$" . nxml-mode))
328 - clojure in starter-kit-lisp.org
330 - others = gnus, js, publish, perl, python, perl, ruby
331 they each have their own starter kit file.
333 - snippets for various modes other than org-mode
335 * TODO update yasnippet documentation
336 yas expand key customization is rediculously hard to figure out
337 and completely undocumented
338 * TODO fix org source indenting, send patch
339 * TODO check out bundling aka compiling yasnippet
340 * TODO try xml/html mode url func
343 "Open a new buffer containing the contents of URL."
345 (let* ((default (thing-at-point-url-at-point))
346 (url (read-from-minibfer "URL: " default)))
347 (switch-to-buffer (url-retrieve-synchronously url))
348 (rename-buffer url t)
349 ;; TODO: switch to nxml/nxhtml mode
350 (cond ((search-forward "<?xml" nil t) (xml-mode))
351 ((search-forward "<html" nil t) (html-mode)))))
353 * TODO flyspell-buffer automatically
355 * TODO respond to ediff thread
356 * TODO fix horizontal mouse resizing
357 resizing a window horizontally with the mouse should be allowed in more places
359 * TODO try using / making abbreviations
362 #+begin_src emacs-lisp
364 ;; turn on abbrev mode globally
365 (setq-default abbrev-mode t)
368 default abbreviation mode file is .emacs.d/abbrev_defs.
369 add-global-abbrev, add-mode-abbrev for expansion at point
370 if all else fails, edit the abbrev file
374 #+begin_src emacs-lisp
375 ;; auto-completion in minibuffer
378 (require 'auto-complete-config)
382 ;; complete after 1 char instead of default 2
383 (setq ac-auto-start 1)
384 (setq ac-delay 0.001)
386 (add-to-list 'ac-modes 'org-mode 'sql-mode)
388 (defun ac-common-setup ()
389 (add-to-list 'ac-sources 'ac-source-yasnippet))
391 ;; for org mode completion source taken from wiki.
392 ;; it did not work. no idea why. todo, investigate
393 ;; the ac-sources code is at http://www.emacswiki.org/emacs/AutoCompleteSources
394 ;; i've deleted it here so as to save space and not spam this file
395 ;;(defun my-ac-org-mode ()
396 ;; (setq ac-sources (append ac-sources '(ac-source-org))))
399 ;; this makes the org-self-insert command not do a flyspell spell check.
400 ;; low priority thing to look into sometime
401 (ac-flyspell-workaround)
404 (define-key ac-completing-map (kbd "<up>") nil)
405 (define-key ac-completing-map (kbd "<down>") nil)
406 (define-key ac-completing-map (kbd "<S-return>") 'ac-expand)
407 (define-key ac-completing-map "\t" 'ac-complete)
408 (define-key ac-completing-map (kbd "<tab>") 'ac-complete)
413 * auto-complete readline-complete
414 #+begin_src emacs-lisp
416 (add-to-list 'load-path "~/.emacs.d/src/readline-complete")
417 (require 'readline-complete)
418 ;; not sure how I made these, but I deleted, and
419 ;; it would be nice to make them again sometime
420 ;;(require 'src-loaddefs)
422 ;; disabled cuz broken
423 ;; redefining function in readline-complete so ac-complete only uses readline as a source
424 (defun ac-rlc-setup-sources ()
425 "Add me to shell-mode-hook!"
426 (setq ac-sources '(ac-source-shell)))
427 (add-hook 'shell-mode-hook 'ac-rlc-setup-sources)
429 ;; generally unnecessary, but why not
430 (setq explicit-shell-file-name "bash")
432 ;; readline-complete says to add this line.
433 ;; however, it messes up my procfs directory tracking hook
434 ;; because get-process doesn't notice the child shell.
435 ;; instead, I've removed export EMACS=t from
436 ;; comint-exec-1 (the function which initially sets it)
437 ;; by finding it in emacs sources and redefinind it here
438 ;; and done stty echo in my bashrc
439 ;;(setq explicit-bash-args '("-c" "export EMACS=; stty echo; bash"))
442 (setq explicit-bash-args nil)
443 (setq comint-process-echoes t)
445 (add-to-list 'ac-modes 'shell-mode)
447 ;; readline-complete recommends this (i assume this format),
448 ;; but greping finds no reference in emacs or my .emacs.d
449 ;; so I'm assuming it is for an older emacs
450 ;;(setq explicit-ssh-args '("-t"))
452 (add-hook 'shell-mode-hook
454 (define-key shell-mode-map (kbd "<tab>") 'auto-complete)))
466 there is a bug that when emacs has been running for a long time,
467 auto-save-timeout never happens simply by waiting.
468 doing something like an M-x function will trigger it.
469 Todo: report this bug.
471 #+begin_src emacs-lisp
473 ;; enable auto-save hook
474 (setq auto-save-timeout 1) ; idle time before auto-save.
477 ;; main hook for my auto save
478 (add-hook 'auto-save-hook 'my-auto-save)
479 ;; additional hook to try to deal with emacs not auto-saving when a buffer isn't active
480 (add-hook 'window-configuration-change-hook 'my-auto-save)
483 (defun my-auto-save ()
484 (if (and my-as (buffer-file-name) (buffer-modified-p))
485 (let (message-log-max)
486 ;; a bit of a hack to partially suppress the constant saving in the echo area
487 (with-temp-message ""
488 (basic-save-buffer)))))
498 ;; based on suggestion in the emacs docs, redefine these 2 functions
499 ;; to avoid prompt spamming the user when we do auto-save
500 (defun ask-user-about-supersession-threat (fn)
503 "File for %s has changed on disk outside of emacs. Auto-save is overwriting it, however
504 a backup is being created in case that is not what you intended." buffer-file-name)
505 (setq buffer-backed-up nil))
507 (defadvice ask-user-about-lock (before lock-deactivate-as activate)
508 (make-local-variable 'my-as)
510 (message "proper autosave has been turned off for this buffer because of lock file problem.
511 In this buffer, do M-x my-as-on to reenable"))
513 ;; todo, this doesn't work consistently to override the auto-save message
514 (defalias 'do-auto-save-original (symbol-function 'do-auto-save))
515 (defun do-auto-save (&optional no-message current-only)
516 "This function has been modified to wrap the original so that NO-MESSAGE
517 is always set to t, since we auto-save a lot, it spams otherwise.
518 The original doc string is as follows:
520 Auto-save all buffers that need it.
521 This is all buffers that have auto-saving enabled
522 and are changed since last auto-saved.
523 Auto-saving writes the buffer into a file
524 so that your editing is not lost if the system crashes.
525 This file is not the file you visited; that changes only when you save.
526 Normally we run the normal hook `auto-save-hook' before saving.
529 A non-nil NO-MESSAGE argument means do not print any message if successful.
530 A non-nil CURRENT-ONLY argument means save only current buffer."
532 (do-auto-save-original t current-only))
534 ;; enable MY auto-save
540 backups, separate from auto-save
542 #+begin_src emacs-lisp
544 ;; set backup file location
545 (setq backup-directory-alist '(("." . "~/.editor-backups")))
546 (setq auto-save-file-name-transforms
547 '((".*" "~/.editor-backups/" t)))
549 (setq version-control t ;; Use version numbers for backups
550 kept-new-versions 100
552 delete-old-versions t ;; delete old versions silently
553 ;; assume hard linked files are done on purpose, don't screw them up
554 backup-by-copying-when-linked t)
556 ;; todo, the time needs to be an integer, not a vector type thing
557 (defun constant-backup ()
558 "Backup conditioned on some time passing since last one.
559 Hooked into 'before-save-hook."
560 (cl-flet ((b-time (minutes)
562 (- (current-time) (* 60 minutes)))))
563 (when (or (not (boundp 'last-backup-time)) (and (< (buffer-size) 10000000) (b-time 5)) (b-time 30))
564 (setq buffer-backed-up nil)
565 (setq-local last-backup-time (current-time)))))
567 ;; make a backup on auto-save, because the backup feature is not
568 ;; utilized with my-auto-save, only normal interactive save.
569 ;; todo, enable when fixed
570 ;;(add-hook 'before-save-hook 'constant-backup)
572 (add-hook 'auto-save-hook 'auto-save-size-limit)
574 (defun auto-save-size-limit ()
575 (when (and (not backup-inhibited) (> (buffer-size) 2000000))
576 (message "Backups disabled for this buffer due to size > 2 megs")
577 (make-local-variable 'backup-inhibited)
578 (setq backup-inhibited t)))
585 the faq suggests to auto-save using
586 (setq auto-save-visited-file-name t)
587 and to toggle auto-saving in the current buffer, type `M-x auto-save-mode'
589 however, this is buggy.
590 it leaves around lock files, which can be disabled with
591 (setq create-lockfiles nil)
592 but it is also buggy on other things that appear to hook onto file saving
593 so i created my own function, which originally had bugs,
594 but new emacs version fixed all that, yay!.
597 ; not using, but here for documentation,
598 ; alternate way to enable and specify how long between autosaves.
599 ; number of input events between autosave.
600 ; lowest bound of functionality is actually about 15 input events
601 ;(setq auto-save-interval
602 ** todo keep an eye out for why/when and fix the fact that normal auto-save files are being made soemtimes
604 seems they are created
607 #+begin_src emacs-lisp
608 ;; based on bbdb manual
609 ;; also has instructions to initialize upon launching gnus, etc
610 ;; but I figure try this to make sure everything works all the time first
612 (bbdb-initialize 'message)
614 ;; recommended by gnus,
615 ;; but seems like it could be good to have set for other stuff
616 (setq user-full-name "Ian Kelling"
617 user-mail-address "ian@iankelling.org")
618 ;; general email setting? recommended by mu4e
619 (setq message-kill-buffer-on-exit t)
622 ;; based on emacs24-starter-kit
623 (setq bbdb-offer-save 'auto
624 bbdb-notice-auto-save-file t
625 bbdb-expand-mail-aliases t
626 bbdb-canonicalize-redundant-nets-p t
627 bbdb-complete-name-allow-cycling t)
630 (add-hook 'bbdb-mode-hook
631 (lambda () (define-key bbdb-mode-map (kbd "C-k") nil)))
633 (add-to-list 'load-path "~/.emacs.d/src/bbdb-csv-import")
634 (require 'bbdb-csv-import)
638 #+begin_src emacs-lisp
639 ; save bookmarks whenever they are changed instead of just when emacs quits
640 (setq bookmark-save-flag 1)
641 ; increase bookmark context size for better functionality
642 (setq bookmark-search-size 2000)
645 #+begin_src emacs-lisp
646 ;; change last thing from gnu.
647 ;; notably this avoids brace indent after if, and 4 space indent
648 (setq c-default-style '((java-mode . "java")
650 (other . "stroustrup")))
651 ;; for emacs itself, use
652 ;; (setq c-default-style '((java-mode . "java")
653 ;; (awk-mode . "awk")
655 ;; (setq-default c-basic-offset 2)
659 A Theme builder is available at http://elpa.gnu.org/themes/ along with
660 a list of pre-built themes at http://elpa.gnu.org/themes/view.html and
661 themes are available through ELPA.
664 interesting light themes
667 #+begin_src emacs-lisp
668 (defun override-theme (arg)
670 (while custom-enabled-themes
671 (disable-theme (car custom-enabled-themes)))
673 (setq color-theme-is-global t)
675 (defun toggle-night ()
677 (if (equal (car custom-enabled-themes) 'naquadah)
678 (override-theme 'leuven)
679 (override-theme 'naquadah)))
682 (override-theme 'leuven) ;; org mode features, with monitor darkened. part of org-mode i think
686 ;; disable color thing with this:
687 ;;(disable-theme (car custom-enabled-themes))
689 ;; decent dark themes
691 ;;(override-theme 'tangotango)
692 ;;(override-theme 'deeper-blue)
693 ;;(override-theme 'tango-dark)
694 ;;(override-theme 'tsdh-dark)
696 ;;(override-theme 'heroku)
697 ;;(override-theme 'inkpot) ;; part of inkpot-theme package
698 ;;(override-theme 'naquadah) ; org mode features, part of naquadah-theme package
699 ;;(override-theme 'spolsky) ;; part of sublime-themes package
700 ;;(override-theme 'twilight-anti-bright) ;; from twilight-anti-bright-theme package
702 ;; interesting but not usable colors
703 ;;(override-theme 'cyberpunk) ; cool org mode features, from cyberpunk-theme package
704 ;;(override-theme 'wombat) ; cursor not visible enough. from a wombat package, not sure which
705 ;;(override-theme 'misterioso) ; cursor not visible enough
709 ;;decent light themes
710 ;;(override-theme 'alect-light) ; theres a -alt version, don't see a dif. could use this without dimming. from alect-something package
711 ;;(override-theme 'occidental) ; from occidental-theme package
714 ;;color-theme is deprecated in emacs 24.
716 ;; theme packages i tried then removed:
717 ;; ignored ones that didn't use the new theme engine
719 ;;66 packages (zenburn-theme-2.1, zen-and-art-theme-1.0.1, waher-theme-20130917.7, ujelly-theme-1.0.35, twilight-theme-1.0.0, twilight-bright-theme-20130605.143, twilight-anti-bright-theme-20120713.316, tronesque-theme-1.3, tron-theme-12, toxi-theme-0.1.0, tommyh-theme-1.2, tango-2-theme-1.0.0, sunny-day-theme-20131203.1250, sublime-themes-20140117.323, subatomic-theme-20131011.1048, soothe-theme-0.3.16, soft-morning-theme-20131211.1342, soft-charcoal-theme-20130924.1206, sea-before-storm-theme-0.3, purple-haze-theme-20130929.1751, phoenix-dark-pink-theme-20130905.941, phoenix-dark-mono-theme-20130306.1215, pastels-on-dark-theme-0.3, obsidian-theme-20130920.937, nzenburn-theme-20130513, noctilux-theme-20131019.31, mustang-theme-20130920.939, monokai-theme-0.0.10, molokai-theme-20130828.0, late-night-theme-0.0, jujube-theme-0.1, ir-black-theme-20130302.2355, gruvbox-theme-20131229.1458, gruber-darker-theme-0.6, grandshell-theme-20140118.1003, github-theme-0.0.3, gandalf-theme-0.1, flatland-theme-20131204.858, django-theme-20131022.202, deep-thought-theme-0.1.1, dakrone-theme-20131212.1159, colorsarenice-theme-20131128.1106, color-theme-wombat+-0.0.2, color-theme-wombat-0.0.1, color-theme-twilight-0.1, color-theme-tango-0.0.2, color-theme-solarized-20120301, color-theme-sanityinc-solarized-2.25, color-theme-railscasts-0.0.2, color-theme-monokai-0.0.5, color-theme-molokai-0.1, color-theme-ir-black-1.0.1, color-theme-heroku-1.0.0, color-theme-github-0.0.3, color-theme-eclipse-0.0.2, color-theme-dpaste-0.0.1, color-theme-dawn-night-1.0, color-theme-colorful-obsolescence-0.0.1, color-theme-cobalt-0.0.2, color-theme-20080305.34, clues-theme-20130908.801, busybee-theme-20130920.942, bubbleberry-theme-0.1.2, assemblage-theme-20130715.621, anti-zenburn-theme-20140104.1542, ample-zen-theme-0.2)
727 git clone --recursive https://github.com/capitaomorte/yasnippet
728 touch snippets/.yas-make-groups
730 This all makes it so I can look through the default snippets
731 in the menu bar, but they don't show up elsewhere, because they are
732 mostly things I don't want.
734 #+begin_src emacs-lisp
737 ;; this needs to be before yas-global-mode
738 (setq yas-snippet-dirs (list "~/.emacs.d/snippets"))
742 yas-also-auto-indent-first-line t
743 yas-choose-tables-first t
744 yas-use-menu (quote full)
745 ;; this sets ido-prompt as first function
747 '(yas-ido-prompt yas-dropdown-prompt yas-x-prompt yas-completing-prompt yas-no-prompt))
749 ;; todo, explore this option for wrapping region
750 ;; '(yas/wrap-around-region t))
755 | yas-ido-prompt | yas-dropdown-prompt | yas-x-prompt | yas-completing-prompt | yas-no-prompt |
757 * cross session settings
758 #+begin_src emacs-lisp
760 ;; Save a list of recent files visited.
762 (setq recentf-max-saved-items 200
763 recentf-max-menu-items 15)
767 save-place-version-control 'nospecial
768 save-place-limit 40000
769 save-place-file "~/.emacs.d/places")
773 ;; savehist keeps track of some history
775 (setq savehist-additional-variables '(kill-ring search-ring regexp-search-ring)
777 savehist-autosave-interval 60
778 ;; keep the home clean
779 savehist-file "~/.emacs.d/.savehist")
785 #+begin_src emacs-lisp
786 ;; ediff-buffers is the main command to use
788 ;; ediff - don't start another frame for the control panel
789 ;; unfortunately, this doesn't allow me to use 2 frames for the diff buffers
790 ;; so disable this temporarily with the next line if you want that
791 ;; sometime I should setup 2 functions to explicitly do each type
792 (setq ediff-window-setup-function 'ediff-setup-windows-plain)
793 ;;(setq ediff-window-setup-function 'ediff-setup-windows-default)
795 ;; do side by side diffs
796 (setq ediff-split-window-function 'split-window-horizontally)
803 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 hit n to go to the next diff, it restores the window in the first frame. Another thing I tried is to open 2 new frames and set them up as I want. However, if I try to open the *Ediff Control Panel* buffer in a different window from its original one, my mouse jumps to one of the diff frames, or if that isn't visible, the buffer just hangs until I select the original ediff control panel window. This seems like a bug to me. I am using a very recent development version of emacs.
806 #+begin_src emacs-lisp
808 ;; dired - reuse current buffer by pressing 'a'
809 (put 'dired-find-alternate-file 'disabled nil)
812 * disabled but saved for documentation purposes
817 #+begin_src emacs-lisp
818 ;; this eventually gets set in
819 ;; comint-dynamic-complete-functions
820 ;; (car comint-dynamic-complete-functions)
821 (autoload 'bash-completion-dynamic-complete "bash-completion"
822 "BASH completion hook")
823 (add-hook 'shell-dynamic-complete-functions
824 'bash-completion-dynamic-complete)
826 ;; this appears useless, but was in the recommended init code
827 (add-hook 'shell-command-complete-functions
828 'bash-completion-dynamic-complete)
830 (defun ac-rlc-setup-sources ()
831 "Add me to shell-mode-hook!"
832 (setq ac-sources '(ac-source-shell)))
833 (add-hook 'shell-mode-hook 'ac-rlc-setup-sources)
838 It is an awesome mode for keyboard navigation.
839 However, using the mouse takes less thought and works as well,
840 especially with my foot mouse ;)
842 #+begin_src emacs-lisp
847 ;; this has a problem that it doesn't work with emacsclient, so I'm using a more standard method
848 ;; This has the benefit of working with less fuss otherwise, I think.
849 ;; no method works on a terminal
850 ;; makes C-i and tab be distinct. same deal is done for c-m
851 ;;(setq local-function-key-map (delete '(tab . [9]) local-function-key-map))
852 ;; (define-key input-decode-map (kbd "C-i") [f15])
853 ;; (define-key input-decode-map (kbd "<f15>") [?\C-i])
854 ;; (define-key input-decode-map (kbd "<tab>") [?\C-i])
855 ;; (global-set-key (kbd "<f15>") 'query-replace)
858 ; not using ace jump mode, but if mouse is ever not good,
859 ; here is config for it
860 (require 'ace-jump-mode)
861 (eval-after-load "ace-jump-mode"
862 '(ace-jump-mode-enable-mark-sync))
863 (define-key global-map (kbd "") 'ace-jump-mode)
867 ;; revert buffers automatically when underlying files are changed externally
868 ;; too dangerous, and thus disabled.
869 ;; do m-x auto-revert-mode to auto-rever a specific buffer
870 ;;(global-auto-revert-mode t)
873 ;; whitespace-mode config. minimal for bad whitespace
874 ;(setq whitespace-line-column 80) ; for style of lines-tail, but I have it disabled
875 (setq whitespace-style '(face tabs empty trailing))
876 ;to enable whitespace mode
881 (defun org-set-mark-command (arg)
882 "Do set-mark-command and then org-show-context if the point
883 moves to invisible text."
885 (let ((initial-point (point)))
886 (setq this-command 'set-mark-command)
887 (set-mark-command (arg))
888 (if (and (not (= (point) initial-point))
889 (or (outline-invisible-p) (org-invisible-p2)))
890 (org-show-context 'mark-goto))))
892 (defun org-exchange-point-and-mark (&optional arg)
894 (let ((initial-point (point)))
895 (exchange-point-and-mark)
896 (if (and (not (= (point) initial-point))
897 (or (outline-invisible-p) (org-invisible-p2)))
898 (org-show-context 'mark-goto))))
901 (defun toggle-mode-line ()
902 "Toggle mode line on and off."
905 (progn (setq my-saved-mode-line-format mode-line-format)
906 (setq mode-line-format nil))
907 (setq mode-line-format my-saved-mode-line-format))
908 (force-mode-line-update))
910 (global-set-key (kbd "M-m") 'toggle-mode-line)
911 (add-hook 'after-change-major-mode-hook
912 (lambda () (setq my-saved-mode-line-format mode-line-format)
913 (setq mode-line-format nil)))
918 ** Copy mode-line to the top
919 #+begin_src emacs-lisp
920 ;; Copy mode-line to the top
921 (setq-default header-line-format mode-line-format
922 mode-line-format nil)
923 ;; copied the mode-line theme into the header theme, else it is unreadable
924 ;; this goes after loading the theme
925 (let ((class '((class color) (min-colors 89))))
926 (custom-theme-set-faces
928 `(header-line ((,class (:box (:line-width 1 :color "#1A2F54") :foreground "#85CEEB" :background "#335EA8"))))))
932 ** tab bindings for when I wanted to make tab be for search
933 #+begin_src emacs-lisp
935 (define-key emacs-lisp-mode-map (kbd "<tab>") nil)
936 (define-key button-buffer-map "\t" nil)
937 (define-key button-buffer-map (kbd "f") 'forward-button)
938 (define-key Info-mode-map "\t" nil)
939 (define-key widget-keymap "\t" nil)
940 (define-key widget-keymap (kbd "<tab>") nil)
942 (add-hook 'compilation-mode-hook (lambda ()
943 (define-key compilation-mode-map (kbd "<tab>") nil)
944 (define-key compilation-mode-map "\t" nil)))
946 ;; unbind c-i for yas. it already separately binds <tab>
947 (add-hook 'yas-minor-mode-hook (lambda ()
948 (define-key yas-minor-mode-map "\t" nil)))
950 (add-hook 'haskell-interactive-mode-hook
952 (define-key haskell-interactive-mode-map "\t" nil)
953 (define-key haskell-interactive-mode-map (kbd "<tab>") 'haskell-interactive-mode-tab)))
955 (define-key minibuffer-local-must-match-map "\t" nil)
956 (define-key minibuffer-local-must-match-map (kbd "<tab>") 'minibuffer-complete)
957 (define-key minibuffer-local-completion-map (kbd "<tab>") 'minibuffer-complete)
958 (define-key minibuffer-local-completion-map "\t" 'minibuffer-complete)
960 (add-hook 'ido-setup-hook
962 (define-key ido-completion-map (kbd "<tab>") 'ido-complete)
963 (define-key ido-completion-map "\t" nil)))
967 ** kill buffer and window
968 #+begin_src emacs-lisp
969 (defun kill-buffer-and-window ()
970 "Close the current window and kill the buffer it's visiting."
976 ** sending multiple commands to a comint buffer
977 without waiting for commands to finish is unreliable.
978 seems like 1 in 100 times, an invisible command to restore prompt didn't work
979 #+begin_src emacs-lisp
980 (setq shell-unset-prompt "unset PROMPT_COMMAND; unset PS1")
981 (setq shell-set-prompt "PROMPT_COMMAND=prompt_command")
983 (if (boundp 'shell-unset-prompt)
984 (send-invisible-string proc shell-unset-prompt))
985 (if (boundp 'shell-set-prompt)
986 (send-invisible-string proc shell-set-prompt))
989 (defun send-invisible-string (proc string)
990 "Like send-invisible, but non-interactive"
991 (comint-snapshot-last-prompt)
992 (funcall comint-input-sender proc string))
1000 alsot tried notmuch, it had some glitches, and it's config
1001 has a list of folders which i'd rather not publish, so it's config is archived.
1003 #+begin_src emacs-lisp
1004 (add-to-list 'load-path "/usr/local/share/emacs/site-lisp/mu4e")
1006 (setq send-mail-function (quote sendmail-send-it) ;; common to gnus also
1007 mu4e-sent-folder "/Sent Items"
1008 mu4e-drafts-folder "/Drafts"
1009 mu4e-trash-folder "/Trash"
1010 mu4e-refile-folder "/Archive"
1011 mu4e-get-mail-command "offlineimap"
1012 mu4e-update-interval 60
1013 mu4e-sent-messages-behavior 'delete
1014 mu4e-use-fancy-chars t
1015 mu4e-confirm-quit nil
1016 mu4e-headers-leave-behavior 'apply ;; dont ask
1017 mu4e-headers-fields (delq (assoc :mailing-list mu4e-headers-fields) mu4e-headers-fields)
1018 ;; a bit faster than the default 500
1019 mu4e-headers-results-limit 80)
1021 (define-key mu4e-headers-mode-map (kbd "<return>") 'mu4e-headers-view-message)
1023 (defun my-mu4e-to ()
1024 "inspired by mu4e info manual"
1025 (--reduce-from (if (mu4e-message-contact-field-matches
1026 mu4e-compose-parent-message :to (cadr it))
1027 (concat (car it) (cadr it))
1029 '("Ian Kelling <ian@iankelling.org")
1030 ;;'(("Ian Kelling " "<alternate1@example.com>")
1031 ;; ("Ian Kelling " "<alternate2@example.com>"))
1034 (add-hook 'mu4e-compose-pre-hook 'my-mu4e-to)
1036 (add-to-list 'mu4e-view-actions
1037 '("ViewInBrowser" . mu4e-action-view-in-browser) t)
1038 (setq mu4e-maildir-shortcuts
1048 ** org-mode auto-complete source
1050 todo, someday take a look at this. it is broken.
1052 ;(defvar ac-source-eshell-pcomplete
1053 ; '((candidates . (pcomplete-completions))))
1054 ;(defun ac-complete-eshell-pcomplete ()
1056 ; (auto-complete '(ac-source-eshell-pcomplete)))
1058 ;(add-hook 'org-mode-hook (lambda () (setq ac-sources (cons 'ac-source-eshell-pcomplete ac-sources))))
1059 ;(add-to-list 'ac-modes 'eshell-mode)
1062 ** gnus nice unicode
1065 this looks nice, but it lags gnus just a bit
1066 #+begin_src emacs-lisp
1068 (defun gnus-pretty-chars-setup ()
1070 (setq gnus-sum-thread-tree-indent " "
1071 gnus-sum-thread-tree-root "● "
1072 gnus-sum-thread-tree-false-root "◯ "
1073 gnus-sum-thread-tree-single-indent "◎ "
1074 gnus-sum-thread-tree-leaf-with-other "├─► "
1075 gnus-sum-thread-tree-vertical "│"
1076 gnus-sum-thread-tree-single-leaf "╰─► ")))
1077 ;; dunno why, but this didn't work just setting on startup
1078 (add-hook 'gnus-startup-hook 'gnus-pretty-chars-setup)
1082 ** readline complete fix, replaced with proper solution
1084 i had commented out a few lines here, but instead I am setting in my profile
1085 the environment variable I commented out here. Yes, that is not the best explanation, but I will probably delete this as
1086 old history anyways.
1087 #+begin_src emacs-lisp
1089 (defun comint-exec-1 (name buffer command switches)
1090 (let ((process-environment
1092 ;; If using termcap, we specify `emacs' as the terminal type
1093 ;; because that lets us specify a width.
1094 ;; If using terminfo, we specify `dumb' because that is
1095 ;; a defined terminal type. `emacs' is not a defined terminal type
1096 ;; and there is no way for us to define it here.
1097 ;; Some programs that use terminfo get very confused
1098 ;; if TERM is not a valid terminal type.
1099 ;; ;; There is similar code in compile.el.
1100 (if (and (boundp 'system-uses-terminfo) system-uses-terminfo)
1101 (list "TERM=dumb" "TERMCAP="
1102 (format "COLUMNS=%d" (window-width)))
1104 (format "TERMCAP=emacs:co#%d:tc=unknown:" (window-width))))
1105 ;; ian: commented this out
1106 ;;(unless (getenv "EMACS")
1107 ;; (list "EMACS=t"))
1108 (list (format "INSIDE_EMACS=%s,comint" emacs-version))
1109 process-environment))
1111 (if (file-accessible-directory-p default-directory)
1114 proc decoding encoding changed)
1115 (let ((exec-path (if (and command (file-name-directory command))
1116 ;; If the command has slashes, make sure we
1117 ;; first look relative to the current directory.
1118 (cons default-directory exec-path) exec-path)))
1119 (setq proc (apply 'start-file-process name buffer command switches)))
1120 ;; Some file name handler cannot start a process, fe ange-ftp.
1121 (unless (processp proc) (error "No process started"))
1122 (let ((coding-systems (process-coding-system proc)))
1123 (setq decoding (car coding-systems)
1124 encoding (cdr coding-systems)))
1125 ;; Even if start-file-process left the coding system for encoding data
1126 ;; sent from the process undecided, we had better use the same one
1127 ;; as what we use for decoding. But, we should suppress EOL
1129 (if (and decoding (not encoding))
1130 (setq encoding (coding-system-change-eol-conversion decoding 'unix)
1133 (set-process-coding-system proc decoding encoding))
1137 #+begin_src emacs-lisp
1139 ; todo, is this require things necessary?
1140 ; (require 'flyspell)
1144 ; whenever M-tab is completion, swap it with tab
1145 ;(define-key emacs-lisp-mode-map (kbd "<tab>") 'completion-at-point)
1146 ;(define-key emacs-lisp-mode-map (kbd "C-M-i") 'indent-for-tab-command)
1147 ;(define-key lisp-interaction-mode-map (kbd "<tab>") 'completion-at-point)
1148 ;(define-key lisp-interaction-mode-map (kbd "C-M-i") 'indent-for-tab-command)
1149 ;the global tab keyind. for some reason this totally screws up mini-buffer tab.
1150 ; disabled until I actually find myself using this, and find a fix for the above problem
1151 ;(global-set-key (kbd "<tab>") 'complete-symbol)
1154 ; todo, see how mastering emacs defines this function
1155 ;(global-set-key (kbd "M-j") 'ido-goto-symbol)
1158 ; todo, make my custom overlays have an underline if they are
1159 ; overriding a paren matching overlay
1160 ; make right click set the mark
1161 ; make search tab do completion instead of meta-tab
1162 ; in isearch, move C-y to C-v
1163 ; in isearch, move c-s to c-f
1165 ; some testing to figure out the underlining when paren highlight conflicts
1166 ; (let ((extra-overlays (overlays-at (1+ end-point))))
1167 ; (when extra-overlays (print extra-overlays)))
1172 ; commented out because it messes up yank-pop.
1173 ; todo, fix it someday
1174 ; make yank linewise if it ends in a newline
1175 ;(defadvice yank (before linewise-yank-advice activate)
1176 ; (let ((arg (ad-get-arg 0)))
1177 ; (when (string-match "\n[ \t]*$" (current-kill (cond
1180 ;; (t (1- arg))) t))
1181 ;; (move-beginning-of-line nil))))
1185 ; todo, look into augmenting auto-complete with hippie expand.
1186 ; starter kit has some hippie expand settings to look into:
1187 ; (when (boundp 'hippie-expand-try-functions-list)
1188 ; (delete 'try-expand-line hippie-expand-try-functions-list)
1189 ; (delete 'try-expand-list hippie-expand-try-functions-list))
1192 ;; hippie expand is dabbrev expand on steroids
1193 ;(setq hippie-expand-try-functions-list '(try-expand-dabbrev
1194 ; try-expand-dabbrev-all-buffers
1195 ; try-expand-dabbrev-from-kill
1196 ; try-complete-file-name-partially
1197 ; try-complete-file-name
1198 ; try-expand-all-abbrevs
1201 ; try-complete-lisp-symbol-partially
1202 ; try-complete-lisp-symbol))
1203 ;; use hippie-expand instead of dabbrev
1204 ;(global-set-key (kbd "M-/") 'hippie-expand)
1207 ; commented because i haven't had time to check it out yet
1208 ;; shorter aliases for ack-and-a-half commands
1209 ;(defalias 'ack 'ack-and-a-half)
1210 ;(defalias 'ack-same 'ack-and-a-half-same)
1211 ;(defalias 'ack-find-file 'ack-and-a-half-find-file)
1212 ;(defalias 'ack-find-file-same 'ack-and-a-half-find-file-same)
1217 ; todo. take a look at fixing this
1218 ;delete-old-versions t ; fix description in http://www.emacswiki.org/emacs/ForceBackups
1223 ;; prelude uses paredit mode.
1224 ;; paredit has some useful stuff but also annoying stuff.
1225 ;; if I ever do a ton of lisp coding, I should look into it
1232 ; random notes and example code
1236 ;(map 'list #'list tabSwapKeys (reverse (getBinds tabSwapKeys)))
1238 ; example of getting keymap info
1239 ;(car (car (minor-mode-key-binding (kbd "C-/") t)))
1240 ;(cdr (car (minor-mode-key-binding (kbd "C-/") t)))
1241 ;(global-key-binding (kbd "C-M-i") t)
1242 ;(minor-mode-key-binding (kbd "<tab>") t)
1243 ;(local-key-binding (kbd "C-M-i") t)
1244 ;(current-minor-mode-maps)
1245 ;(cdr (assq 'undo-tree-mode minor-mode-map-alist))
1248 ; center on incremental search, instead of being at top or bottom of screen.
1249 ; i'm hoping that setting Isearch Allow Scroll is good enough to fix this annoyance
1250 ;from http://stackoverflow.com/questions/11052678/emacs-combine-iseach-forward-and-recenter-top-bottom
1252 ;example of constant definition of an overlay and propreries
1253 ;(defface mouse-flash-position '((t (:background "Yellow")))
1254 ; "*Face used to highlight mouse position temporarily."
1256 ;(defface mouse-flash-position '((t (:background "Yellow")))
1257 ; "*Face used to highlight mouse position temporarily."
1259 ;(defconst mouse-flash-posn-overlay
1260 ; ;; Create and immediately delete, to get "overlay in no buffer".
1261 ; (let ((ol (make-overlay (point-min) (point-max))))
1262 ; ;(delete-overlay ol)
1263 ; ;(overlay-put ol 'face 'mouse-flash-position)
1264 ; (overlay-put ol 'mouse-face 'mouse-flash-position)
1265 ; (overlay-put ol 'priority 1000000)
1267 ; "Overlay to highlight current mouse position.")
1270 ;tip, put the last interactive command as elisp on the kill ring:
1271 ;C-x <ESC> <ESC> C-a C-k C-g
1273 ; example of overlay testing
1274 ;(setq foo (make-overlay 2 3 nil t nil))
1275 ;(setq foo2 (make-overlay 3 4 nil t nil))
1276 ;(overlay-put foo 'face '(:background "red3" :foreground "black"))
1277 ;(overlay-put foo2 'face '(:background "red1" :foreground "black"))
1278 ;(overlay-put foo 'face 'visible-mark-face)
1279 ;(overlay-put foo 'face visible-mark-face2)
1287 disabled, as I haven't used it in a long time. I think it was good for learning some sql stuff.
1288 #+begin_src emacs-lisp :tangle no
1289 (require 'sqlup-mode)
1290 (add-hook 'sql-mode-hook 'sqlup-mode)
1291 (add-hook 'sql-interactive-mode-hook 'sqlup-mode)
1293 (setq sql-product 'postgres)
1298 #+begin_src emacs-lisp
1299 ; when manually evaluating lisp, go into debugger on error
1300 (setq eval-expression-debug-on-error t)
1301 ;reminder of useful var: debug-on-error
1310 good info http://www.emacswiki.org/emacs/GnusTutorial
1311 good info http://www.emacs.uniyar.ac.ru/doc/em24h/emacs183.htm
1313 searching / accessing old mailing list messages:
1314 http://wiki.list.org/display/DOC/How+do+I+make+the+archives+searchable
1315 3 options suggested. nabble is very good, and you can even reply directly from their web interface with your own email
1317 google with site:example.com/archive works
1318 However, it has the downside of relying on a 3rd party running unreleased software.
1319 mail-archive.com and gmane.org search do not work.
1321 Some lists mirror to a newsgroup via gmane, and then mirror the newsgroup via a google group, which has good search
1322 ability, and you can post via the newsgroup.
1324 Downsides of nabble/google. Doesn't integrate with normal email programs, and lock in. They store and show you what you
1325 have and haven't read, what messages you've sent, etc. migrating that data to a normal mail program is undocumented and
1328 mailmans normal public archives are a bit obfuscated, but there is also a "private" archive, available to subscribers,
1329 which is not obfuscated, and can be easily imported to your local email program.
1330 you have to sub and log in to the web interfact to access it, and then the url is unpublished, but follows a format,
1331 which is documented in a few places around the web like
1332 https://mail.python.org/pipermail/mailman-users/2005-September/046757.html
1334 https://lists.fedorahosted.org/mailman/private/hyperkitty-devel.mbox/hyperkitty-devel.mbox
1335 http://www.example.com/mailman/private/<listname>.mbox/<listname>.mbox
1336 if you copy the url after logging in, and pass it to this function, it will print the transformed url
1337 lurl() { local x="${1#*/options/}"; x="${x%%/*}.mbox"; echo "${1%/mailman/*}/mailman/private/$x/$x"; }
1339 Then you can download that url. Actually downloading the url is something firefox doesn't make the easiest out of the box.
1340 Here are some options:
1341 - paste in the url bar, the save the page
1342 as a file after it loads.
1343 - use downthemall extension or similar and paste the url in it.
1344 - put it in an html page as
1345 a link (or a small javascript program which will display input as a link), then right click and save as.
1346 wget won't work because you need to have (i assume) the authorization cookie mailman gives your browser
1348 people have written various tools to de-obfuscate the normal public archives and sometimes import them to a mail
1349 program. It seems they were not aware of the private archive. However, these tools are probably still useful to automate
1350 things. None of them has a lot of usage, so I decided it was not worth the risk of hitting bugs vs doing a few extra clicks.
1352 this was the most interesting one I found within a few minutes of googling.
1353 https://github.com/wcdolphin/mailman-downloader
1355 Once you have an mbox file, there are rather straightforward ways to get it into any mail program, but I will cover
1356 gnus, which I use and is a bit tricky.
1358 gnus has a native search (limited, too slow for body text searches), and external search engine integration.
1359 gnus manual recommends converting to maildir for searching local mail, but importing lots of maildir messages to gnus
1360 takes 10+ minutes, so scratch that option. it suggests 2 alternate options
1361 mairix. for mbox, it doesn't integrate 100% with gnus, it copies the search results to a mbox
1362 and tells gnus to make a group of that mbox and display it. This means the read state won't be persistent, but otherwise
1365 local imap server which will use the mbox and provide search.
1366 dovecot is modular, theres a dovecot-common which uses recommends to install i guess it's most used modules. Its
1367 description is completely not useful. Anyways, I'm not sure if there is any benefit to installing this over just the
1371 dovecot by default also makes a an inbox folder based on the normal local mail location /var/mail/<username>
1372 those locations are adjustable and well documented via the var mail_location in
1373 /etc/dovecot/conf.d/10-mail.conf
1374 I forward my local mail, didn't see immediately how to turn off the inbox, but it will always be empty, so I left as
1375 is. you could make the var be empty, which apparently has the same effect.
1377 Originally just linked the default location ~/.mail, but I changed to altering the config since ~/.mail since it seems
1378 other things like postfix use that location
1380 based on http://roland.entierement.nu/blog/2010/09/08/gnus-dovecot-offlineimap-search-a-howto.html
1381 other links that poped up contained outdated, innacurate information
1382 http://sachachua.com/blog/2008/05/geek-how-to-use-offlineimap-and-the-dovecot-mail-server-to-read-your-gmail-in-emacs-efficiently/
1383 http://www.emacswiki.org/emacs/JamesFerguson
1384 http://www.sanityinc.com/articles/read-mailing-lists-in-emacs-over-imap/
1386 Within emacs you can move messages between mbox and maildir etc, which is a nice flexibility.
1391 in gnus, do gnus-group-make-doc-group (G f in groups buffer) and point to the file
1393 info about groups created within gnus is stored in ~/.newsrc.eld
1394 also stored is a duplication of what email messages are read/unread,
1395 what newsgroups are subsribed to and read/unread,
1396 probably more stuff, everything that gnus saves.
1399 searching the body of the messages, i cut off after a few minutes.
1400 i can grep the file in just a couple seconds
1404 we can also get mbox from gmane
1405 http://notmuchmail.org/howto/#index7h2
1408 gnus can't search mboxes except with its builtin search which is extremely slow. mairix can do mbox files from the command
1409 line, but not from within gnus, but from mairix.el, which can then open the results in gnus
1411 mbox can be converted to maildir easily, but gnus loads lots of maildir messages extremely slow. it parses all the
1412 headers and generates a nov file for each.
1414 nnfolder-generate-active-file
1416 to reset things, when changing mail group. I duno all the proper way, but it works to delete
1417 ~/Mail ~/.newsrc.eld ~/.dribble (or something)
1420 ** mail sources vs select methods background
1421 I found this very confusing when first reading through the manual. "mail sources" is a term that does not simply mean
1422 sources of mail, it is much narrower for gnus. sources of mail can be either "mail sources" or select methods. Mail
1423 sources will move mail to ~/Mail (not sure what format), and split it into groups according to variables. You can use
1424 "mail sources" for maildir / imap, but those can also be read via select methods, which do not move the mail from their
1425 location, but use them in their native format. This is what I want to do, and I can simply ignore mail
1426 sources. Confusing terminology is that "fetching mail" "scanning mail", lots of things mail doesn't mean all mail, it
1427 means specifically from "mail sources". The words "articles" and "news" is used in connection with select methods, aka my actual mail.
1431 ** caching background
1434 there is also ~/News/cache, filled with a bunch of articles, like 300 megs. can't figure out why.
1435 Grepped for caching in the manual, found 2 main things.
1436 cache is for 2 purposes. to cache locally, and to keep articles from expiring, called persistence
1437 gnus-use-cache, which puts things if they are
1438 gnus-cache-enter-articles
1439 things go in cache when they are marked certain ways by default, ticked and dormant
1440 and read articles are moved out of the cache
1441 still no idea why i have a bunch in the cache, but I set a var so that my mail won't get cached
1442 I'm gonna delete the cache, and check on it later see what exactly is going in there
1443 And of course, I moved ~/News to my encrypted drive and symlinked it
1450 useful comint-shell mode commands. If not prefaced with *, it means it is not in the haskell custom repl
1451 *todo: setup haskell c-t toggle arrow keys
1455 c-m-left/right move to next/prev prompts
1456 *c-enter, multi-line input
1457 *s-delete, send input across windows. (i can implement this)
1459 *haskell-process-interrupt, c-cc terminate job (i can implement this maybe)
1461 nice bash/readline functions missing in comint:
1466 usefull comint commands:
1467 c-cl : list historic command in temp buffer
1468 C-c C-o comint-delete-output
1469 comint-restore-input, todo: put this on a randomish c-c key
1474 checkout haskell repl functions:
1475 c-cv haskell-check, hlint
1476 C-M-q prog-indent-sexp
1477 c-c. haskell-mode-format-imports
1478 C-c M-/ haskell-doc-check-active
1479 haskell-process-generate-tags
1480 haskell-process-cabal-build
1481 haskell-cabal-command.. or something
1482 haskell-process-restart
1483 C-h v haskell-process-log
1484 C-h v haskell-process-show-debug-tips
1486 various not immediately useful functions:
1487 haskell-process-add-dependency
1488 haskell-process-touch-buffer
1490 haskell-process-unignore
1491 haskell-process-reload-devel-main
1495 home: C-a haskell-interactive-mode-beginning
1496 c-return: C-j haskell-interactive-mode-newline-indent
1497 up/down: <C-down> haskell-interactive-mode-history-next
1499 todo haskell mode better binds for:
1500 'haskell-process-load-file
1501 'haskell-process-do-type
1502 'haskell-process-do-info
1503 'inferior-haskell-send-decl
1506 commands which don't work in haskell-interactive-mode(hi) vs inferior-haskell-mode(ih, default)
1507 functions not in hi:
1508 inferior-haskell-find-definition, use tags instead
1509 inferior-haskell-find-haddock, todo, test if this works
1512 switch-to-haskell -> 'haskell-interactive-switch
1513 haskell-process-load-file -> inferior-haskell-load-file
1514 haskell-process-do-type -> inferior-haskell-type
1515 switch-to-haskell -> haskell-interactive-switch
1516 inferior-haskell-load-file -> 'haskell-process-load-file
1519 haskell-mode installation from source, based on its readme
1520 in the git directory,
1523 #+begin_src emacs-lisp
1527 ;; remove default option to not link the file
1528 (setq haskell-compile-command "ghc -Wall -ferror-spans -fforce-recomp %s")
1529 (add-hook 'haskell-indentation-mode-hook
1531 (define-key haskell-indentation-mode-map [?\C-d] nil)
1532 (define-key haskell-indentation-mode-map
1533 (kbd "<deletechar>")
1534 'haskell-indentation-delete-char)))
1536 ;;copied from haskell-mode docs in order to use the new, better, nondefault
1538 (eval-after-load "haskell-mode"
1540 (define-key haskell-mode-map (kbd "C-x C-d") nil)
1541 (define-key haskell-mode-map (kbd "C-c C-z") 'haskell-interactive-switch)
1542 (define-key haskell-mode-map (kbd "C-c C-l") 'haskell-process-load-file)
1543 (define-key haskell-mode-map (kbd "C-c C-b") 'haskell-interactive-switch)
1544 (define-key haskell-mode-map (kbd "C-c C-t") 'haskell-process-do-type)
1545 (define-key haskell-mode-map (kbd "C-c C-i") 'haskell-process-do-info)
1546 (define-key haskell-mode-map (kbd "C-c M-.") nil)
1547 (define-key haskell-mode-map (kbd "C-c C-d") nil)))
1549 ;; ghc-mod install http://www.mew.org/~kazu/proj/ghc-mod/en/emacs.html
1550 ;; todo, try this out
1551 ;; (autoload 'ghc-init "ghc" nil t)
1552 ;;(add-hook 'haskell-mode-hook (lambda () (ghc-init) (flymake-mode)))
1556 (add-to-list 'load-path "~/.emacs.d/src/ghci-completion")
1557 ;; from the package readme for ghci-completion
1558 (require 'ghci-completion)
1559 (add-hook 'inferior-haskell-mode-hook 'turn-on-ghci-completion)
1562 ;; disable some rebinds. they are set to appropriate keys in the keybinds section
1563 (eval-after-load "haskell-mode"
1565 (define-key haskell-mode-map (kbd "C-a") 'nil)
1566 (define-key haskell-mode-map (kbd "C-j") 'nil)))
1568 (defun pretty-lambdas-haskell ()
1569 (font-lock-add-keywords
1570 nil `((,(concat "(?\\(" (regexp-quote "\\") "\\)")
1571 (0 (progn (compose-region (match-beginning 1) (match-end 1)
1572 ,(make-char 'greek-iso8859-7 107))
1574 ;; from haskell-mode manual
1575 (add-hook 'haskell-mode-hook 'turn-on-haskell-decl-scan)
1576 (when (window-system)
1577 (add-hook 'haskell-mode-hook 'pretty-lambdas-haskell))
1579 ;; added from haskell-mode website install instructions
1580 ;(load "/usr/share/emacs/site-lisp/haskell-mode/haskell-site-file")
1581 (add-hook 'haskell-mode-hook 'turn-on-haskell-doc-mode)
1582 ;;the three indentation modules are mutually exclusive - add at most one. Trying out the "most advanced"
1583 (add-hook 'haskell-mode-hook 'turn-on-haskell-indentation)
1584 ;;(add-hook 'haskell-mode-hook 'turn-on-haskell-indent)
1585 ;;(add-hook 'haskell-mode-hook 'turn-on-haskell-simple-indent)
1588 ;; todo, set this to some other key
1589 ;; (local-set-key (kbd "C-e") 'my-haskell-load-and-run)
1591 (defun my-haskell-load-and-run ()
1592 "Loads and runs the current Haskell file."
1594 (let ((start-buffer (current-buffer)))
1595 (inferior-haskell-load-and-run inferior-haskell-run-command)
1598 (pop-to-buffer start-buffer)))
1600 ;; show haskell function in mode line
1601 ;; todo, this broke after updating emacs
1602 ;;(eval-after-load "which-func"
1603 ;; '(add-to-list 'which-func-modes 'haskell-mode))
1607 (add-hook 'interactive-haskell-mode-hook 'ac-haskell-process-setup)
1608 (add-hook 'haskell-interactive-mode-hook 'ac-haskell-process-setup)
1609 (eval-after-load "auto-complete"
1610 '(add-to-list 'ac-modes 'haskell-interactive-mode))
1612 (add-hook 'haskell-mode-hook
1613 (lambda () (define-key haskell-mode-map (kbd "C-(")
1614 (lambda () (interactive)
1617 (run-with-timer .3 nil 'repeat-shell)))))
1618 (add-hook 'haskell-cabal-mode-hook
1619 (lambda () (define-key haskell-cabal-mode-map (kbd "C-(") 'haskell-compile)))
1623 (add-hook 'haskell-interactive-mode-hook
1625 (define-key haskell-interactive-mode-map "\r" nil)
1626 (define-key haskell-interactive-mode-map (kbd "<return>") 'haskell-interactive-mode-return)))
1627 (add-hook 'haskell-indentation-mode-hook (lambda () (define-key haskell-indentation-mode-map "\r" nil)))
1631 (add-hook 'haskell-interactive-mode-hook
1633 (define-key haskell-interactive-mode-map (kbd "<C-M-return>") 'haskell-interactive-mode-newline-indent)))
1638 | (lambda nil (define-key haskell-interactive-mode-map (kbd <C-M-return>) (quote haskell-interactive-mode-newline-indent))) | (lambda nil (define-key haskell-interactive-mode-map \n nil) (define-key haskell-interactive-mode-map (kbd <return>) (quote haskell-interactive-mode-return))) | ac-haskell-process-setup |
1641 #+begin_src emacs-lisp
1643 ;; easier to read, and more than the default 12
1644 (setq ido-separator nil)
1645 (setq ido-max-prospects 20)
1648 (ido-everywhere t) ;; file dialogs
1650 ;; do out of order matching when all else fails
1651 (setq ido-enable-flex-matching t
1652 ido-create-new-buffer 'always ;; create new buffer/file without asking
1653 ido-use-filename-at-point 'guess ;; use filename at point if it makes sense
1654 ido-save-directory-list-file "~/.emacs.d/.ido.last"
1655 ido-default-file-method 'selected-window) ;; make duplicate windows
1656 ;; todo, the next 2 functions seem to do roughly the same.
1657 ;; figure out which one is better. the first comes from emacs starter kit,
1658 ;; i forget about the second.
1660 "Update the imenu index and then use ido to select a symbol to navigate to.
1661 Symbols matching the text at point are put first in the completion list."
1663 (imenu--make-index-alist)
1664 (let ((name-and-pos '())
1666 (cl-flet ((addsymbols (symbol-list)
1667 (when (listp symbol-list)
1668 (dolist (symbol symbol-list)
1669 (let ((name nil) (position nil))
1671 ((and (listp symbol) (imenu--subalist-p symbol))
1672 (addsymbols symbol))
1675 (setq name (car symbol))
1676 (setq position (cdr symbol)))
1680 (setq position (get-text-property 1 'org-imenu-marker symbol))))
1682 (unless (or (null position) (null name))
1683 (add-to-list 'symbol-names name)
1684 (add-to-list 'name-and-pos (cons name position))))))))
1685 (addsymbols imenu--index-alist))
1686 ;; If there are matching symbols at point, put them at the beginning of `symbol-names'.
1687 (let ((symbol-at-point (thing-at-point 'symbol)))
1688 (when symbol-at-point
1689 (let* ((regexp (concat (regexp-quote symbol-at-point) "$"))
1690 (matching-symbols (delq nil (mapcar (lambda (symbol)
1691 (if (string-match regexp symbol) symbol))
1693 (when matching-symbols
1694 (sort matching-symbols (lambda (a b) (> (length a) (length b))))
1695 (mapc (lambda (symbol) (setq symbol-names (cons symbol (delete symbol symbol-names))))
1696 matching-symbols)))))
1697 (let* ((selected-symbol (ido-completing-read "Symbol? " symbol-names))
1698 (position (cdr (assoc selected-symbol name-and-pos))))
1699 (goto-char position))))
1701 (defun ido-goto-symbol (&optional symbol-list)
1702 "Refresh imenu and jump to a place in the buffer using Ido."
1704 (unless (featurep 'imenu)
1705 (require 'imenu nil t))
1708 (let ((ido-mode ido-mode)
1709 (ido-enable-flex-matching
1710 (if (boundp 'ido-enable-flex-matching)
1711 ido-enable-flex-matching t))
1712 name-and-pos symbol-names position)
1715 (setq ido-enable-flex-matching t))
1718 (setq imenu--index-alist nil)
1719 (ido-goto-symbol (imenu--make-index-alist))
1720 (setq selected-symbol
1721 (ido-completing-read "Symbol? " symbol-names))
1722 (string= (car imenu--rescan-item) selected-symbol)))
1723 (unless (and (boundp 'mark-active) mark-active)
1724 (push-mark nil t nil))
1725 (setq position (cdr (assoc selected-symbol name-and-pos)))
1727 ((overlayp position)
1728 (goto-char (overlay-start position)))
1730 (goto-char position)))))
1731 ((listp symbol-list)
1732 (dolist (symbol symbol-list)
1733 (let (name position)
1735 ((and (listp symbol) (imenu--subalist-p symbol))
1736 (ido-goto-symbol symbol))
1738 (setq name (car symbol))
1739 (setq position (cdr symbol)))
1743 (get-text-property 1 'org-imenu-marker symbol))))
1744 (unless (or (null position) (null name)
1745 (string= (car imenu--rescan-item) name))
1746 (add-to-list 'symbol-names (substring-no-properties name))
1747 (add-to-list 'name-and-pos (cons (substring-no-properties name) position))))))))
1752 #+begin_src emacs-lisp
1754 isearch-allow-scroll t
1755 search-ring-update t) ;; dont start an edit when going to previous search
1757 (defun isearch-yank-regexp (regexp)
1758 "Pull REGEXP into search regexp."
1759 (let ((isearch-regexp nil)) ;; Dynamic binding of global.
1760 (isearch-yank-string regexp))
1761 (isearch-search-and-update))
1763 (defun isearch-yank-symbol (&optional partialp backward)
1764 "Put symbol at current point into search string.
1766 If PARTIALP is non-nil, find all partial matches."
1769 (let (from to bound sym)
1771 ; this block taken directly from find-tag-default
1772 ; we couldn't use the function because we need the internal from and to values
1774 ;; Look at text around `point'.
1776 (skip-syntax-backward "w_") (setq from (point)))
1778 (skip-syntax-forward "w_") (setq to (point)))
1780 ;; Look between `line-beginning-position' and `point'.
1782 (and (setq bound (line-beginning-position))
1783 (skip-syntax-backward "^w_" bound)
1784 (> (setq to (point)) bound)
1785 (skip-syntax-backward "w_")
1786 (setq from (point))))
1787 ;; Look between `point' and `line-end-position'.
1789 (and (setq bound (line-end-position))
1790 (skip-syntax-forward "^w_" bound)
1791 (< (setq from (point)) bound)
1792 (skip-syntax-forward "w_")
1793 (setq to (point)))))
1794 (buffer-substring-no-properties from to)))
1796 (message "No symbol at point"))
1798 (goto-char (1+ from)))
1800 (goto-char (1- to))))
1803 (isearch-yank-string sym)
1804 (isearch-yank-regexp
1805 (concat "\\_<" (regexp-quote sym) "\\_>")))))
1807 (defun isearch-current-symbol (&optional partialp)
1808 "Incremental search forward with symbol under point.
1810 Prefixed with \\[universal-argument] will find all partial
1813 (let ((start (point)))
1814 (isearch-forward-regexp nil 1)
1815 (isearch-yank-symbol partialp)))
1818 (defun isearch-backward-current-symbol (&optional partialp)
1819 "Incremental search backward with symbol under point.
1821 Prefixed with \\[universal-argument] will find all partial
1824 (let ((start (point)))
1825 (isearch-backward-regexp nil 1)
1826 (isearch-yank-symbol partialp)))
1830 ; lets look through emacs starter kit before we throw this out.
1833 ; automatically wrap to the top of the buffer when isearch fails
1834 (defadvice isearch-search (after isearch-no-fail activate)
1835 (unless isearch-success
1836 (ad-disable-advice 'isearch-search 'after 'isearch-no-fail)
1837 (ad-activate 'isearch-search)
1838 (isearch-repeat (if isearch-forward 'forward))
1839 (ad-enable-advice 'isearch-search 'after 'isearch-no-fail)
1840 (ad-activate 'isearch-search)))
1842 ;; Activate occur easily inside isearch
1843 (define-key isearch-mode-map (kbd "C-o")
1844 (lambda () (interactive)
1845 (let ((case-fold-search isearch-case-fold-search))
1846 (occur (if isearch-regexp
1848 (regexp-quote isearch-string))))))
1853 * lisp / elisp mode setings
1854 #+begin_src emacs-lisp
1856 (add-hook 'emacs-lisp-mode-hook 'starter-kit-remove-elc-on-save)
1857 (defun starter-kit-remove-elc-on-save ()
1858 "If you're saving an elisp file, likely the .elc is no longer valid."
1859 (make-local-variable 'after-save-hook)
1860 (add-hook 'after-save-hook
1862 (if (file-exists-p (concat buffer-file-name "c"))
1863 (delete-file (concat buffer-file-name "c"))))))
1866 (defun emacs-lisp-mode-defaults ()
1867 ;; checkdoc has an annoying feature that wants a header and footer
1868 ;; in every elisp buffer as if they all were packages
1869 ;; todo, see if there is a way
1870 ;; to make checkdoc usable instead of just disabling it as I do here
1871 (if (boundp 'flycheck-checkers)
1872 (setq flycheck-checkers (remove 'emacs-lisp-checkdoc flycheck-checkers)))
1874 (add-hook 'emacs-lisp-mode-hook 'emacs-lisp-mode-defaults)
1876 (define-key lisp-mode-map (kbd "<M-up>") 'backward-up-list)
1877 (define-key lisp-mode-map (kbd "<M-down>") 'down-list)
1878 (define-key emacs-lisp-mode-map (kbd "<M-up>") 'backward-up-list)
1879 (define-key emacs-lisp-mode-map (kbd "<M-down>") 'down-list)
1880 (define-key emacs-lisp-mode-map (kbd "<M-escape>") 'find-function-at-point)
1882 ;; interactive modes don't need whitespace checks
1883 (defun interactive-lisp-coding-defaults ()
1884 (whitespace-mode -1))
1885 (setq prelude-interactive-lisp-coding-hook 'prelude-interactive-lisp-coding-defaults)
1888 ;; ielm is an interactive Emacs Lisp shell
1889 (defun ielm-mode-defaults ()
1890 (run-hooks 'prelude-interactive-lisp-coding-hook)
1891 (turn-on-eldoc-mode))
1892 (add-hook 'ielm-mode-hook 'ielm-mode-defaults)
1899 based on https://github.com/senny/emacs-eclim
1902 eclim: eclipse completion, searching, validation, etc inside emacs
1904 #+begin_src sh :tangle no
1906 git clone git://github.com/ervandew/eclim.git
1909 ant -Declipse.home=/a/opt/eclipse
1913 currently makes emacs hang a bunch. dunno why. just using eclipse instead
1914 #+begin_src emacs-lisp :tangle no
1919 (setq eclim-accepted-file-regexps
1922 (custom-set-variables
1923 '(eclim-eclipse-dirs '("/a/opt/eclipse"))
1924 '(eclim-executable "/a/opt/eclipse/eclim"))
1926 (setq help-at-pt-display-when-idle t)
1927 (setq help-at-pt-timer-delay 0.1)
1928 (help-at-pt-set-timer)
1930 ;; dunno if this line is needed
1932 (setq eclimd-default-workspace "/a/bin/eclipse-workspace")
1934 ;;add the emacs-eclim source
1935 (require 'ac-emacs-eclim-source)
1936 (add-hook 'java-mode-hook 'ac-emacs-eclim-java-setup)
1941 | ac-emacs-eclim-java-setup |
1944 #+begin_src emacs-lisp
1946 (add-to-list 'load-path "~/.emacs.d/src/mediawiki-el")
1947 (eval-after-load "mediawiki"
1949 (remove-hook 'outline-minor-mode-hook 'mediawiki-outline-magic-keys)
1950 (add-hook 'mediawiki-mode-hook
1951 (lambda () (define-key mediawiki-mode-map (kbd "C-(") 'mediawiki-save-reload)))
1953 ;; mediawiki mode has a bug that it will claim an edit conflict unless you reload after saving.
1954 ;; I also like to save with no edit summary for previewing on my local mw instance
1955 (defun mediawiki-save-reload ()
1957 (and (mediawiki-save "") (mediawiki-reload)))))
1959 * modes with little configuration needed
1960 #+begin_src emacs-lisp
1962 (require 'ws-butler)
1963 (ws-butler-global-mode)
1966 (require 'nginx-mode)
1967 ;;The mode should automatically activate for files called nginx.conf and files under /etc/nginx - if not, you can add something like this to your init file:
1968 ;;(add-to-list 'auto-mode-alist '("/etc/nginx/sites-available/.*" . nginx-mode))
1970 ;; todo, put this on a hook with prog mode
1971 ;;(highlight-indentation-mode 1)
1973 (add-hook 'auto-revert-tail-mode-hook
1977 "/var/log/cloudman/development/cm-service.log")
1978 (setq-local prev-auto-revert-max 0)
1979 ;; set buffer-local hook
1980 (add-hook 'after-revert-hook 'tail-colorize nil t))))
1981 (defun tail-colorize ()
1982 (ansi-color-apply-on-region prev-auto-revert-max (point-max))
1983 (setq-local prev-auto-revert-max (point-max)))
1988 (add-hook 'c-mode-common-hook
1989 (lambda () (ggtags-mode 1)
1990 (setq c-label-minimum-indentation 0)))
1992 ;; specific to my unusual keybind setup, you may want to
1993 ;; pick different keys
1994 (define-key ggtags-mode-map (kbd "C-M-o") 'ggtags-find-tag-dwim)
1995 (define-key ggtags-mode-map (kbd "C-M-m") 'ggtags-grep)
1997 (defun gtags-update-single(filename)
1998 "Update Gtags database for changes in a single file"
2000 (start-process "update-gtags" "update-gtags" "bash" "-c" (concat "cd " ggtags-project-root " ; gtags --single-update " filename )))
2002 (defun gtags-update-current-file()
2004 (let ((rel-filename (replace-regexp-in-string
2005 ggtags-project-root "."
2006 (buffer-file-name (current-buffer)))))
2007 (gtags-update-single rel-filename)))
2009 (defun gtags-update-hook()
2010 "Update GTAGS file incrementally upon saving a file"
2011 (when (and ggtags-mode ggtags-project-root)
2012 (gtags-update-current-file)))
2014 (add-hook 'after-save-hook 'gtags-update-hook)
2016 ;; i'd like to make some elisp which modifies a keymap to remove
2017 ;; all binds which don't match a predicate.
2018 ;; I tried setting a keymap to a new keymap,
2019 ;; but that didn't register as functional.
2020 ;; so I'd need to modify the list in place.
2025 ;; http://ergoemacs.org/emacs/emacs_CSS_colors.html
2026 ;; there's also rainbow mode, which seems to only work for specific colors? it didn't work at all for me in a css file.
2027 ;; todo, do config group on it, and try out one of those colors.
2028 (defun xah-syntax-color-hsl ()
2029 "Syntax color hex color spec such as 「hsl(0,90%,41%)」 in current buffer."
2031 (font-lock-add-keywords
2033 '(("hsl( *\\([0-9]\\{1,3\\}\\) *, *\\([0-9]\\{1,3\\}\\)% *, *\\([0-9]\\{1,3\\}\\)% *)"
2034 (0 (put-text-property
2035 (+ (match-beginning 0) 3)
2037 'face (list :background
2038 (concat "#" (mapconcat 'identity
2040 (lambda (x) (format "%02x" (round (* x 255))))
2042 (/ (string-to-number (match-string-no-properties 1)) 360.0)
2043 (/ (string-to-number (match-string-no-properties 2)) 100.0)
2044 (/ (string-to-number (match-string-no-properties 3)) 100.0)
2048 (font-lock-fontify-buffer)
2051 (add-hook 'css-mode-hook 'xah-syntax-color-hsl)
2052 (add-hook 'php-mode-hook 'xah-syntax-color-hsl)
2053 (add-hook 'html-mode-hook 'xah-syntax-color-hsl)
2056 ;; message mode prompted me on first message.
2057 ;; a function which describes options then sets this
2058 ;; the other options were to use smtp directly or pass to another mail client
2059 ;; here we use the standard sendmail interface, which I use postfix for
2060 (setq send-mail-function (quote sendmail-send-it))
2062 (add-to-list 'load-path "~/.emacs.d/src/spray")
2064 (global-set-key (kbd "C-M-w") 'spray-mode)
2065 ;; remember, h/l = move. f/s = faster/slower, space = pause, all others quit
2067 ;; delete active selection with self-insert commands
2068 (delete-selection-mode t)
2070 ;; Transparently open compressed files
2071 (auto-compression-mode t)
2073 ;; Highlight matching parenthesesq when the pointq is on them.
2074 ;; not needed since smart paren mode?
2075 ;; (show-paren-mode 1)
2078 ;; not documented, but looking at the source, I find this
2079 ;; stops me from being asked what command on every C-c-c
2080 ;; when doing a latex document.
2081 (setq TeX-command-force "LaTeX")
2083 ;; dot mode, repeats last action
2085 (add-hook 'find-file-hooks 'dot-mode-on)
2088 ;; clean up obsolete buffers automatically at midnight
2092 ;; disabled because it takes 400ms on startup
2093 ;; ;; emacs regexes are too limited.
2094 ;; (require 'foreign-regexp)
2095 ;; ;; perl is most powerful, but javascript is pretty close and
2096 ;; ;; I'd rather know javascript stuff than perl
2097 ;; (custom-set-variables
2098 ;; '(foreign-regexp/regexp-type 'javascript) ;; Choose by your preference.
2099 ;; '(reb-re-syntax 'foreign-regexp)) ;; Tell re-builder to use foreign regexp.
2100 ;; ;; it would be nice to add documentation to do this for more commands to that package
2101 ;; ;; disabled because it's too slow. but I'd still m-x it for advanced replacements
2102 ;; ;;(define-key global-map [remap isearch-forward-regexp] 'foreign-regexp/isearch-forward)
2105 ;; saner regex syntax
2106 (require 're-builder)
2107 (setq reb-re-syntax 'string)
2110 ;; use shift + arrow keys to switch between visible buffers
2111 ;; todo, set these keys to something else
2113 (windmove-default-keybindings)
2116 ;; show the name of the current function definition in the modeline
2117 (require 'which-func)
2118 (setq which-func-modes t)
2119 (which-function-mode 1)
2122 ;; enable winner-mode to manage window configurations
2125 ;; meaningful names for buffers with the same name
2127 (setq uniquify-buffer-name-style 'forward
2128 uniquify-separator "/"
2129 ;; for sdx work. until I figure out a better way.
2130 ;; maybe something like projectile can do it,
2131 ;; or hacking around the status bar
2132 uniquify-min-dir-content 2
2133 uniquify-after-kill-buffer-p t ; rename after killing uniquified
2134 uniquify-ignore-buffers-re "^\\*") ; don't muck with special buffers
2137 ;; makefiles require tabs
2138 ;; todo: find a makefile indent function that works,
2139 ;; best I could find is this one which means don't indent at all
2141 (add-hook 'makefile-mode-hook
2143 (setq indent-tabs-mode t)
2144 (setq indent-line-function (lambda () 'no-indent))))
2147 ;; todo, turn on auto-fill just for txt files
2148 ;;(add-hook 'text-mode-hook 'turn-on-auto-fill)
2149 (add-hook 'text-mode-hook 'turn-on-flyspell)
2152 ;; auto indent shell script comments
2153 (setq sh-indent-comment t)
2155 ;; random extra highlights
2156 (require 'volatile-highlights)
2157 (volatile-highlights-mode t)
2160 ;; make help buffers smaller when it makes sense
2161 (temp-buffer-resize-mode 1)
2165 ;; based on suggestions in info+.el, I also installed misc-fns, strings, and thingatpt+
2166 ;; remove some bad keybinds from info+
2167 (define-key Info-mode-map [mouse-4] nil)
2168 (define-key Info-mode-map [mouse-5] nil)
2171 (require 'smooth-scroll)
2172 ;; long gnus summary buffers lags too much with this,
2173 ;; but I like it enough to leave it enabled by default
2174 ;; and crank up the step size to be faster
2175 ;; and it doesn't have a way to enable it only for certain modes etc.
2176 ;; todo sometime, make it work for certain modes only
2177 (smooth-scroll-mode t)
2178 ;; its too slow with the default of 2
2179 (setq smooth-scroll/vscroll-step-size 7)
2180 ;; sublimity doesn't work as good going fast by default
2181 ;; smooth-scrolling.el, does not do smooth scrolling. its about cursor location
2184 (setq sh-here-document-word "'EOF'")
2186 (setq tramp-default-method "ssh")
2188 * misc general settings
2190 #+begin_src emacs-lisp
2192 (setq vc-follow-symlinks t)
2194 ;; give us a shell to start instead of scratch
2195 ;;(setq initial-buffer-choice (lambda () (new-shell)))
2197 ;; disable this nasty function, as I always use a gui
2198 (defun suspend-frame() (interactive))
2200 ;; to reopen just ido-switch-buffer (c-l), *scratch*
2201 ;; (kill-buffer "*scratch*")
2203 ;; Seed the random-number generator
2206 ;; easier to remember than keybinds
2207 (defalias 'scrypt 'mml-secure-message-encrypt-pgpmime)
2208 (defalias 'sign 'mml-secure-message-sign-pgpmime)
2211 (mml-secure-message-encrypt-pgpmime 'dontsign))
2213 ;; don't highlight the region.
2214 (set-face-background 'region nil)
2216 ;; this fixes save error for python example code
2217 (define-coding-system-alias 'UTF-8 'utf-8)
2219 ;; i don't use frame titles, but if I ever do
2220 ;; this starter kit setting is probably good
2221 (if window-system (setq frame-title-format '(buffer-file-name "%f" ("%b"))))
2223 (set-terminal-coding-system 'utf-8)
2224 (set-keyboard-coding-system 'utf-8)
2225 (prefer-coding-system 'utf-8)
2227 ;; remove ugly 3d box feature
2228 (set-face-attribute 'mode-line nil :box nil)
2230 (add-to-list 'default-frame-alist
2231 '(font . "DejaVu Sans Mono-11"))
2232 ; the default will jump 2 sizes.
2233 (setq text-scale-mode-step 1.1)
2234 (setq font-lock-maximum-decoration t
2235 inhibit-startup-message t
2236 transient-mark-mode t
2237 delete-by-moving-to-trash t
2238 shift-select-mode nil
2239 truncate-partial-width-windows nil
2240 uniquify-buffer-name-style 'forward
2241 oddmuse-directory "~/.emacs.d/oddmuse"
2244 sort-fold-case t ; case insensitive line sorting
2245 global-mark-ring-max 1000
2246 ;; the bell seems to lag the ui
2249 revert-without-query '(".*")
2250 ;; don't pause display code on input.
2251 ;; smoother display performance at slight cost of input performance
2252 redisplay-dont-pause t
2253 font-lock-maximum-decoration t) ; probably default and not necesary
2256 (setq-default indent-tabs-mode nil ;; don't use tabs to indent
2260 ;; wrap at word boundaries instead of mid-word
2263 indicate-empty-lines t) ; mark end of buffer
2266 (blink-cursor-mode '(-4))
2269 (set-scroll-bar-mode 'left)
2272 ;; enable various commands
2273 (put 'narrow-to-region 'disabled nil)
2274 (put 'narrow-to-page 'disabled nil)
2275 (put 'narrow-to-defun 'disabled nil)
2276 (put 'upcase-region 'disabled nil)
2277 (put 'downcase-region 'disabled nil)
2278 (put 'scroll-left 'disabled nil)
2279 ;; these from graphene, haven't read about them yet
2280 (put 'ido-complete 'disabled nil)
2281 (put 'ido-exit-minibuffer 'disabled nil)
2282 (put 'dired-find-alternate-file 'disabled nil)
2283 (put 'autopair-newline 'disabled nil)
2287 ;;disable and minimize various prompts/messages
2288 (fset 'yes-or-no-p 'y-or-n-p)
2289 (setq confirm-nonexistent-file-or-buffer nil
2290 inhibit-startup-message t
2291 inhibit-startup-echo-area-message t
2292 inhibit-startup-screen t
2293 compilation-read-command nil ;; just don't compile with unsafe file local vars
2294 kill-buffer-query-functions (remq 'process-kill-buffer-query-function
2295 kill-buffer-query-functions))
2298 ;; exit without bothering me
2299 ;; http://stackoverflow.com/questions/2706527/make-emacs-stop-asking-active-processes-exist-kill-them-and-exit-anyway/2708042#2708042
2300 (add-hook 'comint-exec-hook
2301 (lambda () (set-process-query-on-exit-flag (get-buffer-process (current-buffer)) nil)))
2302 ;; based on save-buffers-kill-emacs help string, don't ask about clients when exiting
2303 ;; apparently this would need to be in some later hook. dunno where is best, but this works
2304 (defadvice save-buffers-kill-emacs (before no-client-prompt-advice activate)
2305 (setq kill-emacs-query-functions (delq 'server-kill-emacs-query-function kill-emacs-query-functions)))
2309 ;; (custom-set-faces
2310 ;; ;; setting header-line-format to " " as a hack for a top margin the oly thning I could find to do a top margin
2311 ;; '(header-line ((t (:background "default" :foreground "default" :overline nil :underline nil))))
2312 ;; ;; don't highlight the region
2313 ;; '(region ((t nil))))
2314 (setq-default header-line-format " ")
2317 (setq initial-scratch-message nil)
2321 vertical margin background.
2322 google turned up: http://lists.gnu.org/archive/html/help-gnu-emacs/2014-03/msg00544.html
2323 the xresource doesn't work for me, probably an xmonad thing.
2325 figured out I needed to customize the header line face. To find the face, M-x list-faces-display or just google / search
2327 then M-x customize-face
2329 unchecked some stuff so that it inherits from default.
2331 * misc function definitions
2332 #+begin_src emacs-lisp
2335 (defun next-backup-dir ()
2336 "In a directory listing from rsync -n,
2337 Go to the next directory based on where the cursor is."
2339 (let* ((start-col (current-column))
2340 (end-col (progn (skip-chars-forward "^/\n") (current-column)))
2342 (beginning-of-line 1)
2343 (buffer-substring-no-properties (point) (+ (point) end-col)))))
2346 (while (and (not (eobp))
2347 (string= dir (buffer-substring-no-properties (point) (+ (point) end-col))))
2349 (forward-char-same-line start-col)))
2350 ;; copy paste this for fast keybind
2351 ;;(local-set-key (kbd "<kp-enter>"))
2354 (defun goto-buffer-or-find-file (file-name)
2355 "If buffer is with FILE-NAME exists, go to it, else open the file using full path."
2357 (let ((b (get-buffer (file-name-nondirectory file-name))))
2359 (switch-to-buffer b)
2360 (find-file file-name))))
2365 ;; todo, i think this is broken. perhaps the last goto-char is not accounting for buffer or something
2366 (defun unpop-global-mark ()
2367 "Unpop off global mark ring. Does nothing if mark ring is empty."
2369 (when global-mark-ring
2370 (setq global-mark-ring (cons (copy-marker (mark-marker)) global-mark-ring))
2371 (let ((lm (car (last global-mark-ring))))
2372 (set-marker (mark-marker) (marker-position lm) (marker-buffer lm)))
2373 (when (null (mark t)) (ding))
2374 (setq global-mark-ring (nbutlast global-mark-ring))
2375 (goto-char (marker-position (mark-marker)))))
2377 (defun indent-buffer ()
2378 "Indents the entire buffer."
2380 (cond ((derived-mode-p 'org-mode)
2381 (org-indent-region (point-min) (point-max)))
2382 ((derived-mode-p 'python-mode)
2385 (indent-region (point-min) (point-max)))))
2388 ;; TODO doesn't work with uniquify
2389 (defun rename-file-and-buffer ()
2390 "Renames current buffer and file it is visiting."
2392 (let ((name (buffer-name))
2393 (filename (buffer-file-name)))
2394 (if (not (and filename (file-exists-p filename)))
2395 (message "Buffer '%s' is not visiting a file!" name)
2396 (let ((new-name (read-file-name "New name: " filename)))
2397 (cond ((get-buffer new-name)
2398 (message "A buffer named '%s' already exists!" new-name))
2400 (rename-file name new-name 1)
2401 (rename-buffer new-name)
2402 (set-visited-file-name new-name)
2403 (set-buffer-modified-p nil)))))))
2407 (defun sudo-edit (&optional arg)
2409 (if (or arg (not buffer-file-name))
2410 (find-file (concat "/sudo:root@localhost:" (ido-read-file-name "File: ")))
2411 (find-alternate-file (concat "/sudo:root@localhost:" buffer-file-name))))
2415 (defun backward-symbol (arg)
2417 (forward-symbol (- arg)))
2422 #+begin_src emacs-lisp
2424 ; -----------------------------
2425 ; fixing up the mode line
2426 ; modified from mastering emacs blog
2427 ; ----------------------------
2429 (defvar mode-line-cleaner-alist
2430 `((auto-complete-mode . "")
2431 (yas/minor-mode . "")
2433 (auto-fill-function . "")
2436 (flyspell-mode . "")
2439 (yas-global-mode . "")
2440 (yas-minor-mode . "")
2441 (undo-tree-mode . "")
2442 (volatile-highlights-mode . "")
2443 (highlight-symbol-mode . "")
2445 (lisp-interaction-mode . "λ")
2447 (python-mode . "Py")
2448 (emacs-lisp-mode . "EL")
2449 (nxhtml-mode . "nx"))
2450 "Alist for `clean-mode-line'.
2452 When you add a new element to the alist, keep in mind that you
2453 must pass the correct minor/major mode symbol and a string you
2454 want to use in the modeline *in lieu of* the original.")
2457 (defun clean-mode-line ()
2459 (loop for cleaner in mode-line-cleaner-alist
2460 do (let* ((mode (car cleaner))
2461 (mode-str (cdr cleaner))
2462 (old-mode-str (cdr (assq mode minor-mode-alist))))
2464 (setcar old-mode-str mode-str))
2466 (when (eq mode major-mode)
2467 (setq mode-name mode-str)))))
2470 ; (add-hook 'after-change-major-mode-hook 'clean-mode-line)
2473 ;;; alias the new `flymake-report-status-slim' to
2474 ;;; `flymake-report-status'
2475 (defalias 'flymake-report-status 'flymake-report-status-slim)
2476 (defun flymake-report-status-slim (e-w &optional status)
2477 "Show \"slim\" flymake status in mode line."
2479 (setq flymake-mode-line-e-w e-w))
2481 (setq flymake-mode-line-status status))
2482 (let* ((mode-line " Φ"))
2483 (when (> (length flymake-mode-line-e-w) 0)
2484 (setq mode-line (concat mode-line ":" flymake-mode-line-e-w)))
2485 (setq mode-line (concat mode-line flymake-mode-line-status))
2486 (setq flymake-mode-line mode-line)
2487 (force-mode-line-update)))
2490 (add-hook 'after-change-major-mode-hook (lambda ()
2492 (setq mode-line-mule-info nil
2493 mode-line-position nil
2494 mode-line-modes nil))) ; todo, make only flymake status show up
2500 #+begin_src emacs-lisp
2501 (setq focus-follows-mouse t
2502 mouse-autoselect-window t
2505 ** move-mouse-to-point
2506 todo, this is buggy with multiple windows open.
2507 #+begin_src emacs-lisp
2508 (defun move-mouse-to-point ()
2510 (let* ((pos (posn-col-row (posn-at-point)))
2511 (x (+ (car pos) 2)) ; no idea why this is off by 1-2
2513 (set-mouse-position (selected-frame) x y)))
2516 disabled until fixed
2517 #+begin_src emacs-lisp :tangle no
2518 (defun mouse-follow-cursor ()
2519 ;(if (not (equal this-command last-command)) (print this-command))
2521 ; (print this-command)
2522 (when (and this-command (not (string= this-command "show-pointer")))
2523 (let* ((pos (posn-col-row (posn-at-point)))
2524 (x (1+ (car pos))) ; no idea why this is off by 1
2526 (setq ignore-mouse-visibility t)
2527 (set-mouse-position (selected-frame) x y))
2529 (frame-make-pointer-invisible)))
2531 ; (when this-command
2532 ; (if (string= this-command "show-pointer")
2533 ; (frame-make-pointer-visible)
2538 (defun show-pointer ()
2540 (if ignore-mouse-visibility
2541 (setq ignore-mouse-visibility nil)
2543 (frame-make-pointer-visible)))
2545 (setq ignore-mouse-visibility t)
2547 ; (global-set-key (kbd "<mouse-movement>") 'show-pointer)
2549 ; (add-hook 'post-command-hook 'mouse-follow-cursor t)
2552 ; status. working, except that all scroll wheel actions send a mouse-movement command before doing their actual command, which makes the pointer flicker.
2553 ; this is just an artifact of xbindkeys. when i do my own mouse chip, it will fix this.
2555 ; we could set track-mouse to nil, then do the command, then set it back. i like that idea a bit better.
2556 ; we could do the same thing in the other case of ignore-mouse-visibility.
2558 ; there are also other issues, it doesn't work with changing buffers on a split screen.
2559 ; i think a good idea along with this would be for the cursor to follow the mouse all the time.
2560 ; i have done code for that in my mouse 1 function,
2561 ; i just need to read it again and try it out.
2566 ; this does not take care of scrolling,
2567 ; a post-command hook function below does,
2568 ; but it breaks when the frame is split.
2569 ; the bug is specifically in mouse-pixel-position
2570 ; todo, fix this eventually
2571 (defun mouse-highlight-event (event)
2573 (when (or (not event) (mouse-movement-p event)
2574 (memq (car-safe event) '(switch-frame select-window)))
2575 (let ((pos (posn-point (event-end event))))
2576 (if (eq (overlay-buffer mouse-hi-ov) (current-buffer))
2577 (move-overlay mouse-hi-ov pos (1+ pos))
2578 (delete-overlay mouse-hi-ov)
2580 (make-overlay pos (1+ pos)))
2581 (overlay-put mouse-hi-ov
2582 'insert-in-front-hooks (list 'mouse-hi-modification))
2583 (overlay-put mouse-hi-ov 'priority 1001))
2584 (cond ((save-excursion (goto-char pos) (eolp))
2585 (overlay-put mouse-hi-ov 'face nil)
2586 (overlay-put mouse-hi-ov 'before-string
2590 'face 'mouse-cursor-face)))
2592 (overlay-put mouse-hi-ov 'face 'mouse-cursor-face)
2593 (overlay-put mouse-hi-ov 'before-string nil))))))
2596 ; overlay changed hook function
2597 (defun mouse-hi-modification (ov timing beginning end &optional length)
2598 "Make an overlay of length 1 not expand when text is inserted at the front."
2600 (let ((start (overlay-start ov)))
2601 (move-overlay ov start (1+ start)))))
2606 (defun mouse-hi-command-hook ()
2607 ; not sure if I need to deal with case of a nil mouse position in some unforseen situation.
2608 (let ((x-y (cdr (mouse-pixel-position))))
2609 (when (wholenump (car x-y))
2610 (let ((pos (posn-point (posn-at-x-y (car x-y) (cdr x-y) nil t))))
2612 (if (eq (overlay-buffer mouse-hi-ov) (current-buffer))
2613 (move-overlay mouse-hi-ov pos (1+ pos))
2614 (delete-overlay mouse-hi-ov)
2616 (make-overlay pos (1+ pos)))
2618 (overlay-put mouse-hi-ov 'priority 1001))
2619 (cond ((save-excursion (goto-char pos) (eolp))
2621 (overlay-put mouse-hi-ov 'face nil)
2622 (overlay-put mouse-hi-ov 'before-string
2626 'face 'mouse-cursor-face)))
2628 (overlay-put mouse-hi-ov 'face 'mouse-cursor-face)
2629 (overlay-put mouse-hi-ov 'before-string nil))))))))
2630 ; (pcase-let ((`(,_ ,x . ,y) (mouse-pixel-position)))
2631 ; (posn-point (posn-at-x-y x y)))))
2632 ; equivalent of above to find pos. todo, learn about the above syntax
2634 (setq mouse-hi-ov (make-overlay 1 1))
2635 (delete-overlay mouse-hi-ov)
2636 ; initialized overlay
2637 ; temporarily set to nil instead of t because it is broken and
2638 ; also has a bug that makes emacs not remember the column when
2639 ; doing up and down movements.
2640 ; it also messes up yas/insert-snippet, dunno why.
2641 ; i should test out whether it is something in the post-command hook
2642 ; (setq track-mouse t)
2643 ;(add-hook 'post-command-hook 'mouse-hi-command-hook)
2645 ;(mouse-hi-command-hook)
2646 ;(setq debug-on-error nil)
2649 ** mouse 1 drag func
2652 disabled as it breaks in newer emacs versions with this error, when
2653 clicking on info links
2655 "and: Symbol's function definition is void: mouse--remap-link-click-p"
2657 #+begin_src emacs-lisp :tangle no
2659 ; Copied from mouse.el and modified.
2660 ; my modifications have comments prefaced by "ian"
2661 (defun mouse-drag-track (start-event &optional
2662 do-mouse-drag-region-post-process)
2663 "Track mouse drags by highlighting area between point and cursor.
2664 The region will be defined with mark and point.
2665 DO-MOUSE-DRAG-REGION-POST-PROCESS should only be used by
2666 `mouse-drag-region'."
2667 (mouse-minibuffer-check start-event)
2668 (setq mouse-selection-click-count-buffer (current-buffer))
2669 ; ian. removed as unneeded since I don't use TMM
2671 (let* ((scroll-margin 0) ; Avoid margin scrolling (Bug#9541).
2672 (original-window (selected-window))
2673 ;; We've recorded what we needed from the current buffer and
2674 ;; window, now let's jump to the place of the event, where things
2676 (_ (mouse-set-point start-event))
2678 (start-posn (event-start start-event))
2679 (start-point (posn-point start-posn))
2680 (start-window (posn-window start-posn))
2681 (start-window-start (window-start start-window))
2682 (start-hscroll (window-hscroll start-window))
2683 (bounds (window-edges start-window))
2684 (make-cursor-line-fully-visible nil)
2685 (top (nth 1 bounds))
2686 (bottom (if (window-minibuffer-p start-window)
2688 ;; Don't count the mode line.
2689 (1- (nth 3 bounds))))
2690 (on-link (and mouse-1-click-follows-link
2691 ;; Use start-point before the intangibility
2692 ;; treatment, in case we click on a link inside
2694 (mouse-on-link-p start-posn)))
2695 (click-count (1- (event-click-count start-event)))
2696 (remap-double-click (and on-link
2697 (eq mouse-1-click-follows-link 'double)
2699 ;; Suppress automatic hscrolling, because that is a nuisance
2700 ;; when setting point near the right fringe (but see below).
2701 (auto-hscroll-mode-saved auto-hscroll-mode)
2702 (auto-hscroll-mode nil)
2703 moved-off-start event end end-point)
2705 (setq mouse-selection-click-count click-count)
2706 ;; In case the down click is in the middle of some intangible text,
2707 ;; use the end of that text, and put it in START-POINT.
2708 (if (< (point) start-point)
2709 (goto-char start-point))
2710 (setq start-point (point))
2711 (if remap-double-click
2712 (setq click-count 0))
2714 ;; Activate the region, using `mouse-start-end' to determine where
2715 ;; to put point and mark (e.g., double-click will select a word).
2716 (setq transient-mark-mode
2717 (if (eq transient-mark-mode 'lambda)
2719 (cons 'only transient-mark-mode)))
2720 (delete-overlay mouse-hi-ov) ; ian, added this.
2722 (let ((range (mouse-start-end start-point start-point click-count)))
2723 (push-mark (nth 0 range) t t)
2724 (goto-char (nth 1 range)))
2726 ;; Track the mouse until we get a non-movement event.
2729 (setq event (read-event))
2730 (or (mouse-movement-p event)
2731 (memq (car-safe event) '(switch-frame select-window))))
2732 (unless (memq (car-safe event) '(switch-frame select-window))
2733 ;; Automatic hscrolling did not occur during the call to
2734 ;; `read-event'; but if the user subsequently drags the
2735 ;; mouse, go ahead and hscroll.
2736 (let ((auto-hscroll-mode auto-hscroll-mode-saved))
2738 (setq end (event-end event)
2739 end-point (posn-point end))
2740 ;; Note whether the mouse has left the starting position.
2741 (unless (eq end-point start-point)
2742 (setq moved-off-start t))
2743 (if (and (eq (posn-window end) start-window)
2744 (integer-or-marker-p end-point))
2745 (mouse--drag-set-mark-and-point start-point
2746 end-point click-count)
2747 (let ((mouse-row (cdr (cdr (mouse-position)))))
2751 (mouse-scroll-subr start-window (- mouse-row top)
2753 ((>= mouse-row bottom)
2754 (mouse-scroll-subr start-window (1+ (- mouse-row bottom))
2755 nil start-point))))))
2756 (visible-mark-move-overlays))) ; ian, added this
2759 ;; Handle the terminating event if possible.
2761 ;; Ensure that point is on the end of the last event.
2762 (when (and (setq end-point (posn-point (event-end event)))
2763 (eq (posn-window end) start-window)
2764 (integer-or-marker-p end-point)
2765 (/= start-point end-point))
2766 (mouse--drag-set-mark-and-point start-point
2767 end-point click-count))
2769 ;; Find its binding.
2770 (let* ((fun (key-binding (vector (car event))))
2771 (do-multi-click (and (> (event-click-count event) 0)
2773 (not (memq fun '(mouse-set-point
2774 mouse-set-region))))))
2775 (if (and (/= (mark) (point))
2776 (not do-multi-click))
2778 ;; If point has moved, finish the drag.
2779 (let* (last-command this-command)
2780 (and mouse-drag-copy-region
2781 do-mouse-drag-region-post-process
2782 (let (deactivate-mark)
2783 (copy-region-as-kill (mark) (point)))))
2785 ;; Otherwise, run binding of terminating up-event.
2787 (goto-char start-point)
2789 (unless moved-off-start
2790 ;; ian: poping the mark is a poor choice of behavior.
2791 ;; we should delete the mark instead.
2792 ;; The first way I found to delete it is to pop it first
2794 (setq mark-ring (nbutlast mark-ring))))
2796 (when (and (functionp fun)
2797 (= start-hscroll (window-hscroll start-window))
2798 ;; Don't run the up-event handler if the window
2799 ;; start changed in a redisplay after the
2800 ;; mouse-set-point for the down-mouse event at
2801 ;; the beginning of this function. When the
2802 ;; window start has changed, the up-mouse event
2803 ;; contains a different position due to the new
2804 ;; window contents, and point is set again.
2806 (= (window-start start-window)
2807 start-window-start)))
2810 (= start-point (point))
2811 (mouse--remap-link-click-p start-event event))
2813 ;; If we rebind to mouse-2, reselect previous selected
2814 ;; window, so that the mouse-2 event runs in the same
2815 ;; situation as if user had clicked it directly. Fixes
2816 ;; the bug reported by juri@jurta.org on 2005-12-27.
2817 (if (or (vectorp on-link) (stringp on-link))
2818 (setq event (aref on-link 0))
2819 (select-window original-window)
2820 (setcar event 'mouse-2)
2821 ;; If this mouse click has never been done by the
2822 ;; user, it doesn't have the necessary property to be
2823 ;; interpreted correctly.
2824 (put 'mouse-2 'event-kind 'mouse-click)))
2825 (push event unread-command-events)))))))
2829 #+begin_src emacs-lisp :tangle no
2832 (defun mouse3-range-mark (start click click-count)
2833 (let* ((range (mouse-start-end start click click-count))
2835 (end (nth 1 range)))
2836 (cond ((<= click start)
2840 (visible-mark-move-overlays))
2843 (defun mouse3-set-mark (event)
2846 (mouse-minibuffer-check event)
2847 ;; Use event-end in case called from mouse-drag-region.
2848 ;; If EVENT is a click, event-end and event-start give same value.
2849 (set-mark (posn-point (event-end event)))
2850 (visible-mark-move-overlays))
2853 (defun mouse3-func (start-event)
2857 (run-hooks 'mouse-leave-buffer-hook)
2859 (mouse-minibuffer-check start-event)
2860 (setq mouse-selection-click-count-buffer (current-buffer))
2861 (push-mark (posn-point (event-end start-event)))
2863 (let* ((scroll-margin 0) ; Avoid margin scrolling (Bug#9541).
2864 (original-window (selected-window))
2865 ;; We've recorded what we needed from the current buffer and
2866 ;; window, now let's jump to the place of the event, where things
2868 ;(_ (mouse-set-point start-event)) ; ian: commented, replaced
2870 (start-posn (event-start start-event))
2871 (start-point (posn-point start-posn))
2872 (start-window (posn-window start-posn))
2873 (start-window-start (window-start start-window))
2874 (start-hscroll (window-hscroll start-window))
2875 (bounds (window-edges start-window))
2876 (make-cursor-line-fully-visible nil)
2877 (top (nth 1 bounds))
2878 (bottom (if (window-minibuffer-p start-window)
2880 ;; Don't count the mode line.
2881 (1- (nth 3 bounds))))
2882 (click-count (1- (event-click-count start-event)))
2883 ;; Suppress automatic hscrolling, because that is a nuisance
2884 ;; when setting point near the right fringe (but see below).
2885 (auto-hscroll-mode-saved auto-hscroll-mode)
2886 (auto-hscroll-mode nil)
2887 moved-off-start event end end-point)
2889 (setq mouse-selection-click-count click-count)
2890 ;; In case the down click is in the middle of some intangible text,
2891 ;; use the end of that text, and put it in START-POINT.
2892 (if (< (mark) start-point) ; ian: change point to the mark
2893 (set-mark start-point)
2894 (visible-mark-move-overlays))
2895 (setq start-point (mark))
2897 (delete-overlay mouse-hi-ov) ; ian, added this.
2899 ;; Activate the region, using `mouse-start-end' to determine where
2900 ;; to put point and mark (e.g., double-click will select a word).
2901 (let ((range (mouse-start-end start-point start-point click-count)))
2902 (set-mark (nth 1 range)))
2903 (visible-mark-move-overlays)
2906 ;; Track the mouse until we get a non-movement event.
2910 (setq event (read-event))
2911 (or (mouse-movement-p event)
2912 (memq (car-safe event) '(switch-frame select-window))))
2913 (unless (memq (car-safe event) '(switch-frame select-window))
2915 ;; Automatic hscrolling did not occur during the call to
2916 ;; `read-event'; but if the user subsequently drags the
2917 ;; mouse, go ahead and hscroll.
2918 (let ((auto-hscroll-mode auto-hscroll-mode-saved))
2920 (setq end (event-end event)
2921 end-point (posn-point end))
2922 ;; Note whether the mouse has left the starting position.
2924 (unless (eq end-point start-point)
2925 (setq moved-off-start t))
2926 (if (and (eq (posn-window end) start-window)
2927 (integer-or-marker-p end-point))
2928 (mouse3-range-mark start-point end-point click-count); ian, set mark
2930 ; do scrolling if needed
2931 (let ((mouse-row (cdr (cdr (mouse-position)))))
2935 (mouse-scroll-subr start-window (- mouse-row top)
2937 ((>= mouse-row bottom)
2938 (mouse-scroll-subr start-window (1+ (- mouse-row bottom))
2939 nil start-point))))))))
2941 ;; Handle the terminating event if possible.
2943 ;; Ensure that point is on the end of the last event.
2944 (when (and (setq end-point (posn-point (event-end event)))
2945 (eq (posn-window end) start-window)
2946 (integer-or-marker-p end-point)
2947 (/= start-point end-point))
2948 ;(mouse--drag-set-mark-and-point start-point ; ian, set mark
2949 ;end-point click-count))
2950 (mouse3-range-mark start-point end-point click-count)); ian, set mark
2952 ;; Find its binding.
2953 (let* ((fun (key-binding (vector (car event))))
2954 (do-multi-click (and (> (event-click-count event) 0)
2956 (not (memq fun '(mouse3-set-mark))))))
2957 (if (and (/= end-point start-point)
2958 (not do-multi-click))
2960 ;; If point has moved, finish the drag.
2961 (let* (last-command this-command)
2962 (and mouse-drag-copy-region
2963 do-mouse-drag-region-post-process
2964 (let (deactivate-mark)
2965 (copy-region-as-kill (mark) (point)))))
2967 ;; Otherwise, run binding of terminating up-event.
2968 (when do-multi-click
2969 (set-mark start-point)) ; ian, change this. why?
2970 (visible-mark-move-overlays)
2973 (when (and (functionp fun)
2974 (= start-hscroll (window-hscroll start-window))
2975 ;; Don't run the up-event handler if the window
2976 ;; start changed in a redisplay after the
2977 ;; mouse-set-point for the down-mouse event at
2978 ;; the beginning of this function. When the
2979 ;; window start has changed, the up-mouse event
2980 ;; contains a different position due to the new
2981 ;; window contents, and point is set again.
2983 (= (window-start start-window)
2984 start-window-start)))
2986 (push event unread-command-events)))))))
2996 #+begin_src emacs-lisp
2998 ;; todo work on org-cycle-emulate-tab
3000 ;; todo, this doesn't work for a non-standard keybind
3001 ;;(setq org-special-ctrl-k t)
3003 ;; todo, generally fix org mode keys
3004 ;; todo, org-mark-element, unbdind from M-h, bind to mark defun key
3006 (org-babel-do-load-languages
3007 'org-babel-load-languages
3011 ;; make shell work like interactive bash shell
3012 (setq org-babel-default-header-args:sh
3013 '((:results . "output") (:shebang . "#!/bin/bash -l")))
3015 ;; my patch to output stderr
3016 (setq org-babel-use-error-buffer nil)
3019 ;; org-mode manual suggests these, but I haven't used them.
3020 ;;(global-set-key "\C-cl" 'org-store-link)
3021 ;;(global-set-key "\C-ca" 'org-agenda)
3022 ;; this got in the way of a haskell mode command
3023 ;;(global-set-key "\C-cb" 'org-iswitchb)
3027 ;; org-src-tab-acts-natively t ; broken option. using next instead, todo fix
3029 (setq org-src-fontify-natively t ; make babel blocks nice
3030 org-adapt-indentation nil
3031 org-src-preserve-indentation t
3032 ;; The most basic logging is to keep track of when a TODO item was finished.
3034 ;; use a drawer to keep the logs tidy
3035 org-log-into-drawer t
3036 org-extend-today-until 0
3037 org-startup-truncated nil
3039 org-clock-mode-line-total 'today
3040 ;; global STYLE property values for completion
3041 org-global-properties (quote (("STYLE_ALL" . "habit")))
3042 org-special-ctrl-a/e t ;; home and end work special in headlines
3043 org-completion-use-ido t
3044 org-catch-invisible-edits 'smart)
3046 ;; non universally recommended settings
3048 org-default-notes-file (concat org-directory "/a/t.org")
3049 org-agenda-files (quote ("/a/t.org"))
3050 org-mobile-directory "/p/org-mobile"
3051 org-mobile-inbox-for-pull "/p/from-mobile.org"
3054 ;; modeilne populated from (org-clock-get-clocked-time)
3055 ;; which is populated from the var org-clock-total-time
3056 ;; which is populated by a function which starts from (org-clock-get-sum-start)
3059 (org-clock-persistence-insinuate)
3062 (defun time-to-org-day (time)
3063 (round (time-to-number-of-days
3064 (time-subtract time (list 0 (* 3600 org-extend-today-until) 0)))))
3067 (defun my-org-confirm-babel-evaluate (lang body)
3068 (not (or (string= (buffer-file-name) "/a/t.org")
3069 (string= (buffer-file-name) "/home/ian/.emacs.d/my-init.org")
3071 (setq org-confirm-babel-evaluate 'my-org-confirm-babel-evaluate)
3074 (defun org-time-stamp-with-time (arg)
3076 ;; '(4) is the argument passed by universal prefix
3077 (org-time-stamp (if arg arg '(4)) t))
3079 (defun ian-org-work-time ()
3082 (set-buffer "t.org")
3083 (goto-char (org-find-entry-with-id "ian-identifier-1"))
3086 (defun ian-org-idle-time ()
3089 (goto-char (org-find-entry-with-id "ian-identifier-2"))
3090 (set-buffer "t.org")
3094 ;; use org-publish-current-project with a project file open
3095 (setq org-publish-project-alist
3097 :base-directory "/a/h/src"
3098 :publishing-directory "/a/h/output"
3099 :base-extension "org"
3100 ;;:publishing-function org-org-publish-to-org
3101 :publishing-function org-html-publish-to-html
3103 :html-postamble "Everything here is <a rel=\"license\"
3104 href=\"http://creativecommons.org/licenses/by-sa/4.0/\"><img
3105 alt=\"Creative Commons License\" style=\"border-width:0\"
3106 src=\"http://i.creativecommons.org/l/by-sa/4.0/80x15.png\" /></a>"
3107 :html-head "<link rel=\"stylesheet\"
3109 type=\"text/css\"/>"
3112 :base-directory "/a/h/src"
3113 :base-extension "css\\|el\\|"
3114 :publishing-directory "/a/h/output"
3115 :publishing-function org-publish-attachment)
3117 :base-directory "/a/h/other"
3118 :base-extension ".*"
3119 :publishing-directory "/a/h/output"
3120 :publishing-function org-publish-attachment)))
3121 ;; default is xhtml-strict. don't really care, but this is more common
3122 (setq org-html-doctype "html4-strict")
3124 ;; this is needed for worg
3125 ;; todo: for my own site, I need to define the css in a separate file
3126 ;; in order to use this setting. see the variable help for info
3127 (setq org-export-htmlize-output-type t)
3130 ;; based on http://stackoverflow.com/questions/3758139/variable-pitch-for-org-mode-fixed-pitch-for-tables
3131 ;; keywords: proportional font, monospace
3132 (add-hook 'fundamental-mode-hook 'variable-pitch-mode)
3133 (add-hook 'text-mode-hook 'variable-pitch-mode)
3134 (set-face-attribute 'org-table nil :family (face-attribute 'fixed-pitch :family))
3135 (set-face-attribute 'org-code nil :family (face-attribute 'fixed-pitch :family))
3136 (set-face-attribute 'org-formula nil :family (face-attribute 'fixed-pitch :family))
3137 (set-face-attribute 'org-link nil :family (face-attribute 'fixed-pitch :family))
3138 (set-face-attribute 'org-block nil :family (face-attribute 'fixed-pitch :family))
3139 (set-face-attribute 'org-block-background nil :family (face-attribute 'fixed-pitch :family))
3140 (set-face-attribute 'org-date nil :family (face-attribute 'fixed-pitch :family))
3143 (defun remove-org-binds ()
3144 (define-key org-mode-map (kbd "<M-return>") nil)
3145 (define-key org-mode-map (kbd "C-'") nil)
3146 (define-key org-mode-map (kbd "C-y") nil)
3147 (define-key org-mode-map (kbd "<C-return>") nil)
3148 (define-key org-mode-map (kbd "<C-M-kp-enter>") nil)
3149 (define-key org-mode-map (kbd "C-,") nil)
3150 (define-key org-mode-map (kbd "C-M-m") nil)
3151 (define-key org-mode-map (kbd "C-k") nil)
3152 (define-key org-mode-map (kbd "C-j") nil)
3153 (define-key org-mode-map (kbd "C-M-i") nil)
3154 (define-key org-mode-map (kbd "C-M-t") nil)
3155 (define-key org-mode-map (kbd "M-a") 'nil)
3156 (define-key org-mode-map (kbd "C-a") nil)
3157 (define-key org-mode-map (kbd "M-e") nil)
3158 (define-key org-mode-map (kbd "C-e") nil)
3159 (define-key org-mode-map (kbd "C-3") nil)
3160 (define-key org-mode-map (kbd "<M-left>") nil)
3161 (define-key org-mode-map (kbd "<M-right>") nil)
3162 (define-key org-mode-map (kbd "<S-return>") nil)
3163 (define-key org-mode-map (kbd "<tab>") nil)
3164 (define-key org-mode-map (kbd "<C-S-down>") nil)
3165 (define-key org-mode-map (kbd "<C-S-up>") nil)
3166 (define-key org-mode-map (kbd "<S-down>") nil)
3167 (define-key org-mode-map (kbd "<S-up>") nil)
3168 (define-key org-mode-map "\t" nil))
3169 (add-hook 'org-mode-hook 'remove-org-binds)
3177 #+begin_src emacs-lisp :tangle no
3180 ;; account actual time, not just scheduled time
3181 org-drill-adjust-intervals-for-early-and-late-repetitions-p t
3183 ;; still show leeches, but warn
3184 org-drill-leech-method (quote warn)
3185 ;; increased from default 20
3186 org-drill-maximum-duration 60
3187 ;; especially when starting, I want to drill hard
3188 org-drill-maximum-items-per-session nil
3189 ;; don't prompt to save buffer, auto-save will do that
3190 org-drill-save-buffers-after-drill-sessions-p nil
3191 ;; this one deals with varying difficulty items better
3192 ;; sm2 is similar, but more simplistic
3193 org-drill-spaced-repetition-algorithm (quote simple8)
3196 ;; todo, make the prompting text reflect this number.
3197 ;; org-drill-failure-quality
3199 * os specific settings
3201 disabled cuz I have none yet
3202 #+begin_src emacs-lisp :tangle no
3203 (cond ((eq system-type 'darwin))
3204 ((eq system-type 'gnu/linux))
3205 ((eq system-type 'windows-nt))
3210 * prog-mode-defaults
3212 #+begin_src emacs-lisp
3215 (defun prog-mode-defaults ()
3216 "Default coding hook, useful with any programming language."
3217 ;; so that I can do completion before the dialog pops up
3218 (local-set-key (kbd "<tab>") 'auto-complete)
3219 ;; todo, this is causing error message on loading file, prolly not working
3220 ;;(flycheck-mode +1)
3221 (setq ac-sources (delq 'ac-source-dictionary ac-sources))
3222 (highlight-symbol-mode)
3223 (make-local-variable 'column-number-mode)
3224 (set (make-local-variable 'comment-auto-fill-only-comments) t)
3226 (column-number-mode t)
3227 (turn-on-smartparens-mode)
3230 (font-lock-add-keywords
3231 nil `(("(\\(lambda\\>\\)"
3232 (0 (progn (compose-region (match-beginning 1) (match-end 1)
3233 ,(make-char 'greek-iso8859-7 107))
3235 (add-hook 'prog-mode-hook 'prog-mode-defaults)
3237 ;; enable flyspell in prog mode. text mode is handled
3238 (add-hook 'prog-mode-hook 'flyspell-prog-mode)
3245 #+begin_src emacs-lisp
3246 ;; automatically indenting yanked text if in programming-modes
3247 (defvar yank-indent-modes
3248 '(LaTeX-mode TeX-mode)
3249 "Modes in which to indent regions that are yanked (or yank-popped).
3250 Only modes that don't derive from `prog-mode' should be listed here.")
3252 (defvar yank-indent-blacklisted-modes
3253 '(python-mode slim-mode haml-mode)
3254 "Modes for which auto-indenting is suppressed.")
3256 (defvar yank-advised-indent-threshold 2000
3257 "Threshold (# chars) over which indentation does not automatically occur.")
3259 (defun yank-advised-indent-function (beg end)
3260 "Do indentation, as long as the region isn't too large."
3261 (if (<= (- end beg) yank-advised-indent-threshold)
3262 (indent-region beg end nil)))
3264 (defadvice yank (after yank-indent activate)
3265 "If current mode is one of 'yank-indent-modes,
3266 indent yanked text (with prefix arg don't indent)."
3267 (if (and (not (ad-get-arg 0))
3268 (not (member major-mode yank-indent-blacklisted-modes))
3269 (or (derived-mode-p 'prog-mode)
3270 (member major-mode yank-indent-modes)))
3271 (let ((transient-mark-mode nil))
3272 (yank-advised-indent-function (region-beginning) (region-end)))))
3274 (defadvice yank-pop (after yank-pop-indent activate)
3275 "If current mode is one of 'yank-indent-modes,
3276 indent yanked text (with prefix arg don't indent)."
3277 (if (and (not (ad-get-arg 0))
3278 (not (member major-mode yank-indent-blacklisted-modes))
3279 (or (derived-mode-p 'prog-mode)
3280 (member major-mode yank-indent-modes)))
3281 (let ((transient-mark-mode nil))
3282 (yank-advised-indent-function (region-beginning) (region-end)))))
3288 #+begin_src emacs-lisp
3289 ;; avoid stupid git crap like "warning, terminal not fully functional"
3290 (setenv "PAGER" "cat")
3291 ;; don't store successive duplicates in comint command history
3292 (setq comint-input-ignoredups t)
3294 (defun add-mode-line-dirtrack ()
3295 (add-to-list 'mode-line-buffer-identification
3296 '(:propertize (" " default-directory " ") face dired-directory)))
3297 (add-hook 'shell-mode-hook 'add-mode-line-dirtrack)
3300 ;; don't fully understand it, but it works.
3301 ;; http://www.emacswiki.org/emacs/ShellDirtrackByProcfs
3302 (defun track-shell-directory/procfs ()
3303 (shell-dirtrack-mode 0)
3304 (add-hook 'comint-preoutput-filter-functions
3307 (when (string-match comint-prompt-regexp str)
3309 (format "/proc/%s/cwd" (process-id
3311 (current-buffer)))))))))
3313 (setq comint-buffer-maximum-size 100000)
3314 (add-to-list 'comint-output-filter-functions 'comint-truncate-buffer)
3317 (shell (generate-new-buffer-name "*shell*")))
3319 (defun shell-wrap (prefix)
3320 "wrap the shell function, automatically generate a new name for a prefix arg"
3326 (add-hook 'shell-mode-hook 'track-shell-directory/procfs)
3329 the melpa git version had a catastrophic bug I reported.
3330 downgraded to marmalade version and everything is working fine.
3331 #+begin_src emacs-lisp
3332 (require 'smartparens-config)
3333 (show-smartparens-global-mode t)
3336 (defun gp/sp/pair-on-newline-and-indent (id action context)
3337 "Open a new brace or bracket expression, with relevant newlines and indent. "
3340 (indent-according-to-mode))
3341 (indent-according-to-mode))
3343 ;; when opening a pair, and then inserting a newline, push the closing pair to another newline
3344 (sp-pair "{" nil :post-handlers
3345 '(:add ((lambda (id action context)
3346 (gp/sp/pair-on-newline-and-indent id action context)) (kbd "<return>"))))
3347 (sp-pair "[" nil :post-handlers
3348 '(:add ((lambda (id action context)
3349 (gp/sp/pair-on-newline-and-indent id action context)) (kbd "<return>"))))
3352 ;; in my version, this is not a pairing.
3353 ;; not sure if it is in a future version since I reverted to marmalade
3354 ;; Don't need c-comments in strings -- they frustrate filename globs
3355 ;; (sp-pair "/*" nil :unless '(sp-in-string-p))
3357 ;; Don't need quotes to pair next to words
3358 (sp-pair "\"" nil :unless '(sp-point-before-word-p sp-point-after-word-p))
3359 (sp-pair "'" nil :unless '(sp-point-before-word-p sp-point-after-word-p))
3362 ;; todo, testout these mode specific settings from graphene.
3363 ;; Ruby-specific pairs and handlers
3364 (require 'smartparens-ruby)
3367 (sp-local-pair '(markdown-mode gfm-mode) "*" "*"
3368 :unless '(sp-in-string-p)
3369 :actions '(insert wrap))
3372 (sp-local-pair 'html-mode "\"" nil :unless '(:rem sp-point-after-word-p))
3373 ;; CoffeeScript PyStrings
3374 (push 'coffee-mode sp-autoescape-string-quote-if-empty)
3380 todo; check out smex-show-unbound-commands shows frequently used commands that have no key bindings.
3381 #+begin_src emacs-lisp
3382 ; these must be before smex-initialize
3384 smex-save-file "~/.emacs.d/.smex-items")
3392 ** todo, disabled cuz of broken package
3393 #+begin_src emacs-lisp :tangle no
3394 (require 'sr-speedbar)
3395 (setq speedbar-hide-button-brackets-flag t ;; didn't notice a diff
3396 speedbar-file-unshown-regexp "flycheck-.*"
3397 sr-speedbar-width 40
3398 sr-speedbar-width-x 40
3399 sr-speedbar-auto-refresh nil
3400 sr-speedbar-skip-other-window-p t
3401 sr-speedbar-right-side nil
3402 speedbar-hide-button-brackets-flag nil)
3405 #+begin_src emacs-lisp
3407 ispell-program-name "hunspell"
3408 ispell-silently-savep t) ; don't prompt to save personal dictionary
3410 (require 'rw-hunspell)
3412 rw-hunspell sets up hunspell dictionary automagically.
3415 Rant: Hunspell SHOULD be standard. its used by firefox and openoffice and
3416 osx. In contrast, the first few words I added to aspell dictionary were
3417 "emacs" "customizable" and "timestamp". Hunspell already has those,
3420 ispell-personal-dictionary does not document where the hunspell
3421 dictionary goes by default, but it is ~/.hunspell_en_US for me
3425 #+begin_src emacs-lisp
3426 (setq-default TeX-PDF-mode t) ; use pdf
3428 ; more sensible defaults based on info manual quickstart
3429 (setq TeX-auto-save t)
3430 (setq TeX-parse-self t)
3435 #+begin_src emacs-lisp
3437 ;; undo-tree checks for minor modes which override
3438 ;; its minor mode keymap, and sets global keybinds if
3439 ;; that happens. this will prevent that, but I have no
3440 ;; reason to do that, so it is commented.
3441 ;; (defun undo-tree-overridden-undo-bindings-p () nil)
3443 ;; todo, send patch undo-tree-visualize should scroll with the scroll key, instead of just pgup pgdn (aka next/prior)
3444 (global-undo-tree-mode)
3445 ;; disabled due to bug, something like unknown entry in undo tree canary
3446 ;; (setq undo-tree-auto-save-history t)
3447 (setq undo-outer-limit 100000000 ; per undo command
3448 undo-limit 500000000 ; undo history limit
3449 undo-strong-limit 600000000) ; undo history limit plus some extra
3456 these colors were better for dark theme
3457 #+begin_src emacs-lisp :tangle no
3461 (defface visible-mark-face1
3462 '((((type tty) (class mono)))
3463 (t (:background "LimeGreen"))) "")
3464 (defface visible-mark-face2
3465 '((((type tty) (class mono)))
3466 (t (:background "red4"))) "")
3467 (defface visible-mark-forward-face1
3468 '((((type tty) (class mono)))
3469 (t (:background "dark magenta"))) "")
3470 (defface visible-mark-active
3471 '((((type tty) (class mono)))
3472 (t (:background "gold"))) "")
3473 (defface mouse-cursor-face
3474 '((((type tty) (class mono)))
3475 (t (:background "DeepPink1"))) "")
3480 #+begin_src emacs-lisp
3482 (add-to-list 'load-path "~/.emacs.d/src/visible-mark")
3484 ;; since it is not easy to change the mark overlay priority, I change this one.
3485 (setq show-paren-priority 999)
3488 (defface visible-mark-active
3489 '((((type tty) (class mono)))
3490 (t (:background "magenta"))) "")
3494 (defface mouse-cursor-face
3495 '((((type tty) (class mono)))
3496 (t (:background "DeepPink1"))) "")
3499 (require 'visible-mark)
3501 (setq visible-mark-faces '(visible-mark-face1 visible-mark-face2))
3502 (setq visible-mark-forward-faces '(visible-mark-forward-face1))
3505 ; highlight the last 2 marks
3506 (setq visible-mark-max 2)
3507 ; highlight 1 forward mark
3508 (setq visible-mark-forward-max 1)
3509 ; globally activate visible-mark-mode
3510 (global-visible-mark-mode +1)
3513 ;; todo, it doesn't seem to be exposed in elisp, but it would be nice
3514 ;; if I could define overlay faces to use inverse foreground color
3523 * key binds. keep at end of file
3524 this should come at the end because it depends on key maps being
3525 created in earlier sections.
3528 commands not needed in ido mode and their replacement in ido mode
3529 spell check fix -> use current pattern and start new one
3530 narrow -> create subdirectory
3531 org-cycle -> M-s search recently used directory
3532 vert split Window -> create file instead of select match
3533 delete-other-windows -> open dired buffer
3534 delete current window -> delete buffer/file
3535 find file -> search within all subdirectories
3539 buffer select -> toggle find file / buffer
3540 up/down -> next/previous history
3541 forward/back -> ido-forward/back
3544 right keyboard attributes: movement, involve typing words
3545 left keyboard attributes: non-typing universal non-movement
3551 fix global unpop mark ring
3553 learn cedet and projectile and helm
3554 setup key for pop-global-mark
3555 try out C-M-\ indent region
3556 set quoted insert to some obscure keybind
3557 make currently overrided M-u uppercase word into something obscure
3559 bind shell-command to something better
3561 investigate keys in isearch mode and find file mode
3562 try out occur. M-s o
3563 investigate programming modes. M-g n/b next/previous error. gdb?
3564 investigate org mode keys
3565 learn version control
3568 bind capitalize-word to something obscure
3569 sentance/paragraph movement/marking should be swapped with sexp/paren movement based on mode
3570 bind fill-paragraph to something obscure
3571 setup linewise paste
3572 install magit (git control)
3573 magpie expansion provides a completion key for acronym expansion based on buffer text
3576 figure out auto-indent
3577 learn eshell and prelude settings for it
3578 combine register prefix and c-x prefix
3579 note: remember to think of mouse & foot pedals
3580 commands to change: select other window: C-x o.
3581 ** prefix keybind changes
3582 #+begin_src emacs-lisp
3586 ; good info http://www.masteringemacs.org/articles/2011/02/08/mastering-key-bindings-emacs/
3587 ; rebinding the prefix keys are tricky. apparently, some modes ignore any redefinition of a prefix key and use it explicitly,
3588 ; so you have to dig into their key maps and redo things.
3589 ; There are 2 simpler alternatives which have their own downsides.
3590 ; One is cua mode, which I do not like because it smashes 2 keybinds onto 1 and limits what you can do.
3591 ; The other is keyboard-translate, which translates the key presses before anything else.
3592 ; The downside is that it translates them when you aren't using them as a prefix.
3593 ; Since the swaps I'm using are all very accessible, the only downside is some mental jugling when reading docs etc about these keybinds.
3595 ; I've seen this as an another suggestion, it was a total fail. The prefix command took over both keys.
3596 ; (define-key key-translation-map [f12] "\C-c")
3597 ; (define-key key-translation-map "\C-c" [left])
3600 ;idea to remove the hook later since it is only needed at startup.
3601 ; did not work however, and there is not a real need to fix it, so I did not investigate
3602 ;(defun removeSwapHook ()
3603 ; (remove-hook 'buffer-list-update-hook 'myKeySwap)
3604 ; (remove-hook 'change-major-mode-hook 'removeSwapHook))
3605 ;(add-hook 'change-major-mode-hook 'removeSwapHook)
3608 ; went through almost all the relevant standard hooks,
3609 ; this overcomes a known bug that (keyboard-translate) does not get applied when running emacs daemon
3610 (add-hook 'buffer-list-update-hook (lambda () (interactive)
3611 (keyboard-translate ?\C-x ?\C-s)
3612 (keyboard-translate ?\C-s ?\C-x)
3613 (keyboard-translate ?\C-c ?\C-d)
3614 (keyboard-translate ?\C-d ?\C-c)))
3618 ; these all don't work
3619 ; don't know why this doesn't error but reversing the keys does
3620 ;(keyboard-translate ?\t ?\M-\t)
3621 ;(keyboard-translate [M-tab] [tab])
3622 ; from what i can tell, it wants to use a keyboard-translate-table,
3623 ; which is a char table, which is a vector indexed by chars,
3624 ; and mod+tab is not a char (it has too many bits), it is an integer
3625 ; it actually says it can hold vectors or strings, but that it is obsolete to do so
3635 /ssh:host|sudo:host:
3636 when in the same session, you can then do:
3639 *** org insert table row
3640 [org-shiftmetadown/up]
3641 *** toggle line continuation / truncation / wrap :drill:
3642 SCHEDULED: <2014-04-07 Mon>
3644 :ID: 5f3f567a-0926-4d92-81f3-4e4cd6070af2
3645 :DRILL_LAST_INTERVAL: 28.6736
3646 :DRILL_REPEATS_SINCE_FAIL: 5
3647 :DRILL_TOTAL_REPEATS: 5
3648 :DRILL_FAILURE_COUNT: 1
3649 :DRILL_AVERAGE_QUALITY: 3.4
3651 :DRILL_LAST_QUALITY: 4
3652 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:37>
3654 [toggle-truncate-lines]
3655 *** auto-save on/off :drill:
3656 SCHEDULED: <2014-05-13 Tue>
3658 :ID: 462f859d-1a06-46a3-ac72-6ffe5b4417c9
3659 :DRILL_LAST_INTERVAL: 71.5839
3660 :DRILL_REPEATS_SINCE_FAIL: 4
3661 :DRILL_TOTAL_REPEATS: 4
3662 :DRILL_FAILURE_COUNT: 0
3663 :DRILL_AVERAGE_QUALITY: 4.75
3665 :DRILL_LAST_QUALITY: 5
3666 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:11>
3668 [my-as-on/my-as-off]
3671 *** show abbreviations :drill:
3672 SCHEDULED: <2014-03-24 Mon>
3674 :ID: 479a2ced-b952-4088-a6e3-862cd37693a9
3675 :DRILL_LAST_INTERVAL: 32.7466
3676 :DRILL_REPEATS_SINCE_FAIL: 4
3677 :DRILL_TOTAL_REPEATS: 4
3678 :DRILL_FAILURE_COUNT: 0
3679 :DRILL_AVERAGE_QUALITY: 4.0
3681 :DRILL_LAST_QUALITY: 4
3682 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 18:03>
3686 *** rename-file-and-buffer
3689 automatically balance a paragraph with newlines
3690 *** executable-make-buffer-file-executable-if-script-p
3691 make a script executable
3692 *** (setq lazy-highlight-cleanup nil)
3693 *** auto-revert-tail-mode
3695 *** trash-file-and-buffer
3696 #+begin_src emacs-lisp
3697 (defun trash-file-and-buffer ()
3698 "Removes file connected to current buffer and kills buffer."
3700 (let ((filename (buffer-file-name))
3701 (buffer (current-buffer))
3702 (name (buffer-name)))
3703 (if (not (and filename (file-exists-p filename)))
3704 (error "Buffer '%s' is not visiting a file!" name)
3705 (delete-file filename)
3706 (kill-buffer buffer)
3707 (message "File '%s' successfully removed" filename))))
3714 *** sgml-pretty-print
3715 format xml in nxml-mode
3716 *** visual-line-mode
3718 ** compound commands
3721 :ID: d0802daa-9281-4a9f-ab4a-47d9f7ef7cfd
3725 SCHEDULED: <2014-03-24 Mon>
3727 :ID: 2f7d1353-3c20-4e00-95ea-1f84c4d87fc1
3728 :DRILL_LAST_INTERVAL: 32.7466
3729 :DRILL_REPEATS_SINCE_FAIL: 4
3730 :DRILL_TOTAL_REPEATS: 4
3731 :DRILL_FAILURE_COUNT: 0
3732 :DRILL_AVERAGE_QUALITY: 4.0
3734 :DRILL_LAST_QUALITY: 4
3735 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 18:03>
3739 SCHEDULED: <2014-03-27 Thu>
3741 :ID: b802eeb8-ddcd-4778-844a-b6e737b54d7d
3742 :DRILL_LAST_INTERVAL: 50.6823
3743 :DRILL_REPEATS_SINCE_FAIL: 3
3744 :DRILL_TOTAL_REPEATS: 3
3745 :DRILL_FAILURE_COUNT: 0
3746 :DRILL_AVERAGE_QUALITY: 5.0
3748 :DRILL_LAST_QUALITY: 5
3749 :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:41>
3753 [undo-tree-visualize]
3755 [undo-tree save/restore state via register]
3757 [org insert table horizontal line or create list]
3758 *** [C-x tab] :drill:
3759 SCHEDULED: <2014-03-24 Mon>
3761 :ID: ceb701d7-3d44-4781-ae23-7309ca887a01
3762 :DRILL_LAST_INTERVAL: 32.7466
3763 :DRILL_REPEATS_SINCE_FAIL: 4
3764 :DRILL_TOTAL_REPEATS: 4
3765 :DRILL_FAILURE_COUNT: 0
3766 :DRILL_AVERAGE_QUALITY: 4.0
3768 :DRILL_LAST_QUALITY: 4
3769 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:50>
3773 [shift-left and shift-right are default for indenting by tab stop,
3774 and they are only defined as lambdas so I copy them here
3775 to use with up and down.
3776 #+begin_src emacs-lisp
3777 ;; condition cuz emacs24 release doesn't have this yet
3778 (when (boundp 'indent-rigidly-map)
3779 (define-key indent-rigidly-map (kbd "<C-left>")
3780 (lambda (beg end) (interactive "r")
3781 (let* ((current (indent-rigidly--current-indentation beg end))
3782 (next (indent--next-tab-stop current)))
3783 (indent-rigidly beg end (- next current)))))
3785 (define-key indent-rigidly-map (kbd "<C-right>")
3786 (lambda (beg end) (interactive "r")
3787 (let* ((current (indent-rigidly--current-indentation beg end))
3788 (next (indent--next-tab-stop current 'prev)))
3789 (indent-rigidly beg end (- next current))))))
3800 #+begin_src emacs-lisp
3801 (global-set-key (kbd "C-x C-b") 'ibuffer)
3807 nnir searching with notmuch, specific group (not sure if it can do multiple)
3808 search all groups with mairix
3814 save newsrc file, alterations to groups.
3816 gnus refresh / get new
3820 gnus quoted reply all
3822 gnus draft edit message
3825 #+begin_src emacs-lisp
3826 (add-hook 'gnus-startup-hook
3828 (define-key gnus-summary-mode-map (kbd "<delete>") 'gnus-summary-delete-article)))
3833 #+begin_src emacs-lisp
3834 (add-hook 'gnus-startup-hook
3836 (define-key gnus-group-mode-map "b" 'nnmairix-search)
3837 (define-key gnus-summary-mode-map "b" 'nnmairix-search)))
3840 move message, or messages in region
3842 mark article, move with B m
3845 *** [/ plus x a / b]
3846 search current group (or see info manual for more groups),
3847 using the gnus native search (its slow, do a notmuch or mairix search instead)
3849 todo; send in patch to make author search to in sent folder
3853 see C-h m for a full list
3855 do a nnir notmuch search, for the group on the current line
3857 jump to thread from nnir group
3862 M-& apply process mark to a non-process mark command
3870 notmuch advance to next message/thread
3872 ** readline / bash / .inputrc
3874 SCHEDULED: <2014-05-13 Tue>
3876 :ID: dac68f2e-37c2-448e-861d-0554e51f1414
3877 :DRILL_LAST_INTERVAL: 71.5839
3878 :DRILL_REPEATS_SINCE_FAIL: 4
3879 :DRILL_TOTAL_REPEATS: 4
3880 :DRILL_FAILURE_COUNT: 0
3881 :DRILL_AVERAGE_QUALITY: 4.75
3883 :DRILL_LAST_QUALITY: 5
3884 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:10>
3888 removed drill from all these because I'm using emacs for shell now
3890 SCHEDULED: <2014-03-15 Sat>
3892 :ID: d2e87812-6ab7-432f-ad7c-4281c0e3b86b
3893 :DRILL_LAST_INTERVAL: 12.979
3894 :DRILL_REPEATS_SINCE_FAIL: 3
3895 :DRILL_TOTAL_REPEATS: 3
3896 :DRILL_FAILURE_COUNT: 0
3897 :DRILL_AVERAGE_QUALITY: 3.333
3899 :DRILL_LAST_QUALITY: 3
3900 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:00>
3904 SCHEDULED: <2014-03-15 Sat>
3906 :ID: 3b156730-eb92-4149-b4ce-f93a9098d2b4
3907 :DRILL_LAST_INTERVAL: 12.979
3908 :DRILL_REPEATS_SINCE_FAIL: 3
3909 :DRILL_TOTAL_REPEATS: 3
3910 :DRILL_FAILURE_COUNT: 0
3911 :DRILL_AVERAGE_QUALITY: 3.333
3913 :DRILL_LAST_QUALITY: 3
3914 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:00>
3916 terminal open file manager
3918 SCHEDULED: <2014-03-12 Wed>
3920 :ID: ed6a19de-d000-4469-9dd9-7b9e35f6c751
3921 :DRILL_LAST_INTERVAL: 2.8975
3922 :DRILL_REPEATS_SINCE_FAIL: 2
3923 :DRILL_TOTAL_REPEATS: 10
3924 :DRILL_FAILURE_COUNT: 12
3925 :DRILL_AVERAGE_QUALITY: 2.692
3927 :DRILL_LAST_QUALITY: 3
3928 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:33>
3930 bash exchange-point-and-mark
3933 SCHEDULED: <2014-03-14 Fri>
3935 :ID: 9827eb7e-532e-41fb-8d91-8c95c23553f5
3936 :DRILL_LAST_INTERVAL: 11.6739
3937 :DRILL_REPEATS_SINCE_FAIL: 3
3938 :DRILL_TOTAL_REPEATS: 3
3939 :DRILL_FAILURE_COUNT: 0
3940 :DRILL_AVERAGE_QUALITY: 3.333
3942 :DRILL_LAST_QUALITY: 4
3943 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:09>
3947 SCHEDULED: <2014-04-07 Mon>
3949 :ID: 58fea89a-def9-4aac-95d4-fdd63fde8097
3950 :DRILL_LAST_INTERVAL: 28.6736
3951 :DRILL_REPEATS_SINCE_FAIL: 5
3952 :DRILL_TOTAL_REPEATS: 5
3953 :DRILL_FAILURE_COUNT: 1
3954 :DRILL_AVERAGE_QUALITY: 3.4
3956 :DRILL_LAST_QUALITY: 4
3957 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:36>
3961 SCHEDULED: <2014-03-27 Thu>
3963 :ID: 3ee7662f-3ac7-46ff-afe7-73244656d48b
3964 :DRILL_LAST_INTERVAL: 50.6823
3965 :DRILL_REPEATS_SINCE_FAIL: 3
3966 :DRILL_TOTAL_REPEATS: 3
3967 :DRILL_FAILURE_COUNT: 0
3968 :DRILL_AVERAGE_QUALITY: 5.0
3970 :DRILL_LAST_QUALITY: 5
3971 :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:40>
3976 :ID: 579a9008-0758-4ba9-a52f-175f264fe96a
3978 bash history-search-backward
3980 SCHEDULED: <2014-04-04 Fri>
3982 :ID: 25e737fe-52c4-452b-ab93-037575375579
3983 :DRILL_LAST_INTERVAL: 26.2331
3984 :DRILL_REPEATS_SINCE_FAIL: 5
3985 :DRILL_TOTAL_REPEATS: 5
3986 :DRILL_FAILURE_COUNT: 1
3987 :DRILL_AVERAGE_QUALITY: 3.2
3989 :DRILL_LAST_QUALITY: 4
3990 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:36>
3992 shell-expand-line, expand like bash does u hit enter
3994 SCHEDULED: <2014-04-06 Sun>
3996 :ID: 384b3337-3cb0-4b3b-8a1a-8ae299ae212b
3997 :DRILL_LAST_INTERVAL: 27.9921
3998 :DRILL_REPEATS_SINCE_FAIL: 5
3999 :DRILL_TOTAL_REPEATS: 5
4000 :DRILL_FAILURE_COUNT: 1
4001 :DRILL_AVERAGE_QUALITY: 3.6
4003 :DRILL_LAST_QUALITY: 5
4004 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:37>
4008 SCHEDULED: <2014-03-10 Mon>
4010 :ID: 4b5c71f9-6035-4b92-bcad-e400e5e25d66
4011 :DRILL_LAST_INTERVAL: 8.225
4012 :DRILL_REPEATS_SINCE_FAIL: 3
4013 :DRILL_TOTAL_REPEATS: 7
4014 :DRILL_FAILURE_COUNT: 4
4015 :DRILL_AVERAGE_QUALITY: 2.879
4017 :DRILL_LAST_QUALITY: 4
4018 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 20:57>
4021 yank $1 of last argument, or nth if prefixed with a digit argument
4023 SCHEDULED: <2014-03-12 Wed>
4025 :ID: f5da97c1-6e3c-44dd-a2f1-7dacd7f523da
4026 :DRILL_LAST_INTERVAL: 9.8132
4027 :DRILL_REPEATS_SINCE_FAIL: 3
4028 :DRILL_TOTAL_REPEATS: 7
4029 :DRILL_FAILURE_COUNT: 3
4030 :DRILL_AVERAGE_QUALITY: 3.21
4032 :DRILL_LAST_QUALITY: 4
4033 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:04>
4037 SCHEDULED: <2014-05-13 Tue>
4039 :ID: 0f1def18-0d94-45e7-b258-f621e67cefd7
4040 :DRILL_LAST_INTERVAL: 71.5839
4041 :DRILL_REPEATS_SINCE_FAIL: 4
4042 :DRILL_TOTAL_REPEATS: 4
4043 :DRILL_FAILURE_COUNT: 0
4044 :DRILL_AVERAGE_QUALITY: 4.75
4046 :DRILL_LAST_QUALITY: 5
4047 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:11>
4051 SCHEDULED: <2014-03-10 Mon>
4053 :ID: 263e9479-de1d-4e78-8600-5a0f3a8e2dd9
4054 :DRILL_LAST_INTERVAL: 8.0608
4055 :DRILL_REPEATS_SINCE_FAIL: 3
4056 :DRILL_TOTAL_REPEATS: 8
4057 :DRILL_FAILURE_COUNT: 5
4058 :DRILL_AVERAGE_QUALITY: 2.966
4060 :DRILL_LAST_QUALITY: 4
4061 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:04>
4063 bash edit-and-execute-command
4066 emacs hard to rebind
4067 looks like it actually wouldn't be that hard.
4068 possibly take the output from bind -p, make all those keys undefined.
4076 SCHEDULED: <2014-03-14 Fri>
4078 :ID: 1a688c40-4bba-4053-a28b-0e1e8d3f4985
4079 :DRILL_LAST_INTERVAL: 4.9208
4080 :DRILL_REPEATS_SINCE_FAIL: 2
4081 :DRILL_TOTAL_REPEATS: 8
4082 :DRILL_FAILURE_COUNT: 4
4083 :DRILL_AVERAGE_QUALITY: 3.066
4085 :DRILL_LAST_QUALITY: 3
4086 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:33>
4088 bash menu-complete-backward
4092 SCHEDULED: <2014-03-14 Fri>
4094 :ID: 75d57537-8a32-4a18-982e-6d6f756a9ba6
4095 :DRILL_LAST_INTERVAL: 12.2744
4096 :DRILL_REPEATS_SINCE_FAIL: 3
4097 :DRILL_TOTAL_REPEATS: 3
4098 :DRILL_FAILURE_COUNT: 2
4099 :DRILL_AVERAGE_QUALITY: 3.667
4101 :DRILL_LAST_QUALITY: 4
4102 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:09>
4106 SCHEDULED: <2014-03-27 Thu>
4108 :ID: 5587c07b-c003-470f-bef4-fa55f00524ff
4109 :DRILL_LAST_INTERVAL: 50.6823
4110 :DRILL_REPEATS_SINCE_FAIL: 3
4111 :DRILL_TOTAL_REPEATS: 3
4112 :DRILL_FAILURE_COUNT: 0
4113 :DRILL_AVERAGE_QUALITY: 5.0
4115 :DRILL_LAST_QUALITY: 5
4116 :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:41>
4118 forward/backward-word
4121 SCHEDULED: <2014-03-19 Wed>
4123 :ID: b5342b6b-f14f-4a6b-99d8-110fdef243f2
4124 :DRILL_LAST_INTERVAL: 24.3844
4125 :DRILL_REPEATS_SINCE_FAIL: 5
4126 :DRILL_TOTAL_REPEATS: 5
4127 :DRILL_FAILURE_COUNT: 2
4128 :DRILL_AVERAGE_QUALITY: 3.0
4130 :DRILL_LAST_QUALITY: 3
4131 :DRILL_LAST_REVIEWED: <2014-02-23 Sun 01:51>
4133 bash backward-kill-word
4135 SCHEDULED: <2014-03-14 Fri>
4137 :ID: 6e306a04-8f21-4142-8c00-8a87a3544d6e
4138 :DRILL_LAST_INTERVAL: 11.6739
4139 :DRILL_REPEATS_SINCE_FAIL: 3
4140 :DRILL_TOTAL_REPEATS: 3
4141 :DRILL_FAILURE_COUNT: 0
4142 :DRILL_AVERAGE_QUALITY: 3.333
4144 :DRILL_LAST_QUALITY: 4
4145 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 20:58>
4148 [ terminal crap, duplicate of tab ]
4150 SCHEDULED: <2014-03-15 Sat>
4152 :ID: 40b6d9ce-2427-4905-b444-d6d90c5a4da4
4153 :DRILL_LAST_INTERVAL: 23.5247
4154 :DRILL_REPEATS_SINCE_FAIL: 4
4155 :DRILL_TOTAL_REPEATS: 4
4156 :DRILL_FAILURE_COUNT: 0
4157 :DRILL_AVERAGE_QUALITY: 3.5
4159 :DRILL_LAST_QUALITY: 3
4160 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:25>
4162 bash operate-and-get-next, submit and bring up next item in history
4164 SCHEDULED: <2014-03-11 Tue>
4166 :ID: 4956027e-c5da-48de-8925-6f6b6dd98cec
4167 :DRILL_LAST_INTERVAL: 1.575
4168 :DRILL_REPEATS_SINCE_FAIL: 1
4169 :DRILL_TOTAL_REPEATS: 9
4170 :DRILL_FAILURE_COUNT: 8
4171 :DRILL_AVERAGE_QUALITY: 2.597
4173 :DRILL_LAST_QUALITY: 3
4174 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:38>
4176 bash dabbrev-expand,
4177 complete historical command names
4179 terminal incompatible junk
4181 SCHEDULED: <2014-05-09 Fri>
4183 :ID: f91ff161-8d8c-4f47-beb5-09f86bf774d5
4184 :DRILL_LAST_INTERVAL: 67.6174
4185 :DRILL_REPEATS_SINCE_FAIL: 4
4186 :DRILL_TOTAL_REPEATS: 4
4187 :DRILL_FAILURE_COUNT: 1
4188 :DRILL_AVERAGE_QUALITY: 4.75
4190 :DRILL_LAST_QUALITY: 5
4191 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:10>
4193 bash kill-line, to end of line
4195 SCHEDULED: <2014-05-13 Tue>
4197 :ID: 4798acc1-4fc8-406e-bc95-8131cfa255a5
4198 :DRILL_LAST_INTERVAL: 71.5839
4199 :DRILL_REPEATS_SINCE_FAIL: 4
4200 :DRILL_TOTAL_REPEATS: 4
4201 :DRILL_FAILURE_COUNT: 0
4202 :DRILL_AVERAGE_QUALITY: 4.75
4204 :DRILL_LAST_QUALITY: 5
4205 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:12>
4209 SCHEDULED: <2014-03-14 Fri>
4211 :ID: 119a0a90-9253-4131-b0c8-5aa7d8cf2259
4212 :DRILL_LAST_INTERVAL: 11.6739
4213 :DRILL_REPEATS_SINCE_FAIL: 3
4214 :DRILL_TOTAL_REPEATS: 3
4215 :DRILL_FAILURE_COUNT: 0
4216 :DRILL_AVERAGE_QUALITY: 3.333
4218 :DRILL_LAST_QUALITY: 4
4219 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 20:58>
4222 #+begin_src emacs-lisp
4223 (add-hook 'comint-mode-hook
4225 (define-key comint-mode-map "\C-m" nil)))
4229 SCHEDULED: <2014-03-12 Wed>
4231 :ID: 803e2480-4e11-41d0-a261-4f5930a7f9a9
4232 :DRILL_LAST_INTERVAL: 10.0687
4233 :DRILL_REPEATS_SINCE_FAIL: 3
4234 :DRILL_TOTAL_REPEATS: 6
4235 :DRILL_FAILURE_COUNT: 1
4236 :DRILL_AVERAGE_QUALITY: 2.875
4238 :DRILL_LAST_QUALITY: 3
4239 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:06>
4243 SCHEDULED: <2014-03-15 Sat>
4245 :ID: 3d0c188b-3cf0-4f0a-83c8-78f6e4040ee5
4246 :DRILL_LAST_INTERVAL: 24.4352
4247 :DRILL_REPEATS_SINCE_FAIL: 4
4248 :DRILL_TOTAL_REPEATS: 4
4249 :DRILL_FAILURE_COUNT: 0
4250 :DRILL_AVERAGE_QUALITY: 3.75
4252 :DRILL_LAST_QUALITY: 4
4253 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:44>
4258 SCHEDULED: <2014-03-27 Thu>
4260 :ID: f0e2b6e2-809b-40c2-8d72-0f7e35eda9b3
4261 :DRILL_LAST_INTERVAL: 50.6823
4262 :DRILL_REPEATS_SINCE_FAIL: 3
4263 :DRILL_TOTAL_REPEATS: 3
4264 :DRILL_FAILURE_COUNT: 0
4265 :DRILL_AVERAGE_QUALITY: 5.0
4267 :DRILL_LAST_QUALITY: 5
4268 :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:40>
4270 paste word/char under cursor into isearch
4272 SCHEDULED: <2014-03-27 Thu>
4274 :ID: b3692e47-458e-41a0-b2be-c5f61b4eadbd
4275 :DRILL_LAST_INTERVAL: 50.6823
4276 :DRILL_REPEATS_SINCE_FAIL: 3
4277 :DRILL_TOTAL_REPEATS: 3
4278 :DRILL_FAILURE_COUNT: 0
4279 :DRILL_AVERAGE_QUALITY: 5.0
4281 :DRILL_LAST_QUALITY: 5
4282 :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:41>
4284 next/previous isearch history
4286 SCHEDULED: <2014-03-11 Tue>
4288 :ID: 8e36b562-7e0c-45e6-a41b-3cd96c134b33
4289 :DRILL_LAST_INTERVAL: 19.9622
4290 :DRILL_REPEATS_SINCE_FAIL: 4
4291 :DRILL_TOTAL_REPEATS: 4
4292 :DRILL_FAILURE_COUNT: 0
4293 :DRILL_AVERAGE_QUALITY: 3.5
4295 :DRILL_LAST_QUALITY: 4
4296 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 16:30>
4299 Activate occur easily inside isearch
4302 #+begin_src emacs-lisp
4303 (define-key isearch-mode-map (kbd "C-o")
4304 (lambda () (interactive)
4305 (let ((case-fold-search isearch-case-fold-search))
4306 (occur (if isearch-regexp
4308 (regexp-quote isearch-string))))))
4312 #+begin_src emacs-lisp
4313 (defun my-isearch-toggle-regexp ()
4315 (isearch-toggle-regexp)
4316 (cond (isearch-regexp
4317 (global-set-key (kbd "C-r") 'isearch-backward-regexp)
4318 (define-key global-map (kbd search-key) 'isearch-forward-regexp))
4320 (global-set-key (kbd "C-r") 'isearch-backward)
4321 (define-key global-map (kbd search-key) 'isearch-forward))))
4322 (define-key isearch-mode-map (kbd "M-r") 'my-isearch-toggle-regexp)
4327 icomplete-forward/backward-completions
4331 SCHEDULED: <2014-04-01 Tue>
4333 :ID: 9cc3392d-00a1-4564-8c57-b418a20d9235
4334 :DRILL_LAST_INTERVAL: 22.6411
4335 :DRILL_REPEATS_SINCE_FAIL: 5
4336 :DRILL_TOTAL_REPEATS: 6
4337 :DRILL_FAILURE_COUNT: 1
4338 :DRILL_AVERAGE_QUALITY: 2.833
4340 :DRILL_LAST_QUALITY: 3
4341 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:34>
4343 ido-find-file create file
4345 SCHEDULED: <2014-03-27 Thu>
4347 :ID: 18ce7d51-93ca-4d41-8e8d-1958cff9c726
4348 :DRILL_LAST_INTERVAL: 50.6823
4349 :DRILL_REPEATS_SINCE_FAIL: 3
4350 :DRILL_TOTAL_REPEATS: 3
4351 :DRILL_FAILURE_COUNT: 0
4352 :DRILL_AVERAGE_QUALITY: 5.0
4354 :DRILL_LAST_QUALITY: 5
4355 :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:40>
4360 :ID: af4cc865-fe0c-424b-aa5b-2097320d6fb6
4361 :DRILL_LAST_INTERVAL: 0.0
4362 :DRILL_REPEATS_SINCE_FAIL: 0
4363 :DRILL_TOTAL_REPEATS: 5
4364 :DRILL_FAILURE_COUNT: 2
4365 :DRILL_AVERAGE_QUALITY: 3.083
4367 :DRILL_LAST_QUALITY: 2
4368 :DRILL_LAST_REVIEWED: <2014-04-14 Mon 11:31>
4370 ido kill buffer/file
4372 SCHEDULED: <2014-04-04 Fri>
4374 :ID: c93d6e0c-ae33-45aa-9610-ce33cfc406a0
4375 :DRILL_LAST_INTERVAL: 25.8141
4376 :DRILL_REPEATS_SINCE_FAIL: 5
4377 :DRILL_TOTAL_REPEATS: 5
4378 :DRILL_FAILURE_COUNT: 1
4379 :DRILL_AVERAGE_QUALITY: 3.0
4381 :DRILL_LAST_QUALITY: 3
4382 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:37>
4384 ido open dired buffer
4386 SCHEDULED: <2014-03-11 Tue>
4388 :ID: 8eab4299-207f-4a4a-a698-38f31cb5ff1b
4389 :DRILL_LAST_INTERVAL: 1.7651
4390 :DRILL_REPEATS_SINCE_FAIL: 1
4391 :DRILL_TOTAL_REPEATS: 6
4392 :DRILL_FAILURE_COUNT: 6
4393 :DRILL_AVERAGE_QUALITY: 2.583
4395 :DRILL_LAST_QUALITY: 3
4396 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:38>
4398 ido search within all subdirectories
4400 SCHEDULED: <2014-03-10 Mon>
4402 :ID: cb7f6420-1f70-4ddb-ad73-83c3b22ef0e2
4403 :DRILL_LAST_INTERVAL: 7.6174
4404 :DRILL_REPEATS_SINCE_FAIL: 3
4405 :DRILL_TOTAL_REPEATS: 8
4406 :DRILL_FAILURE_COUNT: 4
4407 :DRILL_AVERAGE_QUALITY: 2.583
4409 :DRILL_LAST_QUALITY: 3
4410 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:01>
4412 ido create subdirectory
4414 SCHEDULED: <2014-04-01 Tue>
4416 :ID: eb798918-4dd2-40e1-9d08-82ade145869d
4417 :DRILL_LAST_INTERVAL: 23.2268
4418 :DRILL_REPEATS_SINCE_FAIL: 5
4419 :DRILL_TOTAL_REPEATS: 6
4420 :DRILL_FAILURE_COUNT: 4
4421 :DRILL_AVERAGE_QUALITY: 3.083
4423 :DRILL_LAST_QUALITY: 3
4424 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:34>
4426 ido search recently used directories
4428 SCHEDULED: <2014-03-14 Fri>
4430 :ID: db965c9e-feb0-4213-b631-7cfa0208cfdb
4431 :DRILL_LAST_INTERVAL: 23.0811
4432 :DRILL_REPEATS_SINCE_FAIL: 4
4433 :DRILL_TOTAL_REPEATS: 4
4434 :DRILL_FAILURE_COUNT: 1
4435 :DRILL_AVERAGE_QUALITY: 3.75
4437 :DRILL_LAST_QUALITY: 4
4438 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 16:36>
4440 ido next/previous recently used directory
4442 **** TODO implement this keybind, normally ctrl-space
4443 ido use current pattern and start a new one
4446 goto next-prev node regardless of structure
4448 goto cross reference
4450 Info-follow-nearest-node
4451 #+begin_src emacs-lisp
4452 (define-key Info-mode-map "x" 'Info-follow-nearest-node)
4454 m, f, n, p or ^ command, depending on where you click.
4456 *** [S-return] :drill:
4457 SCHEDULED: <2014-03-11 Tue>
4459 :ID: b9e47939-8033-4adc-8bf4-734b25f4fc47
4460 :DRILL_LAST_INTERVAL: 2.0943
4461 :DRILL_REPEATS_SINCE_FAIL: 1
4462 :DRILL_TOTAL_REPEATS: 7
4463 :DRILL_FAILURE_COUNT: 3
4464 :DRILL_AVERAGE_QUALITY: 2.633
4466 :DRILL_LAST_QUALITY: 3
4467 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:38>
4469 ac-expand, then select next candidates
4471 SCHEDULED: <2014-03-14 Fri>
4473 :ID: 828416d4-7ce4-4817-aede-068b80f3041f
4474 :DRILL_LAST_INTERVAL: 23.0811
4475 :DRILL_REPEATS_SINCE_FAIL: 4
4476 :DRILL_TOTAL_REPEATS: 4
4477 :DRILL_FAILURE_COUNT: 1
4478 :DRILL_AVERAGE_QUALITY: 3.75
4480 :DRILL_LAST_QUALITY: 4
4481 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 16:38>
4483 ac filter completions
4486 SCHEDULED: <2014-03-22 Sat>
4488 :ID: 173e9cec-e401-4f03-90cc-72cba462b2f2
4489 :DRILL_LAST_INTERVAL: 31.1381
4490 :DRILL_REPEATS_SINCE_FAIL: 4
4491 :DRILL_TOTAL_REPEATS: 4
4492 :DRILL_FAILURE_COUNT: 0
4493 :DRILL_AVERAGE_QUALITY: 3.75
4495 :DRILL_LAST_QUALITY: 3
4496 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:50>
4498 agenda cycle todo state
4500 *** [C-c / t] :drill:
4501 SCHEDULED: <2014-03-13 Thu>
4503 :ID: a5775c4f-c5d3-4024-a280-6628c5e7ab39
4504 :DRILL_LAST_INTERVAL: 10.7692
4505 :DRILL_REPEATS_SINCE_FAIL: 3
4506 :DRILL_TOTAL_REPEATS: 6
4507 :DRILL_FAILURE_COUNT: 1
4508 :DRILL_AVERAGE_QUALITY: 3.167
4510 :DRILL_LAST_QUALITY: 4
4511 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:09>
4514 *** [S-<tab>] :drill:
4515 SCHEDULED: <2014-03-27 Thu>
4517 :ID: 1c1a4061-5cff-4826-aec2-8f677aab33a9
4518 :DRILL_LAST_INTERVAL: 50.6823
4519 :DRILL_REPEATS_SINCE_FAIL: 3
4520 :DRILL_TOTAL_REPEATS: 3
4521 :DRILL_FAILURE_COUNT: 0
4522 :DRILL_AVERAGE_QUALITY: 5.0
4524 :DRILL_LAST_QUALITY: 5
4525 :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:44>
4527 org-shifttab global visibility cycle / move table cell
4529 SCHEDULED: <2014-03-14 Fri>
4531 :ID: 9ba74a38-655c-4f96-8443-b574ee25c544
4532 :DRILL_LAST_INTERVAL: 5.238
4533 :DRILL_REPEATS_SINCE_FAIL: 2
4534 :DRILL_TOTAL_REPEATS: 7
4535 :DRILL_FAILURE_COUNT: 2
4536 :DRILL_AVERAGE_QUALITY: 2.801
4538 :DRILL_LAST_QUALITY: 3
4539 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:33>
4542 *** [C-cx p] :drill:
4543 SCHEDULED: <2014-03-15 Sat>
4545 :ID: 4b486f48-219d-4517-96c2-83ef839abda5
4546 :DRILL_LAST_INTERVAL: 24.4352
4547 :DRILL_REPEATS_SINCE_FAIL: 4
4548 :DRILL_TOTAL_REPEATS: 4
4549 :DRILL_FAILURE_COUNT: 0
4550 :DRILL_AVERAGE_QUALITY: 3.75
4552 :DRILL_LAST_QUALITY: 4
4553 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:39>
4557 SCHEDULED: <2014-03-24 Mon>
4559 :ID: 60e57e56-d815-4d9b-ba78-2a56164db209
4560 :DRILL_LAST_INTERVAL: 32.7466
4561 :DRILL_REPEATS_SINCE_FAIL: 4
4562 :DRILL_TOTAL_REPEATS: 4
4563 :DRILL_FAILURE_COUNT: 0
4564 :DRILL_AVERAGE_QUALITY: 4.0
4566 :DRILL_LAST_QUALITY: 4
4567 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:52>
4569 org insert horizontal line
4571 SCHEDULED: <2014-03-24 Mon>
4573 :ID: 6987ba15-fbc0-459b-bc27-cf9016baebc3
4574 :DRILL_LAST_INTERVAL: 32.7466
4575 :DRILL_REPEATS_SINCE_FAIL: 4
4576 :DRILL_TOTAL_REPEATS: 4
4577 :DRILL_FAILURE_COUNT: 0
4578 :DRILL_AVERAGE_QUALITY: 4.0
4580 :DRILL_LAST_QUALITY: 4
4581 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:50>
4585 i'd like to drill these sometime when I have space in my head, or I
4588 [enter input to the stack, or duplicate top stack item]
4590 [cycle 3 elements on stack]
4592 [cycle 2 elements on stack]
4596 [begin negative number]
4600 [calc named command]
4602 [delete 2nd from top of stack]
4604 [0=whole stack, 1-9=that many, -1-9=that element]
4606 [remove from the top of the stack]
4608 [algebraic mode. infix expressions are calculated when input to the stack]
4610 [auto algebraic mode]
4612 [top x of stack reference]
4614 [store to variable: store, top, retrieve, unstore. the quick variables 0-9 don't need s prefix]
4618 [trail prev/next/end/yankh]
4620 [calc edit mode, to edit the top of stack]
4622 ** single/special keys
4624 :ID: beginning-of-keybind-table-data
4628 :CUSTOM_ID: 6c10a716-1d8e-4ce4-8e26-64468f19c17a
4631 #+begin_src emacs-lisp
4632 (define-key isearch-mode-map (kbd "<tab>") 'isearch-query-replace)
4636 :ID: d93321a4-6732-421f-9c03-0073c4cbfdcb
4637 :CUSTOM_ID: 51ece189-1840-41a1-8ca0-19f9a0481895
4640 #+begin_src emacs-lisp
4641 ;; explained in http://stackoverflow.com/questions/7411920/how-to-bind-search-and-search-repeat-to-c-f-in-emacs
4642 (global-set-key (kbd search-key) 'isearch-forward)
4643 (define-key isearch-mode-map "\t" nil)
4644 (define-key isearch-mode-map (kbd search-key) 'isearch-repeat-forward)
4645 ;; get rid of the standard completion binding, always use auto-complete
4646 ;; this didn't work very well
4647 ;;(global-set-key (kbd "TAB") 'auto-complete)
4648 (define-key global-map [remap completion-at-point] 'auto-complete)
4654 :ID: 7e71b6fe-dcef-4f91-87d9-d996ddf7db5d
4655 :CUSTOM_ID: 00d589b7-2b8e-494c-b761-3afefebe6ec6
4658 #+begin_src emacs-lisp
4659 ;; taken from emacs wiki, along with home function
4660 ;; http://www.emacswiki.org/emacs/BackToIndentationOrBeginning
4661 (defun point-in-comment ()
4662 "Determine if the point is inside a comment"
4664 (let ((syn (syntax-ppss)))
4666 (not (nth 3 syn)))))
4667 (defun end-of-code-or-line (arg)
4668 "Move to end of line, or before start of comments depending on situation.
4669 Toggle back and forth positions if we are already at one.
4670 Comments are recognized in any mode that sets syntax-ppss
4674 (let ((start (point))
4675 (bol (save-excursion
4678 (eol (progn (move-end-of-line arg) (point))))
4679 (while (point-in-comment)
4681 (when (= (point) bol)
4683 (throw 'bol (and (not (= eol start)) (>= start (point))))))
4684 (move-end-of-line arg)))
4686 (global-set-key (kbd "<end>") 'end-of-code-or-line)(add-hook 'org-mode-hook (lambda () (define-key org-mode-map (kbd "<end>") 'org-end-of-line)))
4691 :ID: f52de4a4-212c-4133-9038-2b652c739ad2
4692 :CUSTOM_ID: 7800e455-c3f6-4a8f-8907-b2292449ab67
4695 #+begin_src emacs-lisp
4696 (defun back-to-indentation-or-beginning ()
4698 (if (= (point) (progn (back-to-indentation) (point)))
4699 (if (derived-mode-p 'org-mode)
4700 (org-beginning-of-line)
4701 (beginning-of-line))))
4702 (global-set-key (kbd "<home>") 'back-to-indentation-or-beginning)
4708 :CUSTOM_ID: 3072901e-5cf3-4d6e-9ac8-3ef64a5f6ad2
4712 #+begin_src emacs-lisp
4713 (global-set-key (kbd "<S-iso-lefttab>") 'indent-buffer)
4718 :CUSTOM_ID: e53728b6-054d-4443-a03e-6cf02d13724d
4721 #+begin_src emacs-lisp
4723 (global-set-key (kbd "<S-delete>") 'send-shell)
4725 ;; optional variables used by send-shell
4726 (setq shell-send-yank-key nil)
4728 (defun repeat-shell ()
4730 "Repeat the last command in shell-mode, displaying the window if needed."
4731 (let ((shell-buffer (get-buffer "*shell*")))
4733 (buffer-window-show shell-buffer)
4734 (let ((original-buffer (current-buffer)))
4736 (setq shell-buffer (current-buffer))
4737 (switch-to-buffer original-buffer)))
4738 (with-current-buffer shell-buffer
4739 (goto-char (point-max))
4740 (call-interactively 'comint-previous-input)
4741 ;; the t flag makes the buffer advance
4742 (comint-send-input nil t))))
4744 (setq compilation-filenames '("Makefile" "makefile"))
4746 (defun get-nearest-compilation-file ()
4747 "Search for the compilation file traversing up the directory tree."
4749 (let ((dir default-directory)
4750 (parent-dir (file-name-directory (directory-file-name default-directory)))
4751 (nearest-compilation-file 'nil))
4752 (while (and (not (string= dir parent-dir))
4753 (not nearest-compilation-file))
4754 (dolist (filename compilation-filenames)
4755 (setq file-path (concat dir filename))
4756 (when (file-readable-p file-path)
4757 (setq nearest-compilation-file file-path)))
4758 (setq dir parent-dir
4759 parent-dir (file-name-directory (directory-file-name parent-dir))))
4760 nearest-compilation-file))
4763 "call run-fun if it is set, else run make if there is a makefile,
4764 else save and repeat last shell command.
4765 run-fun is meant to store file local variables, which show how to
4766 do the main thing we want on this file, generally compile and
4769 example of setting it in a file:
4771 ;; run-fun: merge-test
4774 (if (and (boundp 'run-fun) run-fun)
4776 (let ((makefile (get-nearest-compilation-file)))
4777 (if (and makefile (stringp mode-name) (string= mode-name "C/l"))
4779 "make -f %s" (get-nearest-compilation-file)))
4783 (defun send-shell ()
4785 (send-shell-buffer "*shell*" 'shell (kbd "C-v")))
4787 (defun send-python ()
4789 (send-shell-buffer "*Python*" 'py-shell (kbd "C-v")))
4792 (defun send-shell-buffer (buffer-name &optional init shell-send-yank-key)
4793 "Send current line or region to shell-mode buffer.
4794 When in shell-mode, copy the current line to the
4795 most recently visited visible window.
4797 SHELL-SEND-YANK-KEY: key to use instead
4798 of yank to paste into recent window. This allows compatibility with
4799 modes like org-mode which have their own yank function."
4800 (if (string= (buffer-name) buffer-name)
4801 ;; this section is copied out of comint-send-input
4803 (let ((proc (get-buffer-process (current-buffer))))
4804 (if (not proc) (user-error "Current buffer has no process")
4807 (let* ((pmark (process-mark proc))
4808 (intxt (if (>= (point) (marker-position pmark))
4809 (progn (if comint-eol-on-send (end-of-line))
4810 (buffer-substring pmark (point)))
4811 (let ((copy (funcall comint-get-old-input)))
4816 (if (= (length intxt) 0)
4817 (kill-new (comint-previous-matching-input-string "." 1))
4818 (kill-new intxt)))))
4819 (kill-append "\n" nil)
4820 (select-window (previous-window nil nil 'visible))
4821 (if (and (boundp 'shell-send-yank-key) shell-send-yank-key)
4822 (call-interactively (global-key-binding shell-send-yank-key))
4824 (select-window (next-window nil nil 'visible)))
4829 (setq start (save-excursion (beginning-of-line) (point))
4830 end (save-excursion (end-of-line) (point)))
4831 (let (line-move-visual)
4832 (call-interactively 'next-line)))
4833 (send-comint-input buffer-name start end init))))
4835 ;; supporting functions
4838 (defun send-comint-input (buffer-name start end &optional init)
4839 "Input the region to BUFFER-NAME, assuming it is a comint-derived buffer.
4840 Show BUFFER-NAME if it is not show.
4841 Call INIT if BUFFER-NAME does not exist."
4842 (let ((input (filter-buffer-substring start end))
4843 (buffer (get-buffer buffer-name)))
4845 (message "nobuffer")
4846 ;; save-excursion etc. don't work for (shell), so I do this instead
4847 (if init (let ((original-buffer (current-buffer)))
4848 (funcall init (and (boundp 'send-shell-buffer-name) send-shell-buffer-name))
4849 (switch-to-buffer original-buffer)
4850 (setq buffer (get-buffer buffer-name)))
4851 (error "No existing buffer found and no init function argument. ")))
4852 (buffer-window-show buffer)
4853 (with-current-buffer buffer
4854 (let ((proc (get-buffer-process buffer)))
4855 (goto-char (process-mark proc))
4857 (comint-send-input nil t)))))
4859 (defun buffer-window-show (&optional buffer action)
4860 "Like temp-buffer-window-show, but removed stuff
4861 relevant to it being temp or help."
4863 (with-current-buffer buffer
4864 (when (let ((window-combination-limit
4865 ;; When `window-combination-limit' equals
4866 ;; `temp-buffer' or `temp-buffer-resize' and
4867 ;; `temp-buffer-resize-mode' is enabled in this
4868 ;; buffer bind it to t so resizing steals space
4869 ;; preferably from the window that was split.
4870 (if (or (eq window-combination-limit 'temp-buffer)
4871 (and (eq window-combination-limit
4872 'temp-buffer-resize)
4873 temp-buffer-resize-mode))
4875 window-combination-limit)))
4877 ;;(message "window-combination-limit")
4878 ;;(print window-combination-limit)
4879 (setq window (display-buffer buffer action)))
4880 (setq frame (window-frame window))
4881 (unless (eq frame (selected-frame))
4882 (raise-frame frame))
4883 (setq minibuffer-scroll-window window)
4884 (set-window-hscroll window 0)
4885 ;; Return the window.
4889 ;; when poping help, etc, allow reusing a window in a different frame if it is visible
4890 ;; figured this out after spending quite a while reading doc string for display-buffer
4891 ;; which is the main function which uses this.
4892 ;; it will use other vars or its arg to override this,
4893 ;; but those things are often nil.
4894 ;; aha moments in reading it: ACTION = (FUNCTION-or-FUNCTIONLIST ALIST)
4895 ;; FRAME adds an association to ACTION's alist, but it's not used if ACTION arg is nil.
4896 (setq display-buffer-fallback-action `(,(car display-buffer-fallback-action) . '(reusable-frames . visible)))
4897 ;; stop splitting windows verticallly when I open a buffer or shell
4898 (setq split-height-threshold nil)
4903 :CUSTOM_ID: d8c473ac-5507-4a6b-9e5a-46558c17b09f
4906 #+begin_src emacs-lisp
4907 (global-set-key (kbd shell-key) 'shell-wrap)
4911 :CUSTOM_ID: 2365f5a7-b89a-4a97-b272-ac8ae9c2cc66
4914 #+begin_src emacs-lisp
4915 (global-set-key (kbd "<S-kp-divide>") 'previous-buffer)
4919 :CUSTOM_ID: 60a56803-f38d-4d0a-8ed5-1c94ba97b6f6
4923 :CUSTOM_ID: fab6adea-ed20-45ab-a0a3-776c68d5c3a5
4927 #+begin_src emacs-lisp
4928 ;; todo, this doesn't set the keybind for the help minibuffer
4929 (when (boundp 'icomplete-minibuffer-map)
4930 (define-key icomplete-minibuffer-map (kbd "<return>")
4931 'minibuffer-force-complete-and-exit))
4933 (add-hook 'ido-setup-hook
4935 (define-key ido-completion-map (kbd "<return>") 'ido-exit-minibuffer)))
4936 (define-key minibuffer-local-completion-map (kbd "<return>") 'exit-minibuffer)
4939 (define-key isearch-mode-map (kbd "<return>") 'isearch-exit)
4940 (define-key isearch-mode-map "\r" nil)
4943 (global-set-key (kbd "<return>") 'indent-new-comment-line)
4944 (define-key ac-completing-map (kbd "<return>") nil)
4945 (define-key ac-completing-map "\r" nil)
4946 (define-key minibuffer-local-map "\r" nil)
4947 (define-key minibuffer-local-map (kbd "<return>") 'exit-minibuffer)
4948 (define-key icomplete-minibuffer-map (kbd "C-j") 'exit-minibuffer)
4949 (define-key minibuffer-local-map (kbd "C-j") 'exit-minibuffer)
4950 (define-key minibuffer-local-must-match-map (kbd "C-j") 'exit-minibuffer)
4951 (define-key minibuffer-local-must-match-map "\r" nil)
4952 (define-key minibuffer-local-must-match-map (kbd "<return>")
4953 'minibuffer-complete-and-exit)
4955 (add-hook 'Man-mode-hook
4957 (define-key Man-mode-map "\r" nil)
4958 (define-key Man-mode-map "x" 'man-follow)))
4960 (add-hook 'comint-mode-hook
4962 (define-key comint-mode-map "\r" nil)
4963 (define-key comint-mode-map (kbd "<return>") 'comint-send-input)))
4965 (add-hook 'org-mode-hook
4967 (define-key org-mode-map "\r" nil)
4968 (define-key org-mode-map (kbd "<return>") 'org-return-indent)))
4970 (add-hook 'comint-mode-hook
4972 (define-key comint-mode-map "\C-m" nil)
4973 (define-key comint-mode-map "\C-d" nil)))
4974 ;; use space instead of enter in calc mode,
4975 ;; cuz it is not easy to rebind enter in calc mode
4978 *** [s-return] :drill:
4979 SCHEDULED: <2014-03-10 Mon>
4981 auto-correct-prev-word
4982 :ID: db46193b-f202-4927-bc76-2ad74d9f0ed7
4983 :CUSTOM_ID: 819cfb55-3a2f-4f20-8591-f819d1a6869a
4984 :DRILL_LAST_INTERVAL: 7.9493
4985 :DRILL_REPEATS_SINCE_FAIL: 3
4986 :DRILL_TOTAL_REPEATS: 7
4987 :DRILL_FAILURE_COUNT: 4
4988 :DRILL_AVERAGE_QUALITY: 2.696
4990 :DRILL_LAST_QUALITY: 3
4991 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:05>
4993 auto-correct-prev-word
4995 #+begin_src emacs-lisp
4996 (global-set-key (kbd "<S-return>") 'flyspell-auto-correct-previous-word)
5002 :CUSTOM_ID: 7a868484-9c63-4a73-abda-7751cb2c02be
5005 #+begin_src emacs-lisp
5006 (global-set-key (kbd "<kp-enter>") 'set-mark-command)
5010 :CUSTOM_ID: 097b97e0-8ad8-40f7-8388-c4ace1706b38
5013 #+begin_src emacs-lisp
5014 (global-set-key (kbd "<S-kp-enter>") 'smex)
5019 *** [mouse-2 mode line] :drill:
5020 SCHEDULED: <2014-03-17 Mon>
5022 :ID: d79167ad-9782-40b3-8e40-55aaa8428dec
5023 :CUSTOM_ID: 69aaa631-6fb5-4beb-b2d8-c0f3d92c0a98
5024 :DRILL_LAST_INTERVAL: 15.2345
5025 :DRILL_REPEATS_SINCE_FAIL: 4
5026 :DRILL_TOTAL_REPEATS: 7
5027 :DRILL_FAILURE_COUNT: 2
5028 :DRILL_AVERAGE_QUALITY: 2.893
5030 :DRILL_LAST_QUALITY: 3
5031 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:06>
5033 mouse-delete-other-windows
5034 *** C-mouse-2 mode line
5036 :CUSTOM_ID: 501479ab-e1e2-497e-bd86-071f8afa3378
5038 mouse-split-window-horizontally
5039 *** M-mouse-2 mode line
5041 :CUSTOM_ID: 8de14d73-499e-406a-b5c4-e295e53d3f4c
5043 *** S-mouse-2 mode line
5045 :CUSTOM_ID: f389cdbb-186a-4cad-af45-b3c75a508275
5047 *** C-M-mouse-2 mode line
5049 :CUSTOM_ID: cb2be69c-f86c-4120-b7f2-1c09b7bcd816
5051 *** C-S-mouse2 mode line
5053 :CUSTOM_ID: 7b4eced3-ce5e-49ce-8bfe-8823e8f5f93e
5055 *** [mouse-3 mode line] :drill:
5056 SCHEDULED: <2014-03-19 Wed>
5058 :ID: 324e43e7-d468-4edc-b892-c1e249ff49fa
5059 :CUSTOM_ID: 917a1844-8c38-4f31-8616-50fc81334f2c
5060 :DRILL_LAST_INTERVAL: 27.607
5061 :DRILL_REPEATS_SINCE_FAIL: 4
5062 :DRILL_TOTAL_REPEATS: 4
5063 :DRILL_FAILURE_COUNT: 0
5064 :DRILL_AVERAGE_QUALITY: 3.5
5066 :DRILL_LAST_QUALITY: 3
5067 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:50>
5070 *** C-mouse-3 mode line
5072 :CUSTOM_ID: b36a218f-6a92-4594-940b-13ffdf79cc9c
5074 *** M-mouse-3 mode line
5076 :CUSTOM_ID: 11c48311-05a4-440e-b742-ec397f22f479
5078 *** S-mouse-3 mode line
5080 :CUSTOM_ID: 03768943-d8cd-4dcb-bc48-393e9a6bb31f
5082 *** C-M-mouse-3 mode line
5084 :CUSTOM_ID: ab213201-bab7-4d30-8f61-fee80e7f2c6f
5086 *** C-S-mouse-3 mode line
5088 :CUSTOM_ID: 0bcac7a3-2943-49b7-b281-d834d374caf9
5092 :CUSTOM_ID: 4e60e2e4-8c2f-4450-8060-2d793ede530c
5095 *** [C-mouse-1] :drill:
5096 SCHEDULED: <2014-03-15 Sat>
5098 :CUSTOM_ID: b661f84f-57df-4095-9dc1-d1a876a53ee5
5099 :ID: 6b82708e-d5de-48cc-8abd-225186eb8729
5100 :DRILL_LAST_INTERVAL: 24.4352
5101 :DRILL_REPEATS_SINCE_FAIL: 4
5102 :DRILL_TOTAL_REPEATS: 4
5103 :DRILL_FAILURE_COUNT: 0
5104 :DRILL_AVERAGE_QUALITY: 3.75
5106 :DRILL_LAST_QUALITY: 4
5107 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 18:03>
5109 buffer list context menu
5112 :CUSTOM_ID: c71c8a71-7027-44f3-be19-1d3c18ff5129
5116 :CUSTOM_ID: 84507cd6-8a75-4754-bf9e-5a30f57fa4ac
5120 :CUSTOM_ID: 95eea58e-82b0-48a3-a7c8-0d17c50b7c2e
5124 :CUSTOM_ID: 2d450c06-d9aa-4751-a926-0922c0c3a402
5128 :CUSTOM_ID: 086b0b50-054f-462d-92fa-b27852f887b0
5133 :CUSTOM_ID: 48b8de22-6638-44da-986f-16e0e69312dd
5137 :CUSTOM_ID: fb315a27-6351-4ce2-9692-589608793c43
5141 :CUSTOM_ID: 7cc73036-844b-44d3-afe1-1e76ee626b53
5145 :CUSTOM_ID: 85f35287-5130-47ab-832d-af78dc2a3e70
5149 :CUSTOM_ID: a27ad43f-3be2-4155-9a9f-c144170372ce
5153 :CUSTOM_ID: 0481632e-9c50-4328-9365-c4b5bf967b66
5156 #+begin_src emacs-lisp
5157 (define-key global-map [down-mouse-3] 'mouse3-func)
5158 (global-set-key [mouse-3] 'mouse3-set-mark)
5159 (global-set-key [drag-mouse-3] 'mouse3-set-mark)
5161 *** [C-mouse-3] :drill:
5162 SCHEDULED: <2014-03-13 Thu>
5164 :ID: b075e62c-55c6-46f5-a23a-4c4c5b9f267e
5165 :CUSTOM_ID: 9623c78f-7705-4cbe-a990-c24eb1067377
5166 :DRILL_LAST_INTERVAL: 22.1939
5167 :DRILL_REPEATS_SINCE_FAIL: 4
5168 :DRILL_TOTAL_REPEATS: 4
5169 :DRILL_FAILURE_COUNT: 0
5170 :DRILL_AVERAGE_QUALITY: 3.5
5172 :DRILL_LAST_QUALITY: 4
5173 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 16:38>
5178 :CUSTOM_ID: fb6f4840-7e44-4c94-b913-f2014fda3325
5182 :CUSTOM_ID: a6d91332-c731-474c-9959-ddd03e8b2786
5186 :CUSTOM_ID: 6b4d0e4d-1a2c-4e42-a925-e39548c4e264
5190 :CUSTOM_ID: a983a7c5-c17e-4e08-b3e2-a45a44d7a2b6
5194 :CUSTOM_ID: efaec161-b279-4129-86fd-b410430926e4
5198 #+begin_src emacs-lisp
5199 (global-set-key (kbd "<mouse-6>") 'move-mouse-to-point)
5204 :CUSTOM_ID: e055ae8a-cc94-4e0f-9e98-9cb62453b8d6
5208 :CUSTOM_ID: 7d1c03a9-b153-47dc-a037-7ee333ca8da9
5212 :CUSTOM_ID: 8f688d00-8cdb-4163-818c-a0cfba3b1c0a
5216 :CUSTOM_ID: 90ce7df8-2346-4203-8ced-5da51c7c1bfc
5220 :CUSTOM_ID: 0afdad0a-f9c4-4bfa-baa8-cc20d6cab628
5224 :CUSTOM_ID: ea9d2415-0fd7-4f83-9867-a7a81899e74b
5228 :CUSTOM_ID: dc2428d2-412c-4811-8327-3bb70bfa0e76
5232 :CUSTOM_ID: 530ed41d-6ed6-4bcd-9df7-58ddbfe8b44a
5236 :CUSTOM_ID: c7d388c3-f4a6-4489-b23a-20ebb7515430
5240 :CUSTOM_ID: fc6ac9e8-fd9a-4270-9cd8-26713d6bc40f
5244 :CUSTOM_ID: 401503ad-3750-4002-a28e-1f1345412bc6
5248 :CUSTOM_ID: c306a3ef-4b81-4d54-a914-99f312d8f92f
5252 :CUSTOM_ID: 11059916-0a48-4f08-b85a-9b82243e4145
5256 :CUSTOM_ID: fddd8716-5b16-484e-9d70-358fea201d99
5260 :CUSTOM_ID: c6a7978b-a5cf-4ae7-b1d2-57ea72adb487
5264 :CUSTOM_ID: 376b8b84-ae1b-4bff-b1c8-263049186637
5268 :CUSTOM_ID: 4e8081cb-5692-4d2e-8657-c6c7931046fd
5272 :CUSTOM_ID: a1108fd9-0df0-43ac-9dbb-0402d24f5b57
5276 :CUSTOM_ID: e9fe4916-14f5-4dc6-8dba-ed982b7172a1
5280 :CUSTOM_ID: 50db5a06-452e-491f-875b-3de936a4d04a
5282 #+begin_src emacs-lisp
5283 ;; for when we have a standard keyboard which is not remapped
5284 (global-set-key (kbd "M-2") 'smex)
5290 :CUSTOM_ID: c3ad691b-0082-46f3-8588-ef2223eab643
5294 :CUSTOM_ID: 90963055-086b-4d96-8131-d890ff3cb597
5298 :CUSTOM_ID: 4d13741e-2207-4d2c-a719-e818bb9f3419
5302 :CUSTOM_ID: b441f9e2-d035-4907-b947-0f3b4d6d062d
5306 :CUSTOM_ID: 3ea6ff26-4db4-46c8-b681-e08acd9b6a06
5310 :CUSTOM_ID: a376d2fb-999d-48fd-8c9e-36b7661c5ba7
5314 :CUSTOM_ID: 50b8356c-7ba5-4e89-b4d6-618f6c571678
5318 :CUSTOM_ID: cd997379-f611-4d06-91c7-ed6cabb618ee
5322 :CUSTOM_ID: 1c8941c9-3025-4dff-bcf3-09d8de44f44f
5326 :ID: bef4fed5-5338-4c66-a759-13dc20ab9bfb
5327 :CUSTOM_ID: c44d0f65-9502-4cc6-9642-96d907f6b093
5330 #+begin_src emacs-lisp
5331 (global-set-key (kbd "<kp-left>") 'indent-region)
5335 :CUSTOM_ID: dd0cd32a-1d62-4b19-9d4f-ee242fb7c7b9
5339 :CUSTOM_ID: 4f7c3799-28a7-4fc2-85fc-16d768d2047c
5343 :CUSTOM_ID: f84a7347-f88a-4888-bf5d-e15b98b5c3a2
5347 :CUSTOM_ID: 74a1afca-bd24-469b-93e9-7a9681a9e467
5351 :CUSTOM_ID: 6c822a4a-0e64-430b-8d21-46b387911f2f
5355 :ID: 0e93f6a0-3d6f-45b1-b14e-10abbdfa3ee4
5356 :CUSTOM_ID: 2458c6bc-7113-4d4b-bbdf-206e1cb842a7
5359 #+begin_src emacs-lisp
5360 (global-set-key (kbd "<kp-begin>") 'mark-defun)
5364 :CUSTOM_ID: 39588066-77b8-4863-be0d-0f1fad8f0e2a
5368 :CUSTOM_ID: b3542b42-9d71-4a3f-92b1-f79f275bcf52
5372 :CUSTOM_ID: 66aed3e7-d7bb-4393-a95b-b90b3a410684
5376 :CUSTOM_ID: 1060d464-eed3-4a17-a5c4-d8e8941f6925
5380 :CUSTOM_ID: efd7867a-a87f-43ef-a849-0e4029431d7f
5384 :ID: d156225a-b48e-45e2-80a7-ea1a7dbbc794
5385 :CUSTOM_ID: 3b79bc58-6067-43bd-9471-9d592744a25a
5388 #+begin_src emacs-lisp
5389 (global-set-key (kbd "<kp-right>") 'ibuffer)
5393 :CUSTOM_ID: 5592b3d3-7ade-4486-ac94-aed0aa3d78f5
5397 :CUSTOM_ID: c76bedd9-90a7-41fe-9327-607f88f60a3a
5401 :CUSTOM_ID: 8bbda9a2-7909-44fb-af24-a86dbbd5d16f
5405 :CUSTOM_ID: 7c5838f6-5cc9-4bbc-bd07-403cc009cf35
5409 :CUSTOM_ID: c6f2edc9-ffd3-400f-8014-bb92ea6e520b
5413 :CUSTOM_ID: c98ba390-f2e3-4c14-8d41-142b54e76d77
5417 :CUSTOM_ID: 5597d00f-4a89-4af2-aac1-98808763744c
5421 :CUSTOM_ID: 5cbafd0e-0c8f-4e14-a24e-f847c341e5c1
5425 :CUSTOM_ID: 92f7d836-ae32-4bba-9120-72e747feb832
5429 :CUSTOM_ID: 30170d01-412e-4098-b27e-ed9294d8cf92
5433 :CUSTOM_ID: 81300d39-e60e-4b09-865e-584153f3b827
5437 :CUSTOM_ID: 0591db2b-6c5c-4438-9451-dcd686170c9d
5441 :CUSTOM_ID: 028ad953-1641-4f0c-83c2-72787310e447
5445 :CUSTOM_ID: 7c55f717-1093-48a7-b764-8f788540a4d7
5449 :CUSTOM_ID: f477fa15-3f04-48f6-a66a-4ba6eb0475f1
5453 :CUSTOM_ID: f280c9ab-49a8-4399-987b-bfde07c339be
5457 :CUSTOM_ID: 68a316aa-a05d-4ab0-87e4-88e8f2613795
5461 :ID: f3c60889-d948-4144-b5b0-04aeeec95309
5462 :CUSTOM_ID: a3b51adb-4405-4d9f-9b88-a8faa479fbe7
5464 delete-horizontal-space
5465 #+begin_src emacs-lisp
5466 (global-set-key (kbd "<kp-prior>") 'delete-horizontal-space)
5470 :CUSTOM_ID: 2683f49c-a465-42d0-b85b-6aa345ac2213
5474 :CUSTOM_ID: 91b0ee09-9eba-4b60-b05f-720eaca53065
5478 :CUSTOM_ID: b79e626c-4425-409f-92ce-b88335629c34
5482 :CUSTOM_ID: 4838285f-905b-4e18-8605-ff24a20ce9e1
5486 :CUSTOM_ID: 763edfac-da7d-4360-a383-6a7f42cc2e02
5490 :CUSTOM_ID: 57e1a794-26f8-4fb6-b753-ef1ad1ff0af9
5494 :CUSTOM_ID: 32426751-f87b-4fd5-b435-914ac8f54e5f
5498 :CUSTOM_ID: 1b83659c-61dc-425f-bead-fc2a0d198dde
5502 :CUSTOM_ID: d2f07180-2d20-4633-9c79-78f4d992f7a6
5504 *** C-M-10/kp-insert
5506 :CUSTOM_ID: 1f6eabdc-703c-4a05-829c-553ccf7d082d
5508 *** C-S-10/kp-insert
5510 :CUSTOM_ID: bb361418-370f-4b15-b7e1-8e85c7a6f032
5514 :CUSTOM_ID: 0f84dddc-a1d2-428d-8c17-cf9ddbd24784
5516 *** C-11/kp-subtract
5518 :CUSTOM_ID: 4c3309ee-eb67-43ff-bc4a-44574b1c5e0f
5520 *** M-11/kp-subtract
5522 :CUSTOM_ID: e95a2822-5f0d-4b32-a17f-15d4650e086f
5524 *** S-11/kp-subtract
5526 :CUSTOM_ID: 667a9853-38c6-4bb2-8c01-6a30075929b4
5528 *** C-M-11/kp-subtract
5530 :CUSTOM_ID: d5b17698-9bfe-4bd7-af26-b5dd51684e7d
5532 *** C-S-11/kp-subtract
5534 :CUSTOM_ID: cfde57be-a728-4955-8b96-9ae5aa1cce01
5538 :CUSTOM_ID: 5e7a0116-a847-4fec-81ed-a0286bb08ac5
5542 :CUSTOM_ID: 41dcdb69-8436-495b-9e55-a0cd623ac5aa
5546 :CUSTOM_ID: ebda57a2-cab3-4fed-b3b0-014a7e60c96f
5550 :CUSTOM_ID: 7e4c6085-cfbe-4c05-9edb-2aec2325f7b9
5554 :CUSTOM_ID: 7904cafb-7371-4bc9-a661-262d78f8f9b8
5558 :CUSTOM_ID: dcf498f0-5bcf-4402-bce0-561c11effb38
5562 :CUSTOM_ID: 33433f0f-5b0e-46ba-8452-d2a51e54769b
5565 on standard mouse, this scrolls,
5566 because we have the accuracy to pick things up and
5567 down easier, and because it is familiar.
5568 *** [C-scroll] :drill:
5569 SCHEDULED: <2014-03-27 Thu>
5571 cycle recent buffers
5572 :ID: 678b14e8-e991-46da-84a0-50d142ecbbba
5573 :CUSTOM_ID: 16506ba5-e8f2-4aec-bc1b-d2854d4e504c
5574 :DRILL_LAST_INTERVAL: 50.6823
5575 :DRILL_REPEATS_SINCE_FAIL: 3
5576 :DRILL_TOTAL_REPEATS: 3
5577 :DRILL_FAILURE_COUNT: 0
5578 :DRILL_AVERAGE_QUALITY: 5.0
5580 :DRILL_LAST_QUALITY: 5
5581 :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:36>
5585 #+begin_src emacs-lisp
5586 ;; compiling warns that next-line should be called interactively,
5587 ;; but we would have to do something dumb, like give it a
5588 ;; vector of keys in order to supply the 8 argument
5596 (global-set-key (kbd "<C-up>") 'up-fast)
5597 (global-set-key (kbd "<C-down>") 'down-fast)
5599 (add-hook 'comint-mode-hook
5601 (define-key comint-mode-map (kbd "<C-mouse-4>") 'comint-previous-prompt)
5602 (define-key comint-mode-map (kbd "<C-mouse-5>") 'comint-next-prompt)))
5608 :CUSTOM_ID: e1e2e253-450d-4620-af9e-78d378f49ad5
5612 #+begin_src emacs-lisp
5613 (global-set-key (kbd "<M-mouse-4>") 'backward-sexp)
5614 (global-set-key (kbd "<M-mouse-5>") 'forward-sexp)
5617 *** [S-scroll] :drill:
5618 SCHEDULED: <2014-03-22 Sat>
5621 :ID: c2da442e-b8c0-4b8a-899f-989af89bd857
5622 :CUSTOM_ID: 74b2196a-345d-453a-b7be-1915360eb201
5623 :DRILL_LAST_INTERVAL: 27.0855
5624 :DRILL_REPEATS_SINCE_FAIL: 5
5625 :DRILL_TOTAL_REPEATS: 5
5626 :DRILL_FAILURE_COUNT: 2
5627 :DRILL_AVERAGE_QUALITY: 3.4
5629 :DRILL_LAST_QUALITY: 4
5630 :DRILL_LAST_REVIEWED: <2014-02-23 Sun 02:26>
5632 expand/contract region
5634 #+begin_src emacs-lisp
5635 (global-set-key (kbd "<S-mouse-13>") 'my-contract-region)
5636 (global-set-key (kbd "<S-mouse-14>") 'er/expand-region)
5637 (global-set-key (kbd "<S-mouse-4>") 'my-contract-region)
5638 (global-set-key (kbd "<S-mouse-5>") 'er/expand-region)
5639 (global-set-key (kbd "<S-up>") 'my-contract-region)
5640 (global-set-key (kbd "<S-down>") 'er/expand-region)
5642 (defun my-contract-region (arg)
5644 (let ((current-prefix-arg '-))
5645 (call-interactively 'er/expand-region)))
5648 *** [C-M-scroll] :drill:
5649 SCHEDULED: <2014-03-27 Thu>
5652 :ID: b94d89ed-5a06-4916-b5f5-e0bf1a552362
5653 :CUSTOM_ID: bd2ca117-408c-49fc-a5ac-a938be21dfc0
5654 :DRILL_LAST_INTERVAL: 50.6823
5655 :DRILL_REPEATS_SINCE_FAIL: 3
5656 :DRILL_TOTAL_REPEATS: 3
5657 :DRILL_FAILURE_COUNT: 0
5658 :DRILL_AVERAGE_QUALITY: 5.0
5660 :DRILL_LAST_QUALITY: 5
5661 :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:40>
5665 background: I originally tried to make c-scroll be scroll
5667 for better compatibility with the standard mouse
5668 #+begin_src emacs-lisp
5669 (global-set-key (kbd "<C-M-mouse-4>") 'mwheel-scroll)
5670 (global-set-key (kbd "<C-M-mouse-5>") 'mwheel-scroll)
5671 ; (require 'smooth-scroll)
5672 ; (smooth-scroll-mode nil)
5673 ; (global-set-key (kbd "<C-M-mouse-4>") 'scroll-up-1)
5674 ;(global-set-key (kbd "<C-M-mouse-5>") 'scroll-down-1)
5677 *** [C-S-scroll] :drill:
5678 SCHEDULED: <2014-03-18 Tue>
5681 :ID: 368f60cb-91e5-4694-b342-e0049e5d3e2c
5682 :CUSTOM_ID: a69254a4-cf2d-450f-b477-2694b44a7e0d
5683 :DRILL_LAST_INTERVAL: 9.2113
5684 :DRILL_REPEATS_SINCE_FAIL: 3
5685 :DRILL_TOTAL_REPEATS: 7
5686 :DRILL_FAILURE_COUNT: 3
5687 :DRILL_AVERAGE_QUALITY: 2.943
5689 :DRILL_LAST_QUALITY: 3
5690 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:34>
5692 increase / decrease text size
5694 #+begin_src emacs-lisp
5695 (global-set-key (kbd "<C-S-mouse-4>") 'text-scale-increase)
5696 (global-set-key (kbd "<C-S-mouse-5>") 'text-scale-decrease)
5697 (global-set-key (kbd "<C-S-mouse-13>") 'text-scale-increase)
5698 (global-set-key (kbd "<C-S-mouse-14>") 'text-scale-decrease)
5699 (global-set-key (kbd "<C-S-down>") 'text-scale-increase)
5700 (global-set-key (kbd "<C-S-up>") 'text-scale-decrease)
5705 :CUSTOM_ID: d2d5c5c7-f0de-4e08-953b-d41d3e282ba7
5708 *** [C-left-scroll] :drill:
5709 SCHEDULED: <2014-03-27 Thu>
5711 :CUSTOM_ID: 7bb95aa5-381e-454a-a6c6-aaeec728db08
5712 :ID: 04bdffa0-52fe-4d90-a222-a6e41d75b13b
5713 :DRILL_LAST_INTERVAL: 50.6823
5714 :DRILL_REPEATS_SINCE_FAIL: 3
5715 :DRILL_TOTAL_REPEATS: 3
5716 :DRILL_FAILURE_COUNT: 0
5717 :DRILL_AVERAGE_QUALITY: 5.0
5719 :DRILL_LAST_QUALITY: 5
5720 :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:35>
5723 #+begin_src emacs-lisp
5724 (global-set-key (kbd "<C-left>") 'backward-symbol)
5725 (global-set-key (kbd "<C-right>") 'forward-symbol)
5727 *** [M-left-scroll] :drill:
5730 :CUSTOM_ID: 49db3764-b154-4cfc-8d0d-f0e0451815e3
5731 :ID: 97ef29fd-aea5-49ce-aff2-7a8c8d1b3d5d
5732 :DRILL_LAST_INTERVAL: 0.0
5733 :DRILL_REPEATS_SINCE_FAIL: 0
5734 :DRILL_TOTAL_REPEATS: 9
5735 :DRILL_FAILURE_COUNT: 10
5736 :DRILL_AVERAGE_QUALITY: 2.518
5738 :DRILL_LAST_QUALITY: 2
5739 :DRILL_LAST_REVIEWED: <2014-04-14 Mon 11:30>
5744 :CUSTOM_ID: ca5cdcd4-b3da-4d7b-86ab-4c7c0ac2caf7
5752 :CUSTOM_ID: 7b4f1f49-6d93-4210-a30c-8278d6e63655
5753 :ID: b6ea3b66-d9a6-4a33-ae1c-0464d118f006
5758 SCHEDULED: <2014-04-04 Fri>
5760 :ID: 845cf47f-22d5-4100-837d-fbc066e33c9c
5761 :CUSTOM_ID: 4f29b011-3844-4a4a-b75d-cdf8f49e9adb
5762 :DRILL_LAST_INTERVAL: 26.3927
5763 :DRILL_REPEATS_SINCE_FAIL: 5
5764 :DRILL_TOTAL_REPEATS: 6
5765 :DRILL_FAILURE_COUNT: 2
5766 :DRILL_AVERAGE_QUALITY: 3.25
5768 :DRILL_LAST_QUALITY: 4
5769 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:36>
5771 narrow-to-defun/subtree
5773 #+begin_src emacs-lisp
5774 (global-unset-key (kbd "C-2"))
5775 (defun copy-symbol (&optional arg)
5776 "Copy symbol at point into kill-ring"
5778 (kill-new (thing-at-point 'symbol)))
5780 (global-set-key (kbd "C-2") 'copy-symbol)
5782 (global-set-key (kbd "C-4") 'narrow-to-defun)
5783 (add-hook 'org-mode-hook
5784 (lambda () (local-set-key (kbd "C-4") 'org-narrow-to-subtree)))
5789 :CUSTOM_ID: 53ecfda2-d9f6-4882-b7a2-9b3c859e3bcb
5793 :CUSTOM_ID: 33c4996d-92bc-4df0-b005-11553677be13
5797 #+begin_src emacs-lisp
5798 (global-unset-key (kbd "C-M-2"))
5803 :CUSTOM_ID: 43af8e87-216d-47f7-9779-48ef66c7ca5f
5806 SCHEDULED: <2014-03-27 Thu>
5808 :ID: 9495ba60-017a-49b0-b0b6-366c3334e909
5809 :CUSTOM_ID: 7851a05e-7177-4a8f-af5a-3325a8f116fe
5810 :DRILL_LAST_INTERVAL: 50.6823
5811 :DRILL_REPEATS_SINCE_FAIL: 3
5812 :DRILL_TOTAL_REPEATS: 3
5813 :DRILL_FAILURE_COUNT: 0
5814 :DRILL_AVERAGE_QUALITY: 5.0
5816 :DRILL_LAST_QUALITY: 5
5817 :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:41>
5821 #+begin_src emacs-lisp
5822 (global-set-key (kbd "C-3") 'dot-mode-execute)
5827 :CUSTOM_ID: ddceb843-06db-4078-914f-da225cac107e
5830 SCHEDULED: <2014-03-11 Tue>
5832 :CUSTOM_ID: 9a00e17f-a1c9-48fc-b03b-c6a1a3cbda1c
5833 :ID: 75be5945-8bc4-4041-a44f-de2d9af66f4f
5834 :DRILL_LAST_INTERVAL: 19.6736
5835 :DRILL_REPEATS_SINCE_FAIL: 4
5836 :DRILL_TOTAL_REPEATS: 5
5837 :DRILL_FAILURE_COUNT: 1
5838 :DRILL_AVERAGE_QUALITY: 3.4
5840 :DRILL_LAST_QUALITY: 4
5841 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:48>
5845 #+begin_src emacs-lisp
5846 (global-set-key (kbd "C-M-3") 'recenter-top-bottom)
5851 :CUSTOM_ID: 224cf9b0-2e12-4cc7-a7e1-746784c87777
5854 SCHEDULED: <2014-03-27 Thu>
5856 :ID: e7f30a61-8557-4b7e-898c-96db9d649f39
5857 :CUSTOM_ID: 679fd3cd-c43b-409c-be36-4175a5f27cd3
5858 :DRILL_LAST_INTERVAL: 50.6823
5859 :DRILL_REPEATS_SINCE_FAIL: 3
5860 :DRILL_TOTAL_REPEATS: 3
5861 :DRILL_FAILURE_COUNT: 0
5862 :DRILL_AVERAGE_QUALITY: 5.0
5864 :DRILL_LAST_QUALITY: 5
5865 :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:42>
5867 org-cycle, comint previous arg
5869 #+begin_src emacs-lisp
5870 (add-hook 'org-mode-hook
5871 (lambda () (define-key org-mode-map (kbd "C-q") 'org-cycle)))
5872 (define-key widget-keymap (kbd "C-q") 'widget-forward)
5873 (add-hook 'comint-mode-hook
5874 (lambda () (define-key comint-mode-map (kbd "C-q") 'comint-insert-previous-argument)))
5878 SCHEDULED: <2014-03-19 Wed>
5880 org-archive-to-archive-sibling
5881 :CUSTOM_ID: 72bada0e-5d62-4a8f-ae62-4972778ff1bc
5882 :ID: 4c8104f4-9251-4915-b076-6989c7cce3be
5883 :DRILL_LAST_INTERVAL: 10.3717
5884 :DRILL_REPEATS_SINCE_FAIL: 4
5885 :DRILL_TOTAL_REPEATS: 8
5886 :DRILL_FAILURE_COUNT: 6
5887 :DRILL_AVERAGE_QUALITY: 2.6
5889 :DRILL_LAST_QUALITY: 3
5890 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:35>
5892 org-archive-to-archive-sibling
5894 #+begin_src emacs-lisp
5895 (global-set-key (kbd "M-q") 'org-archive-to-archive-sibling)
5900 SCHEDULED: <2014-03-12 Wed>
5902 :ID: ab67e1da-41dd-40bd-96c1-556cafc6b630
5903 :DRILL_LAST_INTERVAL: 9.9427
5904 :DRILL_REPEATS_SINCE_FAIL: 3
5905 :DRILL_TOTAL_REPEATS: 6
5906 :DRILL_FAILURE_COUNT: 2
5907 :DRILL_AVERAGE_QUALITY: 3.104
5909 :DRILL_LAST_QUALITY: 4
5910 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 20:57>
5911 :CUSTOM_ID: 1f5e9b63-7ce0-445c-a426-b41839585d38
5915 #+begin_src emacs-lisp
5916 (global-set-key (kbd "C-M-q") 'quoted-insert)
5921 :CUSTOM_ID: c16f1753-126b-499b-af0e-669129ccd3ea
5925 :CUSTOM_ID: 20005b6d-9a9d-4b58-882c-7ce860c7a395
5929 #+begin_src emacs-lisp
5930 (global-set-key (kbd "C-w") (lambda () (interactive) (goto-buffer-or-find-file "/a/t.org")))
5934 SCHEDULED: <2014-03-18 Tue>
5937 :ID: c271d82d-e40a-43c3-9c16-753633c1fc14
5938 :CUSTOM_ID: 331da6e5-7936-4663-8f58-9d8601b5915c
5939 :DRILL_LAST_INTERVAL: 41.7787
5940 :DRILL_REPEATS_SINCE_FAIL: 3
5941 :DRILL_TOTAL_REPEATS: 3
5942 :DRILL_FAILURE_COUNT: 0
5943 :DRILL_AVERAGE_QUALITY: 4.667
5945 :DRILL_LAST_QUALITY: 4
5946 :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:36>
5950 #+begin_src emacs-lisp
5951 (global-set-key (kbd "M-w") 'org-clock-in)
5956 :CUSTOM_ID: cede4936-de2f-404f-a0e6-264f08215a7c
5960 :CUSTOM_ID: 3465b986-717a-43b4-910f-3d187789c027
5965 #+begin_src emacs-lisp
5966 ; todo, make repeated calls to this append the kills
5967 (defun copy-line (&optional arg)
5968 "Copy lines (as many as prefix argument) in the kill ring.
5969 Ease of use features:
5970 - Move to start of next line.
5971 - Appends the copy on sequential calls.
5972 - Use newline as last char even on the last line of the buffer.
5973 - If region is active, copy its lines."
5975 (let ((beg (line-beginning-position))
5976 (end (line-end-position (or arg 1))))
5978 (if (> (point) (mark))
5979 (setq beg (save-excursion (goto-char (mark)) (line-beginning-position)))
5980 (setq end (save-excursion (goto-char (mark)) (line-end-position)))))
5981 (if (eq last-command 'copy-line)
5982 (kill-append (buffer-substring beg end) (< end beg))
5983 (kill-ring-save beg end)))
5984 (kill-append "\n" nil)
5985 ;; dun need cuz I have yank-better
5986 ;;(beginning-of-line (or (and arg (1+ arg)) 2))
5987 (if (and arg (not (= 1 arg))) (message "%d lines copied" arg)))
5989 (global-set-key (kbd "C-e") 'copy-line)
5992 :ID: 4ff8e0ad-15c0-4cb0-b6cc-314e7b5f80c0
5993 :CUSTOM_ID: 24e34f4b-d1e8-4380-933f-ab1f78ebc782
5994 :DRILL_LAST_INTERVAL: 2.4849
5995 :DRILL_REPEATS_SINCE_FAIL: 1
5996 :DRILL_TOTAL_REPEATS: 1
5997 :DRILL_FAILURE_COUNT: 0
5998 :DRILL_AVERAGE_QUALITY: 5.0
6000 :DRILL_LAST_QUALITY: 5
6001 :DRILL_LAST_REVIEWED: <2014-01-11 Sat 01:30>
6005 SCHEDULED: <2014-04-01 Tue>
6008 :ID: 39424175-21e2-4126-9a51-dea451497841
6009 :CUSTOM_ID: 0a771449-0cd5-4dc9-82ca-bcac5f7abd17
6010 :DRILL_LAST_INTERVAL: 36.7949
6011 :DRILL_REPEATS_SINCE_FAIL: 4
6012 :DRILL_TOTAL_REPEATS: 4
6013 :DRILL_FAILURE_COUNT: 0
6014 :DRILL_AVERAGE_QUALITY: 4.0
6016 :DRILL_LAST_QUALITY: 3
6017 :DRILL_LAST_REVIEWED: <2014-02-23 Sun 01:48>
6021 #+begin_src emacs-lisp
6022 (global-set-key (kbd "M-e") 'org-clock-in-last)
6027 :CUSTOM_ID: 4a7a4324-e03d-43dc-8e9c-9622788519fb
6031 :CUSTOM_ID: e202e1d5-b7ac-4171-b86a-b77592344f30
6034 SCHEDULED: <2014-04-07 Mon>
6037 :ID: 39bcde9c-2b49-401e-9e81-ee42941233bf
6038 :CUSTOM_ID: 5c55f461-f43f-493d-81eb-1ca747175ef1
6039 :DRILL_LAST_INTERVAL: 42.8284
6040 :DRILL_REPEATS_SINCE_FAIL: 4
6041 :DRILL_TOTAL_REPEATS: 4
6042 :DRILL_FAILURE_COUNT: 0
6043 :DRILL_AVERAGE_QUALITY: 4.5
6045 :DRILL_LAST_QUALITY: 5
6046 :DRILL_LAST_REVIEWED: <2014-02-23 Sun 01:51>
6050 #+begin_src emacs-lisp
6051 (global-set-key (kbd "C-r") 'isearch-backward)
6052 (add-hook 'comint-mode-hook
6054 (define-key comint-mode-map (kbd "C-r") 'comint-history-isearch-backward-regexp)))
6059 SCHEDULED: <2014-04-30 Wed>
6062 :ID: dc2c7192-6cfb-4c06-bd17-ff2cef3b05a6
6063 :CUSTOM_ID: dd9575bd-e471-418e-9519-4fc2b874ddcd
6064 :DRILL_LAST_INTERVAL: 59.1432
6065 :DRILL_REPEATS_SINCE_FAIL: 4
6066 :DRILL_TOTAL_REPEATS: 4
6067 :DRILL_FAILURE_COUNT: 0
6068 :DRILL_AVERAGE_QUALITY: 4.25
6070 :DRILL_LAST_QUALITY: 3
6071 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:10>
6075 #+begin_src emacs-lisp
6076 (global-set-key (kbd "M-r") 'org-clock-out)
6082 :CUSTOM_ID: 05e2290b-0d2c-407c-9bf0-adc7a008336b
6085 SCHEDULED: <2014-03-15 Sat>
6088 :CUSTOM_ID: db4b76df-9420-4256-8242-dc44b56d55d7
6089 :ID: f6b2b504-b88d-418b-b6b0-5e0e582bd205
6090 :DRILL_LAST_INTERVAL: 24.4352
6091 :DRILL_REPEATS_SINCE_FAIL: 4
6092 :DRILL_TOTAL_REPEATS: 4
6093 :DRILL_FAILURE_COUNT: 0
6094 :DRILL_AVERAGE_QUALITY: 3.75
6096 :DRILL_LAST_QUALITY: 4
6097 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:39>
6101 #+begin_src emacs-lisp
6103 "Copy entire buffer to clipboard"
6105 (clipboard-kill-ring-save (point-min) (point-max)))
6106 (global-set-key (kbd "C-a") 'copy-all)
6110 SCHEDULED: <2014-03-27 Thu>
6112 kmacro-start-macro-or-in...
6113 :ID: 4019514b-abb1-464e-b4c9-d9ca39af2a82
6114 :CUSTOM_ID: e865a1e5-55bf-4a98-a0d0-cb05a88de352
6115 :DRILL_LAST_INTERVAL: 50.6823
6116 :DRILL_REPEATS_SINCE_FAIL: 3
6117 :DRILL_TOTAL_REPEATS: 3
6118 :DRILL_FAILURE_COUNT: 0
6119 :DRILL_AVERAGE_QUALITY: 5.0
6121 :DRILL_LAST_QUALITY: 5
6122 :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:40>
6126 #+begin_src emacs-lisp
6127 (global-set-key (kbd "M-a") 'kmacro-start-macro-or-insert-counter)
6132 SCHEDULED: <2014-03-27 Thu>
6134 kmacro-end-or-call-macro
6135 :ID: 10cdc522-2bea-4601-acf9-ec81a52a34d8
6136 :CUSTOM_ID: c6278a5a-024f-4c80-a8d4-65f127fd24a8
6137 :DRILL_LAST_INTERVAL: 50.6823
6138 :DRILL_REPEATS_SINCE_FAIL: 3
6139 :DRILL_TOTAL_REPEATS: 3
6140 :DRILL_FAILURE_COUNT: 0
6141 :DRILL_AVERAGE_QUALITY: 5.0
6143 :DRILL_LAST_QUALITY: 5
6144 :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:35>
6148 #+begin_src emacs-lisp
6149 (global-set-key (kbd "C-M-a") 'kmacro-end-or-call-macro)
6150 (add-hook 'LaTeX-mode-hook (lambda () (define-key LaTeX-mode-map (kbd "C-M-a") nil)))
6151 (add-hook 'c-mode-hook
6152 (lambda () (define-key c-mode-map (kbd "C-M-a") nil)))
6158 :CUSTOM_ID: 649a3fe7-3932-475a-b23c-28db9874de27
6163 :ID: e05a67d7-f7ee-4b23-afb1-0053d5eefb4c
6164 :CUSTOM_ID: 01da04da-cdba-493f-892b-c4c064cf937e
6170 :CUSTOM_ID: 5e4bf939-90a1-4ace-a7bf-add95c8596d2
6173 SCHEDULED: <2014-03-18 Tue>
6175 split-window-vertically
6176 :ID: 18a271e1-c1d2-45e6-aed3-6b81b4b6ea71
6177 :CUSTOM_ID: 4b33022d-27f0-4d21-9931-2e2e692790e8
6178 :DRILL_LAST_INTERVAL: 26.5334
6179 :DRILL_REPEATS_SINCE_FAIL: 4
6180 :DRILL_TOTAL_REPEATS: 4
6181 :DRILL_FAILURE_COUNT: 0
6182 :DRILL_AVERAGE_QUALITY: 3.75
6184 :DRILL_LAST_QUALITY: 3
6185 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:46>
6187 split-window-vertically
6189 #+begin_src emacs-lisp
6190 (global-set-key (kbd "C-M-s") 'split-window-vertically)
6195 :CUSTOM_ID: 901a2445-200c-42f2-91c6-4309d71b39dd
6199 :CUSTOM_ID: b699614a-9994-4fe7-b2c6-f0fe81b7ad2b
6203 SCHEDULED: <2014-04-05 Sat>
6206 :ID: 58f5421a-9df0-44cd-acb9-d018ccdba58c
6207 :CUSTOM_ID: 06bcc5e2-f3a7-41c6-a793-ac6c9813fb6e
6208 :DRILL_LAST_INTERVAL: 27.3693
6209 :DRILL_REPEATS_SINCE_FAIL: 5
6210 :DRILL_TOTAL_REPEATS: 6
6211 :DRILL_FAILURE_COUNT: 2
6212 :DRILL_AVERAGE_QUALITY: 3.417
6214 :DRILL_LAST_QUALITY: 4
6215 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:36>
6219 #+begin_src emacs-lisp
6220 (global-set-key (kbd "M-d") 'whitespace-cleanup)
6224 SCHEDULED: <2014-03-19 Wed>
6227 :CUSTOM_ID: 8cf6053d-792b-4abd-a3a6-66efd7fbee68
6228 :ID: 747aabec-b164-4813-93c8-92d5c8778635
6229 :DRILL_LAST_INTERVAL: 9.5325
6230 :DRILL_REPEATS_SINCE_FAIL: 4
6231 :DRILL_TOTAL_REPEATS: 10
6232 :DRILL_FAILURE_COUNT: 8
6233 :DRILL_AVERAGE_QUALITY: 2.636
6235 :DRILL_LAST_QUALITY: 3
6236 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:35>
6238 swap buffer across windows
6240 from http://www.emacswiki.org/emacs/TransposeWindows
6241 #+begin_src emacs-lisp
6242 (setq swapping-buffer nil)
6243 (setq swapping-window nil)
6244 (defun swap-buffers-in-windows ()
6245 "Swap buffers between two windows"
6247 (if (and swapping-window
6249 (let ((this-buffer (current-buffer))
6250 (this-window (selected-window)))
6251 (if (and (window-live-p swapping-window)
6252 (buffer-live-p swapping-buffer))
6253 (progn (switch-to-buffer swapping-buffer)
6254 (select-window swapping-window)
6255 (switch-to-buffer this-buffer)
6256 (select-window this-window)
6257 (message "Swapped buffers."))
6258 (message "Old buffer/window killed. Aborting."))
6259 (setq swapping-buffer nil)
6260 (setq swapping-window nil))
6262 (setq swapping-buffer (current-buffer))
6263 (setq swapping-window (selected-window))
6264 (message "Buffer and window marked for swapping."))))
6266 (global-set-key (kbd "C-M-d") 'swap-buffers-in-windows)
6271 :CUSTOM_ID: d3166178-3d87-4caa-a937-9797fc2b6a39
6275 :CUSTOM_ID: 2695ed8a-e0d3-4e84-8688-98e3c50723b0
6279 #+begin_src emacs-lisp
6280 (global-set-key (kbd "C-f") 'kill-whole-line-wrapper)
6281 (defun kill-whole-line-wrapper (&optional arg)
6282 "If we are at the end of the file, kill backwards instead of doing nothing."
6284 (if (= (point) (point-max))
6285 (kill-whole-line -1)
6286 (kill-whole-line arg)))
6291 :CUSTOM_ID: 869f0aec-c739-4fb7-8e3a-8b55ab637765
6295 :CUSTOM_ID: e7e4dd0b-418f-48ee-b366-9e733e3bec61
6299 #+begin_src emacs-lisp
6301 (add-hook 'org-mode-hook
6303 (define-key org-mode-map (kbd "C-M-f") 'org-kill-line)))
6305 (global-set-key (kbd "C-M-f") 'kill-line)
6310 :CUSTOM_ID: a59eb2ca-9439-4836-81f9-384bc8c07739
6313 SCHEDULED: <2014-01-13 Mon>
6315 other-window / cancel
6316 :ID: a4e9c495-02c1-432e-beba-12a9d4d61e8a
6317 :CUSTOM_ID: 4af40595-7010-4be6-8cfe-a43797ca6e33
6318 :DRILL_LAST_INTERVAL: 2.4849
6319 :DRILL_REPEATS_SINCE_FAIL: 1
6320 :DRILL_TOTAL_REPEATS: 1
6321 :DRILL_FAILURE_COUNT: 0
6322 :DRILL_AVERAGE_QUALITY: 5.0
6324 :DRILL_LAST_QUALITY: 5
6325 :DRILL_LAST_REVIEWED: <2014-01-11 Sat 01:41>
6327 cancel / other window
6329 #+begin_src emacs-lisp
6330 (global-set-key (kbd "C-g") 'other-window)
6334 SCHEDULED: <2014-03-13 Thu>
6336 abort-recursive-edit
6337 :ID: 1e8e0c57-2885-4c0c-9b94-3ec0c02b706e
6338 :CUSTOM_ID: fb0b343f-fdff-463a-94f4-3152191e17c4
6339 :DRILL_LAST_INTERVAL: 22.1939
6340 :DRILL_REPEATS_SINCE_FAIL: 4
6341 :DRILL_TOTAL_REPEATS: 4
6342 :DRILL_FAILURE_COUNT: 0
6343 :DRILL_AVERAGE_QUALITY: 3.5
6345 :DRILL_LAST_QUALITY: 4
6346 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 16:33>
6348 abort-recursive-edit
6350 #+begin_src emacs-lisp
6351 (global-set-key (kbd "M-g") 'abort-recursive-edit)
6356 :CUSTOM_ID: 327e18af-30b7-47e5-aa53-5f678788b4c1
6360 #+begin_src emacs-lisp
6361 (global-set-key (kbd "C-M-g") 'gnus)
6366 :CUSTOM_ID: 1d4edc55-7b30-4648-b869-b82f8f1d7b1a
6371 :ID: 42d7f2bf-3ba3-488b-b501-bd4680dbb8de
6372 :CUSTOM_ID: 707c4938-a790-4da9-8230-61855ea57d09
6375 #+begin_src emacs-lisp
6376 (global-set-key (kbd "C-z") 'undo-tree-undo)
6381 :CUSTOM_ID: a01c110e-9970-4571-84ab-379eecc7dd31
6386 :CUSTOM_ID: 3d56370d-11cd-4026-8e6b-3ae9b7b51714
6390 :CUSTOM_ID: ec1403d3-528e-41b1-a195-5563bc93e124
6393 #+begin_src emacs-lisp
6394 (global-set-key (kbd "C-s") 'kill-region)
6397 SCHEDULED: <2014-03-31 Mon>
6399 :CUSTOM_ID: bb7c95d5-dd97-439d-bf1f-cdac98d11543
6400 :ID: 909cf249-c2f2-4251-bf18-c990ca9c6ff9
6401 :DRILL_LAST_INTERVAL: 21.5453
6402 :DRILL_REPEATS_SINCE_FAIL: 4
6403 :DRILL_TOTAL_REPEATS: 4
6404 :DRILL_FAILURE_COUNT: 0
6405 :DRILL_AVERAGE_QUALITY: 3.25
6407 :DRILL_LAST_QUALITY: 3
6408 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:33>
6412 #+begin_src emacs-lisp
6413 (global-set-key (kbd "M-x") 'append-next-kill)
6417 SCHEDULED: <2014-03-17 Mon>
6420 :ID: b2b60fb4-95a3-4311-8ccd-7132f03ac9a8
6421 :CUSTOM_ID: c988370e-602c-431c-80a9-608459583f8b
6422 :DRILL_LAST_INTERVAL: 26.0772
6423 :DRILL_REPEATS_SINCE_FAIL: 4
6424 :DRILL_TOTAL_REPEATS: 4
6425 :DRILL_FAILURE_COUNT: 1
6426 :DRILL_AVERAGE_QUALITY: 3.5
6428 :DRILL_LAST_QUALITY: 3
6429 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:49>
6433 #+begin_src emacs-lisp
6434 ;; same args as copy-to-register
6435 (defun cut-to-register (register start end &optional delete-flag region)
6436 (interactive (list (register-read-with-preview "Cut to register: ")
6441 (copy-to-register register start end t region))
6443 (global-set-key (kbd "C-M-x") 'cut-to-register)
6448 :CUSTOM_ID: 0ce7383c-0776-407e-9ac5-981d1476f541
6452 :ID: 5416e482-6f36-4d35-84c3-49bb184a53e9
6453 :CUSTOM_ID: 400f06e1-8e45-443c-8d7b-3d1bb1176aab
6456 #+begin_src emacs-lisp
6457 (global-set-key (kbd "C-d") 'kill-ring-save)
6458 (add-hook 'c-mode-hook
6459 (lambda () (define-key c-mode-map (kbd "C-d") nil)))
6460 (add-hook 'comint-mode-hook
6462 (define-key comint-mode-map (kbd "C-d") nil)))
6463 ;; the base map is shared by many c-modes, like java
6464 (add-hook 'c-mode-hook
6466 (define-key c-mode-base-map "\C-d" nil)
6467 (define-key c-mode-base-map (kbd "<deletechar>") 'c-electric-delete-forward)))
6471 SCHEDULED: <2014-03-24 Mon>
6474 :ID: bf1cb358-ec72-425d-aebb-0c1f0ece7717
6475 :CUSTOM_ID: f4c3317a-a317-4d04-8cb7-e46d0716bf1d
6476 :DRILL_LAST_INTERVAL: 32.7466
6477 :DRILL_REPEATS_SINCE_FAIL: 4
6478 :DRILL_TOTAL_REPEATS: 4
6479 :DRILL_FAILURE_COUNT: 0
6480 :DRILL_AVERAGE_QUALITY: 4.0
6482 :DRILL_LAST_QUALITY: 4
6483 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:53>
6487 #+begin_src emacs-lisp
6488 (define-key global-map "\M-c" 'org-capture)
6492 SCHEDULED: <2014-03-24 Mon>
6495 :ID: 956fd2ec-ad26-4842-b56c-f2165648c461
6496 :CUSTOM_ID: 0a151d99-47ae-4e8f-8407-82e77d24a3e7
6497 :DRILL_LAST_INTERVAL: 32.7466
6498 :DRILL_REPEATS_SINCE_FAIL: 4
6499 :DRILL_TOTAL_REPEATS: 4
6500 :DRILL_FAILURE_COUNT: 0
6501 :DRILL_AVERAGE_QUALITY: 4.0
6503 :DRILL_LAST_QUALITY: 4
6504 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:51>
6508 #+begin_src emacs-lisp
6509 (global-set-key (kbd "C-M-c") 'copy-to-register)
6514 :CUSTOM_ID: b78d717f-cfb3-477a-b951-63f523635f5c
6518 :CUSTOM_ID: 16411f68-7fe0-49e8-9a73-212471594f9e
6521 #+begin_src emacs-lisp
6522 (global-set-key (kbd "C-v") 'yank-better)
6526 (defun yank-better (arg)
6527 "Paste, linewise if our kill ends with a newline.
6528 I change the behavior of plain prefix. It makes it not do linewise paste,
6529 because sometimes you want to yank pop and a linewise paste screws that up.
6530 c-u with no number normally makes the point go before the yank.
6531 That is pointless for me, as it would be just as easier and less
6532 thought to pop the mark after yanking cuz it is set to before the mark."
6534 (if (and (not (equal arg '(4))) (string-suffix-p "\n" (current-kill 0 t)))
6535 (beginning-of-line))
6536 (if (and (stringp mode-name) (string= mode-name "Org"))
6537 (call-interactively 'org-yank)
6538 (setq this-command 'yank)
6539 (call-interactively 'yank (and (not (equal arg '(4)))))))
6541 (put 'yank-better 'delete-selection 'yank)
6544 SCHEDULED: <2014-03-11 Tue>
6547 :ID: 7e21df8d-fdf7-47ed-8648-f9d182445145
6548 :CUSTOM_ID: d67f6371-a13f-4a75-8d8c-e4013ff4e131
6549 :DRILL_LAST_INTERVAL: 2.2172
6550 :DRILL_REPEATS_SINCE_FAIL: 1
6551 :DRILL_TOTAL_REPEATS: 5
6552 :DRILL_FAILURE_COUNT: 2
6553 :DRILL_AVERAGE_QUALITY: 2.84
6555 :DRILL_LAST_QUALITY: 3
6556 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:38>
6560 #+begin_src emacs-lisp
6561 (global-set-key (kbd "M-v") 'insert-register)
6565 SCHEDULED: <2014-05-13 Tue>
6568 :ID: e05d9d8f-1387-44b3-b348-a45cf6083bd2
6569 :CUSTOM_ID: 25f86658-9999-40f7-b3a4-615981751b93
6570 :DRILL_LAST_INTERVAL: 71.5839
6571 :DRILL_REPEATS_SINCE_FAIL: 4
6572 :DRILL_TOTAL_REPEATS: 4
6573 :DRILL_FAILURE_COUNT: 0
6574 :DRILL_AVERAGE_QUALITY: 4.75
6576 :DRILL_LAST_QUALITY: 5
6577 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:10>
6581 #+begin_src emacs-lisp
6582 (global-set-key (kbd "C-M-v") 'yank-pop)
6587 :CUSTOM_ID: 6732ed10-a473-445d-b14a-5f4c17c6a3ef
6590 SCHEDULED: <2014-03-27 Thu>
6592 delete-other-windows
6593 :ID: c9309da7-6801-4d94-a21e-140f4b258c28
6594 :CUSTOM_ID: e682305e-0110-4d2f-afbd-2c401bcb9313
6595 :DRILL_LAST_INTERVAL: 50.6823
6596 :DRILL_REPEATS_SINCE_FAIL: 3
6597 :DRILL_TOTAL_REPEATS: 3
6598 :DRILL_FAILURE_COUNT: 0
6599 :DRILL_AVERAGE_QUALITY: 5.0
6601 :DRILL_LAST_QUALITY: 5
6602 :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:34>
6604 delete-other-windows
6606 #+begin_src emacs-lisp
6607 (global-set-key (kbd "C-b") 'delete-other-windows)
6611 SCHEDULED: <2014-04-07 Mon>
6613 isearch-backward-current-symbol
6614 :CUSTOM_ID: 05e3d0db-36dc-455f-8bed-f87886ca6004
6615 :ID: 0272efdb-eb85-485c-b24f-410ceabeb330
6616 :DRILL_LAST_INTERVAL: 28.6736
6617 :DRILL_REPEATS_SINCE_FAIL: 5
6618 :DRILL_TOTAL_REPEATS: 5
6619 :DRILL_FAILURE_COUNT: 1
6620 :DRILL_AVERAGE_QUALITY: 3.4
6622 :DRILL_LAST_QUALITY: 4
6623 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:36>
6625 isearch-backward-current-symbol
6627 #+begin_src emacs-lisp
6628 (global-set-key (kbd "M-b") 'isearch-backward-current-symbol)
6632 SCHEDULED: <2014-04-04 Fri>
6634 isearch-current-symbol
6635 :ID: 235b96a8-e724-419d-8d07-8d0a021213eb
6636 :CUSTOM_ID: 6c63790c-28c1-4b73-96e2-ee859f57e734
6637 :DRILL_LAST_INTERVAL: 40.0706
6638 :DRILL_REPEATS_SINCE_FAIL: 4
6639 :DRILL_TOTAL_REPEATS: 4
6640 :DRILL_FAILURE_COUNT: 0
6641 :DRILL_AVERAGE_QUALITY: 3.75
6643 :DRILL_LAST_QUALITY: 3
6644 :DRILL_LAST_REVIEWED: <2014-02-23 Sun 02:26>
6646 isearch-current-symbol
6648 #+begin_src emacs-lisp
6649 (global-set-key (kbd "C-M-b") 'isearch-current-symbol)
6654 :CUSTOM_ID: a220d7e0-12df-4d37-a57a-266785e7f3c5
6657 SCHEDULED: <2014-03-27 Thu>
6660 :CUSTOM_ID: edc45592-c69f-4439-8305-48f2c65696c3
6661 :ID: 92eac3e1-0675-4746-a130-7539f9bc213a
6662 :DRILL_LAST_INTERVAL: 50.6823
6663 :DRILL_REPEATS_SINCE_FAIL: 3
6664 :DRILL_TOTAL_REPEATS: 3
6665 :DRILL_FAILURE_COUNT: 0
6666 :DRILL_AVERAGE_QUALITY: 5.0
6668 :DRILL_LAST_QUALITY: 5
6669 :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:42>
6673 #+begin_src emacs-lisp
6674 ;; yas keymaps are already initialized when this runs,
6675 ;; but I use a hook because it the way I do it for all other minor modes
6676 (add-hook 'yas-minor-mode-hook (lambda ()
6677 (define-key yas-minor-mode-map (kbd "<C-tab>") 'yas-expand)
6678 (define-key yas-keymap (kbd "<C-tab>") 'yas-next-field-or-maybe-expand)))
6679 (global-set-key (kbd "<C-tab>") 'yas-insert-snippet)
6683 SCHEDULED: <2014-03-14 Fri>
6686 :ID: 35b77d8a-9e69-4f8e-a2ac-c78fcf6dc1f5
6687 :CUSTOM_ID: 71264957-45fd-455a-a6d1-b08823c02d25
6688 :DRILL_LAST_INTERVAL: 23.0811
6689 :DRILL_REPEATS_SINCE_FAIL: 4
6690 :DRILL_TOTAL_REPEATS: 4
6691 :DRILL_FAILURE_COUNT: 1
6692 :DRILL_AVERAGE_QUALITY: 3.75
6694 :DRILL_LAST_QUALITY: 4
6695 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 16:35>
6699 #+begin_src emacs-lisp
6701 (global-set-key (kbd "<M-tab>") 'indent-for-tab-command)
6703 ; todo, <M-tab> overrides calculator mode map
6708 :CUSTOM_ID: 33b76824-317c-4657-8a5b-2b126b8f7fc9
6712 :CUSTOM_ID: 89d1aeca-47ed-4e4a-89d2-ff70c06e08c8
6714 *** [C-delete] :drill:
6715 SCHEDULED: <2014-05-13 Tue>
6718 :ID: bb7ae41f-8fab-42ee-9338-33dd22d7f173
6719 :CUSTOM_ID: 2688b61d-9fdd-44af-b9bd-b126f0da00bd
6720 :DRILL_LAST_INTERVAL: 71.5839
6721 :DRILL_REPEATS_SINCE_FAIL: 4
6722 :DRILL_TOTAL_REPEATS: 4
6723 :DRILL_FAILURE_COUNT: 0
6724 :DRILL_AVERAGE_QUALITY: 4.75
6726 :DRILL_LAST_QUALITY: 5
6727 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:12>
6731 #+begin_src emacs-lisp
6732 (global-set-key (kbd "<C-delete>") 'kill-symbol)
6733 (defun kill-symbol (arg)
6735 (kill-region (point) (save-excursion (forward-symbol arg) (point))))
6741 :CUSTOM_ID: 60747222-b0e5-4983-9bed-e6d44f65483a
6743 *** [C-M-delete] :drill:
6744 SCHEDULED: <2014-03-24 Mon>
6748 :CUSTOM_ID: 21876759-a8e6-4896-8a08-eda40d0eaff3
6749 :ID: 7f2797e1-dd39-4d0a-8b87-264e2757543b
6750 :DRILL_LAST_INTERVAL: 28.5089
6751 :DRILL_REPEATS_SINCE_FAIL: 5
6752 :DRILL_TOTAL_REPEATS: 5
6753 :DRILL_FAILURE_COUNT: 2
6754 :DRILL_AVERAGE_QUALITY: 3.6
6756 :DRILL_LAST_QUALITY: 4
6757 :DRILL_LAST_REVIEWED: <2014-02-23 Sun 02:27>
6761 #+begin_src emacs-lisp
6762 (global-set-key (kbd "<C-M-delete>") 'kill-sexp)
6767 :CUSTOM_ID: 696e9e0f-f717-44cd-90e7-a73d76a58162
6770 *** [C-left-arrow] :drill:
6771 SCHEDULED: <2014-03-15 Sat>
6774 :ID: fbc09f29-fb89-479f-b509-255352e4e9d1
6775 :CUSTOM_ID: b15da91f-0786-49d1-b0b9-331b3b94f6ae
6776 :DRILL_LAST_INTERVAL: 24.2738
6777 :DRILL_REPEATS_SINCE_FAIL: 4
6778 :DRILL_TOTAL_REPEATS: 4
6779 :DRILL_FAILURE_COUNT: 1
6780 :DRILL_AVERAGE_QUALITY: 4.0
6782 :DRILL_LAST_QUALITY: 5
6783 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:24>
6785 compile / comint search
6787 #+begin_src emacs-lisp
6789 (and (bound-and-true-p var)
6790 (not (eq var 'unset))))
6791 (global-set-key (kbd "C-(") 'run)
6793 ;; make compile work from the gtags root dir
6794 (defadvice compile (before pre-compile-advice activate)
6796 (when (set-p ggtags-project-root)
6797 (setq-local compile-saved-dir default-directory)
6798 (setq default-directory ggtags-project-root)))
6799 (defadvice compile (after post-compile-advice activate)
6800 (when (bound-and-true-p compile-saved-dir)
6801 (setq default-directory compile-saved-dir)))
6804 (add-hook 'c-mode-hook (lambda () (define-key c-mode-map (kbd "C-(") 'compile)))
6805 (add-hook 'comint-mode-hook
6807 (define-key isearch-mode-map (kbd "C-(") 'isearch-repeat-backward)
6808 (define-key comint-mode-map (kbd "C-(") 'isearch-backward)))
6814 :CUSTOM_ID: 73085b60-95f3-44bf-af71-70d6a7f9b9c6
6816 *** [C-M-left-arrow] :drill:
6817 SCHEDULED: <2014-03-10 Mon>
6820 :CUSTOM_ID: 13faf5d4-34be-4363-948d-4ff04a9f570b
6821 :ID: 39390478-6d33-460e-ab47-0dc6ac4c5249
6822 :DRILL_LAST_INTERVAL: 7.6079
6823 :DRILL_REPEATS_SINCE_FAIL: 3
6824 :DRILL_TOTAL_REPEATS: 7
6825 :DRILL_FAILURE_COUNT: 6
6826 :DRILL_AVERAGE_QUALITY: 2.886
6828 :DRILL_LAST_QUALITY: 3
6829 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:01>
6833 #+begin_src emacs-lisp
6834 (add-hook 'org-mode-hook
6835 (lambda () (define-key org-mode-map (kbd "C-M-(") 'org-shiftup)))
6840 :CUSTOM_ID: 4e3a7ead-efb5-46d8-9465-1867d47e5ec2
6842 *** [C-right-arrow] :drill:
6843 SCHEDULED: <2014-05-13 Tue>
6846 :CUSTOM_ID: 3f3cac16-097d-451a-a14a-da7717d06730
6847 :ID: 1b0ac338-d87b-4a37-b192-bc4305a337cc
6848 :DRILL_LAST_INTERVAL: 71.5839
6849 :DRILL_REPEATS_SINCE_FAIL: 4
6850 :DRILL_TOTAL_REPEATS: 4
6851 :DRILL_FAILURE_COUNT: 0
6852 :DRILL_AVERAGE_QUALITY: 4.75
6854 :DRILL_LAST_QUALITY: 5
6855 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:11>
6857 keyboard-yank-primary
6859 #+begin_src emacs-lisp
6860 (defun keyboard-yank-primary ()
6862 (let ((mouse-yank-at-point t))
6863 (mouse-yank-primary nil)))
6865 (global-set-key (kbd "C-)") 'keyboard-yank-primary)
6870 :CUSTOM_ID: 97a4513f-6837-47c5-9e2b-354542d67d29
6875 :CUSTOM_ID: 34e66314-1d97-4eeb-b704-fe0733849ae4
6878 #+begin_src emacs-lisp
6879 (add-hook 'org-mode-hook
6880 (lambda () (define-key org-mode-map (kbd "C-M-)") 'org-shiftdown)))
6885 :CUSTOM_ID: f441e351-ccd7-4ac1-9a4d-a0a1dd17b73e
6887 *** [C-backspace] :drill:
6888 SCHEDULED: <2014-05-13 Tue>
6890 backward-kill-symbol
6891 :CUSTOM_ID: 85bb4701-42e6-4617-8de8-dfb1f03b0358
6892 :ID: 9c0e1f0a-7b45-4670-86a2-9df945142cbe
6893 :DRILL_LAST_INTERVAL: 71.5839
6894 :DRILL_REPEATS_SINCE_FAIL: 4
6895 :DRILL_TOTAL_REPEATS: 4
6896 :DRILL_FAILURE_COUNT: 0
6897 :DRILL_AVERAGE_QUALITY: 4.75
6899 :DRILL_LAST_QUALITY: 5
6900 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:12>
6902 backward-kill-symbol
6904 #+begin_src emacs-lisp
6905 (global-set-key (kbd "<C-backspace>") 'backward-kill-symbol)
6906 (add-hook 'comint-mode-hook
6908 (define-key comint-mode-map (kbd "<C-backspace>") 'backward-kill-word)))
6909 (defun backward-kill-symbol (arg)
6911 (kill-region (point) (save-excursion (backward-symbol arg) (point))))
6916 :CUSTOM_ID: d4b3e996-208a-4b6d-a747-076e56bd7da3
6918 *** [C-M-backspace] :drill:
6919 SCHEDULED: <2014-03-18 Tue>
6921 :ID: 1030c81d-2cc2-42ba-8aa5-fe98271a00f2
6922 :DRILL_LAST_INTERVAL: 26.5334
6923 :DRILL_REPEATS_SINCE_FAIL: 4
6924 :DRILL_TOTAL_REPEATS: 4
6925 :DRILL_FAILURE_COUNT: 0
6926 :DRILL_AVERAGE_QUALITY: 3.75
6928 :DRILL_LAST_QUALITY: 3
6929 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:46>
6930 :CUSTOM_ID: 606b0991-7431-4a8a-a909-b872e104cc88
6934 #+begin_src emacs-lisp
6935 (global-set-key (kbd "<C-M-backspace>") 'backward-kill-sexp)
6940 :CUSTOM_ID: 9c826109-76fd-403e-b15e-ceee5f925f6c
6944 :CUSTOM_ID: 8e4b9a2c-35ff-4300-91ff-65d19d6b2fde
6948 :CUSTOM_ID: 390a5b78-f5fe-41b6-bb36-ea9c81806989
6952 :CUSTOM_ID: a8e9d8e4-4f29-4da6-a7b8-3d136a3e1c18
6956 :CUSTOM_ID: 60bb5cd8-aeb3-4014-81f2-4cee72e9547c
6961 SCHEDULED: <2014-03-16 Sun>
6963 split-window-horizontally
6964 :ID: c9f11b06-583f-48e5-8d0a-56107feb0010
6965 :CUSTOM_ID: f745b337-8b65-44cc-849a-5e0953c9ebd9
6966 :DRILL_LAST_INTERVAL: 13.9711
6967 :DRILL_REPEATS_SINCE_FAIL: 4
6968 :DRILL_TOTAL_REPEATS: 6
6969 :DRILL_FAILURE_COUNT: 3
6970 :DRILL_AVERAGE_QUALITY: 2.982
6972 :DRILL_LAST_QUALITY: 4
6973 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:04>
6975 split-window-horizontally
6977 #+begin_src emacs-lisp
6978 (global-set-key (kbd "C-*") 'split-window-horizontally)
6983 SCHEDULED: <2014-03-17 Mon>
6986 :CUSTOM_ID: 5dbe3437-7364-4802-b558-00b2d5faacf6
6987 :ID: 2cffe3fb-a21a-4a49-83f8-65218c7a45a2
6988 :DRILL_LAST_INTERVAL: 15.2345
6989 :DRILL_REPEATS_SINCE_FAIL: 4
6990 :DRILL_TOTAL_REPEATS: 7
6991 :DRILL_FAILURE_COUNT: 2
6992 :DRILL_AVERAGE_QUALITY: 2.893
6994 :DRILL_LAST_QUALITY: 3
6995 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:09>
6999 #+begin_src emacs-lisp
7000 (global-set-key (kbd "C-M-*") 'calc-dispatch)
7005 :CUSTOM_ID: 8c414142-8a42-46df-9ab2-898f1be636c8
7008 SCHEDULED: <2014-03-27 Thu>
7010 :ID: eda4444e-f1c4-4db7-918d-96789f6a0b2b
7011 :CUSTOM_ID: 43d14154-2722-4ba5-b547-1b78c6274ebf
7012 :DRILL_LAST_INTERVAL: 50.6823
7013 :DRILL_REPEATS_SINCE_FAIL: 3
7014 :DRILL_TOTAL_REPEATS: 3
7015 :DRILL_FAILURE_COUNT: 0
7016 :DRILL_AVERAGE_QUALITY: 5.0
7018 :DRILL_LAST_QUALITY: 5
7019 :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:40>
7021 delete-window-or-exit
7023 #+begin_src emacs-lisp
7024 (global-set-key (kbd "C-9") 'delete-window-or-exit)
7026 (defun delete-window-or-exit ()
7027 "Delete window or exit emacs."
7029 (if (condition-case nil (delete-window) (error t))
7030 (if (or (boundp 'server-process) (> (length (frame-list)) 1))
7032 (save-buffers-kill-terminal t))))
7037 SCHEDULED: <2014-03-12 Wed>
7039 kill-buffer-and-window
7040 :CUSTOM_ID: 9dc95338-4321-4354-9de2-69409f383a10
7041 :ID: 24b7dd06-c5cc-4264-954f-d8190d44c1bf
7042 :DRILL_LAST_INTERVAL: 20.7344
7043 :DRILL_REPEATS_SINCE_FAIL: 4
7044 :DRILL_TOTAL_REPEATS: 4
7045 :DRILL_FAILURE_COUNT: 0
7046 :DRILL_AVERAGE_QUALITY: 3.75
7048 :DRILL_LAST_QUALITY: 5
7049 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 16:33>
7053 #+begin_src emacs-lisp
7054 (defun kill-buffer-no-ido ()
7055 "kill-buffer, avoid the ido remapping"
7058 (global-set-key (kbd "M-9") 'kill-buffer-no-ido)
7061 strangely, in simple mode, this is overridden.
7062 I found this map to override, but it didn't work, so it seems its being bound some other way.
7063 I did a grep of the emacs sources, but couldn't find anything.
7064 (define-key universal-argument-map [?9] nil)
7067 SCHEDULED: <2014-03-17 Mon>
7070 :ID: 2046ac28-1c06-410b-bdd9-39eaeada50c0
7071 :CUSTOM_ID: ffe9f636-31e5-48ba-b8fe-7c158ace744c
7072 :DRILL_LAST_INTERVAL: 25.6978
7073 :DRILL_REPEATS_SINCE_FAIL: 4
7074 :DRILL_TOTAL_REPEATS: 4
7075 :DRILL_FAILURE_COUNT: 0
7076 :DRILL_AVERAGE_QUALITY: 4.0
7078 :DRILL_LAST_QUALITY: 5
7079 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:41>
7082 ,save & kill buffer it was opened externally via emacsclient
7085 #+begin_src emacs-lisp
7086 (defun server-edit-save ()
7090 (global-set-key (kbd "C-M-9") 'server-edit-save)
7095 :CUSTOM_ID: 56d86cb3-cb86-42d8-9516-d7f2e086d88a
7098 SCHEDULED: <2014-03-27 Thu>
7100 :ID: a254c137-8a33-440d-b71e-5fbf9a21e2f5
7101 :CUSTOM_ID: 327992c0-6eba-4935-aec1-49871c2a8619
7102 :DRILL_LAST_INTERVAL: 50.6823
7103 :DRILL_REPEATS_SINCE_FAIL: 3
7104 :DRILL_TOTAL_REPEATS: 3
7105 :DRILL_FAILURE_COUNT: 0
7106 :DRILL_AVERAGE_QUALITY: 5.0
7108 :DRILL_LAST_QUALITY: 5
7109 :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:45>
7114 SCHEDULED: <2014-03-27 Thu>
7117 :ID: a2e31aed-143f-4aa2-841b-857729417993
7118 :CUSTOM_ID: 62735d64-b89a-46b7-b32e-2453b651039d
7119 :DRILL_LAST_INTERVAL: 50.6823
7120 :DRILL_REPEATS_SINCE_FAIL: 3
7121 :DRILL_TOTAL_REPEATS: 3
7122 :DRILL_FAILURE_COUNT: 0
7123 :DRILL_AVERAGE_QUALITY: 5.0
7125 :DRILL_LAST_QUALITY: 5
7126 :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:43>
7130 #+begin_src emacs-lisp
7131 (global-set-key (kbd "C-M-u") 'search-keybind)
7133 (defun search-keybind (regexp &optional nlines)
7134 (interactive (occur-read-primary-args))
7137 (set-buffer "*Help*")
7139 (delete-windows-on "*Help*")
7145 :CUSTOM_ID: 7f72dfa0-ba8e-4cd5-b25b-8ff6066464e6
7149 :CUSTOM_ID: 3124e200-1d6e-4ad2-9a36-0d03e1e7dc38
7154 :CUSTOM_ID: 95ab2045-88bf-4656-b8b1-6cebc87b89e0
7157 SCHEDULED: <2014-03-17 Mon>
7159 query-replace-regexp
7160 :CUSTOM_ID: a3260b61-7c51-4d97-9a91-3ed702c5ae29
7161 :ID: 93f569b8-4bc8-49e1-a38e-ced3d3198ce8
7162 :DRILL_LAST_INTERVAL: 26.3579
7163 :DRILL_REPEATS_SINCE_FAIL: 4
7164 :DRILL_TOTAL_REPEATS: 4
7165 :DRILL_FAILURE_COUNT: 1
7166 :DRILL_AVERAGE_QUALITY: 4.0
7168 :DRILL_LAST_QUALITY: 4
7169 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:45>
7171 query-replace-regexp
7173 #+begin_src emacs-lisp
7174 (global-set-key (kbd "C-M-i") 'query-replace-regexp)
7175 (add-hook 'flyspell-mode-hook
7176 (lambda () (define-key flyspell-mode-map (kbd "C-M-i") nil)))
7177 (add-hook 'text-mode-hook
7178 (lambda () (define-key text-mode-map (kbd "C-M-i") nil)))
7184 :CUSTOM_ID: 076edcc2-040e-4371-9851-4e587766e1fe
7187 SCHEDULED: <2014-05-13 Tue>
7190 :ID: a502687a-24b4-4b73-9abc-bc85b89ab235
7191 :CUSTOM_ID: 82215193-63b3-4d63-8f70-d11a328fe72d
7192 :DRILL_LAST_INTERVAL: 71.5839
7193 :DRILL_REPEATS_SINCE_FAIL: 4
7194 :DRILL_TOTAL_REPEATS: 4
7195 :DRILL_FAILURE_COUNT: 0
7196 :DRILL_AVERAGE_QUALITY: 4.75
7198 :DRILL_LAST_QUALITY: 5
7199 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:10>
7203 #+begin_src emacs-lisp
7204 (global-set-key (kbd "C-o") 'occur)
7209 :CUSTOM_ID: 8c58b99d-b1e4-4270-8d4a-8ae72e2a6470
7212 SCHEDULED: <2014-03-12 Wed>
7215 :CUSTOM_ID: 05d1ef50-43ee-46d7-b1ad-dd952543ab45
7216 :ID: 6dfcaa31-d223-4a14-904e-2f2395b2cf75
7217 :DRILL_LAST_INTERVAL: 10.3122
7218 :DRILL_REPEATS_SINCE_FAIL: 4
7219 :DRILL_TOTAL_REPEATS: 9
7220 :DRILL_FAILURE_COUNT: 9
7221 :DRILL_AVERAGE_QUALITY: 2.994
7223 :DRILL_LAST_QUALITY: 4
7224 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:09>
7228 #+begin_src emacs-lisp
7229 (global-set-key (kbd "C-M-o") 'ido-goto-symbol)
7234 :CUSTOM_ID: 7eacf048-4da8-4b2b-8a51-a4772111e285
7237 SCHEDULED: <2014-03-15 Sat>
7240 :ID: 6b1abcf6-7f95-45c4-a87f-0e86c43c5af1
7241 :CUSTOM_ID: 9c2e2ba9-f34e-48fe-b4ff-b9826882c1cc
7242 :DRILL_LAST_INTERVAL: 23.5247
7243 :DRILL_REPEATS_SINCE_FAIL: 4
7244 :DRILL_TOTAL_REPEATS: 4
7245 :DRILL_FAILURE_COUNT: 0
7246 :DRILL_AVERAGE_QUALITY: 3.5
7248 :DRILL_LAST_QUALITY: 3
7249 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:41>
7253 #+begin_src emacs-lisp
7254 (global-set-key (kbd "C-p") 'move-mouse-to-point)
7258 *** [C-M-p] :drill:leech:
7260 delete-horizontal-space
7261 :ID: e2972d5b-28e7-46aa-896f-66d68a6df0de
7262 :CUSTOM_ID: d55616d3-a3f6-4e83-8807-748578a7b726
7263 :DRILL_LAST_INTERVAL: 0.0
7264 :DRILL_REPEATS_SINCE_FAIL: 0
7265 :DRILL_TOTAL_REPEATS: 10
7266 :DRILL_FAILURE_COUNT: 16
7267 :DRILL_AVERAGE_QUALITY: 2.433
7269 :DRILL_LAST_QUALITY: 2
7270 :DRILL_LAST_REVIEWED: <2014-04-14 Mon 11:31>
7272 delete-horizontal-space
7274 #+begin_src emacs-lisp
7275 (global-set-key (kbd "C-M-p") 'delete-horizontal-space)
7280 :CUSTOM_ID: f0cffe8d-d2cb-4f5d-a3f2-fa900e093ef7
7283 SCHEDULED: <2014-03-15 Sat>
7286 #+begin_src emacs-lisp
7287 (defun my-pop-to-mark-command ()
7288 "Jump to mark, and pop a new position for mark off the ring.
7289 \(Does not affect global mark ring\)."
7291 (pop-to-mark-command)
7292 (if (and (derived-mode-p 'org-mode) (outline-invisible-p))
7293 (org-show-context 'mark-goto)))
7295 (global-set-key (kbd "C-j") 'my-pop-to-mark-command)
7296 (define-key ido-common-completion-map (kbd "C-j") 'ido-select-text)
7297 (add-hook 'ido-setup-hook
7298 (lambda () (define-key ido-common-completion-map (kbd "C-j") 'ido-select-text)))
7299 (add-hook 'lisp-interaction-mode-hook
7301 (define-key lisp-interaction-mode-map (kbd "C-j") nil)))
7306 SCHEDULED: <2014-03-13 Thu>
7309 :ID: cb5f0e6f-815d-488f-bfb2-5d31bd5dc215
7310 :CUSTOM_ID: 474a3e12-95ac-4f43-b83a-36716f3e6f76
7311 :DRILL_LAST_INTERVAL: 21.5453
7312 :DRILL_REPEATS_SINCE_FAIL: 4
7313 :DRILL_TOTAL_REPEATS: 4
7314 :DRILL_FAILURE_COUNT: 0
7315 :DRILL_AVERAGE_QUALITY: 3.25
7317 :DRILL_LAST_QUALITY: 3
7318 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 16:39>
7322 #+begin_src emacs-lisp
7323 (global-set-key (kbd "M-j") 'previous-error)
7331 :CUSTOM_ID: ebcf7c71-3c93-431b-af6b-7c5df7f2945e
7332 :ID: d2604f6e-341d-4d57-91c8-ec6f2cdeb901
7333 :DRILL_LAST_INTERVAL: 23.5247
7334 :DRILL_REPEATS_SINCE_FAIL: 4
7335 :DRILL_TOTAL_REPEATS: 4
7336 :DRILL_FAILURE_COUNT: 0
7337 :DRILL_AVERAGE_QUALITY: 3.5
7339 :DRILL_LAST_QUALITY: 3
7340 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:45>
7342 #+begin_src emacs-lisp
7343 (define-key global-map (kbd "C-M-j") ctl-x-r-map)
7344 (define-key ctl-x-r-map "m" 'kmacro-to-register)
7350 :CUSTOM_ID: 381a6c7c-e763-4d9a-86f5-55a5e0afcee1
7353 SCHEDULED: <2014-05-13 Tue>
7356 :CUSTOM_ID: 25a7ba1c-ddf3-47f1-9516-914a552e7a36
7357 :ID: 095be13e-f98c-4f42-9353-08329fa47d06
7358 :DRILL_LAST_INTERVAL: 71.5839
7359 :DRILL_REPEATS_SINCE_FAIL: 4
7360 :DRILL_TOTAL_REPEATS: 4
7361 :DRILL_FAILURE_COUNT: 0
7362 :DRILL_AVERAGE_QUALITY: 4.75
7364 :DRILL_LAST_QUALITY: 5
7365 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:10>
7369 #+begin_src emacs-lisp
7371 (global-set-key (kbd "C-k") 'jump-to-register)
7375 SCHEDULED: <2014-03-15 Sat>
7378 :ID: c9f19dcc-4c14-4bdd-b350-c426dff14189
7379 :CUSTOM_ID: a96691bb-9e4c-414b-a093-d9961d453e21
7380 :DRILL_LAST_INTERVAL: 24.4352
7381 :DRILL_REPEATS_SINCE_FAIL: 4
7382 :DRILL_TOTAL_REPEATS: 4
7383 :DRILL_FAILURE_COUNT: 0
7384 :DRILL_AVERAGE_QUALITY: 3.75
7386 :DRILL_LAST_QUALITY: 4
7387 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:40>
7391 #+begin_src emacs-lisp
7392 (global-set-key (kbd "M-k") 'next-error)
7396 SCHEDULED: <2014-03-21 Fri>
7399 :CUSTOM_ID: f61ea4ea-4597-422e-b7e3-d3cfad82603d
7400 :ID: 4c874a82-22dd-4bc2-a0ac-24420c30b888
7401 :DRILL_LAST_INTERVAL: 29.8228
7402 :DRILL_REPEATS_SINCE_FAIL: 4
7403 :DRILL_TOTAL_REPEATS: 4
7404 :DRILL_FAILURE_COUNT: 0
7405 :DRILL_AVERAGE_QUALITY: 4.25
7407 :DRILL_LAST_QUALITY: 5
7408 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:46>
7412 #+begin_src emacs-lisp
7413 (global-set-key (kbd "C-M-k") 'man)
7418 :CUSTOM_ID: da51b99a-1782-45ad-92be-f4c0a645bea8
7421 SCHEDULED: <2014-05-13 Tue>
7424 :ID: 3c7fabd9-572d-4945-ab4b-d7a8dc2cd9c5
7425 :CUSTOM_ID: 8a7572bd-4b5e-4464-b937-3d35adb1783f
7426 :DRILL_LAST_INTERVAL: 71.5839
7427 :DRILL_REPEATS_SINCE_FAIL: 4
7428 :DRILL_TOTAL_REPEATS: 4
7429 :DRILL_FAILURE_COUNT: 0
7430 :DRILL_AVERAGE_QUALITY: 4.75
7432 :DRILL_LAST_QUALITY: 5
7433 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:10>
7437 #+begin_src emacs-lisp
7438 (global-set-key (kbd "C-l") 'ido-switch-buffer)
7443 :CUSTOM_ID: 27f47c6c-36ad-430e-b4b0-5e96b635bf36
7447 SCHEDULED: <2014-04-04 Fri>
7449 move cursor top bottom mid
7450 :ID: 37a3ccad-9b61-44b0-bddb-219a024cd963
7451 :CUSTOM_ID: 24b660d4-3ec4-4416-8a6a-b8224ed1ee8b
7452 :DRILL_LAST_INTERVAL: 25.8141
7453 :DRILL_REPEATS_SINCE_FAIL: 5
7454 :DRILL_TOTAL_REPEATS: 5
7455 :DRILL_FAILURE_COUNT: 1
7456 :DRILL_AVERAGE_QUALITY: 3.0
7458 :DRILL_LAST_QUALITY: 3
7459 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:36>
7461 move cursor top bottom mid, comint clear screen
7463 #+begin_src emacs-lisp
7464 (global-set-key (kbd "C-M-l") 'move-to-window-line-top-bottom)
7469 :CUSTOM_ID: c355178f-c9b4-4ae7-9627-b4117fef45b9
7472 SCHEDULED: <2014-03-19 Wed>
7475 :CUSTOM_ID: 7e3710eb-5460-4460-8bf0-488302e4ce35
7476 :ID: 1c1b7a4a-484b-4faf-ae20-65d096ff2574
7477 :DRILL_LAST_INTERVAL: 27.9041
7478 :DRILL_REPEATS_SINCE_FAIL: 4
7479 :DRILL_TOTAL_REPEATS: 4
7480 :DRILL_FAILURE_COUNT: 0
7481 :DRILL_AVERAGE_QUALITY: 4.0
7483 :DRILL_LAST_QUALITY: 4
7484 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:45>
7488 #+begin_src emacs-lisp
7489 (global-set-key (kbd "C-;") 'comment-dwim)
7490 (add-hook 'flyspell-mode-hook
7491 (lambda () (define-key flyspell-mode-map (kbd "C-;") nil)))
7496 :CUSTOM_ID: 211e76d9-d89a-4cc6-abce-69397d456fda
7499 SCHEDULED: <2014-04-07 Mon>
7501 comment-current-line-dwim
7502 :ID: 9ff312cc-f460-4f5d-9e4b-37f7ed538209
7503 :CUSTOM_ID: 28680a96-5223-4632-80b9-b1facdd541e7
7504 :DRILL_LAST_INTERVAL: 42.8284
7505 :DRILL_REPEATS_SINCE_FAIL: 4
7506 :DRILL_TOTAL_REPEATS: 4
7507 :DRILL_FAILURE_COUNT: 0
7508 :DRILL_AVERAGE_QUALITY: 4.5
7510 :DRILL_LAST_QUALITY: 5
7511 :DRILL_LAST_REVIEWED: <2014-02-23 Sun 01:51>
7513 comment-current-line-dwim
7515 #+begin_src emacs-lisp
7516 (defun comment-current-line-dwim ()
7517 "Comment or uncomment the current line."
7520 (push-mark (beginning-of-line) t t)
7523 (move-beginning-of-line 2))
7524 (global-set-key (kbd "C-M-;") 'comment-current-line-dwim)
7529 :CUSTOM_ID: c9f00d6c-f9d2-420f-a08e-21ea78023066
7533 :CUSTOM_ID: deee53ba-dfa2-4910-894c-55ae98d11aa4
7537 :CUSTOM_ID: f7237459-96b6-4de9-937f-5fbfa9ca5b1e
7540 SCHEDULED: <2014-03-11 Tue>
7543 :CUSTOM_ID: f283f705-cba0-45db-b80f-5d20415b2eee
7544 :ID: b952fa90-b492-4f85-9d8e-5cd24c060b94
7545 :DRILL_LAST_INTERVAL: 9.1491
7546 :DRILL_REPEATS_SINCE_FAIL: 3
7547 :DRILL_TOTAL_REPEATS: 7
7548 :DRILL_FAILURE_COUNT: 3
7549 :DRILL_AVERAGE_QUALITY: 2.924
7551 :DRILL_LAST_QUALITY: 3
7552 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:05>
7556 #+begin_src emacs-lisp
7557 (define-key global-map (kbd "C-M-m") 'rgrep)
7562 :CUSTOM_ID: dd3136a5-5383-4fc7-8c9f-fcbaba251a76
7565 SCHEDULED: <2014-05-13 Tue>
7568 :CUSTOM_ID: 6cbf3a85-f260-453a-920b-850ff5e986b1
7569 :ID: df0f3769-bcfc-4cb9-8943-bb86dafb2711
7570 :DRILL_LAST_INTERVAL: 71.5839
7571 :DRILL_REPEATS_SINCE_FAIL: 4
7572 :DRILL_TOTAL_REPEATS: 4
7573 :DRILL_FAILURE_COUNT: 0
7574 :DRILL_AVERAGE_QUALITY: 4.75
7576 :DRILL_LAST_QUALITY: 5
7577 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:10>
7581 #+begin_src emacs-lisp
7582 (global-set-key (kbd "C-,") 'ido-find-file)
7583 (add-hook 'flyspell-mode-hook
7584 (lambda () (define-key flyspell-mode-map (kbd "C-,") nil)))
7589 SCHEDULED: <2014-03-19 Wed>
7591 find-file-in-project
7592 :ID: fca85295-0567-4443-ac74-a54b93a2e603
7593 :CUSTOM_ID: bfdf6111-029d-462b-bcca-50a3ed2162d5
7594 :DRILL_LAST_INTERVAL: 24.3844
7595 :DRILL_REPEATS_SINCE_FAIL: 5
7596 :DRILL_TOTAL_REPEATS: 5
7597 :DRILL_FAILURE_COUNT: 2
7598 :DRILL_AVERAGE_QUALITY: 3.0
7600 :DRILL_LAST_QUALITY: 3
7601 :DRILL_LAST_REVIEWED: <2014-02-23 Sun 01:51>
7603 find-file-in-project
7605 #+begin_src emacs-lisp
7606 (global-set-key (kbd "C-M-,") 'find-file-in-project)
7611 :CUSTOM_ID: 74a86b9e-9a56-4f5e-a6eb-9f2cd09da613
7614 SCHEDULED: <2014-03-27 Thu>
7616 recentf-ido-find-file
7617 :CUSTOM_ID: 0675c171-8677-44a8-882c-e7ed42715e31
7618 :ID: a600d171-1964-4a81-a39e-cfac4716f96d
7619 :DRILL_LAST_INTERVAL: 50.6823
7620 :DRILL_REPEATS_SINCE_FAIL: 3
7621 :DRILL_TOTAL_REPEATS: 3
7622 :DRILL_FAILURE_COUNT: 0
7623 :DRILL_AVERAGE_QUALITY: 5.0
7625 :DRILL_LAST_QUALITY: 5
7626 :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:41>
7630 Taken from starter kit.
7631 #+begin_src emacs-lisp
7632 (defun recentf-ido-find-file ()
7633 "Find a recent file using Ido."
7635 (let* ((file-assoc-list
7637 (cons (file-name-nondirectory x)
7641 (remove-duplicates (mapcar #'car file-assoc-list)
7643 (filename (ido-completing-read "Choose recent file: "
7648 (find-file (cdr (assoc filename
7649 file-assoc-list))))))
7651 (add-hook 'flyspell-mode-hook
7652 (lambda () (define-key flyspell-mode-map (kbd "C-.") nil)))
7653 (define-key dot-mode-map (kbd "C-.") nil)
7654 (global-set-key (kbd "C-.") 'recentf-ido-find-file)
7655 (add-hook 'php-mode-hook
7656 (lambda () (define-key php-mode-map (kbd "C-.") nil)))
7662 :CUSTOM_ID: 824d422c-67b6-4d68-af11-6a2135e528f5
7666 #+begin_src emacs-lisp
7667 (define-key dot-mode-map (kbd "C-M-.") nil)
7668 ;; (global-set-key (kbd "C-M-.") 'execute-extended-command)
7673 :CUSTOM_ID: 346effe7-027b-4c4a-a236-3bc6ef541a0c
7677 :CUSTOM_ID: 941a7fa8-84b9-434d-89a0-1487385ec479
7678 :ID: 1bf4af8d-58bb-4b58-af60-2ed87f32f4eb
7682 #+begin_src emacs-lisp
7683 (defun vim-style-join-line ()
7686 (global-set-key (kbd "C-/") 'vim-style-join-line)
7687 (define-key undo-tree-map (kbd "C-/") nil)
7692 :CUSTOM_ID: f65acefa-7e11-438e-a59c-42a9c7c71607
7696 :CUSTOM_ID: 37f67593-4f60-4d3b-9aad-6c9bc4882443
7697 :ID: c41dd5ab-619f-40fe-9471-9ba59d0fef46
7701 #+begin_src emacs-lisp
7702 (defun copy-variable (variable)
7704 (let ((v (variable-at-point))
7705 (enable-recursive-minibuffers t)
7707 (setq val (completing-read (if (symbolp v)
7709 "Describe variable (default %s): " v)
7710 "Describe variable: ")
7713 (or (get vv 'variable-documentation)
7714 (and (boundp vv) (not (keywordp vv)))))
7716 (if (symbolp v) (symbol-name v))))
7717 (list (if (equal val "")
7719 (kill-new (symbol-value variable)))
7720 (global-set-key (kbd "C-M-/") 'copy-variable)
7726 :CUSTOM_ID: ff612b05-8a3f-4599-a95b-f8af19b71b47
7729 SCHEDULED: <2014-03-13 Thu>
7732 :CUSTOM_ID: 251c4a1a-a683-4804-a706-d0d3752e42fa
7733 :ID: 8084cd41-1833-4e16-ac01-60a5738d0bf3
7734 :DRILL_LAST_INTERVAL: 22.2211
7735 :DRILL_REPEATS_SINCE_FAIL: 4
7736 :DRILL_TOTAL_REPEATS: 4
7737 :DRILL_FAILURE_COUNT: 1
7738 :DRILL_AVERAGE_QUALITY: 3.5
7740 :DRILL_LAST_QUALITY: 3
7741 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 16:35>
7745 #+begin_src emacs-lisp
7746 (global-set-key (kbd "C-8") 'calc-embedded-word)
7751 :CUSTOM_ID: 34f4f850-c3e4-4724-aabc-08eee19f034a
7755 :CUSTOM_ID: 52191c76-756e-4dcc-87a5-2b84c550db5f
7759 :CUSTOM_ID: 3f677c1a-7011-467e-ae4c-4b944807376b
7761 *** [C-up-arrow] :drill:
7762 SCHEDULED: <2014-03-14 Fri>
7765 :CUSTOM_ID: f47d312a-063d-42ed-a352-176298a2cb0c
7766 :ID: 93fe8dac-4206-4131-9264-3411e6467b01
7767 :DRILL_LAST_INTERVAL: 23.4066
7768 :DRILL_REPEATS_SINCE_FAIL: 5
7769 :DRILL_TOTAL_REPEATS: 5
7770 :DRILL_FAILURE_COUNT: 3
7771 :DRILL_AVERAGE_QUALITY: 3.2
7773 :DRILL_LAST_QUALITY: 4
7774 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 18:04>
7778 #+begin_src emacs-lisp
7779 (define-key undo-tree-map "\C-_" nil)
7780 ;; disabled just because i don't want to accidentally hit it
7781 (define-key global-map "\C-_" nil)
7782 (global-set-key (kbd "<C-_>") 'beginning-of-defun)
7784 (add-hook 'org-mode-hook
7786 (define-key org-mode-map (kbd "\C-_") 'outline-previous-visible-heading)))
7794 :CUSTOM_ID: 30f87801-2c2d-4722-9348-fb38ea6c09b0
7797 *** C-S-up-arrow :drill:
7800 #+begin_src emacs-lisp
7801 (global-set-key (kbd "<C-S-_>") 'winner-undo)
7804 *** [C-down-arrow] :drill:
7805 SCHEDULED: <2014-03-13 Thu>
7807 forward dfun/headline
7808 :CUSTOM_ID: 27435136-b3d7-4f25-aa85-2a7363a7f366
7809 :ID: da405d83-b0af-4778-9703-a3f109a1233d
7810 :DRILL_LAST_INTERVAL: 10.7692
7811 :DRILL_REPEATS_SINCE_FAIL: 3
7812 :DRILL_TOTAL_REPEATS: 6
7813 :DRILL_FAILURE_COUNT: 1
7814 :DRILL_AVERAGE_QUALITY: 3.167
7816 :DRILL_LAST_QUALITY: 4
7817 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:09>
7821 #+begin_src emacs-lisp
7822 (global-set-key (kbd "<C-kp-enter>") 'end-of-defun)
7824 (add-hook 'org-mode-hook
7826 (define-key org-mode-map (kbd "<C-kp-enter>") 'outline-next-visible-heading)))
7833 *** [C-M-down-arrow] :drill:
7834 SCHEDULED: <2014-03-20 Thu>
7836 toggle-mark-activation
7837 :ID: c57f3bab-8ea1-423d-b759-e1ec2586753c
7838 :CUSTOM_ID: 3bcb35fd-6d54-4213-b94f-2739c0bc0041
7839 :DRILL_LAST_INTERVAL: 17.6506
7840 :DRILL_REPEATS_SINCE_FAIL: 4
7841 :DRILL_TOTAL_REPEATS: 7
7842 :DRILL_FAILURE_COUNT: 4
7843 :DRILL_AVERAGE_QUALITY: 3.661
7845 :DRILL_LAST_QUALITY: 5
7846 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:10>
7848 toggle-mark-activation
7850 #+begin_src emacs-lisp
7851 (defun toggle-mark-activation ()
7857 (global-set-key (kbd "<C-M-kp-enter>") 'toggle-mark-activation)
7862 #+begin_src emacs-lisp
7863 (global-set-key (kbd "<C-S-kp-enter>") 'winner-redo)
7867 *** [C-S-down-arrow] :drill:
7868 SCHEDULED: <2014-03-19 Wed>
7870 smex-major-mode-commands
7871 :CUSTOM_ID: 1434bdd0-c5a8-4c96-9b92-9474e88fd1c5
7872 :ID: 1e992e46-ec69-416c-b7d7-7c87da109b43
7873 :DRILL_LAST_INTERVAL: 24.3844
7874 :DRILL_REPEATS_SINCE_FAIL: 5
7875 :DRILL_TOTAL_REPEATS: 5
7876 :DRILL_FAILURE_COUNT: 2
7877 :DRILL_AVERAGE_QUALITY: 3.0
7879 :DRILL_LAST_QUALITY: 3
7880 :DRILL_LAST_REVIEWED: <2014-02-23 Sun 02:28>
7884 #+begin_src emacs-lisp
7885 (global-set-key (kbd "<C-S-kp-enter>") 'smex-major-mode-commands)
7890 :CUSTOM_ID: 9d9916dd-3280-47dd-aab1-cd28d5ebfe15
7894 *** [C-M-lbracket] :drill:
7895 SCHEDULED: <2014-03-15 Sat>
7898 :CUSTOM_ID: 7411b1a5-c8fa-4bcc-8788-798e5635dd62
7899 :ID: 0bf13532-1df9-4eb3-953c-10901f2a5da5
7900 :DRILL_LAST_INTERVAL: 23.5247
7901 :DRILL_REPEATS_SINCE_FAIL: 4
7902 :DRILL_TOTAL_REPEATS: 4
7903 :DRILL_FAILURE_COUNT: 0
7904 :DRILL_AVERAGE_QUALITY: 3.5
7906 :DRILL_LAST_QUALITY: 3
7907 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:25>
7911 #+begin_src emacs-lisp
7912 (global-set-key (kbd "C-M-[") 'scroll-right)
7918 :CUSTOM_ID: 21b38c6b-3a46-4a08-8eca-d44abb148287
7921 #+begin_src emacs-lisp
7922 (global-set-key (kbd "C-]") 'fill-paragraph)
7925 *** [C-M-rbracket] :drill:
7926 SCHEDULED: <2014-03-15 Sat>
7929 :CUSTOM_ID: c9c18f48-d0ca-4a1b-a751-7165f40118a3
7930 :ID: ff008422-b6f5-4770-9e53-e6acdac90b45
7931 :DRILL_LAST_INTERVAL: 24.4352
7932 :DRILL_REPEATS_SINCE_FAIL: 4
7933 :DRILL_TOTAL_REPEATS: 4
7934 :DRILL_FAILURE_COUNT: 0
7935 :DRILL_AVERAGE_QUALITY: 3.75
7937 :DRILL_LAST_QUALITY: 4
7938 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:44>
7942 #+begin_src emacs-lisp
7943 (global-set-key (kbd "C-M-]") 'scroll-left)
7948 :CUSTOM_ID: d42245ca-3246-477b-bda9-8776cd668cd1
7950 *** [C-return] :drill:
7951 SCHEDULED: <2014-03-12 Wed>
7954 :ID: 20e450f0-6467-40f2-bd1b-b4038693e73f
7955 :CUSTOM_ID: baf7ea5a-d16d-4fee-a6ce-542cc11beb97
7956 :DRILL_LAST_INTERVAL: 20.7344
7957 :DRILL_REPEATS_SINCE_FAIL: 4
7958 :DRILL_TOTAL_REPEATS: 4
7959 :DRILL_FAILURE_COUNT: 0
7960 :DRILL_AVERAGE_QUALITY: 3.75
7962 :DRILL_LAST_QUALITY: 5
7963 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 16:29>
7967 #+begin_src emacs-lisp
7968 (defun newline-anywhere ()
7969 "Add a newline from anywhere in the line."
7972 (newline-and-indent))
7973 (global-set-key (kbd "<C-return>") 'newline-anywhere)
7977 *** [M-return] :drill:
7978 SCHEDULED: <2014-03-11 Tue>
7980 non-indented newline
7981 :ID: 4fc4d372-765e-4e2e-87f4-0a0e1fd93f34
7982 :CUSTOM_ID: e6895ad3-a2c8-46c8-abbc-1bba94a88596
7983 :DRILL_LAST_INTERVAL: 19.9622
7984 :DRILL_REPEATS_SINCE_FAIL: 4
7985 :DRILL_TOTAL_REPEATS: 4
7986 :DRILL_FAILURE_COUNT: 0
7987 :DRILL_AVERAGE_QUALITY: 3.5
7989 :DRILL_LAST_QUALITY: 4
7990 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 16:30>
7994 #+begin_src emacs-lisp
7995 (defun plain-newline ()
7998 (global-set-key (kbd "<M-return>") 'plain-newline)
8004 open newline on previous line
8005 :CUSTOM_ID: 2a8fc6ea-a550-4437-9e35-3b3f2776788a
8008 #+begin_src emacs-lisp
8009 (defun newline-anywhere-previous ()
8010 "Add a newline from anywhere in the line."
8014 (newline-and-indent))
8015 (global-set-key (kbd "<C-M-return>") 'newline-anywhere-previous)
8020 :CUSTOM_ID: 787cc59e-ce0f-4291-a9d5-fd4e14b0b83b
8022 *** [C-space] :drill:
8023 SCHEDULED: <2014-03-18 Tue>
8026 :CUSTOM_ID: 132daa1a-8e5f-47f1-a28d-35bee873aeac
8027 :ID: 3204f2ca-10b2-469b-8b70-fb660e35478a
8028 :DRILL_LAST_INTERVAL: 41.7787
8029 :DRILL_REPEATS_SINCE_FAIL: 3
8030 :DRILL_TOTAL_REPEATS: 3
8031 :DRILL_FAILURE_COUNT: 0
8032 :DRILL_AVERAGE_QUALITY: 4.667
8034 :DRILL_LAST_QUALITY: 4
8035 :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:44>
8039 #+begin_src emacs-lisp
8040 ;; (kbd "<C-space>") does not work, (kbd "C-SPC") should work
8041 (add-hook 'org-mode-hook
8043 (define-key org-mode-map (kbd "C-SPC") 'org-edit-special)
8044 (define-key org-src-mode-map (kbd "C-SPC") 'org-edit-src-exit)))
8049 :CUSTOM_ID: bbffb12e-03f2-4a26-a9e4-fd263ad6b518
8054 :CUSTOM_ID: 02359b66-bf6e-4f41-9f03-e83fcbe3e68c
8057 before or under cursor
8058 #+begin_src emacs-lisp
8059 (global-set-key (kbd "C-M-SPC") 'ispell-word)
8064 :CUSTOM_ID: a28e904f-f2bd-48d3-9718-af3f541e611e
8069 :CUSTOM_ID: 6b01dcdd-d1c1-4e3f-9e28-9c3574682f95
8073 :CUSTOM_ID: 6a63486f-ea5b-4ece-a535-5277022e0cde
8077 :CUSTOM_ID: 1e245ef6-5bdb-4f99-b8e2-f5d45a7c0847
8081 :CUSTOM_ID: 0f9aa2b8-83c7-433c-80e0-f90ee802365f
8085 :CUSTOM_ID: 06374c1c-025b-47c2-90b2-82f37031093b
8089 :CUSTOM_ID: 51810ebd-52f3-4e68-9434-e2347a834787
8093 :CUSTOM_ID: 9207526f-a925-4ecc-bd30-98cbd580d67a
8097 :CUSTOM_ID: 58a7a929-50b5-4393-9b08-59ad2039b263
8101 :CUSTOM_ID: 24a0c3c4-bce7-4a94-8a31-e5259387c573
8105 :CUSTOM_ID: 2d4fa927-2140-424b-9990-e8f2c3424e57
8111 :CUSTOM_ID: 3ff50f5f-f286-4a73-962b-58dbcf3b09b1
8112 :ID: addc832b-5547-4d45-a1f5-3e9283920612
8114 #+begin_src emacs-lisp
8115 (global-set-key (kbd "C-M-4") 'widen)
8120 :CUSTOM_ID: ba9ed568-7ba1-4283-b4c7-57fcb9a5a477
8124 :CUSTOM_ID: 83bc2d8a-a225-4b6f-ab98-f47aa6d1e73f
8128 :CUSTOM_ID: 1b8f04c3-91b5-43cd-8a1a-94c8105eff24
8132 :CUSTOM_ID: fab28de6-7fe4-45d7-a856-5d29a9085f5d
8136 :CUSTOM_ID: b22cdf04-bc77-493b-a65c-5992befc1a62
8138 *** [C-tab-key] :drill:
8139 SCHEDULED: <2014-03-12 Wed>
8142 :CUSTOM_ID: 68313551-90cd-47a6-8170-1745348add17
8143 :ID: 5b315ca6-c623-4b23-bef3-31b325591d01
8144 :DRILL_LAST_INTERVAL: 20.9905
8145 :DRILL_REPEATS_SINCE_FAIL: 4
8146 :DRILL_TOTAL_REPEATS: 4
8147 :DRILL_FAILURE_COUNT: 2
8148 :DRILL_AVERAGE_QUALITY: 3.5
8150 :DRILL_LAST_QUALITY: 3
8151 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 16:32>
8155 #+begin_src emacs-lisp
8157 (global-set-key (kbd "<C-kp-add>") 'query-replace)
8164 SCHEDULED: <2014-03-24 Mon>
8166 org change todo state
8167 :ID: b9a6ec32-9b64-403f-be09-73769f778d1f
8168 :CUSTOM_ID: aaac3048-9125-4fd5-b8f2-21bafcc1ff1c
8169 :DRILL_LAST_INTERVAL: 32.7466
8170 :DRILL_REPEATS_SINCE_FAIL: 4
8171 :DRILL_TOTAL_REPEATS: 4
8172 :DRILL_FAILURE_COUNT: 0
8173 :DRILL_AVERAGE_QUALITY: 4.0
8175 :DRILL_LAST_QUALITY: 4
8176 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:53>
8178 org cycle todo / toggle comint motion
8180 #+begin_src emacs-lisp
8181 (add-hook 'org-mode-hook
8183 (define-key org-mode-map (kbd "C-t") 'org-todo)))
8185 (defun my-comint-previous-input (arg)
8187 (if (comint-after-pmark-p)
8188 (comint-previous-input arg)
8191 (defun my-comint-next-input (arg)
8193 (if (comint-after-pmark-p)
8194 (comint-next-input arg)
8197 (add-hook 'comint-mode-hook
8199 (define-key comint-mode-map (kbd "C-t") 'comint-toggle-arrow-keys)
8200 (define-key comint-mode-map (kbd "<up>") 'my-comint-previous-input)
8201 (define-key comint-mode-map (kbd "<down>") 'my-comint-next-input)))
8204 (defun comint-toggle-arrow-keys ()
8206 (toggle-arrow-keys comint-mode-map))
8208 (setq-default comint-arrow-movement nil)
8209 (defun toggle-arrow-keys (map)
8210 (cond ((lookup-key map (kbd "<up>"))
8211 (setq-local comint-arrow-movement t)
8212 (define-key map (kbd "<up>") nil)
8213 (define-key map (kbd "<down>") nil))
8215 (setq-local comint-arrow-movement nil)
8216 (define-key map (kbd "<up>") 'my-comint-previous-input)
8217 (define-key map (kbd "<down>") 'my-comint-next-input)
8218 (goto-char (point-max)))))
8220 (defun ian-sign-email ()
8222 (insert "Ian Kelling
8223 https://iankelling.org"))
8225 (eval-after-load "message"
8226 '(define-key message-mode-map (kbd "C-t") 'ian-sign-email))
8228 Thanks for the update. I will be enjoying it.
8231 : comint-toggle-arrow-keys
8235 :CUSTOM_ID: 4542dc3a-d876-4726-8c8e-61c7c9cecd64
8238 SCHEDULED: <2014-03-15 Sat>
8240 org insert timestamp
8241 :ID: ed43d561-cf73-4123-8cf2-12e184f99e0f
8242 :CUSTOM_ID: 5bc609b1-9428-4b82-a55d-811fefe65331
8243 :DRILL_LAST_INTERVAL: 23.5247
8244 :DRILL_REPEATS_SINCE_FAIL: 4
8245 :DRILL_TOTAL_REPEATS: 4
8246 :DRILL_FAILURE_COUNT: 0
8247 :DRILL_AVERAGE_QUALITY: 3.5
8249 :DRILL_LAST_QUALITY: 3
8250 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:41>
8254 #+begin_src emacs-lisp
8255 (global-set-key (kbd "C-M-t") 'org-time-stamp-with-time)
8260 :CUSTOM_ID: 6a6fcd06-5822-4a3d-8e2e-1fc0f64357b2
8264 :CUSTOM_ID: 1919659a-b466-4519-9276-8bf06a916066
8269 :CUSTOM_ID: 29a3b536-201d-4499-b131-afe58e6f45b4
8273 :CUSTOM_ID: d9df9b43-357a-43e1-bb1c-47d61f095738
8277 :CUSTOM_ID: a91ee772-a59c-4083-a65c-6f9b294b517c
8281 :CUSTOM_ID: 0a7bd629-cbcc-4761-8fe2-cc9370b985a4
8286 :CUSTOM_ID: 1c215db5-a50c-4718-868a-871d69acf117
8290 :CUSTOM_ID: cf2df317-a0b1-41e6-9919-67e77bb796f8
8294 :CUSTOM_ID: a4721bb0-9cbc-4f3c-b292-645d5121c839
8298 :CUSTOM_ID: 014536d9-68e3-46f5-9594-e74fe64f4d9e
8302 :CUSTOM_ID: 6dee0f1b-3680-4a72-8a80-e31b9c7c219d
8306 :CUSTOM_ID: f5e835dd-e2b8-42eb-b7f1-9ec76c7dfcb8
8310 :CUSTOM_ID: c3aba493-9e85-40b7-989d-7e17ba2b55a7
8315 :CUSTOM_ID: e44e584b-d925-4036-9ad5-a90d02e74bef
8317 save-buffers-kill-emacs
8319 #+begin_src emacs-lisp
8320 (global-set-key (kbd "C-6") 'save-buffers-kill-emacs)
8326 :CUSTOM_ID: da73de75-0914-4f48-81d5-9b408433b14b
8327 :ID: bcf78e2e-810e-4a6d-9056-bd488aaa373b
8329 insert-small-copyright
8331 #+begin_src emacs-lisp
8332 (defun insert-small-copyright ()
8335 (let ((beg (point)))
8336 (insert "Copyright (C) 2016 Ian Kelling\nThis program is under GPL v. 3 or later, see <http://www.gnu.org/licenses/>")
8337 (comment-region beg (point))))
8339 (global-set-key (kbd "C-M-6") 'insert-small-copyright)
8347 :CUSTOM_ID: a68c6b8e-9911-475e-ab35-e239771fe881
8348 :ID: ae9704b8-1492-4dc0-806a-dd3407526733
8350 insert-full-copyright
8352 #+begin_src emacs-lisp
8353 (defun insert-full-copyright ()
8356 (let ((beg (point)))
8357 (insert "Copyright (C) 2016 Ian Kelling\n")
8359 (insert "This program is free software: you can redistribute it and/or modify\n")
8360 (insert "it under the terms of the GNU General Public License as published by\n")
8361 (insert "the Free Software Foundation, either version 3 of the License, or\n")
8362 (insert "(at your option) any later version.\n")
8364 (insert "This program is distributed in the hope that it will be useful,\n")
8365 (insert "but WITHOUT ANY WARRANTY; without even the implied warranty of\n")
8366 (insert "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n")
8367 (insert "GNU General Public License for more details.\n")
8369 (insert "You should have received a copy of the GNU General Public License\n")
8370 (insert "along with this program. If not, see <http://www.gnu.org/licenses/>.\n")
8371 (comment-region beg (point))))
8373 (global-set-key (kbd "C-M-7") 'insert-full-copyright)
8379 :CUSTOM_ID: 05f5737b-a320-403c-a8f1-fa0a02f679e1
8383 :CUSTOM_ID: 96ae2fcc-3a0c-40c4-aef8-06aff3fd42be
8387 #+begin_src emacs-lisp
8388 (defun text-scale-reset ()
8391 (global-set-key (kbd "C-0") 'text-scale-reset)
8396 :CUSTOM_ID: c5735fdf-d0d9-468c-917c-3936e409a2bc
8400 :CUSTOM_ID: 0e7f83a5-600e-4016-af98-95904300c016
8404 :CUSTOM_ID: d1706bc7-7cf0-4b49-87d0-15bf76eaca5f
8408 :CUSTOM_ID: 3713b701-b31a-4612-b663-f232005b4122
8412 :CUSTOM_ID: ca833b78-b279-4d1f-b1c9-6c70fdf20f57
8416 :CUSTOM_ID: 6febc7ea-9cc7-488c-af34-538b8e69633b
8420 :CUSTOM_ID: c73af1d7-61f2-4c1b-935e-43f077d8d915
8423 SCHEDULED: <2014-03-27 Thu>
8425 :ID: 4c0f74f8-04ed-40d8-8ec3-6e2bed03c2b9
8426 :CUSTOM_ID: 97aee7f1-3647-4602-a65a-45e8a3aa3a7c
8427 :DRILL_LAST_INTERVAL: 50.6823
8428 :DRILL_REPEATS_SINCE_FAIL: 3
8429 :DRILL_TOTAL_REPEATS: 3
8430 :DRILL_FAILURE_COUNT: 0
8431 :DRILL_AVERAGE_QUALITY: 5.0
8433 :DRILL_LAST_QUALITY: 5
8434 :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:45>
8438 #+begin_src emacs-lisp
8439 (global-set-key (kbd "C-y") 'undo-tree-redo)
8445 :CUSTOM_ID: 35072ca8-7fd6-4a64-bc7a-2636de575bd1
8450 :CUSTOM_ID: 964fa784-37e3-48c6-af4b-c7e91f67a93a
8455 :CUSTOM_ID: b8ad3ee9-7bf6-4069-a300-49cd298008a7
8458 #+begin_src emacs-lisp
8459 (global-set-key (kbd "C-\\") 'sr-speedbar-toggle)
8464 :CUSTOM_ID: c1d53d84-b8a9-49cb-bfd6-4420931c8873
8467 SCHEDULED: <2014-03-21 Fri>
8470 :ID: d45bce17-45bc-41f0-8994-aa7bc3b2fa92
8471 :CUSTOM_ID: 6a583354-48f8-4503-bf87-b8ba56411435
8472 :DRILL_LAST_INTERVAL: 11.7003
8473 :DRILL_REPEATS_SINCE_FAIL: 4
8474 :DRILL_TOTAL_REPEATS: 9
8475 :DRILL_FAILURE_COUNT: 6
8476 :DRILL_AVERAGE_QUALITY: 2.815
8478 :DRILL_LAST_QUALITY: 3
8479 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:36>
8483 #+begin_src emacs-lisp
8484 (global-set-key (kbd "C-M-\\") 'mark-defun)
8489 :CUSTOM_ID: 30edfb48-852f-4f2c-ba38-2635927d4950
8493 :CUSTOM_ID: 3c5f241f-fc62-459d-ab85-6b7c1fb04801
8499 :CUSTOM_ID: 6df13b90-490b-4cca-a49d-4f2e3ce5bea3
8503 :CUSTOM_ID: 47f0d1f3-78ea-49d7-a6d7-06627ca745bd
8507 :CUSTOM_ID: 3be3db5c-9905-474b-b773-1aee515625f5
8511 :CUSTOM_ID: 9f252721-a2d5-46c6-b268-8ed597256229
8515 #+begin_src emacs-lisp
8516 (global-set-key (kbd "C-'") 'eval-expression)
8521 :CUSTOM_ID: f00b9c88-68bb-4831-872f-afb5ff82c104
8525 :CUSTOM_ID: 0d39d36c-115a-4570-b4b1-818718409a49
8529 :CUSTOM_ID: 230f50ef-48fd-4f13-aa62-e4a492c4515d
8532 SCHEDULED: <2014-04-07 Mon>
8534 unpop-to-mark-command
8535 :CUSTOM_ID: 52ebb720-589b-485c-89dc-0dfb78e6dad4
8536 :ID: 32f1c87d-ee1f-4117-8059-32fd8facbeff
8537 :DRILL_LAST_INTERVAL: 42.8284
8538 :DRILL_REPEATS_SINCE_FAIL: 4
8539 :DRILL_TOTAL_REPEATS: 4
8540 :DRILL_FAILURE_COUNT: 0
8541 :DRILL_AVERAGE_QUALITY: 4.5
8543 :DRILL_LAST_QUALITY: 5
8544 :DRILL_LAST_REVIEWED: <2014-02-23 Sun 01:51>
8548 #+begin_src emacs-lisp
8549 (defun unpop-to-mark-command ()
8550 "Unpop off mark ring. Does nothing if mark ring is empty."
8553 (let ((pos (marker-position (car (last mark-ring)))))
8554 (if (not (= (point) pos))
8556 (setq mark-ring (cons (copy-marker (mark-marker)) mark-ring))
8557 (set-marker (mark-marker) pos)
8558 (setq mark-ring (nbutlast mark-ring))
8559 (goto-char (marker-position (car (last mark-ring))))))))
8561 (global-set-key (kbd "C-n") 'unpop-to-mark-command)
8566 :CUSTOM_ID: 00c2ab64-696d-4492-8236-f7ebc12e4a93
8569 SCHEDULED: <2014-03-17 Mon>
8572 :ID: 59e48dcc-434b-4c96-bdb3-c083c41ae8b3
8573 :CUSTOM_ID: 43997316-8d3f-4750-873b-ade09628fdd5
8574 :DRILL_LAST_INTERVAL: 7.6409
8575 :DRILL_REPEATS_SINCE_FAIL: 3
8576 :DRILL_TOTAL_REPEATS: 8
8577 :DRILL_FAILURE_COUNT: 4
8578 :DRILL_AVERAGE_QUALITY: 2.59
8580 :DRILL_LAST_QUALITY: 3
8581 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:34>
8585 #+begin_src emacs-lisp
8586 (global-set-key (kbd "C-M-n") 'narrow-to-region)
8591 :CUSTOM_ID: f01c2c61-f606-49ea-885a-63a831eaae3d
8597 *** [C-escape] :drill:
8598 SCHEDULED: <2014-04-05 Sat>
8601 :ID: a6dd7e4c-1831-4493-bbfd-557dc2f9c856
8602 :CUSTOM_ID: 6901fa1b-c827-4525-b24b-bdb8fe5f638b
8603 :DRILL_LAST_INTERVAL: 27.3693
8604 :DRILL_REPEATS_SINCE_FAIL: 5
8605 :DRILL_TOTAL_REPEATS: 6
8606 :DRILL_FAILURE_COUNT: 2
8607 :DRILL_AVERAGE_QUALITY: 3.417
8609 :DRILL_LAST_QUALITY: 4
8610 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:37>
8614 #+begin_src emacs-lisp
8615 (global-set-key (kbd "<C-escape>") 'find-tag)
8620 :ID: 7224837b-addc-4c82-8313-467c6dcb7a52
8621 :CUSTOM_ID: f505f1b9-82f6-4139-9e3e-78df548175ec
8625 :CUSTOM_ID: d77136c5-4aec-4f02-8b4b-e417249fbac1
8629 :CUSTOM_ID: d61ae40a-3f2d-4ef6-a515-8864a7d7c8ea
8633 :CUSTOM_ID: ff8f3092-187a-4b2c-940f-01743f7a51b6
8635 not necessary to have at the end, but its convenient to have it next
8637 #+NAME: keybind-table-generator
8638 #+BEGIN_SRC emacs-lisp :results silent
8639 (defun org-custom-id-get (&optional pom create prefix)
8640 "Get the CUSTOM_ID property of the entry at point-or-marker POM.
8641 If POM is nil, refer to the entry at point.
8642 If the entry does not have a CUSTOM_ID, the function returns nil.
8643 However, when CREATE is non nil, create an ID if none is present already.
8644 PREFIX will be passed through to `org-id-new'.
8645 In any case, the CUSTOM_ID of the entry is returned."
8646 (org-with-point-at pom
8647 (let ((id (org-entry-get nil "CUSTOM_ID")))
8649 ((and id (stringp id) (string-match "\\S-" id))
8652 (setq id (org-id-new prefix))
8653 (org-entry-put pom "CUSTOM_ID" id)
8654 (org-id-add-location id (buffer-file-name (buffer-base-buffer)))
8659 (let ((title (plist-get (cadr (org-element-at-point)) ':title)))
8660 ;; remove brackets from [title]
8661 (string-match "[^[ ][^]]*" title)
8662 (setq title (match-string 0 title))
8667 (defun org-dblock-write:keybind-dblock (arg)
8670 (goto-char (org-find-entry-with-id "beginning-of-keybind-table-data"))
8671 (let* ((table-level (org-current-level))
8672 (keybind-level (1+ table-level))
8673 (prefixes (list "C-M-S-" "C-M-" "C-S-" "M-S-" "M-" "C-" "S-"))
8677 (while (>= (org-current-level) table-level)
8678 (setq table-title (get-title))
8679 (outline-next-heading)
8680 (let (found-prefixes
8682 ;; go through the first few elements of the table to find out what column headings aka prefixes it should have
8684 (while (not found-all-prefixes)
8685 (let ((prefixes-copy prefixes)
8688 (while (and prefixes-copy (not found-prefix))
8689 (setq current-prefix (car prefixes-copy))
8690 (when (and (> (length (get-title)) (length current-prefix))
8691 (string= (substring (get-title) 0 (length current-prefix)) current-prefix))
8692 (setq found-prefix t))
8693 (setq prefixes-copy (cdr prefixes-copy)))
8694 (unless found-prefix
8695 (setq current-prefix ""))
8696 (if (and found-prefixes (string= (car (last found-prefixes)) current-prefix))
8697 (setq found-all-prefixes t)
8698 (push current-prefix found-prefixes)))
8699 (outline-next-heading)))
8700 (setq found-prefixes (reverse found-prefixes))
8702 ;; start a new table or repeat the prefixes in the current table
8704 (if (or (not previous-prefixes) (equal previous-prefixes found-prefixes))
8705 (setq output (concat output "|-|\n| "))
8706 (setq output (concat output "|-|\n\n|-|\n| ")))
8707 (setq output (concat output table-title " | "))
8708 (setq previous-prefixes found-prefixes)
8711 (dolist (prefix found-prefixes)
8712 (setq output (concat output prefix "|")))
8713 (setq output (concat output "\n|-|\n"))
8717 (while (>= (org-current-level) keybind-level)
8718 (dotimes (i (length found-prefixes))
8721 (setq output (concat output "| " (substring (get-title) (length (car found-prefixes))) " | ")))
8722 ;; add keybinds by searching for regex [keybind] to the start of the next heading
8724 (outline-next-heading)
8725 (setq subtree-end (point)))
8726 ;; skip over scheduled line
8727 (re-search-forward "^SCHEDULED:" subtree-end t)
8729 ;; see comment after source block to understand this regex
8730 (re-search-forward "^\\s-*\\([^*: ].*?$\\)" subtree-end t)
8731 (let ((m (match-string 1)))
8733 (setq output (concat output "[[#" (org-custom-id-get (point) 'create) "][" m "]]")))
8734 (setq output (concat output " | ")))
8735 ;; advance to next keybind
8736 (outline-next-heading))
8737 (setq output (concat output "\n"))
8739 (setq output (concat output "|-|"))
8741 (org-table-map-tables 'org-table-align 'quietly))
8745 after source block due to bad parsing of comments in non emacs lisp mode
8746 some easily forgotten regex elements. whitespace: \\s-
8748 subexpression for close bracket char or nothing: \\(\\]\\|\\)
8751 dunno why but it takes doing ctrl-c twice to update this
8752 #+BEGIN: keybind-dblock
8753 |---------------------+------------------------|
8754 | single/special keys | |
8755 |---------------------+------------------------|
8756 | tab key | [[#6c10a716-1d8e-4ce4-8e26-64468f19c17a][isearch]] |
8757 | tab | [[#51ece189-1840-41a1-8ca0-19f9a0481895][isearch-forward]] |
8758 | end | [[#00d589b7-2b8e-494c-b761-3afefebe6ec6][move-end-of-line]] |
8759 | home | [[#7800e455-c3f6-4a8f-8907-b2292449ab67][back-to-indentation]] |
8760 | s-tab | [[#3072901e-5cf3-4d6e-9ac8-3ef64a5f6ad2][indent-buffer]] |
8761 | s-delete | [[#e53728b6-054d-4443-a03e-6cf02d13724d][send-shell]] |
8762 | s-left arrow | [[#d8c473ac-5507-4a6b-9e5a-46558c17b09f][shell]] |
8763 | s-right arrow | [[#2365f5a7-b89a-4a97-b272-ac8ae9c2cc66][previous-buffer]] |
8765 | return | [[#fab6adea-ed20-45ab-a0a3-776c68d5c3a5][new line]] |
8766 | s-return | [[#819cfb55-3a2f-4f20-8591-f819d1a6869a][auto-correct-prev-word]] |
8767 | down arrow | [[#7a868484-9c63-4a73-abda-7751cb2c02be][mark]] |
8768 | s-down arrow | [[#097b97e0-8ad8-40f7-8388-c4ace1706b38][extended command]] |
8770 |---------------------+------------------------|
8772 |-------------------+----------------------------+---------------------------------+--------------------+---------------+-------------------+-------------|
8773 | mouse | | C- | M- | S- | C-M- | C-S- |
8774 |-------------------+----------------------------+---------------------------------+--------------------+---------------+-------------------+-------------|
8775 | mouse-2 mode line | [[#69aaa631-6fb5-4beb-b2d8-c0f3d92c0a98][mouse-delete-other-windows]] | [[#501479ab-e1e2-497e-bd86-071f8afa3378][mouse-split-window-horizontally]] | | | | |
8776 | mouse-3 mode line | [[#917a1844-8c38-4f31-8616-50fc81334f2c][mouse-delete-window]] | | | | | |
8777 | mouse-1 | [[#4e60e2e4-8c2f-4450-8060-2d793ede530c][set cursor/mark]] | [[#b661f84f-57df-4095-9dc1-d1a876a53ee5][buffer list context menu]] | | | | |
8778 | mouse-2 | [[#086b0b50-054f-462d-92fa-b27852f887b0][paste]] | | | | | |
8779 | mouse-3 | [[#0481632e-9c50-4328-9365-c4b5bf967b66][set-mark]] | [[#9623c78f-7705-4cbe-a990-c24eb1067377][global menu]] | | | | |
8780 | mouse-9 | [[#efaec161-b279-4129-86fd-b410430926e4][move-mouse-to-point]] | | | | | |
8781 | mouse-8 | | | | | | |
8782 | 1/kp-end | | | | | | |
8783 | 2/kp-down | | | | | | |
8784 | 3/kp-next | | | | | | |
8785 | 4/kp-left | [[#c44d0f65-9502-4cc6-9642-96d907f6b093][indent-region]] | | | | | |
8786 | 5/kp-begin | [[#2458c6bc-7113-4d4b-bbdf-206e1cb842a7][mark-defun]] | | | | | |
8787 | 6/kp-right | [[#3b79bc58-6067-43bd-9471-9d592744a25a][ibuffer]] | | | | | |
8788 | 7/kp-home | | | | | | |
8789 | 8/kp-up | | | | | | |
8790 | 9/kp-prior | [[#a3b51adb-4405-4d9f-9b88-a8faa479fbe7][delete-horizontal-space]] | | | | | |
8791 | 10/kp-insert | | | | | | |
8792 | 11/kp-subtract | | | | | | |
8793 | 12/kp-add | | | | | | |
8794 | scroll | [[#33433f0f-5b0e-46ba-8452-d2a51e54769b][up/dn / scroll]] | [[#16506ba5-e8f2-4aec-bc1b-d2854d4e504c][cycle recent buffers]] | [[#e1e2e253-450d-4620-af9e-78d378f49ad5][forward/back s-exp]] | [[#74b2196a-345d-453a-b7be-1915360eb201][expand region]] | [[#bd2ca117-408c-49fc-a5ac-a938be21dfc0][scroll]] | [[#a69254a4-cf2d-450f-b477-2694b44a7e0d][zoom]] |
8795 | left-scroll | [[#d2d5c5c7-f0de-4e08-953b-d41d3e282ba7][left/right]] | [[#7bb95aa5-381e-454a-a6c6-aaeec728db08][back / forward word]] | [[#49db3764-b154-4cfc-8d0d-f0e0451815e3][winner undo redo]] | [[#ca5cdcd4-b3da-4d7b-86ab-4c7c0ac2caf7][---]] | [[#32c00bb2-3e5a-4670-8849-04d23b9f8364][forward/back sexp]] | [[#7b4f1f49-6d93-4210-a30c-8278d6e63655][unreachable]] |
8796 |-------------------+----------------------------+---------------------------------+--------------------+---------------+-------------------+-------------|
8798 |-----------------+--------------------------------+---------------------------------+-------------------------------+--------------------------|
8799 | left primary | C- | M- | C-M- | C-S- |
8800 |-----------------+--------------------------------+---------------------------------+-------------------------------+--------------------------|
8801 | 2 | [[#4f29b011-3844-4a4a-b75d-cdf8f49e9adb][narrow-to-defun/subtree]] | | [[#33c4996d-92bc-4df0-b005-11553677be13][---]] | |
8802 | 3 | [[#7851a05e-7177-4a8f-af5a-3325a8f116fe][dot-mode-execute]] | | [[#9a00e17f-a1c9-48fc-b03b-c6a1a3cbda1c][recenter-top-bottom]] | |
8803 | q | [[#679fd3cd-c43b-409c-be36-4175a5f27cd3][org-cycle, comint previous arg]] | [[#72bada0e-5d62-4a8f-ae62-4972778ff1bc][org-archive-to-archive-sibling]] | [[#1f5e9b63-7ce0-445c-a426-b41839585d38][quoted-insert]] | |
8804 | w | [[#20005b6d-9a9d-4b58-882c-7ce860c7a395][goto-t.org]] | [[#331da6e5-7936-4663-8f58-9d8601b5915c][org-clock-in]] | | |
8805 | e | [[#24e34f4b-d1e8-4380-933f-ab1f78ebc782][copy-line]] | [[#0a771449-0cd5-4dc9-82ca-bcac5f7abd17][org-clock-in-last]] | | |
8806 | r | [[#5c55f461-f43f-493d-81eb-1ca747175ef1][isearch-backward]] | [[#dd9575bd-e471-418e-9519-4fc2b874ddcd][org-clock-out]] | | |
8807 | a | [[#db4b76df-9420-4256-8242-dc44b56d55d7][copy-all]] | [[#e865a1e5-55bf-4a98-a0d0-cb05a88de352][kmacro-start-macro-or-in...]] | [[#c6278a5a-024f-4c80-a8d4-65f127fd24a8][kmacro-end-or-call-macro]] | |
8808 | s | [[#01da04da-cdba-493f-892b-c4c064cf937e][C-x prefix]] | | [[#4b33022d-27f0-4d21-9931-2e2e692790e8][split-window-vertically]] | |
8809 | d | [[#b699614a-9994-4fe7-b2c6-f0fe81b7ad2b][C-c prefix]] | [[#06bcc5e2-f3a7-41c6-a793-ac6c9813fb6e][whitespace-cleanup]] | [[#8cf6053d-792b-4abd-a3a6-66efd7fbee68][swap buffer]] | |
8810 | f | [[#2695ed8a-e0d3-4e84-8688-98e3c50723b0][kill-whole-line]] | | [[#e7e4dd0b-418f-48ee-b366-9e733e3bec61][kill rest of line]] | |
8811 | g | [[#4af40595-7010-4be6-8cfe-a43797ca6e33][other-window / cancel]] | [[#fb0b343f-fdff-463a-94f4-3152191e17c4][abort-recursive-edit]] | [[#327e18af-30b7-47e5-aa53-5f678788b4c1][gnus]] | |
8812 | z | [[#707c4938-a790-4da9-8230-61855ea57d09][undo-tree-undo]] | | | |
8813 | x | [[#ec1403d3-528e-41b1-a195-5563bc93e124][kill-region]] | [[#bb7c95d5-dd97-439d-bf1f-cdac98d11543][append-next-kill]] | [[#c988370e-602c-431c-80a9-608459583f8b][append-next-kill]] | |
8814 | c | [[#400f06e1-8e45-443c-8d7b-3d1bb1176aab][copy]] | [[#f4c3317a-a317-4d04-8cb7-e46d0716bf1d][org-capture]] | [[#0a151d99-47ae-4e8f-8407-82e77d24a3e7][copy-to-register]] | |
8815 | v | [[#16411f68-7fe0-49e8-9a73-212471594f9e][yank]] | [[#d67f6371-a13f-4a75-8d8c-e4013ff4e131][insert-register]] | [[#25f86658-9999-40f7-b3a4-615981751b93][yank pop]] | |
8816 | b | [[#e682305e-0110-4d2f-afbd-2c401bcb9313][delete-other-windows]] | [[#05e3d0db-36dc-455f-8bed-f87886ca6004][isearch-backward-current-symbol]] | [[#6c63790c-28c1-4b73-96e2-ee859f57e734][isearch-current-symbol]] | |
8817 | tab | [[#edc45592-c69f-4439-8305-48f2c65696c3][yas-insert-snippet]] | [[#71264957-45fd-455a-a6d1-b08823c02d25][indent line]] | | |
8818 | delete | [[#2688b61d-9fdd-44af-b9bd-b126f0da00bd][kill-symbol]] | | [[#21876759-a8e6-4896-8a08-eda40d0eaff3][kill-sexp]] | |
8819 | left-arrow | [[#b15da91f-0786-49d1-b0b9-331b3b94f6ae][compile]] | | [[#13faf5d4-34be-4363-948d-4ff04a9f570b][org-shiftup]] | |
8820 | right-arrow | [[#3f3cac16-097d-451a-a14a-da7717d06730][paste selection]] | | [[#34e66314-1d97-4eeb-b704-fe0733849ae4][org-shiftdown]] | |
8821 | backspace | [[#85bb4701-42e6-4617-8de8-dfb1f03b0358][backward-kill-symbol]] | | [[#606b0991-7431-4a8a-a909-b872e104cc88][backward-kill-sexp]] | |
8823 |-----------------+--------------------------------+---------------------------------+-------------------------------+--------------------------|
8824 | right primary | C- | M- | C-M- | C-S- |
8825 |-----------------+--------------------------------+---------------------------------+-------------------------------+--------------------------|
8826 | * | [[#f745b337-8b65-44cc-849a-5e0953c9ebd9][split-window-horizontally]] | | [[#5dbe3437-7364-4802-b558-00b2d5faacf6][calc-dispatch]] | |
8827 | 9 | [[#43d14154-2722-4ba5-b547-1b78c6274ebf][delete-window-or-exit]] | [[#9dc95338-4321-4354-9de2-69409f383a10][kill-buffer-and-window]] | [[#ffe9f636-31e5-48ba-b8fe-7c158ace744c][kill client buffer]] | |
8828 | u | [[#327992c0-6eba-4935-aec1-49871c2a8619][universal-argument]] | | [[#62735d64-b89a-46b7-b32e-2453b651039d][search-keybind]] | |
8829 | i | [[#3124e200-1d6e-4ad2-9a36-0d03e1e7dc38][-----]] | | [[#a3260b61-7c51-4d97-9a91-3ed702c5ae29][query-replace-regexp]] | |
8830 | o | [[#82215193-63b3-4d63-8f70-d11a328fe72d][occur]] | | [[#05d1ef50-43ee-46d7-b1ad-dd952543ab45][ido-goto-symbol]] | |
8831 | p | [[#9c2e2ba9-f34e-48fe-b4ff-b9826882c1cc][move-mouse-to-point]] | | [[#d55616d3-a3f6-4e83-8807-748578a7b726][delete-horizontal-space]] | |
8832 | j | [[#ebcf7c71-3c93-431b-af6b-7c5df7f2945e][register prefix]] | [[#474a3e12-95ac-4f43-b83a-36716f3e6f76][previous-error]] | | |
8833 | k | [[#25a7ba1c-ddf3-47f1-9516-914a552e7a36][jump to register]] | [[#a96691bb-9e4c-414b-a093-d9961d453e21][next-error]] | [[#f61ea4ea-4597-422e-b7e3-d3cfad82603d][man]] | |
8834 | l | [[#8a7572bd-4b5e-4464-b937-3d35adb1783f][ido-switch-buffer]] | | [[#24b660d4-3ec4-4416-8a6a-b8224ed1ee8b][move cursor top bottom mid]] | |
8835 | ; | [[#7e3710eb-5460-4460-8bf0-488302e4ce35][comment-dwim]] | | [[#28680a96-5223-4632-80b9-b1facdd541e7][comment-current-line-dwim]] | |
8836 | m | [[#deee53ba-dfa2-4910-894c-55ae98d11aa4][pop-to-mark]] | | [[#f283f705-cba0-45db-b80f-5d20415b2eee][recursive grep]] | |
8837 | , | [[#6cbf3a85-f260-453a-920b-850ff5e986b1][ido-find-file]] | | [[#bfdf6111-029d-462b-bcca-50a3ed2162d5][find-file-in-project]] | |
8838 | . | [[#0675c171-8677-44a8-882c-e7ed42715e31][recentf-ido-find-file]] | | [[#824d422c-67b6-4d68-af11-6a2135e528f5][-]] | |
8839 | / | [[#941a7fa8-84b9-434d-89a0-1487385ec479][join lines]] | | [[#37f67593-4f60-4d3b-9aad-6c9bc4882443][copy-variable]] | |
8840 | 8 | [[#251c4a1a-a683-4804-a706-d0d3752e42fa][calc-embedded-word]] | | | |
8841 | up-arrow | [[#f47d312a-063d-42ed-a352-176298a2cb0c][back defun/headline]] | | | |
8842 | down-arrow | [[#27435136-b3d7-4f25-aa85-2a7363a7f366][forward dfun/headline]] | | [[#3bcb35fd-6d54-4213-b94f-2739c0bc0041][toggle-mark-activation]] | [[#1434bdd0-c5a8-4c96-9b92-9474e88fd1c5][smex-major-mode-commands]] |
8843 | lbracket | [[#9d9916dd-3280-47dd-aab1-cd28d5ebfe15][----]] | | [[#7411b1a5-c8fa-4bcc-8788-798e5635dd62][scroll-right]] | |
8844 | rbracket | [[#21b38c6b-3a46-4a08-8eca-d44abb148287][fill-paragraph]] | | [[#c9c18f48-d0ca-4a1b-a751-7165f40118a3][scroll-left]] | |
8845 | return | [[#baf7ea5a-d16d-4fee-a6ce-542cc11beb97][newline next line]] | [[#e6895ad3-a2c8-46c8-abbc-1bba94a88596][non-indented newline]] | [[#2a8fc6ea-a550-4437-9e35-3b3f2776788a][open newline on previous line]] | |
8846 | space | [[#132daa1a-8e5f-47f1-a28d-35bee873aeac][org-edit-special]] | | [[#02359b66-bf6e-4f41-9f03-e83fcbe3e68c][spell check word]] | |
8847 |-----------------+--------------------------------+---------------------------------+-------------------------------+--------------------------|
8848 | left secondary | C- | M- | C-M- | C-S- |
8849 |-----------------+--------------------------------+---------------------------------+-------------------------------+--------------------------|
8852 | 4 | | | [[#3ff50f5f-f286-4a73-962b-58dbcf3b09b1][widen]] | |
8854 | tab-key | [[#68313551-90cd-47a6-8170-1745348add17][query-replace]] | | | |
8855 | t | [[#aaac3048-9125-4fd5-b8f2-21bafcc1ff1c][org change todo state]] | | [[#5bc609b1-9428-4b82-a55d-811fefe65331][org insert timestamp]] | |
8856 | home | [[#1919659a-b466-4519-9276-8bf06a916066][start of buffer]] | | | |
8857 | end | [[#0a7bd629-cbcc-4761-8fe2-cc9370b985a4][end of buffer]] | | | |
8859 |-----------------+--------------------------------+---------------------------------+-------------------------------+--------------------------|
8860 | right secondary | C- | M- | C-M- | C-S- |
8861 |-----------------+--------------------------------+---------------------------------+-------------------------------+--------------------------|
8862 | 6 | [[#e44e584b-d925-4036-9ad5-a90d02e74bef][save-buffers-kill-emacs]] | | [[#da73de75-0914-4f48-81d5-9b408433b14b][insert-small-copyright]] | |
8863 | 7 | | | [[#a68c6b8e-9911-475e-ab35-e239771fe881][insert-full-copyright]] | |
8866 | y | [[#97aee7f1-3647-4602-a65a-45e8a3aa3a7c][undo-tree-redo]] | | | |
8867 | \ | [[#b8ad3ee9-7bf6-4069-a300-49cd298008a7][sr-speedbar-toggle]] | | [[#6a583354-48f8-4503-bf87-b8ba56411435][mark-defun]] | |
8868 | h | [[#3c5f241f-fc62-459d-ab85-6b7c1fb04801][help-prefix]] | | | |
8869 | ' | [[#9f252721-a2d5-46c6-b268-8ed597256229][eval-expression]] | | | |
8870 | n | [[#52ebb720-589b-485c-89dc-0dfb78e6dad4][unpop-to-mark-command]] | | [[#43997316-8d3f-4750-873b-ade09628fdd5][narrow-to-region]] | |
8872 | escape | [[#6901fa1b-c827-4525-b24b-bdb8fe5f638b][find-tag]] | | | |
8873 |-----------------+--------------------------------+---------------------------------+-------------------------------+--------------------------|
8876 * persistent registers
8877 This needs to be at the end, because I visit a file, thus setting a
8878 mode, and the mode hook needs to be setup before that.
8880 I'm using persistent registers instead of bookmarks. I dun use them
8881 much, so the added hassle of having to set it within this file is
8882 worth the benefit of only having one concept in my mind.
8883 #+begin_src emacs-lisp
8885 (r `((?i (file . ,"~/.emacs.d/my-init.org"))
8887 (set-register (car r) (cadr r)))
8891 common keys, which would be better off doing swaps than rebinds:
8895 search c-s -> kp-add
8896 kill line c-k -> c-f
8898 set-mark-command c-@ -> kp-enter
8899 quoted-insert c-q -> c-m-q
8900 recenter-top-bottom c-l -> c-m-3
8901 kill-region c-w -> c-x
8903 commands to make less accessible
8904 narrow-to-defun/subtree -> M-2 maybe
8907 command to make more accessible, ...
8910 * misc useful functions I'd rather have in a list than burried
8911 #+begin_src emacs-lisp :tangle no
8912 ;; these are usefull with (goto-char)
8913 ;; find named entity, other than headline
8914 (org-find-entry-with-id "string-number-or-symbol")
8916 (org-find-exact-headline-in-buffer "heading" nil t)
8918 (byte-recompile-file (expand-file-name "~/.emacs.d/my-init.el") t 0)
8919 (byte-recompile-directory (expand-file-name "~/.emacs.d") 0)
8920 (byte-recompile-directory (expand-file-name "~/.emacs.d/src/haskell-mode") 0)
8922 ;; remove any indent level which is throughout the buffer
8923 (org-do-remove-indentation)
8927 * TESTING / DEVELOPMENT AREA
8933 #+begin_src emacs-lisp
8939 this article convinced me that trying to experiment with modal editing is a waste.
8940 http://chrisdone.com/posts/speculations-on-exclusive-editing
8941 I want to record my emacs commands simply to find optimiaztions, like if I often do some M-x command and should bind it
8945 #+begin_src emacs-lisp :tangle no
8947 (setq keylog-list nil)
8948 (setq keylog-mode nil)
8950 (defun keylog-save ()
8952 ;; Check that the lock file does not exist
8953 (when (keyfreq-file-is-unlocked)
8955 (keyfreq-file-claim-lock)
8957 ;; Check that we have the lock
8958 (if (eq (keyfreq-file-owner) (emacs-pid))
8961 ;; Load values and merge them with the current keyfreq-table
8962 (keyfreq-table-load table)
8964 ;; Write the new frequencies
8965 (with-temp-file keyfreq-file
8966 (prin1 (cdr (keyfreq-list table 'no-sort)) (current-buffer))))
8968 ;; Release the lock and reset the hash table.
8969 (keyfreq-file-release-lock)
8973 (defun my-keylogger-function ()
8974 (setq keylog-list (cons (list (current-time) current-prefix-arg this-command) keylog-list)))
8975 (add-hook 'pre-command-hook 'my-keylogger-function)
8979 in a lisp expression, ; \\[ throws off forward-sexp
8980 when not in emacs lisp mode,
8981 even with (with-syntax-table emacs-lisp-mode-syntax-table
8983 which is found in preceding-sexp
8984 potentially a bug, either in with-syntax-table, or
8985 in scan-lists, which is implemented in C
8990 why did it go to the init file?
8991 change EDITOR to emacsclient
8992 xserver-xorg-core=2:1.14.3-3ubuntu2
8993 (setq-default header-line-format nil) ; Copy mode-line
8994 (setq-default mode-line-format nil) ;
8998 : set-food-completions
9002 useless gnus group keys:
9007 (add-to-list 'load-path "~/.emacs.d/emacs/site-lisp/org")
9009 #+begin_src emacs-lisp
9010 (add-hook 'org-mode-hook
9011 (lambda () (define-key org-mode-map (kbd "C-y") nil)))
9018 (defun comint-send-string (process string)
9019 "Like `process-send-string', but also does extra bookkeeping for Comint mode."
9021 (with-current-buffer (if (processp process)
9022 (process-buffer process)
9023 (get-buffer process))
9024 (comint-snapshot-last-prompt))
9025 (comint-snapshot-last-prompt))
9026 (process-send-string process string))
9030 todo: get smart-operator to work
9031 todo, checkout https://github.com/python-rope/ropemacs refactoring python,
9032 todo, try py-autopep8, autoformatter
9033 todo, check out some python linting stuff. pychecker is one, others are in *packages*
9034 todo, finish reading through python-mode.el functions
9035 ;; todo, figure out multi-line input in shell mode
9038 usefull m-x commands:
9039 m-x py-describe-mode: doc for mode which is extensive
9041 m-x py-guess-indent-offset: setup indent for code i didn't write
9043 possibly usefull commands:
9044 found via looking through python-mode.el, quit like 1/4 through, cuz its tedious, last spot was at:
9045 (defun py-comment-region (beg end &optional arg)
9046 after finding py-describe-mode, it seemed to do a good job of documenting all the most important stuff
9049 python-shell-completion-complete-or-indent may be usefull to get completion working in the shell
9050 py-insert-default-shebang
9052 py-indent-line-outmost
9053 py-newline-and-close-block
9054 py-indent-and-forward (indent line, move to next)
9056 py-which-function (for showing in the modeline)
9058 py-execute-import-or-reload
9059 py-execute-def-or-class
9060 various pdb functions
9064 #+begin_src sh :tangle no
9066 s pip install jedi virtualenv
9068 then do m-x jedi:install-server
9072 disabled because it takes 152 ms to load,
9073 and I don't know how to do it conditioally
9074 #+begin_src emacs-lisp :tangle no
9076 ;; change from default python3 to be compatibile with Pywikibot
9077 (setq py-shell-name "/usr/bin/python")
9078 (require 'python-mode)
9080 (setq py-autopep8-options '("--max-line-length=110"))
9082 (defun py-execute-block-or-clause-create-shell ()
9084 (cond ((get-buffer "*Python*")
9085 (py--execute-prepare "block-or-clause")
9086 (py-execute-block-or-clause)
9087 (call-interactively 'next-line))
9090 ;; py-shell starts the shell but not display the buffer on the first run
9091 ;; subsequent runs, it does. I grabbed this command from inside to
9092 ;; do just the relevant part from the second run, as a hack.
9093 ;; todo: report a bug on this
9094 (py--shell-manage-windows py-buffer-name))))
9095 (setq py-tab-shifts-region-p t)
9096 (setq py-tab-indents-region-p t)
9099 "default action to run the current buffer"
9101 (py-execute-buffer))
9104 (add-hook 'python-mode-hook
9106 (setq run-fun 'py-run)
9107 (define-key python-mode-map (kbd "C-M-a") nil)
9108 (define-key python-mode-map (kbd "C-M-d") nil)
9109 (define-key python-mode-map (kbd "C-M-e") nil)
9110 (define-key python-mode-map (kbd "C-M-h") nil)
9111 (define-key python-mode-map (kbd "C-M-i") nil)
9112 (define-key python-mode-map (kbd "C-M-u") nil)
9113 (define-key python-mode-map (kbd "C-M-x") nil)
9114 (define-key python-mode-map (kbd "<tab>") 'indent-for-tab-command)
9115 (define-key python-mode-map (kbd "C-j") nil)
9116 (define-key python-mode-map (kbd "<C-backspace>") nil)
9117 ;;(define-key python-mode-map (kbd "C-(") (lambda () (interactive) (basic-save-buffer) (py-execute-buffer)))
9118 ;; fix default return bindings
9119 (define-key python-mode-map (kbd "C-j") nil)
9120 (define-key python-mode-map (kbd "RET") nil)
9121 (define-key python-mode-map (kbd "<return>") 'py-newline-and-indent)
9122 (define-key python-mode-map (kbd "<M-tab>") 'py-indent-line)
9123 (define-key python-mode-map (kbd "C-M-(") 'py-shift-left)
9124 (define-key python-mode-map (kbd "C-M-)") 'py-shift-right)
9125 (define-key python-mode-map (kbd "<home>") 'py-beginning-of-line)
9126 (define-key python-mode-map (kbd "<end>") 'py-end-of-line)
9127 (define-key python-mode-map (kbd "C-t") 'py-execute-block-or-clause-create-shell)
9128 (define-key python-mode-map (kbd "<S-delete>") 'py-ian-execute-line-or-region)
9129 ;; python mode adds these to this list, which is normally empty.
9130 ;; it makes my send-python function not reuse an existing python shell window
9131 ;; there are other ways to override this, but I don't know of any other value of
9133 (setq same-window-buffer-names (delete "*Python*" same-window-buffer-names))
9134 (setq same-window-buffer-names (delete "*IPython*" same-window-buffer-names))))
9136 ;; i dunno, why, but this didn't work:
9137 ;; and we can't eval-after-load cuz it is part of the greater python mode file
9138 (add-hook 'py-shell-hook
9140 (define-key py-shell-map "\r" nil)
9141 (define-key py-shell-map (kbd "<return>") 'comint-send-input)
9142 (define-key py-shell-map (kbd "C-t") 'py-shell-toggle-arrow-keys)
9143 (define-key py-shell-map "\C-d" nil)
9144 (define-key py-shell-map (kbd "<up>") 'my-comint-previous-input)
9145 (define-key py-shell-map (kbd "<down>") 'my-comint-next-input)))
9148 (defun py-ian-execute-line-or-region ()
9150 (cond ((get-buffer "*Python*")
9153 (py-execute-statement))
9154 (call-interactively 'next-line))
9157 ;; http://tkf.github.io/emacs-jedi/latest/
9158 (add-hook 'python-mode-hook 'jedi:setup)
9159 (setq jedi:complete-on-dot t)
9161 (defun py-shell-toggle-arrow-keys ()
9163 (toggle-arrow-keys py-shell-map))
9168 ;; py-shell window stuff
9169 ;; it splits the window if the shell is in a different frame
9170 ;; which seems to be a bug, but it can be fixed with this option
9171 ;; (setq py-keep-windows-configuration 'force)
9172 ;; however, with py-execute-block-or-clause, if the shell is in a different frame,
9173 ;; you get errors "buffer is read only", when the point is near the beginning of a command
9174 ;; todo: test with emacs -Q and file a bug
9175 ;; if you execute py-execute-... without a python shell open,
9176 ;; it starts one, doesn't display it, and subsequent py-execute commands
9177 ;; give error "buffer is read only"
9178 ;; these functions fix / improve these problems
9181 ** initial python-mode setup
9183 python-mode seems to be the most canonical package, based on
9184 https://docs.python.org/devguide/emacs.html
9185 much more feature rich than the emacs built in one.
9187 getting it, it wants you to setup an account on launchpad by default,
9188 there is some way to get anonymous bzr access, but google didn't answer it right away,
9189 so fuck it, ill go the happy path.
9191 based on error messages,
9192 add public ssh key to https://launchpad.net/people/+me
9193 bzr launchpad-login iank
9195 bzr branch lp:python-mode
9197 add lines from INSTALL to init
9200 ** background on packages
9201 jedi appears most popular based on github stats
9202 pysmell appears dead
9203 ac-python appears dead
9204 https://github.com/proofit404/anaconda-mode seems to be kicking along
9209 python-mode has a TON of functions that are just aliases or verbatim wrappers of other functions.
9210 also has undocumented/unused vars all around. it is quite annoying.
9212 the dedicated argument to py-shell does nothing,
9213 and py-dedicated-shell just sets that, so it is a waste
9216 ** background on sending to python shell
9218 using the builtin python execute shell functions, sending one line doesn't really work well.
9219 The bulit in functions don't wait for further input if a block is not closed.
9220 And doing a copy/paste thing gets messed up because of indents.
9221 With some hacking, I could probably do copy/paste and remove indents, only to a
9222 certain level if we have entered a block and are waiting to finish it.
9223 But just doing the builtin execute block is a decent work around.
9226 Here is the scrapped function for single line built in sending to shell.
9229 (setq w32-enable-num-lock nil)
9230 (global-set-key (kbd "<num_lock>") 'left-char)
9233 (defun sqlup-find-correct-keywords ()
9234 "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."
9235 (mapcar 'car (sql-add-product-keywords sql-product '())))
9238 largest subarray sum, array of pos and neg ints.