update readme
[dot-emacs] / my-init.org
1 #+TITLE: My Personal Init Customization
2 #+OPTIONS: toc:nil num:nil ^:nil
3 * copyright
4 # Copyright (C) 2016 Ian Kelling
5
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.
10
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.
15
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/>.
18
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
23
24
25 #+end_src
26
27
28 packages installed from package manager: i pretty much prioritize repos this way: gnu, then melpa, then marmalade.
29
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
32
33 alternate keyboards
34 #+begin_src emacs-lisp
35 ;; todo, figure out an easy way to disable this when using external keyboard
36 (if (display-graphic-p)
37 (setq
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>"))
43 (setq
44 enter-key (kbd "C-m")
45 s-enter-key (kbd "C-8")
46 c-m-enter-key (kbd "C-M-8")
47 m-enter (kbd "M-m")
48 c-enter (kbd "C-8")))
49
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>"))
53 #+end_src
54
55 - Ubiquitous Packages which should be loaded on startup rather than
56 autoloaded on demand since they are likely to be used in every
57 session.
58 #+name: starter-kit-load-on-startup
59 #+begin_src emacs-lisp
60 (require 'saveplace)
61 (require 'ffap)
62 (require 'uniquify)
63 (require 'ansi-color)
64 (require 'recentf)
65
66 #+end_src
67
68
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.
74 (require 'package)
75
76 ;; little kit to help remove a down server
77 ;; (setq package-archives nil)
78
79 (add-to-list 'package-archives
80 '("marmalade" .
81 "http://marmalade-repo.org/packages/"))
82
83 (add-to-list 'package-archives
84 '("melpa" . "http://melpa.milkbox.net/packages/") t)
85
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))
90
91 #+end_src
92
93
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)
99 #+end_src
100
101 undo tree stuff
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)
107 #+end_src
108
109 * Stuff that I do not recommend that others use without reading,
110 understanding, and customizing themselves are
111
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)
115 (save-excursion
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))
120 (vec (vector event))
121 (is-down (string-match "down-" (symbol-name ev-command))))
122
123 (cond
124 ((null event) nil) ;Unknown/bogus byte sequence!
125 (is-down
126 (setf (terminal-parameter nil 'xterm-mouse-last-down) event)
127 vec)
128 (t
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)
133 (cond
134 ((null down)
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))
141 (cdr event))))
142 ((equal ev-where down-where) vec)
143 (t
144 (let ((drag (if (symbolp ev-where)
145 0 ;FIXME: Why?!?
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)
151 (vector drag)
152 (push drag unread-command-events)
153 (vector (list 'mouse-movement ev-data))))))))))))
154
155 #+end_src
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.
160
161
162
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
185
186
187
188 ** misc fixes
189
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
193 waiting. */
194
195
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.
199
200
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"
215 #+begin_src sh
216 echo ok >&2
217
218 #+end_src
219 * TODO make ido keybinds better
220 * TODO fix indenting in org
221
222 (defun my-org-indent-region (start end)
223 "Indent region."
224 (interactive "r")
225 (save-excursion
226 (let ((line-end (org-current-line end)))
227 (goto-char start)
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)))))
232
233
234
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)))
240
241
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
247
248 * TODO org-delete-char should also work for the delete/backspace keys!
249 fix and send patch
250
251 * TODO checkout projectile / graphene's project settings
252
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
256
257 last checked mayish
258 https://github.com/bbatsov/prelude
259 - redefined mouse functions from this file
260
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
267
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
272 outside of emacs
273 * TODO smart peren does not see ?\\) as a valid paren
274
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
280 * TODO learn dired.
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
284
285 (defun cycle-buffer-by-mode (p-mode)
286 "Cycle buffers by mode name"
287 (interactive)
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)))
295
296 And I have bound this to my F9 key
297
298 (global-set-key [f9] '(lambda () (interactive) (cycle-buffer-by-mode "Shell$")))
299
300 * TODO test out usefulness of forward/back sexp in different languages
301
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.
307
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]].
310
311 web-mode is competing package and actively developed, so i'm using that instead
312
313
314 (dolist (package '(yaml-mode js2-mode))
315 (unless (package-installed-p package)
316
317 - Associate modes with file extensions
318
319 (add-to-list 'auto-mode-alist '("COMMIT_EDITMSG$" . diff-mode))
320 (add-to-list 'auto-mode-alist '("\\.css$" . css-mode))
321 (require 'yaml-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))
327
328 - clojure in starter-kit-lisp.org
329
330 - others = gnus, js, publish, perl, python, perl, ruby
331 they each have their own starter kit file.
332
333 - snippets for various modes other than org-mode
334
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
341
342 (defun view-url ()
343 "Open a new buffer containing the contents of URL."
344 (interactive)
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)))))
352
353 * TODO flyspell-buffer automatically
354
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
358
359 * TODO try using / making abbreviations
360
361 * abbreviations
362 #+begin_src emacs-lisp
363
364 ;; turn on abbrev mode globally
365 (setq-default abbrev-mode t)
366
367 #+end_src
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
371
372 * auto-complete
373
374 #+begin_src emacs-lisp
375 ;; auto-completion in minibuffer
376 (icomplete-mode)
377
378 (require 'auto-complete-config)
379 (ac-config-default)
380
381
382 ;; complete after 1 char instead of default 2
383 (setq ac-auto-start 1)
384 (setq ac-delay 0.001)
385
386 (add-to-list 'ac-modes 'org-mode 'sql-mode)
387
388 (defun ac-common-setup ()
389 (add-to-list 'ac-sources 'ac-source-yasnippet))
390
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))))
397
398
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)
402
403
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)
409
410
411
412 #+end_src
413 * auto-complete readline-complete
414 #+begin_src emacs-lisp
415
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)
421
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)
428
429 ;; generally unnecessary, but why not
430 (setq explicit-shell-file-name "bash")
431
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"))
440
441 (setenv "EMACS" "")
442 (setq explicit-bash-args nil)
443 (setq comint-process-echoes t)
444
445 (add-to-list 'ac-modes 'shell-mode)
446
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"))
451
452 (add-hook 'shell-mode-hook
453 (lambda ()
454 (define-key shell-mode-map (kbd "<tab>") 'auto-complete)))
455
456
457 #+end_src
458 #+RESULTS:
459 : comint-exec-1
460
461 debugging
462
463
464 * auto save & backup
465
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.
470
471 #+begin_src emacs-lisp
472
473 ;; enable auto-save hook
474 (setq auto-save-timeout 1) ; idle time before auto-save.
475
476
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)
481
482
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)))))
489
490 (defun my-as-off ()
491 (interactive)
492 (setq my-as nil))
493
494 (defun my-as-on ()
495 (interactive)
496 (setq my-as t))
497
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)
501 (discard-input)
502 (message
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))
506
507 (defadvice ask-user-about-lock (before lock-deactivate-as activate)
508 (make-local-variable 'my-as)
509 (setq my-as nil)
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"))
512
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:
519
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.
527
528
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."
531 (interactive)
532 (do-auto-save-original t current-only))
533
534 ;; enable MY auto-save
535 (my-as-on)
536
537 #+end_src
538
539
540 backups, separate from auto-save
541
542 #+begin_src emacs-lisp
543
544 ;; set backup file location
545 (setq backup-directory-alist '(("." . "~/.editor-backups")))
546 (setq auto-save-file-name-transforms
547 '((".*" "~/.editor-backups/" t)))
548
549 (setq version-control t ;; Use version numbers for backups
550 kept-new-versions 100
551 kept-old-versions 2
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)
555
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)
561 (< last-backup-time
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)))))
566
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)
571
572 (add-hook 'auto-save-hook 'auto-save-size-limit)
573
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)))
579
580 #+end_src
581
582
583
584 background:
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'
588
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!.
595
596
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
603 they are #filename#
604 seems they are created
605
606 * bbdb
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
611 (require 'bbdb)
612 (bbdb-initialize 'message)
613
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)
620
621
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)
628
629 ;; use d instead
630 (add-hook 'bbdb-mode-hook
631 (lambda () (define-key bbdb-mode-map (kbd "C-k") nil)))
632
633 (add-to-list 'load-path "~/.emacs.d/src/bbdb-csv-import")
634 (require 'bbdb-csv-import)
635 #+end_src
636
637 * bookmark settings
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)
643 #+end_src
644 * c-like settings
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")
649 (awk-mode . "awk")
650 (other . "stroustrup")))
651 ;; for emacs itself, use
652 ;; (setq c-default-style '((java-mode . "java")
653 ;; (awk-mode . "awk")
654 ;; (other . "gnu")))
655 ;; (setq-default c-basic-offset 2)
656 #+end_src
657 * color theme
658
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.
662
663
664 interesting light themes
665
666
667 #+begin_src emacs-lisp
668 (defun override-theme (arg)
669 (interactive)
670 (while custom-enabled-themes
671 (disable-theme (car custom-enabled-themes)))
672 (load-theme arg t))
673 (setq color-theme-is-global t)
674
675 (defun toggle-night ()
676 (interactive)
677 (if (equal (car custom-enabled-themes) 'naquadah)
678 (override-theme 'leuven)
679 (override-theme 'naquadah)))
680
681
682 (override-theme 'leuven) ;; org mode features, with monitor darkened. part of org-mode i think
683
684
685
686 ;; disable color thing with this:
687 ;;(disable-theme (car custom-enabled-themes))
688
689 ;; decent dark themes
690
691 ;;(override-theme 'tangotango)
692 ;;(override-theme 'deeper-blue)
693 ;;(override-theme 'tango-dark)
694 ;;(override-theme 'tsdh-dark)
695
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
701
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
706
707
708
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
712
713
714 ;;color-theme is deprecated in emacs 24.
715
716 ;; theme packages i tried then removed:
717 ;; ignored ones that didn't use the new theme engine
718
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)
720
721
722
723 #+end_src
724
725 * yasnippet
726 cd ~/.emacs.d/src
727 git clone --recursive https://github.com/capitaomorte/yasnippet
728 touch snippets/.yas-make-groups
729
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.
733
734 #+begin_src emacs-lisp
735
736 (require 'yasnippet)
737 ;; this needs to be before yas-global-mode
738 (setq yas-snippet-dirs (list "~/.emacs.d/snippets"))
739 (yas-global-mode 1)
740
741 (setq
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
746 yas-prompt-functions
747 '(yas-ido-prompt yas-dropdown-prompt yas-x-prompt yas-completing-prompt yas-no-prompt))
748
749 ;; todo, explore this option for wrapping region
750 ;; '(yas/wrap-around-region t))
751
752 #+end_src
753
754 #+RESULTS:
755 | yas-ido-prompt | yas-dropdown-prompt | yas-x-prompt | yas-completing-prompt | yas-no-prompt |
756
757 * cross session settings
758 #+begin_src emacs-lisp
759
760 ;; Save a list of recent files visited.
761 (recentf-mode 1)
762 (setq recentf-max-saved-items 200
763 recentf-max-menu-items 15)
764
765
766 (setq save-place t
767 save-place-version-control 'nospecial
768 save-place-limit 40000
769 save-place-file "~/.emacs.d/places")
770
771
772
773 ;; savehist keeps track of some history
774 ;; search entries
775 (setq savehist-additional-variables '(kill-ring search-ring regexp-search-ring)
776 ;; save every minute
777 savehist-autosave-interval 60
778 ;; keep the home clean
779 savehist-file "~/.emacs.d/.savehist")
780 (savehist-mode 1)
781
782 #+end_src
783
784 * ediff
785 #+begin_src emacs-lisp
786 ;; ediff-buffers is the main command to use
787
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)
794
795 ;; do side by side diffs
796 (setq ediff-split-window-function 'split-window-horizontally)
797
798
799 #+end_src
800
801
802
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.
804
805 * dired
806 #+begin_src emacs-lisp
807
808 ;; dired - reuse current buffer by pressing 'a'
809 (put 'dired-find-alternate-file 'disabled nil)
810 #+end_src
811
812 * disabled but saved for documentation purposes
813 :PROPERTIES:
814 :tangle: no
815 :END:
816 ** bash-completion
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)
825
826 ;; this appears useless, but was in the recommended init code
827 (add-hook 'shell-command-complete-functions
828 'bash-completion-dynamic-complete)
829
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)
834
835 #+end_src
836
837 ** ace-jump
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 ;)
841
842 #+begin_src emacs-lisp
843
844
845
846
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)
856
857
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)
864
865
866
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)
871
872
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
877 (whitespace-mode +1)
878
879
880
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."
884 (interactive "P")
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))))
891
892 (defun org-exchange-point-and-mark (&optional arg)
893 (interactive "P")
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))))
899
900
901 (defun toggle-mode-line ()
902 "Toggle mode line on and off."
903 (interactive)
904 (if mode-line-format
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))
909 (toggle-mode-line)
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)))
914
915
916 #+end_src
917
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
927 'leuven
928 `(header-line ((,class (:box (:line-width 1 :color "#1A2F54") :foreground "#85CEEB" :background "#335EA8"))))))
929
930 #+end_src
931
932 ** tab bindings for when I wanted to make tab be for search
933 #+begin_src emacs-lisp
934
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)
941
942 (add-hook 'compilation-mode-hook (lambda ()
943 (define-key compilation-mode-map (kbd "<tab>") nil)
944 (define-key compilation-mode-map "\t" nil)))
945
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)))
949
950 (add-hook 'haskell-interactive-mode-hook
951 (lambda ()
952 (define-key haskell-interactive-mode-map "\t" nil)
953 (define-key haskell-interactive-mode-map (kbd "<tab>") 'haskell-interactive-mode-tab)))
954
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)
959
960 (add-hook 'ido-setup-hook
961 (lambda()
962 (define-key ido-completion-map (kbd "<tab>") 'ido-complete)
963 (define-key ido-completion-map "\t" nil)))
964
965 #+end_src
966
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."
971 (interactive)
972 (progn
973 (kill-buffer)
974 (delete-window)))
975 #+end_src
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")
982
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))
987
988
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))
993
994 #+end_src
995
996
997
998 ** mu4e
999
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.
1002
1003 #+begin_src emacs-lisp
1004 (add-to-list 'load-path "/usr/local/share/emacs/site-lisp/mu4e")
1005 (require '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)
1020
1021 (define-key mu4e-headers-mode-map (kbd "<return>") 'mu4e-headers-view-message)
1022
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))
1028 acc)
1029 '("Ian Kelling <ian@iankelling.org")
1030 ;;'(("Ian Kelling " "<alternate1@example.com>")
1031 ;; ("Ian Kelling " "<alternate2@example.com>"))
1032 ))
1033
1034 (add-hook 'mu4e-compose-pre-hook 'my-mu4e-to)
1035
1036 (add-to-list 'mu4e-view-actions
1037 '("ViewInBrowser" . mu4e-action-view-in-browser) t)
1038 (setq mu4e-maildir-shortcuts
1039 '( ("/INBOX" . ?i)
1040 ("/bog" . ?b)
1041 ("/Drafts" . ?d)))
1042
1043 #+end_src
1044
1045
1046
1047
1048 ** org-mode auto-complete source
1049
1050 todo, someday take a look at this. it is broken.
1051
1052 ;(defvar ac-source-eshell-pcomplete
1053 ; '((candidates . (pcomplete-completions))))
1054 ;(defun ac-complete-eshell-pcomplete ()
1055 ; (interactive)
1056 ; (auto-complete '(ac-source-eshell-pcomplete)))
1057
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)
1060
1061
1062 ** gnus nice unicode
1063
1064
1065 this looks nice, but it lags gnus just a bit
1066 #+begin_src emacs-lisp
1067
1068 (defun gnus-pretty-chars-setup ()
1069 (when window-system
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)
1079
1080 #+end_src
1081
1082 ** readline complete fix, replaced with proper solution
1083
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
1088
1089 (defun comint-exec-1 (name buffer command switches)
1090 (let ((process-environment
1091 (nconc
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)))
1103 (list "TERM=emacs"
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))
1110 (default-directory
1111 (if (file-accessible-directory-p default-directory)
1112 default-directory
1113 "/"))
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
1128 ;; conversion.
1129 (if (and decoding (not encoding))
1130 (setq encoding (coding-system-change-eol-conversion decoding 'unix)
1131 changed t))
1132 (if changed
1133 (set-process-coding-system proc decoding encoding))
1134 proc))
1135 #+end_src
1136 ** misc
1137 #+begin_src emacs-lisp
1138
1139 ; todo, is this require things necessary?
1140 ; (require 'flyspell)
1141
1142
1143
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)
1152
1153
1154 ; todo, see how mastering emacs defines this function
1155 ;(global-set-key (kbd "M-j") 'ido-goto-symbol)
1156
1157
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
1164
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)))
1168
1169
1170
1171
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
1178 ;; ((listp arg) 0)
1179 ;; ((eq arg '-) -2)
1180 ;; (t (1- arg))) t))
1181 ;; (move-beginning-of-line nil))))
1182
1183
1184
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))
1190
1191
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
1199 ; try-expand-list
1200 ; try-expand-line
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)
1205
1206
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)
1213
1214
1215
1216
1217 ; todo. take a look at fixing this
1218 ;delete-old-versions t ; fix description in http://www.emacswiki.org/emacs/ForceBackups
1219
1220
1221
1222
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
1226
1227
1228
1229
1230
1231
1232 ; random notes and example code
1233
1234
1235 ; usefull thing
1236 ;(map 'list #'list tabSwapKeys (reverse (getBinds tabSwapKeys)))
1237
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))
1246
1247
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
1251
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."
1255 ; :group 'mouse)
1256 ;(defface mouse-flash-position '((t (:background "Yellow")))
1257 ; "*Face used to highlight mouse position temporarily."
1258 ; :group 'mouse)
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)
1266 ; ol)
1267 ; "Overlay to highlight current mouse position.")
1268
1269
1270 ;tip, put the last interactive command as elisp on the kill ring:
1271 ;C-x <ESC> <ESC> C-a C-k C-g
1272
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)
1280
1281
1282 #+end_src
1283
1284
1285 ** SQL
1286
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)
1292
1293 (setq sql-product 'postgres)
1294 #+end_src
1295
1296
1297 * elisp settings
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
1302 #+end_src
1303
1304
1305
1306
1307
1308 * gnus
1309
1310 good info http://www.emacswiki.org/emacs/GnusTutorial
1311 good info http://www.emacs.uniyar.ac.ru/doc/em24h/emacs183.htm
1312
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
1316 address.
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.
1320
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.
1323
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
1326 unsupported.
1327
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
1333 its form is:
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"; }
1338
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
1347
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.
1351
1352 this was the most interesting one I found within a few minutes of googling.
1353 https://github.com/wcdolphin/mailman-downloader
1354
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.
1357
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
1363 works great.
1364
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
1368 module we need.
1369 pi dovecot-imapd
1370
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.
1376
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
1379
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/
1385
1386 Within emacs you can move messages between mbox and maildir etc, which is a nice flexibility.
1387
1388
1389
1390 doc group for mbox:
1391 in gnus, do gnus-group-make-doc-group (G f in groups buffer) and point to the file
1392
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.
1397
1398
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
1401
1402
1403 random side note
1404 we can also get mbox from gmane
1405 http://notmuchmail.org/howto/#index7h2
1406
1407
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
1410
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.
1413
1414 nnfolder-generate-active-file
1415
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)
1418
1419
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.
1428
1429
1430
1431 ** caching background
1432
1433 caching:
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
1444
1445
1446 * haskell
1447 :LOGBOOK:
1448 :END:
1449
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
1452 tab completion
1453 C-q insert prev arg
1454 C-( history search
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)
1458 *c-m-l clear screen
1459 *haskell-process-interrupt, c-cc terminate job (i can implement this maybe)
1460
1461 nice bash/readline functions missing in comint:
1462 yank-nth-arg
1463 operate-get-next
1464 menu-complete
1465
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
1470
1471
1472
1473 todo:
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
1485
1486 various not immediately useful functions:
1487 haskell-process-add-dependency
1488 haskell-process-touch-buffer
1489 haskell-process-cd
1490 haskell-process-unignore
1491 haskell-process-reload-devel-main
1492
1493
1494 rebind
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
1498
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
1504
1505
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
1510
1511 redefined ih to hi
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
1517
1518
1519 haskell-mode installation from source, based on its readme
1520 in the git directory,
1521 make all
1522
1523 #+begin_src emacs-lisp
1524
1525
1526
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
1530 (lambda ()
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)))
1535
1536 ;;copied from haskell-mode docs in order to use the new, better, nondefault
1537 ;;interactive mode.
1538 (eval-after-load "haskell-mode"
1539 '(progn
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)))
1548
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)))
1553
1554
1555
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)
1560
1561
1562 ;; disable some rebinds. they are set to appropriate keys in the keybinds section
1563 (eval-after-load "haskell-mode"
1564 '(progn
1565 (define-key haskell-mode-map (kbd "C-a") 'nil)
1566 (define-key haskell-mode-map (kbd "C-j") 'nil)))
1567
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))
1573 nil))))))
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))
1578
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)
1586
1587
1588 ;; todo, set this to some other key
1589 ;; (local-set-key (kbd "C-e") 'my-haskell-load-and-run)
1590
1591 (defun my-haskell-load-and-run ()
1592 "Loads and runs the current Haskell file."
1593 (interactive)
1594 (let ((start-buffer (current-buffer)))
1595 (inferior-haskell-load-and-run inferior-haskell-run-command)
1596 (sleep-for 0 100)
1597 (end-of-buffer)
1598 (pop-to-buffer start-buffer)))
1599
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))
1604
1605
1606
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))
1611
1612 (add-hook 'haskell-mode-hook
1613 (lambda () (define-key haskell-mode-map (kbd "C-(")
1614 (lambda () (interactive)
1615 (basic-save-buffer)
1616 (haskell-compile)
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)))
1620
1621
1622
1623 (add-hook 'haskell-interactive-mode-hook
1624 (lambda ()
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)))
1628
1629
1630
1631 (add-hook 'haskell-interactive-mode-hook
1632 (lambda ()
1633 (define-key haskell-interactive-mode-map (kbd "<C-M-return>") 'haskell-interactive-mode-newline-indent)))
1634
1635 #+end_src
1636
1637 #+RESULTS:
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 |
1639
1640 * ido
1641 #+begin_src emacs-lisp
1642
1643 ;; easier to read, and more than the default 12
1644 (setq ido-separator nil)
1645 (setq ido-max-prospects 20)
1646
1647 (ido-mode t)
1648 (ido-everywhere t) ;; file dialogs
1649
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.
1659 (defun ido-imenu ()
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."
1662 (interactive)
1663 (imenu--make-index-alist)
1664 (let ((name-and-pos '())
1665 (symbol-names '()))
1666 (cl-flet ((addsymbols (symbol-list)
1667 (when (listp symbol-list)
1668 (dolist (symbol symbol-list)
1669 (let ((name nil) (position nil))
1670 (cond
1671 ((and (listp symbol) (imenu--subalist-p symbol))
1672 (addsymbols symbol))
1673
1674 ((listp symbol)
1675 (setq name (car symbol))
1676 (setq position (cdr symbol)))
1677
1678 ((stringp symbol)
1679 (setq name symbol)
1680 (setq position (get-text-property 1 'org-imenu-marker symbol))))
1681
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))
1692 symbol-names))))
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))))
1700
1701 (defun ido-goto-symbol (&optional symbol-list)
1702 "Refresh imenu and jump to a place in the buffer using Ido."
1703 (interactive)
1704 (unless (featurep 'imenu)
1705 (require 'imenu nil t))
1706 (cond
1707 ((not symbol-list)
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)
1713 (unless ido-mode
1714 (ido-mode 1)
1715 (setq ido-enable-flex-matching t))
1716 (while (progn
1717 (imenu--cleanup)
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)))
1726 (cond
1727 ((overlayp position)
1728 (goto-char (overlay-start position)))
1729 (t
1730 (goto-char position)))))
1731 ((listp symbol-list)
1732 (dolist (symbol symbol-list)
1733 (let (name position)
1734 (cond
1735 ((and (listp symbol) (imenu--subalist-p symbol))
1736 (ido-goto-symbol symbol))
1737 ((listp symbol)
1738 (setq name (car symbol))
1739 (setq position (cdr symbol)))
1740 ((stringp symbol)
1741 (setq name symbol)
1742 (setq position
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))))))))
1748
1749 #+end_src
1750
1751 * isearch
1752 #+begin_src emacs-lisp
1753 (setq
1754 isearch-allow-scroll t
1755 search-ring-update t) ;; dont start an edit when going to previous search
1756
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))
1762
1763 (defun isearch-yank-symbol (&optional partialp backward)
1764 "Put symbol at current point into search string.
1765
1766 If PARTIALP is non-nil, find all partial matches."
1767 (interactive "P")
1768
1769 (let (from to bound sym)
1770 (setq 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
1773 (when (or (progn
1774 ;; Look at text around `point'.
1775 (save-excursion
1776 (skip-syntax-backward "w_") (setq from (point)))
1777 (save-excursion
1778 (skip-syntax-forward "w_") (setq to (point)))
1779 (> to from))
1780 ;; Look between `line-beginning-position' and `point'.
1781 (save-excursion
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'.
1788 (save-excursion
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)))
1795 (cond ((null sym)
1796 (message "No symbol at point"))
1797 ((null backward)
1798 (goto-char (1+ from)))
1799 (t
1800 (goto-char (1- to))))
1801 (isearch-search)
1802 (if partialp
1803 (isearch-yank-string sym)
1804 (isearch-yank-regexp
1805 (concat "\\_<" (regexp-quote sym) "\\_>")))))
1806
1807 (defun isearch-current-symbol (&optional partialp)
1808 "Incremental search forward with symbol under point.
1809
1810 Prefixed with \\[universal-argument] will find all partial
1811 matches."
1812 (interactive "P")
1813 (let ((start (point)))
1814 (isearch-forward-regexp nil 1)
1815 (isearch-yank-symbol partialp)))
1816 ;; todo, make this
1817
1818 (defun isearch-backward-current-symbol (&optional partialp)
1819 "Incremental search backward with symbol under point.
1820
1821 Prefixed with \\[universal-argument] will find all partial
1822 matches."
1823 (interactive "P")
1824 (let ((start (point)))
1825 (isearch-backward-regexp nil 1)
1826 (isearch-yank-symbol partialp)))
1827
1828
1829
1830 ; lets look through emacs starter kit before we throw this out.
1831
1832
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)))
1841
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
1847 isearch-string
1848 (regexp-quote isearch-string))))))
1849
1850
1851 #+end_src
1852
1853 * lisp / elisp mode setings
1854 #+begin_src emacs-lisp
1855
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
1861 (lambda ()
1862 (if (file-exists-p (concat buffer-file-name "c"))
1863 (delete-file (concat buffer-file-name "c"))))))
1864
1865
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)))
1873 (eldoc-mode 1))
1874 (add-hook 'emacs-lisp-mode-hook 'emacs-lisp-mode-defaults)
1875
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)
1881
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)
1886
1887
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)
1893
1894 #+end_src
1895
1896
1897 * java eclim
1898
1899 based on https://github.com/senny/emacs-eclim
1900
1901
1902 eclim: eclipse completion, searching, validation, etc inside emacs
1903 install
1904 #+begin_src sh :tangle no
1905 cd ~/opt
1906 git clone git://github.com/ervandew/eclim.git
1907 cd eclim
1908 pi ant
1909 ant -Declipse.home=/a/opt/eclipse
1910 #+end_src
1911
1912
1913 currently makes emacs hang a bunch. dunno why. just using eclipse instead
1914 #+begin_src emacs-lisp :tangle no
1915 (require 'eclim)
1916 (global-eclim-mode)
1917
1918 ;; just do java
1919 (setq eclim-accepted-file-regexps
1920 '("\\.java"))
1921
1922 (custom-set-variables
1923 '(eclim-eclipse-dirs '("/a/opt/eclipse"))
1924 '(eclim-executable "/a/opt/eclipse/eclim"))
1925
1926 (setq help-at-pt-display-when-idle t)
1927 (setq help-at-pt-timer-delay 0.1)
1928 (help-at-pt-set-timer)
1929
1930 ;; dunno if this line is needed
1931 (require 'eclimd)
1932 (setq eclimd-default-workspace "/a/bin/eclipse-workspace")
1933
1934 ;;add the emacs-eclim source
1935 (require 'ac-emacs-eclim-source)
1936 (add-hook 'java-mode-hook 'ac-emacs-eclim-java-setup)
1937
1938 #+end_src
1939
1940 #+RESULTS:
1941 | ac-emacs-eclim-java-setup |
1942
1943 * mediawiki
1944 #+begin_src emacs-lisp
1945
1946 (add-to-list 'load-path "~/.emacs.d/src/mediawiki-el")
1947 (eval-after-load "mediawiki"
1948 '(progn
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)))
1952
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 ()
1956 (interactive)
1957 (and (mediawiki-save "") (mediawiki-reload)))))
1958 #+end_src
1959 * modes with little configuration needed
1960 #+begin_src emacs-lisp
1961
1962 (require 'ws-butler)
1963 (ws-butler-global-mode)
1964
1965
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))
1969
1970 ;; todo, put this on a hook with prog mode
1971 ;;(highlight-indentation-mode 1)
1972
1973 (add-hook 'auto-revert-tail-mode-hook
1974 (lambda ()
1975 (when (string=
1976 buffer-file-name
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)))
1984
1985
1986 ;; gnu global
1987 (require 'ggtags)
1988 (add-hook 'c-mode-common-hook
1989 (lambda () (ggtags-mode 1)
1990 (setq c-label-minimum-indentation 0)))
1991
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)
1996
1997 (defun gtags-update-single(filename)
1998 "Update Gtags database for changes in a single file"
1999 (interactive)
2000 (start-process "update-gtags" "update-gtags" "bash" "-c" (concat "cd " ggtags-project-root " ; gtags --single-update " filename )))
2001
2002 (defun gtags-update-current-file()
2003 (interactive)
2004 (let ((rel-filename (replace-regexp-in-string
2005 ggtags-project-root "."
2006 (buffer-file-name (current-buffer)))))
2007 (gtags-update-single rel-filename)))
2008
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)))
2013
2014 (add-hook 'after-save-hook 'gtags-update-hook)
2015
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.
2021
2022 (require 'magit)
2023
2024
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."
2030 (interactive)
2031 (font-lock-add-keywords
2032 nil
2033 '(("hsl( *\\([0-9]\\{1,3\\}\\) *, *\\([0-9]\\{1,3\\}\\)% *, *\\([0-9]\\{1,3\\}\\)% *)"
2034 (0 (put-text-property
2035 (+ (match-beginning 0) 3)
2036 (match-end 0)
2037 'face (list :background
2038 (concat "#" (mapconcat 'identity
2039 (mapcar
2040 (lambda (x) (format "%02x" (round (* x 255))))
2041 (color-hsl-to-rgb
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)
2045 ) )
2046 "" )) ; "#00aa00"
2047 ))))) )
2048 (font-lock-fontify-buffer)
2049 )
2050
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)
2054
2055
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))
2061
2062 (add-to-list 'load-path "~/.emacs.d/src/spray")
2063 (require '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
2066
2067 ;; delete active selection with self-insert commands
2068 (delete-selection-mode t)
2069
2070 ;; Transparently open compressed files
2071 (auto-compression-mode t)
2072
2073 ;; Highlight matching parenthesesq when the pointq is on them.
2074 ;; not needed since smart paren mode?
2075 ;; (show-paren-mode 1)
2076
2077
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")
2082
2083 ;; dot mode, repeats last action
2084 (require 'dot-mode)
2085 (add-hook 'find-file-hooks 'dot-mode-on)
2086
2087
2088 ;; clean up obsolete buffers automatically at midnight
2089 (require 'midnight)
2090
2091
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)
2103
2104
2105 ;; saner regex syntax
2106 (require 're-builder)
2107 (setq reb-re-syntax 'string)
2108
2109
2110 ;; use shift + arrow keys to switch between visible buffers
2111 ;; todo, set these keys to something else
2112 (require 'windmove)
2113 (windmove-default-keybindings)
2114
2115
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)
2120
2121
2122 ;; enable winner-mode to manage window configurations
2123 (winner-mode +1)
2124
2125 ;; meaningful names for buffers with the same name
2126 (require 'uniquify)
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
2135
2136
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
2140 ;;
2141 (add-hook 'makefile-mode-hook
2142 (lambda ()
2143 (setq indent-tabs-mode t)
2144 (setq indent-line-function (lambda () 'no-indent))))
2145
2146
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)
2150
2151
2152 ;; auto indent shell script comments
2153 (setq sh-indent-comment t)
2154
2155 ;; random extra highlights
2156 (require 'volatile-highlights)
2157 (volatile-highlights-mode t)
2158
2159
2160 ;; make help buffers smaller when it makes sense
2161 (temp-buffer-resize-mode 1)
2162
2163
2164 (require 'info+)
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)
2169
2170
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
2182
2183
2184 (setq sh-here-document-word "'EOF'")
2185
2186 (setq tramp-default-method "ssh")
2187 #+end_src
2188 * misc general settings
2189
2190 #+begin_src emacs-lisp
2191
2192 (setq vc-follow-symlinks t)
2193
2194 ;; give us a shell to start instead of scratch
2195 ;;(setq initial-buffer-choice (lambda () (new-shell)))
2196
2197 ;; disable this nasty function, as I always use a gui
2198 (defun suspend-frame() (interactive))
2199
2200 ;; to reopen just ido-switch-buffer (c-l), *scratch*
2201 ;; (kill-buffer "*scratch*")
2202
2203 ;; Seed the random-number generator
2204 (random t)
2205
2206 ;; easier to remember than keybinds
2207 (defalias 'scrypt 'mml-secure-message-encrypt-pgpmime)
2208 (defalias 'sign 'mml-secure-message-sign-pgpmime)
2209 (defun encrypt ()
2210 (interactive)
2211 (mml-secure-message-encrypt-pgpmime 'dontsign))
2212
2213 ;; don't highlight the region.
2214 (set-face-background 'region nil)
2215
2216 ;; this fixes save error for python example code
2217 (define-coding-system-alias 'UTF-8 'utf-8)
2218
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"))))
2222
2223 (set-terminal-coding-system 'utf-8)
2224 (set-keyboard-coding-system 'utf-8)
2225 (prefer-coding-system 'utf-8)
2226
2227 ;; remove ugly 3d box feature
2228 (set-face-attribute 'mode-line nil :box nil)
2229
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"
2242 echo-keystrokes 0.1
2243 mark-ring-max 160
2244 sort-fold-case t ; case insensitive line sorting
2245 global-mark-ring-max 1000
2246 ;; the bell seems to lag the ui
2247 ;;visible-bell t
2248 case-replace nil
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
2254
2255
2256 (setq-default indent-tabs-mode nil ;; don't use tabs to indent
2257 cursor-type 'box
2258 fill-column 72
2259
2260 ;; wrap at word boundaries instead of mid-word
2261 word-wrap t
2262 imenu-auto-rescan t
2263 indicate-empty-lines t) ; mark end of buffer
2264
2265
2266 (blink-cursor-mode '(-4))
2267 (menu-bar-mode -1)
2268 (tool-bar-mode -1)
2269 (set-scroll-bar-mode 'left)
2270
2271
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)
2284
2285
2286
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))
2296
2297
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)))
2306
2307
2308
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 " ")
2315
2316
2317 (setq initial-scratch-message nil)
2318 #+end_src
2319
2320
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.
2324
2325 figured out I needed to customize the header line face. To find the face, M-x list-faces-display or just google / search
2326 info,
2327 then M-x customize-face
2328 header-line
2329 unchecked some stuff so that it inherits from default.
2330
2331 * misc function definitions
2332 #+begin_src emacs-lisp
2333
2334
2335
2336
2337
2338 (defun next-backup-dir ()
2339 "In a directory listing from rsync -n,
2340 Go to the next directory based on where the cursor is."
2341 (interactive)
2342 (let* ((start-col (current-column))
2343 (end-col (progn (skip-chars-forward "^/\n") (current-column)))
2344 (dir (progn
2345 (beginning-of-line 1)
2346 (buffer-substring-no-properties (point) (+ (point) end-col)))))
2347 (message dir)
2348 (forward-line 1)
2349 (while (and (not (eobp))
2350 (string= dir (buffer-substring-no-properties (point) (+ (point) end-col))))
2351 (forward-line 1))
2352 (forward-char-same-line start-col)))
2353 ;; copy paste this for fast keybind
2354 ;;(local-set-key (kbd "<kp-enter>"))
2355
2356
2357 (defun goto-buffer-or-find-file (file-name)
2358 "If buffer is with FILE-NAME exists, go to it, else open the file using full path."
2359 (interactive)
2360 (let ((b (get-buffer (file-name-nondirectory file-name))))
2361 (if b
2362 (switch-to-buffer b)
2363 (find-file file-name))))
2364
2365
2366
2367
2368 ;; todo, i think this is broken. perhaps the last goto-char is not accounting for buffer or something
2369 (defun unpop-global-mark ()
2370 "Unpop off global mark ring. Does nothing if mark ring is empty."
2371 (interactive)
2372 (when global-mark-ring
2373 (setq global-mark-ring (cons (copy-marker (mark-marker)) global-mark-ring))
2374 (let ((lm (car (last global-mark-ring))))
2375 (set-marker (mark-marker) (marker-position lm) (marker-buffer lm)))
2376 (when (null (mark t)) (ding))
2377 (setq global-mark-ring (nbutlast global-mark-ring))
2378 (goto-char (marker-position (mark-marker)))))
2379
2380 (defun indent-buffer ()
2381 "Indents the entire buffer."
2382 (interactive)
2383 (cond ((derived-mode-p 'org-mode)
2384 (org-indent-region (point-min) (point-max)))
2385 ((derived-mode-p 'python-mode)
2386 (py-autopep8))
2387 (t
2388 (indent-region (point-min) (point-max)))))
2389
2390
2391 ;; TODO doesn't work with uniquify
2392 (defun rename-file-and-buffer ()
2393 "Renames current buffer and file it is visiting."
2394 (interactive)
2395 (let ((name (buffer-name))
2396 (filename (buffer-file-name)))
2397 (if (not (and filename (file-exists-p filename)))
2398 (message "Buffer '%s' is not visiting a file!" name)
2399 (let ((new-name (read-file-name "New name: " filename)))
2400 (cond ((get-buffer new-name)
2401 (message "A buffer named '%s' already exists!" new-name))
2402 (t
2403 (rename-file name new-name 1)
2404 (rename-buffer new-name)
2405 (set-visited-file-name new-name)
2406 (set-buffer-modified-p nil)))))))
2407
2408
2409
2410 (defun sudo-edit (&optional arg)
2411 (interactive "P")
2412 (if (or arg (not buffer-file-name))
2413 (find-file (concat "/sudo:root@localhost:" (ido-read-file-name "File: ")))
2414 (find-alternate-file (concat "/sudo:root@localhost:" buffer-file-name))))
2415
2416
2417
2418 (defun backward-symbol (arg)
2419 (interactive "p")
2420 (forward-symbol (- arg)))
2421
2422 #+end_src
2423
2424 * mode line
2425 #+begin_src emacs-lisp
2426
2427 ; -----------------------------
2428 ; fixing up the mode line
2429 ; modified from mastering emacs blog
2430 ; ----------------------------
2431
2432 (defvar mode-line-cleaner-alist
2433 `((auto-complete-mode . "")
2434 (yas/minor-mode . "")
2435 (paredit-mode . "")
2436 (auto-fill-function . "")
2437 (eldoc-mode . "")
2438 (abbrev-mode . "")
2439 (flyspell-mode . "")
2440 (glasses-mode . "")
2441 (dot-mode . "")
2442 (yas-global-mode . "")
2443 (yas-minor-mode . "")
2444 (undo-tree-mode . "")
2445 (volatile-highlights-mode . "")
2446 (highlight-symbol-mode . "")
2447 ;; Major modes
2448 (lisp-interaction-mode . "λ")
2449 (hi-lock-mode . "")
2450 (python-mode . "Py")
2451 (emacs-lisp-mode . "EL")
2452 (nxhtml-mode . "nx"))
2453 "Alist for `clean-mode-line'.
2454
2455 When you add a new element to the alist, keep in mind that you
2456 must pass the correct minor/major mode symbol and a string you
2457 want to use in the modeline *in lieu of* the original.")
2458
2459
2460 (defun clean-mode-line ()
2461 (interactive)
2462 (loop for cleaner in mode-line-cleaner-alist
2463 do (let* ((mode (car cleaner))
2464 (mode-str (cdr cleaner))
2465 (old-mode-str (cdr (assq mode minor-mode-alist))))
2466 (when old-mode-str
2467 (setcar old-mode-str mode-str))
2468 ;; major mode
2469 (when (eq mode major-mode)
2470 (setq mode-name mode-str)))))
2471
2472 ; disabled
2473 ; (add-hook 'after-change-major-mode-hook 'clean-mode-line)
2474
2475
2476 ;;; alias the new `flymake-report-status-slim' to
2477 ;;; `flymake-report-status'
2478 (defalias 'flymake-report-status 'flymake-report-status-slim)
2479 (defun flymake-report-status-slim (e-w &optional status)
2480 "Show \"slim\" flymake status in mode line."
2481 (when e-w
2482 (setq flymake-mode-line-e-w e-w))
2483 (when status
2484 (setq flymake-mode-line-status status))
2485 (let* ((mode-line " Φ"))
2486 (when (> (length flymake-mode-line-e-w) 0)
2487 (setq mode-line (concat mode-line ":" flymake-mode-line-e-w)))
2488 (setq mode-line (concat mode-line flymake-mode-line-status))
2489 (setq flymake-mode-line mode-line)
2490 (force-mode-line-update)))
2491
2492
2493 (add-hook 'after-change-major-mode-hook (lambda ()
2494
2495 (setq mode-line-mule-info nil
2496 mode-line-position nil
2497 mode-line-modes nil))) ; todo, make only flymake status show up
2498
2499 #+end_src
2500
2501 * mouse related
2502 ** settings
2503 #+begin_src emacs-lisp
2504 (setq focus-follows-mouse t
2505 mouse-autoselect-window t
2506 xterm-mouse-mode t)
2507 #+end_src
2508 ** move-mouse-to-point
2509 todo, this is buggy with multiple windows open.
2510 #+begin_src emacs-lisp
2511 (defun move-mouse-to-point ()
2512 (interactive)
2513 (let* ((pos (posn-col-row (posn-at-point)))
2514 (x (+ (car pos) 2)) ; no idea why this is off by 1-2
2515 (y (cdr pos)))
2516 (set-mouse-position (selected-frame) x y)))
2517 #+end_src
2518 ** cursor highlight
2519 disabled until fixed
2520 #+begin_src emacs-lisp :tangle no
2521 (defun mouse-follow-cursor ()
2522 ;(if (not (equal this-command last-command)) (print this-command))
2523 ;debug
2524 ; (print this-command)
2525 (when (and this-command (not (string= this-command "show-pointer")))
2526 (let* ((pos (posn-col-row (posn-at-point)))
2527 (x (1+ (car pos))) ; no idea why this is off by 1
2528 (y (cdr pos)))
2529 (setq ignore-mouse-visibility t)
2530 (set-mouse-position (selected-frame) x y))
2531 ;(sleep-for 0 100)
2532 (frame-make-pointer-invisible)))
2533
2534 ; (when this-command
2535 ; (if (string= this-command "show-pointer")
2536 ; (frame-make-pointer-visible)
2537 ;))
2538
2539
2540
2541 (defun show-pointer ()
2542 (interactive)
2543 (if ignore-mouse-visibility
2544 (setq ignore-mouse-visibility nil)
2545 ; (print "visible")
2546 (frame-make-pointer-visible)))
2547
2548 (setq ignore-mouse-visibility t)
2549 ; disabled
2550 ; (global-set-key (kbd "<mouse-movement>") 'show-pointer)
2551
2552 ; (add-hook 'post-command-hook 'mouse-follow-cursor t)
2553
2554
2555 ; status. working, except that all scroll wheel actions send a mouse-movement command before doing their actual command, which makes the pointer flicker.
2556 ; this is just an artifact of xbindkeys. when i do my own mouse chip, it will fix this.
2557
2558 ; we could set track-mouse to nil, then do the command, then set it back. i like that idea a bit better.
2559 ; we could do the same thing in the other case of ignore-mouse-visibility.
2560
2561 ; there are also other issues, it doesn't work with changing buffers on a split screen.
2562 ; i think a good idea along with this would be for the cursor to follow the mouse all the time.
2563 ; i have done code for that in my mouse 1 function,
2564 ; i just need to read it again and try it out.
2565
2566
2567
2568
2569 ; this does not take care of scrolling,
2570 ; a post-command hook function below does,
2571 ; but it breaks when the frame is split.
2572 ; the bug is specifically in mouse-pixel-position
2573 ; todo, fix this eventually
2574 (defun mouse-highlight-event (event)
2575 (interactive "e")
2576 (when (or (not event) (mouse-movement-p event)
2577 (memq (car-safe event) '(switch-frame select-window)))
2578 (let ((pos (posn-point (event-end event))))
2579 (if (eq (overlay-buffer mouse-hi-ov) (current-buffer))
2580 (move-overlay mouse-hi-ov pos (1+ pos))
2581 (delete-overlay mouse-hi-ov)
2582 (setq mouse-hi-ov
2583 (make-overlay pos (1+ pos)))
2584 (overlay-put mouse-hi-ov
2585 'insert-in-front-hooks (list 'mouse-hi-modification))
2586 (overlay-put mouse-hi-ov 'priority 1001))
2587 (cond ((save-excursion (goto-char pos) (eolp))
2588 (overlay-put mouse-hi-ov 'face nil)
2589 (overlay-put mouse-hi-ov 'before-string
2590 (propertize
2591 " "
2592 'cursor t
2593 'face 'mouse-cursor-face)))
2594 (t
2595 (overlay-put mouse-hi-ov 'face 'mouse-cursor-face)
2596 (overlay-put mouse-hi-ov 'before-string nil))))))
2597
2598
2599 ; overlay changed hook function
2600 (defun mouse-hi-modification (ov timing beginning end &optional length)
2601 "Make an overlay of length 1 not expand when text is inserted at the front."
2602 (when timing
2603 (let ((start (overlay-start ov)))
2604 (move-overlay ov start (1+ start)))))
2605
2606
2607
2608
2609 (defun mouse-hi-command-hook ()
2610 ; not sure if I need to deal with case of a nil mouse position in some unforseen situation.
2611 (let ((x-y (cdr (mouse-pixel-position))))
2612 (when (wholenump (car x-y))
2613 (let ((pos (posn-point (posn-at-x-y (car x-y) (cdr x-y) nil t))))
2614 (when pos
2615 (if (eq (overlay-buffer mouse-hi-ov) (current-buffer))
2616 (move-overlay mouse-hi-ov pos (1+ pos))
2617 (delete-overlay mouse-hi-ov)
2618 (setq mouse-hi-ov
2619 (make-overlay pos (1+ pos)))
2620
2621 (overlay-put mouse-hi-ov 'priority 1001))
2622 (cond ((save-excursion (goto-char pos) (eolp))
2623
2624 (overlay-put mouse-hi-ov 'face nil)
2625 (overlay-put mouse-hi-ov 'before-string
2626 (propertize
2627 " "
2628 'cursor t
2629 'face 'mouse-cursor-face)))
2630 (t
2631 (overlay-put mouse-hi-ov 'face 'mouse-cursor-face)
2632 (overlay-put mouse-hi-ov 'before-string nil))))))))
2633 ; (pcase-let ((`(,_ ,x . ,y) (mouse-pixel-position)))
2634 ; (posn-point (posn-at-x-y x y)))))
2635 ; equivalent of above to find pos. todo, learn about the above syntax
2636
2637 (setq mouse-hi-ov (make-overlay 1 1))
2638 (delete-overlay mouse-hi-ov)
2639 ; initialized overlay
2640 ; temporarily set to nil instead of t because it is broken and
2641 ; also has a bug that makes emacs not remember the column when
2642 ; doing up and down movements.
2643 ; it also messes up yas/insert-snippet, dunno why.
2644 ; i should test out whether it is something in the post-command hook
2645 ; (setq track-mouse t)
2646 ;(add-hook 'post-command-hook 'mouse-hi-command-hook)
2647
2648 ;(mouse-hi-command-hook)
2649 ;(setq debug-on-error nil)
2650
2651 #+end_src
2652 ** mouse 1 drag func
2653 :PROPERTIES:
2654
2655 disabled as it breaks in newer emacs versions with this error, when
2656 clicking on info links
2657
2658 "and: Symbol's function definition is void: mouse--remap-link-click-p"
2659
2660 #+begin_src emacs-lisp :tangle no
2661
2662 ; Copied from mouse.el and modified.
2663 ; my modifications have comments prefaced by "ian"
2664 (defun mouse-drag-track (start-event &optional
2665 do-mouse-drag-region-post-process)
2666 "Track mouse drags by highlighting area between point and cursor.
2667 The region will be defined with mark and point.
2668 DO-MOUSE-DRAG-REGION-POST-PROCESS should only be used by
2669 `mouse-drag-region'."
2670 (mouse-minibuffer-check start-event)
2671 (setq mouse-selection-click-count-buffer (current-buffer))
2672 ; ian. removed as unneeded since I don't use TMM
2673 ;(deactivate-mark)
2674 (let* ((scroll-margin 0) ; Avoid margin scrolling (Bug#9541).
2675 (original-window (selected-window))
2676 ;; We've recorded what we needed from the current buffer and
2677 ;; window, now let's jump to the place of the event, where things
2678 ;; are happening.
2679 (_ (mouse-set-point start-event))
2680 (echo-keystrokes 0)
2681 (start-posn (event-start start-event))
2682 (start-point (posn-point start-posn))
2683 (start-window (posn-window start-posn))
2684 (start-window-start (window-start start-window))
2685 (start-hscroll (window-hscroll start-window))
2686 (bounds (window-edges start-window))
2687 (make-cursor-line-fully-visible nil)
2688 (top (nth 1 bounds))
2689 (bottom (if (window-minibuffer-p start-window)
2690 (nth 3 bounds)
2691 ;; Don't count the mode line.
2692 (1- (nth 3 bounds))))
2693 (on-link (and mouse-1-click-follows-link
2694 ;; Use start-point before the intangibility
2695 ;; treatment, in case we click on a link inside
2696 ;; intangible text.
2697 (mouse-on-link-p start-posn)))
2698 (click-count (1- (event-click-count start-event)))
2699 (remap-double-click (and on-link
2700 (eq mouse-1-click-follows-link 'double)
2701 (= click-count 1)))
2702 ;; Suppress automatic hscrolling, because that is a nuisance
2703 ;; when setting point near the right fringe (but see below).
2704 (auto-hscroll-mode-saved auto-hscroll-mode)
2705 (auto-hscroll-mode nil)
2706 moved-off-start event end end-point)
2707
2708 (setq mouse-selection-click-count click-count)
2709 ;; In case the down click is in the middle of some intangible text,
2710 ;; use the end of that text, and put it in START-POINT.
2711 (if (< (point) start-point)
2712 (goto-char start-point))
2713 (setq start-point (point))
2714 (if remap-double-click
2715 (setq click-count 0))
2716
2717 ;; Activate the region, using `mouse-start-end' to determine where
2718 ;; to put point and mark (e.g., double-click will select a word).
2719 (setq transient-mark-mode
2720 (if (eq transient-mark-mode 'lambda)
2721 '(only)
2722 (cons 'only transient-mark-mode)))
2723 (delete-overlay mouse-hi-ov) ; ian, added this.
2724
2725 (let ((range (mouse-start-end start-point start-point click-count)))
2726 (push-mark (nth 0 range) t t)
2727 (goto-char (nth 1 range)))
2728
2729 ;; Track the mouse until we get a non-movement event.
2730 (track-mouse
2731 (while (progn
2732 (setq event (read-event))
2733 (or (mouse-movement-p event)
2734 (memq (car-safe event) '(switch-frame select-window))))
2735 (unless (memq (car-safe event) '(switch-frame select-window))
2736 ;; Automatic hscrolling did not occur during the call to
2737 ;; `read-event'; but if the user subsequently drags the
2738 ;; mouse, go ahead and hscroll.
2739 (let ((auto-hscroll-mode auto-hscroll-mode-saved))
2740 (redisplay))
2741 (setq end (event-end event)
2742 end-point (posn-point end))
2743 ;; Note whether the mouse has left the starting position.
2744 (unless (eq end-point start-point)
2745 (setq moved-off-start t))
2746 (if (and (eq (posn-window end) start-window)
2747 (integer-or-marker-p end-point))
2748 (mouse--drag-set-mark-and-point start-point
2749 end-point click-count)
2750 (let ((mouse-row (cdr (cdr (mouse-position)))))
2751 (cond
2752 ((null mouse-row))
2753 ((< mouse-row top)
2754 (mouse-scroll-subr start-window (- mouse-row top)
2755 nil start-point))
2756 ((>= mouse-row bottom)
2757 (mouse-scroll-subr start-window (1+ (- mouse-row bottom))
2758 nil start-point))))))
2759 (visible-mark-move-overlays))) ; ian, added this
2760
2761
2762 ;; Handle the terminating event if possible.
2763 (when (consp event)
2764 ;; Ensure that point is on the end of the last event.
2765 (when (and (setq end-point (posn-point (event-end event)))
2766 (eq (posn-window end) start-window)
2767 (integer-or-marker-p end-point)
2768 (/= start-point end-point))
2769 (mouse--drag-set-mark-and-point start-point
2770 end-point click-count))
2771
2772 ;; Find its binding.
2773 (let* ((fun (key-binding (vector (car event))))
2774 (do-multi-click (and (> (event-click-count event) 0)
2775 (functionp fun)
2776 (not (memq fun '(mouse-set-point
2777 mouse-set-region))))))
2778 (if (and (/= (mark) (point))
2779 (not do-multi-click))
2780
2781 ;; If point has moved, finish the drag.
2782 (let* (last-command this-command)
2783 (and mouse-drag-copy-region
2784 do-mouse-drag-region-post-process
2785 (let (deactivate-mark)
2786 (copy-region-as-kill (mark) (point)))))
2787
2788 ;; Otherwise, run binding of terminating up-event.
2789 (if do-multi-click
2790 (goto-char start-point)
2791 (deactivate-mark)
2792 (unless moved-off-start
2793 ;; ian: poping the mark is a poor choice of behavior.
2794 ;; we should delete the mark instead.
2795 ;; The first way I found to delete it is to pop it first
2796 (pop-mark)
2797 (setq mark-ring (nbutlast mark-ring))))
2798
2799 (when (and (functionp fun)
2800 (= start-hscroll (window-hscroll start-window))
2801 ;; Don't run the up-event handler if the window
2802 ;; start changed in a redisplay after the
2803 ;; mouse-set-point for the down-mouse event at
2804 ;; the beginning of this function. When the
2805 ;; window start has changed, the up-mouse event
2806 ;; contains a different position due to the new
2807 ;; window contents, and point is set again.
2808 (or end-point
2809 (= (window-start start-window)
2810 start-window-start)))
2811
2812 (when (and on-link
2813 (= start-point (point))
2814 (mouse--remap-link-click-p start-event event))
2815
2816 ;; If we rebind to mouse-2, reselect previous selected
2817 ;; window, so that the mouse-2 event runs in the same
2818 ;; situation as if user had clicked it directly. Fixes
2819 ;; the bug reported by juri@jurta.org on 2005-12-27.
2820 (if (or (vectorp on-link) (stringp on-link))
2821 (setq event (aref on-link 0))
2822 (select-window original-window)
2823 (setcar event 'mouse-2)
2824 ;; If this mouse click has never been done by the
2825 ;; user, it doesn't have the necessary property to be
2826 ;; interpreted correctly.
2827 (put 'mouse-2 'event-kind 'mouse-click)))
2828 (push event unread-command-events)))))))
2829 #+end_src
2830
2831 ** mouse 3
2832 #+begin_src emacs-lisp :tangle no
2833
2834
2835 (defun mouse3-range-mark (start click click-count)
2836 (let* ((range (mouse-start-end start click click-count))
2837 (beg (nth 0 range))
2838 (end (nth 1 range)))
2839 (cond ((<= click start)
2840 (set-mark beg))
2841 (t
2842 (set-mark end))))
2843 (visible-mark-move-overlays))
2844
2845
2846 (defun mouse3-set-mark (event)
2847 "in development"
2848 (interactive "e")
2849 (mouse-minibuffer-check event)
2850 ;; Use event-end in case called from mouse-drag-region.
2851 ;; If EVENT is a click, event-end and event-start give same value.
2852 (set-mark (posn-point (event-end event)))
2853 (visible-mark-move-overlays))
2854
2855
2856 (defun mouse3-func (start-event)
2857 "in development"
2858 (interactive "e")
2859
2860 (run-hooks 'mouse-leave-buffer-hook)
2861
2862 (mouse-minibuffer-check start-event)
2863 (setq mouse-selection-click-count-buffer (current-buffer))
2864 (push-mark (posn-point (event-end start-event)))
2865
2866 (let* ((scroll-margin 0) ; Avoid margin scrolling (Bug#9541).
2867 (original-window (selected-window))
2868 ;; We've recorded what we needed from the current buffer and
2869 ;; window, now let's jump to the place of the event, where things
2870 ;; are happening.
2871 ;(_ (mouse-set-point start-event)) ; ian: commented, replaced
2872 (echo-keystrokes 0)
2873 (start-posn (event-start start-event))
2874 (start-point (posn-point start-posn))
2875 (start-window (posn-window start-posn))
2876 (start-window-start (window-start start-window))
2877 (start-hscroll (window-hscroll start-window))
2878 (bounds (window-edges start-window))
2879 (make-cursor-line-fully-visible nil)
2880 (top (nth 1 bounds))
2881 (bottom (if (window-minibuffer-p start-window)
2882 (nth 3 bounds)
2883 ;; Don't count the mode line.
2884 (1- (nth 3 bounds))))
2885 (click-count (1- (event-click-count start-event)))
2886 ;; Suppress automatic hscrolling, because that is a nuisance
2887 ;; when setting point near the right fringe (but see below).
2888 (auto-hscroll-mode-saved auto-hscroll-mode)
2889 (auto-hscroll-mode nil)
2890 moved-off-start event end end-point)
2891
2892 (setq mouse-selection-click-count click-count)
2893 ;; In case the down click is in the middle of some intangible text,
2894 ;; use the end of that text, and put it in START-POINT.
2895 (if (< (mark) start-point) ; ian: change point to the mark
2896 (set-mark start-point)
2897 (visible-mark-move-overlays))
2898 (setq start-point (mark))
2899
2900 (delete-overlay mouse-hi-ov) ; ian, added this.
2901
2902 ;; Activate the region, using `mouse-start-end' to determine where
2903 ;; to put point and mark (e.g., double-click will select a word).
2904 (let ((range (mouse-start-end start-point start-point click-count)))
2905 (set-mark (nth 1 range)))
2906 (visible-mark-move-overlays)
2907
2908
2909 ;; Track the mouse until we get a non-movement event.
2910 (track-mouse
2911
2912 (while (progn
2913 (setq event (read-event))
2914 (or (mouse-movement-p event)
2915 (memq (car-safe event) '(switch-frame select-window))))
2916 (unless (memq (car-safe event) '(switch-frame select-window))
2917
2918 ;; Automatic hscrolling did not occur during the call to
2919 ;; `read-event'; but if the user subsequently drags the
2920 ;; mouse, go ahead and hscroll.
2921 (let ((auto-hscroll-mode auto-hscroll-mode-saved))
2922 (redisplay))
2923 (setq end (event-end event)
2924 end-point (posn-point end))
2925 ;; Note whether the mouse has left the starting position.
2926
2927 (unless (eq end-point start-point)
2928 (setq moved-off-start t))
2929 (if (and (eq (posn-window end) start-window)
2930 (integer-or-marker-p end-point))
2931 (mouse3-range-mark start-point end-point click-count); ian, set mark
2932
2933 ; do scrolling if needed
2934 (let ((mouse-row (cdr (cdr (mouse-position)))))
2935 (cond
2936 ((null mouse-row))
2937 ((< mouse-row top)
2938 (mouse-scroll-subr start-window (- mouse-row top)
2939 nil start-point))
2940 ((>= mouse-row bottom)
2941 (mouse-scroll-subr start-window (1+ (- mouse-row bottom))
2942 nil start-point))))))))
2943
2944 ;; Handle the terminating event if possible.
2945 (when (consp event)
2946 ;; Ensure that point is on the end of the last event.
2947 (when (and (setq end-point (posn-point (event-end event)))
2948 (eq (posn-window end) start-window)
2949 (integer-or-marker-p end-point)
2950 (/= start-point end-point))
2951 ;(mouse--drag-set-mark-and-point start-point ; ian, set mark
2952 ;end-point click-count))
2953 (mouse3-range-mark start-point end-point click-count)); ian, set mark
2954
2955 ;; Find its binding.
2956 (let* ((fun (key-binding (vector (car event))))
2957 (do-multi-click (and (> (event-click-count event) 0)
2958 (functionp fun)
2959 (not (memq fun '(mouse3-set-mark))))))
2960 (if (and (/= end-point start-point)
2961 (not do-multi-click))
2962
2963 ;; If point has moved, finish the drag.
2964 (let* (last-command this-command)
2965 (and mouse-drag-copy-region
2966 do-mouse-drag-region-post-process
2967 (let (deactivate-mark)
2968 (copy-region-as-kill (mark) (point)))))
2969
2970 ;; Otherwise, run binding of terminating up-event.
2971 (when do-multi-click
2972 (set-mark start-point)) ; ian, change this. why?
2973 (visible-mark-move-overlays)
2974
2975
2976 (when (and (functionp fun)
2977 (= start-hscroll (window-hscroll start-window))
2978 ;; Don't run the up-event handler if the window
2979 ;; start changed in a redisplay after the
2980 ;; mouse-set-point for the down-mouse event at
2981 ;; the beginning of this function. When the
2982 ;; window start has changed, the up-mouse event
2983 ;; contains a different position due to the new
2984 ;; window contents, and point is set again.
2985 (or end-point
2986 (= (window-start start-window)
2987 start-window-start)))
2988
2989 (push event unread-command-events)))))))
2990
2991 #+end_src
2992
2993
2994
2995
2996
2997 * org mode
2998
2999 #+begin_src emacs-lisp
3000
3001 ;; todo work on org-cycle-emulate-tab
3002
3003 ;; todo, this doesn't work for a non-standard keybind
3004 ;;(setq org-special-ctrl-k t)
3005
3006 ;; todo, generally fix org mode keys
3007 ;; todo, org-mark-element, unbdind from M-h, bind to mark defun key
3008
3009 (org-babel-do-load-languages
3010 'org-babel-load-languages
3011 '((emacs-lisp . t)
3012 (sh . t)))
3013
3014 ;; make shell work like interactive bash shell
3015 (setq org-babel-default-header-args:sh
3016 '((:results . "output") (:shebang . "#!/bin/bash -l")))
3017
3018 ;; my patch to output stderr
3019 (setq org-babel-use-error-buffer nil)
3020
3021 ;
3022 ;; org-mode manual suggests these, but I haven't used them.
3023 ;;(global-set-key "\C-cl" 'org-store-link)
3024 ;;(global-set-key "\C-ca" 'org-agenda)
3025 ;; this got in the way of a haskell mode command
3026 ;;(global-set-key "\C-cb" 'org-iswitchb)
3027
3028
3029
3030 ;; org-src-tab-acts-natively t ; broken option. using next instead, todo fix
3031
3032 (setq org-src-fontify-natively t ; make babel blocks nice
3033 org-adapt-indentation nil
3034 org-src-preserve-indentation t
3035 ;; The most basic logging is to keep track of when a TODO item was finished.
3036 org-log-done 'time
3037 ;; use a drawer to keep the logs tidy
3038 org-log-into-drawer t
3039 org-extend-today-until 0
3040 org-startup-truncated nil
3041 org-clock-persist t
3042 org-clock-mode-line-total 'today
3043 ;; global STYLE property values for completion
3044 org-global-properties (quote (("STYLE_ALL" . "habit")))
3045 org-special-ctrl-a/e t ;; home and end work special in headlines
3046 org-completion-use-ido t
3047 org-catch-invisible-edits 'smart)
3048
3049 ;; non universally recommended settings
3050 (setq
3051 org-default-notes-file (concat org-directory "/a/t.org")
3052 org-agenda-files (quote ("/a/t.org"))
3053 org-mobile-directory "/p/org-mobile"
3054 org-mobile-inbox-for-pull "/p/from-mobile.org"
3055 org-directory "/p")
3056
3057 ;; modeilne populated from (org-clock-get-clocked-time)
3058 ;; which is populated from the var org-clock-total-time
3059 ;; which is populated by a function which starts from (org-clock-get-sum-start)
3060 ;;
3061
3062 (org-clock-persistence-insinuate)
3063
3064
3065 (defun time-to-org-day (time)
3066 (round (time-to-number-of-days
3067 (time-subtract time (list 0 (* 3600 org-extend-today-until) 0)))))
3068
3069
3070 (defun my-org-confirm-babel-evaluate (lang body)
3071 (not (or (string= (buffer-file-name) "/a/t.org")
3072 (string= (buffer-file-name) "/home/ian/.emacs.d/my-init.org")
3073 )))
3074 (setq org-confirm-babel-evaluate 'my-org-confirm-babel-evaluate)
3075
3076
3077 (defun org-time-stamp-with-time (arg)
3078 (interactive "P")
3079 ;; '(4) is the argument passed by universal prefix
3080 (org-time-stamp (if arg arg '(4)) t))
3081
3082 (defun ian-org-work-time ()
3083 (interactive)
3084 (save-excursion
3085 (set-buffer "t.org")
3086 (goto-char (org-find-entry-with-id "ian-identifier-1"))
3087 (org-clock-in)))
3088
3089 (defun ian-org-idle-time ()
3090 (interactive)
3091 (save-excursion
3092 (goto-char (org-find-entry-with-id "ian-identifier-2"))
3093 (set-buffer "t.org")
3094 (org-clock-in)))
3095
3096
3097 ;; use org-publish-current-project with a project file open
3098 (setq org-publish-project-alist
3099 '(("org"
3100 :base-directory "/a/h/src"
3101 :publishing-directory "/a/h/output"
3102 :base-extension "org"
3103 ;;:publishing-function org-org-publish-to-org
3104 :publishing-function org-html-publish-to-html
3105 :preserve-breaks t
3106 :html-postamble "Everything here is <a rel=\"license\"
3107 href=\"http://creativecommons.org/licenses/by-sa/4.0/\"><img
3108 alt=\"Creative Commons License\" style=\"border-width:0\"
3109 src=\"http://i.creativecommons.org/l/by-sa/4.0/80x15.png\" /></a>"
3110 :html-head "<link rel=\"stylesheet\"
3111 href=\"style.css\"
3112 type=\"text/css\"/>"
3113 :htmlized-source t)
3114 ("othersrc"
3115 :base-directory "/a/h/src"
3116 :base-extension "css\\|el\\|"
3117 :publishing-directory "/a/h/output"
3118 :publishing-function org-publish-attachment)
3119 ("other"
3120 :base-directory "/a/h/other"
3121 :base-extension ".*"
3122 :publishing-directory "/a/h/output"
3123 :publishing-function org-publish-attachment)))
3124 ;; default is xhtml-strict. don't really care, but this is more common
3125 (setq org-html-doctype "html4-strict")
3126
3127 ;; this is needed for worg
3128 ;; todo: for my own site, I need to define the css in a separate file
3129 ;; in order to use this setting. see the variable help for info
3130 (setq org-export-htmlize-output-type t)
3131
3132
3133 ;; based on http://stackoverflow.com/questions/3758139/variable-pitch-for-org-mode-fixed-pitch-for-tables
3134 ;; keywords: proportional font, monospace
3135 (add-hook 'fundamental-mode-hook 'variable-pitch-mode)
3136 (add-hook 'text-mode-hook 'variable-pitch-mode)
3137 (set-face-attribute 'org-table nil :family (face-attribute 'fixed-pitch :family))
3138 (set-face-attribute 'org-code nil :family (face-attribute 'fixed-pitch :family))
3139 (set-face-attribute 'org-formula nil :family (face-attribute 'fixed-pitch :family))
3140 (set-face-attribute 'org-link nil :family (face-attribute 'fixed-pitch :family))
3141 (set-face-attribute 'org-block nil :family (face-attribute 'fixed-pitch :family))
3142 (set-face-attribute 'org-block-background nil :family (face-attribute 'fixed-pitch :family))
3143 (set-face-attribute 'org-date nil :family (face-attribute 'fixed-pitch :family))
3144
3145
3146 (defun remove-org-binds ()
3147 (define-key org-mode-map (kbd "<M-return>") nil)
3148 (define-key org-mode-map (kbd "C-'") nil)
3149 (define-key org-mode-map (kbd "C-y") nil)
3150 (define-key org-mode-map (kbd "<C-return>") nil)
3151 (define-key org-mode-map (kbd "<C-M-kp-enter>") nil)
3152 (define-key org-mode-map (kbd "C-,") nil)
3153 (define-key org-mode-map (kbd "C-M-m") nil)
3154 (define-key org-mode-map (kbd "C-k") nil)
3155 (define-key org-mode-map (kbd "C-j") nil)
3156 (define-key org-mode-map (kbd "C-M-i") nil)
3157 (define-key org-mode-map (kbd "C-M-t") nil)
3158 (define-key org-mode-map (kbd "M-a") 'nil)
3159 (define-key org-mode-map (kbd "C-a") nil)
3160 (define-key org-mode-map (kbd "M-e") nil)
3161 (define-key org-mode-map (kbd "C-e") nil)
3162 (define-key org-mode-map (kbd "C-3") nil)
3163 (define-key org-mode-map (kbd "<M-left>") nil)
3164 (define-key org-mode-map (kbd "<M-right>") nil)
3165 (define-key org-mode-map (kbd "<S-return>") nil)
3166 (define-key org-mode-map (kbd "<tab>") nil)
3167 (define-key org-mode-map (kbd "<C-S-down>") nil)
3168 (define-key org-mode-map (kbd "<C-S-up>") nil)
3169 (define-key org-mode-map (kbd "<S-down>") nil)
3170 (define-key org-mode-map (kbd "<S-up>") nil)
3171 (define-key org-mode-map "\t" nil))
3172 (add-hook 'org-mode-hook 'remove-org-binds)
3173
3174 #+end_src
3175
3176
3177 * org drill
3178
3179
3180 #+begin_src emacs-lisp :tangle no
3181
3182 (setq
3183 ;; account actual time, not just scheduled time
3184 org-drill-adjust-intervals-for-early-and-late-repetitions-p t
3185
3186 ;; still show leeches, but warn
3187 org-drill-leech-method (quote warn)
3188 ;; increased from default 20
3189 org-drill-maximum-duration 60
3190 ;; especially when starting, I want to drill hard
3191 org-drill-maximum-items-per-session nil
3192 ;; don't prompt to save buffer, auto-save will do that
3193 org-drill-save-buffers-after-drill-sessions-p nil
3194 ;; this one deals with varying difficulty items better
3195 ;; sm2 is similar, but more simplistic
3196 org-drill-spaced-repetition-algorithm (quote simple8)
3197 )
3198 #+end_src
3199 ;; todo, make the prompting text reflect this number.
3200 ;; org-drill-failure-quality
3201
3202 * os specific settings
3203
3204 disabled cuz I have none yet
3205 #+begin_src emacs-lisp :tangle no
3206 (cond ((eq system-type 'darwin))
3207 ((eq system-type 'gnu/linux))
3208 ((eq system-type 'windows-nt))
3209 (t ))
3210 #+end_src
3211
3212
3213 * prog-mode-defaults
3214
3215 #+begin_src emacs-lisp
3216
3217
3218 (defun prog-mode-defaults ()
3219 "Default coding hook, useful with any programming language."
3220 ;; so that I can do completion before the dialog pops up
3221 (local-set-key (kbd "<tab>") 'auto-complete)
3222 ;; todo, this is causing error message on loading file, prolly not working
3223 ;;(flycheck-mode +1)
3224 (setq ac-sources (delq 'ac-source-dictionary ac-sources))
3225 (highlight-symbol-mode)
3226 (make-local-variable 'column-number-mode)
3227 (set (make-local-variable 'comment-auto-fill-only-comments) t)
3228 (auto-fill-mode t)
3229 (column-number-mode t)
3230 (turn-on-smartparens-mode)
3231
3232 ;; prettify lambdas
3233 (font-lock-add-keywords
3234 nil `(("(\\(lambda\\>\\)"
3235 (0 (progn (compose-region (match-beginning 1) (match-end 1)
3236 ,(make-char 'greek-iso8859-7 107))
3237 nil))))))
3238 (add-hook 'prog-mode-hook 'prog-mode-defaults)
3239
3240 ;; enable flyspell in prog mode. text mode is handled
3241 (add-hook 'prog-mode-hook 'flyspell-prog-mode)
3242
3243
3244
3245 #+end_src
3246
3247 ** yank auto-indent
3248 #+begin_src emacs-lisp
3249 ;; automatically indenting yanked text if in programming-modes
3250 (defvar yank-indent-modes
3251 '(LaTeX-mode TeX-mode)
3252 "Modes in which to indent regions that are yanked (or yank-popped).
3253 Only modes that don't derive from `prog-mode' should be listed here.")
3254
3255 (defvar yank-indent-blacklisted-modes
3256 '(python-mode slim-mode haml-mode)
3257 "Modes for which auto-indenting is suppressed.")
3258
3259 (defvar yank-advised-indent-threshold 2000
3260 "Threshold (# chars) over which indentation does not automatically occur.")
3261
3262 (defun yank-advised-indent-function (beg end)
3263 "Do indentation, as long as the region isn't too large."
3264 (if (<= (- end beg) yank-advised-indent-threshold)
3265 (indent-region beg end nil)))
3266
3267 (defadvice yank (after yank-indent activate)
3268 "If current mode is one of 'yank-indent-modes,
3269 indent yanked text (with prefix arg don't indent)."
3270 (if (and (not (ad-get-arg 0))
3271 (not (member major-mode yank-indent-blacklisted-modes))
3272 (or (derived-mode-p 'prog-mode)
3273 (member major-mode yank-indent-modes)))
3274 (let ((transient-mark-mode nil))
3275 (yank-advised-indent-function (region-beginning) (region-end)))))
3276
3277 (defadvice yank-pop (after yank-pop-indent activate)
3278 "If current mode is one of 'yank-indent-modes,
3279 indent yanked text (with prefix arg don't indent)."
3280 (if (and (not (ad-get-arg 0))
3281 (not (member major-mode yank-indent-blacklisted-modes))
3282 (or (derived-mode-p 'prog-mode)
3283 (member major-mode yank-indent-modes)))
3284 (let ((transient-mark-mode nil))
3285 (yank-advised-indent-function (region-beginning) (region-end)))))
3286
3287 #+end_src
3288
3289
3290 * shell mode
3291 #+begin_src emacs-lisp
3292 ;; avoid stupid git crap like "warning, terminal not fully functional"
3293 (setenv "PAGER" "cat")
3294 ;; don't store successive duplicates in comint command history
3295 (setq comint-input-ignoredups t)
3296
3297 (defun add-mode-line-dirtrack ()
3298 (add-to-list 'mode-line-buffer-identification
3299 '(:propertize (" " default-directory " ") face dired-directory)))
3300 (add-hook 'shell-mode-hook 'add-mode-line-dirtrack)
3301
3302
3303 ;; don't fully understand it, but it works.
3304 ;; http://www.emacswiki.org/emacs/ShellDirtrackByProcfs
3305 (defun track-shell-directory/procfs ()
3306 (shell-dirtrack-mode 0)
3307 (add-hook 'comint-preoutput-filter-functions
3308 (lambda (str)
3309 (prog1 str
3310 (when (string-match comint-prompt-regexp str)
3311 (cd (file-symlink-p
3312 (format "/proc/%s/cwd" (process-id
3313 (get-buffer-process
3314 (current-buffer)))))))))
3315 nil t))
3316 (setq comint-buffer-maximum-size 100000)
3317 (add-to-list 'comint-output-filter-functions 'comint-truncate-buffer)
3318 (defun new-shell ()
3319 (interactive)
3320 (shell (generate-new-buffer-name "*shell*")))
3321 ;;
3322 (defun shell-wrap (prefix)
3323 "wrap the shell function, automatically generate a new name for a prefix arg"
3324 (interactive "P")
3325 (if prefix
3326 (new-shell)
3327 (shell)))
3328
3329 (add-hook 'shell-mode-hook 'track-shell-directory/procfs)
3330 #+end_src
3331 * smartparens
3332 the melpa git version had a catastrophic bug I reported.
3333 downgraded to marmalade version and everything is working fine.
3334 #+begin_src emacs-lisp
3335 (require 'smartparens-config)
3336 (show-smartparens-global-mode t)
3337
3338
3339 (defun gp/sp/pair-on-newline-and-indent (id action context)
3340 "Open a new brace or bracket expression, with relevant newlines and indent. "
3341 (save-excursion
3342 (newline)
3343 (indent-according-to-mode))
3344 (indent-according-to-mode))
3345
3346 ;; when opening a pair, and then inserting a newline, push the closing pair to another newline
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>"))))
3350 (sp-pair "[" nil :post-handlers
3351 '(:add ((lambda (id action context)
3352 (gp/sp/pair-on-newline-and-indent id action context)) (kbd "<return>"))))
3353
3354
3355 ;; in my version, this is not a pairing.
3356 ;; not sure if it is in a future version since I reverted to marmalade
3357 ;; Don't need c-comments in strings -- they frustrate filename globs
3358 ;; (sp-pair "/*" nil :unless '(sp-in-string-p))
3359
3360 ;; Don't need quotes to pair next to words
3361 (sp-pair "\"" nil :unless '(sp-point-before-word-p sp-point-after-word-p))
3362 (sp-pair "'" nil :unless '(sp-point-before-word-p sp-point-after-word-p))
3363
3364
3365 ;; todo, testout these mode specific settings from graphene.
3366 ;; Ruby-specific pairs and handlers
3367 (require 'smartparens-ruby)
3368
3369 ;; Markdown
3370 (sp-local-pair '(markdown-mode gfm-mode) "*" "*"
3371 :unless '(sp-in-string-p)
3372 :actions '(insert wrap))
3373
3374 ;; Except in HTML
3375 (sp-local-pair 'html-mode "\"" nil :unless '(:rem sp-point-after-word-p))
3376 ;; CoffeeScript PyStrings
3377 (push 'coffee-mode sp-autoescape-string-quote-if-empty)
3378
3379
3380
3381 #+end_src
3382 * smex
3383 todo; check out smex-show-unbound-commands shows frequently used commands that have no key bindings.
3384 #+begin_src emacs-lisp
3385 ; these must be before smex-initialize
3386 (setq
3387 smex-save-file "~/.emacs.d/.smex-items")
3388
3389 (smex-initialize)
3390 #+end_src
3391 * speedbar
3392 (sr-speedbar-close)
3393 (sr-speedbar-open)
3394
3395 ** todo, disabled cuz of broken package
3396 #+begin_src emacs-lisp :tangle no
3397 (require 'sr-speedbar)
3398 (setq speedbar-hide-button-brackets-flag t ;; didn't notice a diff
3399 speedbar-file-unshown-regexp "flycheck-.*"
3400 sr-speedbar-width 40
3401 sr-speedbar-width-x 40
3402 sr-speedbar-auto-refresh nil
3403 sr-speedbar-skip-other-window-p t
3404 sr-speedbar-right-side nil
3405 speedbar-hide-button-brackets-flag nil)
3406 #+end_src
3407 * spell correction
3408 #+begin_src emacs-lisp
3409 (setq
3410 ispell-program-name "hunspell"
3411 ispell-silently-savep t) ; don't prompt to save personal dictionary
3412
3413 (require 'rw-hunspell)
3414 #+end_src
3415 rw-hunspell sets up hunspell dictionary automagically.
3416
3417
3418 Rant: Hunspell SHOULD be standard. its used by firefox and openoffice and
3419 osx. In contrast, the first few words I added to aspell dictionary were
3420 "emacs" "customizable" and "timestamp". Hunspell already has those,
3421 thank god.
3422
3423 ispell-personal-dictionary does not document where the hunspell
3424 dictionary goes by default, but it is ~/.hunspell_en_US for me
3425
3426
3427 * tex
3428 #+begin_src emacs-lisp
3429 (setq-default TeX-PDF-mode t) ; use pdf
3430
3431 ; more sensible defaults based on info manual quickstart
3432 (setq TeX-auto-save t)
3433 (setq TeX-parse-self t)
3434
3435
3436 #+end_src
3437 * undo tree
3438 #+begin_src emacs-lisp
3439
3440 ;; undo-tree checks for minor modes which override
3441 ;; its minor mode keymap, and sets global keybinds if
3442 ;; that happens. this will prevent that, but I have no
3443 ;; reason to do that, so it is commented.
3444 ;; (defun undo-tree-overridden-undo-bindings-p () nil)
3445
3446 ;; todo, send patch undo-tree-visualize should scroll with the scroll key, instead of just pgup pgdn (aka next/prior)
3447 (global-undo-tree-mode)
3448 ;; disabled due to bug, something like unknown entry in undo tree canary
3449 ;; (setq undo-tree-auto-save-history t)
3450 (setq undo-outer-limit 100000000 ; per undo command
3451 undo-limit 500000000 ; undo history limit
3452 undo-strong-limit 600000000) ; undo history limit plus some extra
3453
3454
3455 #+end_src
3456
3457 * visible mark mode
3458
3459 these colors were better for dark theme
3460 #+begin_src emacs-lisp :tangle no
3461
3462
3463
3464 (defface visible-mark-face1
3465 '((((type tty) (class mono)))
3466 (t (:background "LimeGreen"))) "")
3467 (defface visible-mark-face2
3468 '((((type tty) (class mono)))
3469 (t (:background "red4"))) "")
3470 (defface visible-mark-forward-face1
3471 '((((type tty) (class mono)))
3472 (t (:background "dark magenta"))) "")
3473 (defface visible-mark-active
3474 '((((type tty) (class mono)))
3475 (t (:background "gold"))) "")
3476 (defface mouse-cursor-face
3477 '((((type tty) (class mono)))
3478 (t (:background "DeepPink1"))) "")
3479
3480 #+end_src
3481
3482
3483 #+begin_src emacs-lisp
3484
3485 (add-to-list 'load-path "~/.emacs.d/src/visible-mark")
3486
3487 ;; since it is not easy to change the mark overlay priority, I change this one.
3488 (setq show-paren-priority 999)
3489
3490
3491 (defface visible-mark-active
3492 '((((type tty) (class mono)))
3493 (t (:background "magenta"))) "")
3494
3495
3496
3497 (defface mouse-cursor-face
3498 '((((type tty) (class mono)))
3499 (t (:background "DeepPink1"))) "")
3500
3501
3502 (require 'visible-mark)
3503
3504 (setq visible-mark-faces '(visible-mark-face1 visible-mark-face2))
3505 (setq visible-mark-forward-faces '(visible-mark-forward-face1))
3506
3507
3508 ; highlight the last 2 marks
3509 (setq visible-mark-max 2)
3510 ; highlight 1 forward mark
3511 (setq visible-mark-forward-max 1)
3512 ; globally activate visible-mark-mode
3513 (global-visible-mark-mode +1)
3514
3515
3516 ;; todo, it doesn't seem to be exposed in elisp, but it would be nice
3517 ;; if I could define overlay faces to use inverse foreground color
3518
3519
3520 #+end_src
3521
3522 #+RESULTS:
3523 : t
3524
3525
3526 * key binds. keep at end of file
3527 this should come at the end because it depends on key maps being
3528 created in earlier sections.
3529
3530 ** emacs keys notes
3531 commands not needed in ido mode and their replacement in ido mode
3532 spell check fix -> use current pattern and start new one
3533 narrow -> create subdirectory
3534 org-cycle -> M-s search recently used directory
3535 vert split Window -> create file instead of select match
3536 delete-other-windows -> open dired buffer
3537 delete current window -> delete buffer/file
3538 find file -> search within all subdirectories
3539
3540 forward/back error
3541
3542 buffer select -> toggle find file / buffer
3543 up/down -> next/previous history
3544 forward/back -> ido-forward/back
3545
3546
3547 right keyboard attributes: movement, involve typing words
3548 left keyboard attributes: non-typing universal non-movement
3549
3550
3551
3552
3553 todo
3554 fix global unpop mark ring
3555 setup helm
3556 learn cedet and projectile and helm
3557 setup key for pop-global-mark
3558 try out C-M-\ indent region
3559 set quoted insert to some obscure keybind
3560 make currently overrided M-u uppercase word into something obscure
3561 remember mode
3562 bind shell-command to something better
3563 investigate tags
3564 investigate keys in isearch mode and find file mode
3565 try out occur. M-s o
3566 investigate programming modes. M-g n/b next/previous error. gdb?
3567 investigate org mode keys
3568 learn version control
3569 learn mail
3570 check out imenu
3571 bind capitalize-word to something obscure
3572 sentance/paragraph movement/marking should be swapped with sexp/paren movement based on mode
3573 bind fill-paragraph to something obscure
3574 setup linewise paste
3575 install magit (git control)
3576 magpie expansion provides a completion key for acronym expansion based on buffer text
3577 learn ediff
3578 universal google
3579 figure out auto-indent
3580 learn eshell and prelude settings for it
3581 combine register prefix and c-x prefix
3582 note: remember to think of mouse & foot pedals
3583 commands to change: select other window: C-x o.
3584 ** prefix keybind changes
3585 #+begin_src emacs-lisp
3586
3587
3588 ; prefix key binds.
3589 ; good info http://www.masteringemacs.org/articles/2011/02/08/mastering-key-bindings-emacs/
3590 ; rebinding the prefix keys are tricky. apparently, some modes ignore any redefinition of a prefix key and use it explicitly,
3591 ; so you have to dig into their key maps and redo things.
3592 ; There are 2 simpler alternatives which have their own downsides.
3593 ; One is cua mode, which I do not like because it smashes 2 keybinds onto 1 and limits what you can do.
3594 ; The other is keyboard-translate, which translates the key presses before anything else.
3595 ; The downside is that it translates them when you aren't using them as a prefix.
3596 ; Since the swaps I'm using are all very accessible, the only downside is some mental jugling when reading docs etc about these keybinds.
3597
3598 ; I've seen this as an another suggestion, it was a total fail. The prefix command took over both keys.
3599 ; (define-key key-translation-map [f12] "\C-c")
3600 ; (define-key key-translation-map "\C-c" [left])
3601
3602
3603 ;idea to remove the hook later since it is only needed at startup.
3604 ; did not work however, and there is not a real need to fix it, so I did not investigate
3605 ;(defun removeSwapHook ()
3606 ; (remove-hook 'buffer-list-update-hook 'myKeySwap)
3607 ; (remove-hook 'change-major-mode-hook 'removeSwapHook))
3608 ;(add-hook 'change-major-mode-hook 'removeSwapHook)
3609
3610
3611 ; went through almost all the relevant standard hooks,
3612 ; this overcomes a known bug that (keyboard-translate) does not get applied when running emacs daemon
3613 (add-hook 'buffer-list-update-hook (lambda () (interactive)
3614 (keyboard-translate ?\C-x ?\C-s)
3615 (keyboard-translate ?\C-s ?\C-x)
3616 (keyboard-translate ?\C-c ?\C-d)
3617 (keyboard-translate ?\C-d ?\C-c)))
3618
3619
3620
3621 ; these all don't work
3622 ; don't know why this doesn't error but reversing the keys does
3623 ;(keyboard-translate ?\t ?\M-\t)
3624 ;(keyboard-translate [M-tab] [tab])
3625 ; from what i can tell, it wants to use a keyboard-translate-table,
3626 ; which is a char table, which is a vector indexed by chars,
3627 ; and mod+tab is not a char (it has too many bits), it is an integer
3628 ; it actually says it can hold vectors or strings, but that it is obsolete to do so
3629 ;(characterp ?\M-a)
3630 ;(characterp ?\C-a)
3631
3632
3633
3634 #+end_src
3635
3636 ** named commands
3637 *** tramp sudo
3638 /ssh:host|sudo:host:
3639 when in the same session, you can then do:
3640 /sudo:root@host:
3641
3642 *** org insert table row
3643 [org-shiftmetadown/up]
3644 *** toggle line continuation / truncation / wrap :drill:
3645 SCHEDULED: <2014-04-07 Mon>
3646 :PROPERTIES:
3647 :ID: 5f3f567a-0926-4d92-81f3-4e4cd6070af2
3648 :DRILL_LAST_INTERVAL: 28.6736
3649 :DRILL_REPEATS_SINCE_FAIL: 5
3650 :DRILL_TOTAL_REPEATS: 5
3651 :DRILL_FAILURE_COUNT: 1
3652 :DRILL_AVERAGE_QUALITY: 3.4
3653 :DRILL_EASE: 2.666
3654 :DRILL_LAST_QUALITY: 4
3655 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:37>
3656 :END:
3657 [toggle-truncate-lines]
3658 *** auto-save on/off :drill:
3659 SCHEDULED: <2014-05-13 Tue>
3660 :PROPERTIES:
3661 :ID: 462f859d-1a06-46a3-ac72-6ffe5b4417c9
3662 :DRILL_LAST_INTERVAL: 71.5839
3663 :DRILL_REPEATS_SINCE_FAIL: 4
3664 :DRILL_TOTAL_REPEATS: 4
3665 :DRILL_FAILURE_COUNT: 0
3666 :DRILL_AVERAGE_QUALITY: 4.75
3667 :DRILL_EASE: 4.85
3668 :DRILL_LAST_QUALITY: 5
3669 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:11>
3670 :END:
3671 [my-as-on/my-as-off]
3672 *** toggle menu bar
3673 [menu-bar-mode]
3674 *** show abbreviations :drill:
3675 SCHEDULED: <2014-03-24 Mon>
3676 :PROPERTIES:
3677 :ID: 479a2ced-b952-4088-a6e3-862cd37693a9
3678 :DRILL_LAST_INTERVAL: 32.7466
3679 :DRILL_REPEATS_SINCE_FAIL: 4
3680 :DRILL_TOTAL_REPEATS: 4
3681 :DRILL_FAILURE_COUNT: 0
3682 :DRILL_AVERAGE_QUALITY: 4.0
3683 :DRILL_EASE: 3.204
3684 :DRILL_LAST_QUALITY: 4
3685 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 18:03>
3686 :END:
3687 [list-abbrevs]
3688
3689 *** rename-file-and-buffer
3690 *** ediff-buffers
3691 *** refill-mode
3692 automatically balance a paragraph with newlines
3693 *** executable-make-buffer-file-executable-if-script-p
3694 make a script executable
3695 *** (setq lazy-highlight-cleanup nil)
3696 *** auto-revert-tail-mode
3697 tail a file
3698 *** trash-file-and-buffer
3699 #+begin_src emacs-lisp
3700 (defun trash-file-and-buffer ()
3701 "Removes file connected to current buffer and kills buffer."
3702 (interactive)
3703 (let ((filename (buffer-file-name))
3704 (buffer (current-buffer))
3705 (name (buffer-name)))
3706 (if (not (and filename (file-exists-p filename)))
3707 (error "Buffer '%s' is not visiting a file!" name)
3708 (delete-file filename)
3709 (kill-buffer buffer)
3710 (message "File '%s' successfully removed" filename))))
3711
3712 #+end_src
3713 *** what-line
3714 *** linum-mode
3715 line numbers
3716
3717 *** sgml-pretty-print
3718 format xml in nxml-mode
3719 *** visual-line-mode
3720 toggle word wrap.
3721 ** compound commands
3722 *** C-xc
3723 :PROPERTIES:
3724 :ID: d0802daa-9281-4a9f-ab4a-47d9f7ef7cfd
3725 :END:
3726 exit
3727 *** [C-x x] :drill:
3728 SCHEDULED: <2014-03-24 Mon>
3729 :PROPERTIES:
3730 :ID: 2f7d1353-3c20-4e00-95ea-1f84c4d87fc1
3731 :DRILL_LAST_INTERVAL: 32.7466
3732 :DRILL_REPEATS_SINCE_FAIL: 4
3733 :DRILL_TOTAL_REPEATS: 4
3734 :DRILL_FAILURE_COUNT: 0
3735 :DRILL_AVERAGE_QUALITY: 4.0
3736 :DRILL_EASE: 3.204
3737 :DRILL_LAST_QUALITY: 4
3738 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 18:03>
3739 :END:
3740 save file
3741 *** [C-x e] :drill:
3742 SCHEDULED: <2014-03-27 Thu>
3743 :PROPERTIES:
3744 :ID: b802eeb8-ddcd-4778-844a-b6e737b54d7d
3745 :DRILL_LAST_INTERVAL: 50.6823
3746 :DRILL_REPEATS_SINCE_FAIL: 3
3747 :DRILL_TOTAL_REPEATS: 3
3748 :DRILL_FAILURE_COUNT: 0
3749 :DRILL_AVERAGE_QUALITY: 5.0
3750 :DRILL_EASE: 5.815
3751 :DRILL_LAST_QUALITY: 5
3752 :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:41>
3753 :END:
3754 eval last sexp
3755 *** C-x u
3756 [undo-tree-visualize]
3757 *** C-j u/U
3758 [undo-tree save/restore state via register]
3759 *** C-c -
3760 [org insert table horizontal line or create list]
3761 *** [C-x tab] :drill:
3762 SCHEDULED: <2014-03-24 Mon>
3763 :PROPERTIES:
3764 :ID: ceb701d7-3d44-4781-ae23-7309ca887a01
3765 :DRILL_LAST_INTERVAL: 32.7466
3766 :DRILL_REPEATS_SINCE_FAIL: 4
3767 :DRILL_TOTAL_REPEATS: 4
3768 :DRILL_FAILURE_COUNT: 0
3769 :DRILL_AVERAGE_QUALITY: 4.0
3770 :DRILL_EASE: 3.204
3771 :DRILL_LAST_QUALITY: 4
3772 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:50>
3773 :END:
3774 dumb indent
3775
3776 [shift-left and shift-right are default for indenting by tab stop,
3777 and they are only defined as lambdas so I copy them here
3778 to use with up and down.
3779 #+begin_src emacs-lisp
3780 ;; condition cuz emacs24 release doesn't have this yet
3781 (when (boundp 'indent-rigidly-map)
3782 (define-key indent-rigidly-map (kbd "<C-left>")
3783 (lambda (beg end) (interactive "r")
3784 (let* ((current (indent-rigidly--current-indentation beg end))
3785 (next (indent--next-tab-stop current)))
3786 (indent-rigidly beg end (- next current)))))
3787
3788 (define-key indent-rigidly-map (kbd "<C-right>")
3789 (lambda (beg end) (interactive "r")
3790 (let* ((current (indent-rigidly--current-indentation beg end))
3791 (next (indent--next-tab-stop current 'prev)))
3792 (indent-rigidly beg end (- next current))))))
3793 #+end_src
3794 ]
3795 *** C-x *
3796 [calc-dispatch]
3797 *** C-x =
3798 [point information]
3799 *** C-x d
3800 [dired]
3801 *** C-xb
3802 [ibuffer]
3803 #+begin_src emacs-lisp
3804 (global-set-key (kbd "C-x C-b") 'ibuffer)
3805 #+end_src
3806 ** gnus
3807 searching overview.
3808 3 types:
3809 ingroup searching
3810 nnir searching with notmuch, specific group (not sure if it can do multiple)
3811 search all groups with mairix
3812 *** [a]
3813 compose new message
3814 *** [C-c C-c]
3815 send message
3816 *** [s]
3817 save newsrc file, alterations to groups.
3818 *** [g]
3819 gnus refresh / get new
3820 *** [m]
3821 gnus new message
3822 *** [F]
3823 gnus quoted reply all
3824 *** [e]
3825 gnus draft edit message
3826 *** [delete]
3827 gnus delete draft
3828 #+begin_src emacs-lisp
3829 (add-hook 'gnus-startup-hook
3830 (lambda ()
3831 (define-key gnus-summary-mode-map (kbd "<delete>") 'gnus-summary-delete-article)))
3832 #+end_src
3833
3834 *** [b]
3835 mairix search
3836 #+begin_src emacs-lisp
3837 (add-hook 'gnus-startup-hook
3838 (lambda ()
3839 (define-key gnus-group-mode-map "b" 'nnmairix-search)
3840 (define-key gnus-summary-mode-map "b" 'nnmairix-search)))
3841 #+end_src
3842 *** [B m]
3843 move message, or messages in region
3844 *** [#]
3845 mark article, move with B m
3846 *** [B delete]
3847 gnus delete draft
3848 *** [/ plus x a / b]
3849 search current group (or see info manual for more groups),
3850 using the gnus native search (its slow, do a notmuch or mairix search instead)
3851 x= extra (ie. to)
3852 todo; send in patch to make author search to in sent folder
3853 a = author
3854 / = subject
3855 b = body
3856 see C-h m for a full list
3857 *** [ G G ]
3858 do a nnir notmuch search, for the group on the current line
3859 *** [ A T ]
3860 jump to thread from nnir group
3861
3862 *** [marks]
3863 ! = saved for later
3864 E = expired
3865 M-& apply process mark to a non-process mark command
3866 *** [S D e]
3867 edit as new
3868 ** message mode
3869 *** [C-ck]
3870 discard message
3871 ** notmuch
3872 *** [space]
3873 notmuch advance to next message/thread
3874
3875 ** readline / bash / .inputrc
3876 *** [M-0-9]
3877 SCHEDULED: <2014-05-13 Tue>
3878 :PROPERTIES:
3879 :ID: dac68f2e-37c2-448e-861d-0554e51f1414
3880 :DRILL_LAST_INTERVAL: 71.5839
3881 :DRILL_REPEATS_SINCE_FAIL: 4
3882 :DRILL_TOTAL_REPEATS: 4
3883 :DRILL_FAILURE_COUNT: 0
3884 :DRILL_AVERAGE_QUALITY: 4.75
3885 :DRILL_EASE: 4.85
3886 :DRILL_LAST_QUALITY: 5
3887 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:10>
3888 :END:
3889 bash digit-argument
3890
3891 removed drill from all these because I'm using emacs for shell now
3892 *** [C-2]
3893 SCHEDULED: <2014-03-15 Sat>
3894 :PROPERTIES:
3895 :ID: d2e87812-6ab7-432f-ad7c-4281c0e3b86b
3896 :DRILL_LAST_INTERVAL: 12.979
3897 :DRILL_REPEATS_SINCE_FAIL: 3
3898 :DRILL_TOTAL_REPEATS: 3
3899 :DRILL_FAILURE_COUNT: 0
3900 :DRILL_AVERAGE_QUALITY: 3.333
3901 :DRILL_EASE: 2.626
3902 :DRILL_LAST_QUALITY: 3
3903 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:00>
3904 :END:
3905 terminal X paste
3906 *** [C-3]
3907 SCHEDULED: <2014-03-15 Sat>
3908 :PROPERTIES:
3909 :ID: 3b156730-eb92-4149-b4ce-f93a9098d2b4
3910 :DRILL_LAST_INTERVAL: 12.979
3911 :DRILL_REPEATS_SINCE_FAIL: 3
3912 :DRILL_TOTAL_REPEATS: 3
3913 :DRILL_FAILURE_COUNT: 0
3914 :DRILL_AVERAGE_QUALITY: 3.333
3915 :DRILL_EASE: 2.626
3916 :DRILL_LAST_QUALITY: 3
3917 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:00>
3918 :END:
3919 terminal open file manager
3920 *** [C-q]
3921 SCHEDULED: <2014-03-12 Wed>
3922 :PROPERTIES:
3923 :ID: ed6a19de-d000-4469-9dd9-7b9e35f6c751
3924 :DRILL_LAST_INTERVAL: 2.8975
3925 :DRILL_REPEATS_SINCE_FAIL: 2
3926 :DRILL_TOTAL_REPEATS: 10
3927 :DRILL_FAILURE_COUNT: 12
3928 :DRILL_AVERAGE_QUALITY: 2.692
3929 :DRILL_EASE: 2.311
3930 :DRILL_LAST_QUALITY: 3
3931 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:33>
3932 :END:
3933 bash exchange-point-and-mark
3934
3935 *** [C-M-q]
3936 SCHEDULED: <2014-03-14 Fri>
3937 :PROPERTIES:
3938 :ID: 9827eb7e-532e-41fb-8d91-8c95c23553f5
3939 :DRILL_LAST_INTERVAL: 11.6739
3940 :DRILL_REPEATS_SINCE_FAIL: 3
3941 :DRILL_TOTAL_REPEATS: 3
3942 :DRILL_FAILURE_COUNT: 0
3943 :DRILL_AVERAGE_QUALITY: 3.333
3944 :DRILL_EASE: 2.626
3945 :DRILL_LAST_QUALITY: 4
3946 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:09>
3947 :END:
3948 quoted insert
3949 *** [C-w]
3950 SCHEDULED: <2014-04-07 Mon>
3951 :PROPERTIES:
3952 :ID: 58fea89a-def9-4aac-95d4-fdd63fde8097
3953 :DRILL_LAST_INTERVAL: 28.6736
3954 :DRILL_REPEATS_SINCE_FAIL: 5
3955 :DRILL_TOTAL_REPEATS: 5
3956 :DRILL_FAILURE_COUNT: 1
3957 :DRILL_AVERAGE_QUALITY: 3.4
3958 :DRILL_EASE: 2.666
3959 :DRILL_LAST_QUALITY: 4
3960 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:36>
3961 :END:
3962 bash kill-region
3963 *** [C-e]
3964 SCHEDULED: <2014-03-27 Thu>
3965 :PROPERTIES:
3966 :ID: 3ee7662f-3ac7-46ff-afe7-73244656d48b
3967 :DRILL_LAST_INTERVAL: 50.6823
3968 :DRILL_REPEATS_SINCE_FAIL: 3
3969 :DRILL_TOTAL_REPEATS: 3
3970 :DRILL_FAILURE_COUNT: 0
3971 :DRILL_AVERAGE_QUALITY: 5.0
3972 :DRILL_EASE: 5.815
3973 :DRILL_LAST_QUALITY: 5
3974 :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:40>
3975 :END:
3976 bash yank-last-arg
3977 *** C-r
3978 :PROPERTIES:
3979 :ID: 579a9008-0758-4ba9-a52f-175f264fe96a
3980 :END:
3981 bash history-search-backward
3982 *** [C-t]
3983 SCHEDULED: <2014-04-04 Fri>
3984 :PROPERTIES:
3985 :ID: 25e737fe-52c4-452b-ab93-037575375579
3986 :DRILL_LAST_INTERVAL: 26.2331
3987 :DRILL_REPEATS_SINCE_FAIL: 5
3988 :DRILL_TOTAL_REPEATS: 5
3989 :DRILL_FAILURE_COUNT: 1
3990 :DRILL_AVERAGE_QUALITY: 3.2
3991 :DRILL_EASE: 2.554
3992 :DRILL_LAST_QUALITY: 4
3993 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:36>
3994 :END:
3995 shell-expand-line, expand like bash does u hit enter
3996 *** [C-a]
3997 SCHEDULED: <2014-04-06 Sun>
3998 :PROPERTIES:
3999 :ID: 384b3337-3cb0-4b3b-8a1a-8ae299ae212b
4000 :DRILL_LAST_INTERVAL: 27.9921
4001 :DRILL_REPEATS_SINCE_FAIL: 5
4002 :DRILL_TOTAL_REPEATS: 5
4003 :DRILL_FAILURE_COUNT: 1
4004 :DRILL_AVERAGE_QUALITY: 3.6
4005 :DRILL_EASE: 2.802
4006 :DRILL_LAST_QUALITY: 5
4007 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:37>
4008 :END:
4009 bash comment-line
4010 *** [C-s]
4011 SCHEDULED: <2014-03-10 Mon>
4012 :PROPERTIES:
4013 :ID: 4b5c71f9-6035-4b92-bcad-e400e5e25d66
4014 :DRILL_LAST_INTERVAL: 8.225
4015 :DRILL_REPEATS_SINCE_FAIL: 3
4016 :DRILL_TOTAL_REPEATS: 7
4017 :DRILL_FAILURE_COUNT: 4
4018 :DRILL_AVERAGE_QUALITY: 2.879
4019 :DRILL_EASE: 2.399
4020 :DRILL_LAST_QUALITY: 4
4021 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 20:57>
4022 :END:
4023 bash yank-nth-arg
4024 yank $1 of last argument, or nth if prefixed with a digit argument
4025 *** [C-d]
4026 SCHEDULED: <2014-03-12 Wed>
4027 :PROPERTIES:
4028 :ID: f5da97c1-6e3c-44dd-a2f1-7dacd7f523da
4029 :DRILL_LAST_INTERVAL: 9.8132
4030 :DRILL_REPEATS_SINCE_FAIL: 3
4031 :DRILL_TOTAL_REPEATS: 7
4032 :DRILL_FAILURE_COUNT: 3
4033 :DRILL_AVERAGE_QUALITY: 3.21
4034 :DRILL_EASE: 2.559
4035 :DRILL_LAST_QUALITY: 4
4036 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:04>
4037 :END:
4038 bash undo
4039 *** [C-f]
4040 SCHEDULED: <2014-05-13 Tue>
4041 :PROPERTIES:
4042 :ID: 0f1def18-0d94-45e7-b258-f621e67cefd7
4043 :DRILL_LAST_INTERVAL: 71.5839
4044 :DRILL_REPEATS_SINCE_FAIL: 4
4045 :DRILL_TOTAL_REPEATS: 4
4046 :DRILL_FAILURE_COUNT: 0
4047 :DRILL_AVERAGE_QUALITY: 4.75
4048 :DRILL_EASE: 4.85
4049 :DRILL_LAST_QUALITY: 5
4050 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:11>
4051 :END:
4052 bash menu-complete
4053 *** [C-g]
4054 SCHEDULED: <2014-03-10 Mon>
4055 :PROPERTIES:
4056 :ID: 263e9479-de1d-4e78-8600-5a0f3a8e2dd9
4057 :DRILL_LAST_INTERVAL: 8.0608
4058 :DRILL_REPEATS_SINCE_FAIL: 3
4059 :DRILL_TOTAL_REPEATS: 8
4060 :DRILL_FAILURE_COUNT: 5
4061 :DRILL_AVERAGE_QUALITY: 2.966
4062 :DRILL_EASE: 2.439
4063 :DRILL_LAST_QUALITY: 4
4064 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:04>
4065 :END:
4066 bash edit-and-execute-command
4067 *** C-z
4068 *** C-x
4069 emacs hard to rebind
4070 looks like it actually wouldn't be that hard.
4071 possibly take the output from bind -p, make all those keys undefined.
4072 *** C-c
4073 quit/cancel
4074 *** C-v
4075 yank, aka paste
4076 *** C-M-v
4077 yank-pop
4078 *** [C-b]
4079 SCHEDULED: <2014-03-14 Fri>
4080 :PROPERTIES:
4081 :ID: 1a688c40-4bba-4053-a28b-0e1e8d3f4985
4082 :DRILL_LAST_INTERVAL: 4.9208
4083 :DRILL_REPEATS_SINCE_FAIL: 2
4084 :DRILL_TOTAL_REPEATS: 8
4085 :DRILL_FAILURE_COUNT: 4
4086 :DRILL_AVERAGE_QUALITY: 3.066
4087 :DRILL_EASE: 2.487
4088 :DRILL_LAST_QUALITY: 3
4089 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:33>
4090 :END:
4091 bash menu-complete-backward
4092 *** tab
4093 completion
4094 *** [C-tab]
4095 SCHEDULED: <2014-03-14 Fri>
4096 :PROPERTIES:
4097 :ID: 75d57537-8a32-4a18-982e-6d6f756a9ba6
4098 :DRILL_LAST_INTERVAL: 12.2744
4099 :DRILL_REPEATS_SINCE_FAIL: 3
4100 :DRILL_TOTAL_REPEATS: 3
4101 :DRILL_FAILURE_COUNT: 2
4102 :DRILL_AVERAGE_QUALITY: 3.667
4103 :DRILL_EASE: 2.855
4104 :DRILL_LAST_QUALITY: 4
4105 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:09>
4106 :END:
4107 terminal find
4108 *** [C-left/right]
4109 SCHEDULED: <2014-03-27 Thu>
4110 :PROPERTIES:
4111 :ID: 5587c07b-c003-470f-bef4-fa55f00524ff
4112 :DRILL_LAST_INTERVAL: 50.6823
4113 :DRILL_REPEATS_SINCE_FAIL: 3
4114 :DRILL_TOTAL_REPEATS: 3
4115 :DRILL_FAILURE_COUNT: 0
4116 :DRILL_AVERAGE_QUALITY: 5.0
4117 :DRILL_EASE: 5.815
4118 :DRILL_LAST_QUALITY: 5
4119 :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:41>
4120 :END:
4121 forward/backward-word
4122
4123 *** [C-u]
4124 SCHEDULED: <2014-03-19 Wed>
4125 :PROPERTIES:
4126 :ID: b5342b6b-f14f-4a6b-99d8-110fdef243f2
4127 :DRILL_LAST_INTERVAL: 24.3844
4128 :DRILL_REPEATS_SINCE_FAIL: 5
4129 :DRILL_TOTAL_REPEATS: 5
4130 :DRILL_FAILURE_COUNT: 2
4131 :DRILL_AVERAGE_QUALITY: 3.0
4132 :DRILL_EASE: 2.456
4133 :DRILL_LAST_QUALITY: 3
4134 :DRILL_LAST_REVIEWED: <2014-02-23 Sun 01:51>
4135 :END:
4136 bash backward-kill-word
4137 *** [C-i]
4138 SCHEDULED: <2014-03-14 Fri>
4139 :PROPERTIES:
4140 :ID: 6e306a04-8f21-4142-8c00-8a87a3544d6e
4141 :DRILL_LAST_INTERVAL: 11.6739
4142 :DRILL_REPEATS_SINCE_FAIL: 3
4143 :DRILL_TOTAL_REPEATS: 3
4144 :DRILL_FAILURE_COUNT: 0
4145 :DRILL_AVERAGE_QUALITY: 3.333
4146 :DRILL_EASE: 2.626
4147 :DRILL_LAST_QUALITY: 4
4148 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 20:58>
4149 :END:
4150 terminal find up
4151 [ terminal crap, duplicate of tab ]
4152 *** [C-o]
4153 SCHEDULED: <2014-03-15 Sat>
4154 :PROPERTIES:
4155 :ID: 40b6d9ce-2427-4905-b444-d6d90c5a4da4
4156 :DRILL_LAST_INTERVAL: 23.5247
4157 :DRILL_REPEATS_SINCE_FAIL: 4
4158 :DRILL_TOTAL_REPEATS: 4
4159 :DRILL_FAILURE_COUNT: 0
4160 :DRILL_AVERAGE_QUALITY: 3.5
4161 :DRILL_EASE: 2.73
4162 :DRILL_LAST_QUALITY: 3
4163 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:25>
4164 :END:
4165 bash operate-and-get-next, submit and bring up next item in history
4166 *** [C-p]
4167 SCHEDULED: <2014-03-11 Tue>
4168 :PROPERTIES:
4169 :ID: 4956027e-c5da-48de-8925-6f6b6dd98cec
4170 :DRILL_LAST_INTERVAL: 1.575
4171 :DRILL_REPEATS_SINCE_FAIL: 1
4172 :DRILL_TOTAL_REPEATS: 9
4173 :DRILL_FAILURE_COUNT: 8
4174 :DRILL_AVERAGE_QUALITY: 2.597
4175 :DRILL_EASE: 2.265
4176 :DRILL_LAST_QUALITY: 3
4177 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:38>
4178 :END:
4179 bash dabbrev-expand,
4180 complete historical command names
4181 *** C-h
4182 terminal incompatible junk
4183 *** [C-k]
4184 SCHEDULED: <2014-05-09 Fri>
4185 :PROPERTIES:
4186 :ID: f91ff161-8d8c-4f47-beb5-09f86bf774d5
4187 :DRILL_LAST_INTERVAL: 67.6174
4188 :DRILL_REPEATS_SINCE_FAIL: 4
4189 :DRILL_TOTAL_REPEATS: 4
4190 :DRILL_FAILURE_COUNT: 1
4191 :DRILL_AVERAGE_QUALITY: 4.75
4192 :DRILL_EASE: 4.85
4193 :DRILL_LAST_QUALITY: 5
4194 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:10>
4195 :END:
4196 bash kill-line, to end of line
4197 *** [C-l]
4198 SCHEDULED: <2014-05-13 Tue>
4199 :PROPERTIES:
4200 :ID: 4798acc1-4fc8-406e-bc95-8131cfa255a5
4201 :DRILL_LAST_INTERVAL: 71.5839
4202 :DRILL_REPEATS_SINCE_FAIL: 4
4203 :DRILL_TOTAL_REPEATS: 4
4204 :DRILL_FAILURE_COUNT: 0
4205 :DRILL_AVERAGE_QUALITY: 4.75
4206 :DRILL_EASE: 4.85
4207 :DRILL_LAST_QUALITY: 5
4208 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:12>
4209 :END:
4210 bash clear screen
4211 *** [C-m]
4212 SCHEDULED: <2014-03-14 Fri>
4213 :PROPERTIES:
4214 :ID: 119a0a90-9253-4131-b0c8-5aa7d8cf2259
4215 :DRILL_LAST_INTERVAL: 11.6739
4216 :DRILL_REPEATS_SINCE_FAIL: 3
4217 :DRILL_TOTAL_REPEATS: 3
4218 :DRILL_FAILURE_COUNT: 0
4219 :DRILL_AVERAGE_QUALITY: 3.333
4220 :DRILL_EASE: 2.626
4221 :DRILL_LAST_QUALITY: 4
4222 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 20:58>
4223 :END:
4224 [--------]
4225 #+begin_src emacs-lisp
4226 (add-hook 'comint-mode-hook
4227 (lambda ()
4228 (define-key comint-mode-map "\C-m" nil)))
4229
4230 #+end_src
4231 *** [C-space]
4232 SCHEDULED: <2014-03-12 Wed>
4233 :PROPERTIES:
4234 :ID: 803e2480-4e11-41d0-a261-4f5930a7f9a9
4235 :DRILL_LAST_INTERVAL: 10.0687
4236 :DRILL_REPEATS_SINCE_FAIL: 3
4237 :DRILL_TOTAL_REPEATS: 6
4238 :DRILL_FAILURE_COUNT: 1
4239 :DRILL_AVERAGE_QUALITY: 2.875
4240 :DRILL_EASE: 2.397
4241 :DRILL_LAST_QUALITY: 3
4242 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:06>
4243 :END:
4244 bash set mark
4245 *** [C-delete]
4246 SCHEDULED: <2014-03-15 Sat>
4247 :PROPERTIES:
4248 :ID: 3d0c188b-3cf0-4f0a-83c8-78f6e4040ee5
4249 :DRILL_LAST_INTERVAL: 24.4352
4250 :DRILL_REPEATS_SINCE_FAIL: 4
4251 :DRILL_TOTAL_REPEATS: 4
4252 :DRILL_FAILURE_COUNT: 0
4253 :DRILL_AVERAGE_QUALITY: 3.75
4254 :DRILL_EASE: 2.929
4255 :DRILL_LAST_QUALITY: 4
4256 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:44>
4257 :END:
4258 bash delete word
4259 ** isearch
4260 *** [C-w] :drill:
4261 SCHEDULED: <2014-03-27 Thu>
4262 :PROPERTIES:
4263 :ID: f0e2b6e2-809b-40c2-8d72-0f7e35eda9b3
4264 :DRILL_LAST_INTERVAL: 50.6823
4265 :DRILL_REPEATS_SINCE_FAIL: 3
4266 :DRILL_TOTAL_REPEATS: 3
4267 :DRILL_FAILURE_COUNT: 0
4268 :DRILL_AVERAGE_QUALITY: 5.0
4269 :DRILL_EASE: 5.815
4270 :DRILL_LAST_QUALITY: 5
4271 :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:40>
4272 :END:
4273 paste word/char under cursor into isearch
4274 *** [M-n/p] :drill:
4275 SCHEDULED: <2014-03-27 Thu>
4276 :PROPERTIES:
4277 :ID: b3692e47-458e-41a0-b2be-c5f61b4eadbd
4278 :DRILL_LAST_INTERVAL: 50.6823
4279 :DRILL_REPEATS_SINCE_FAIL: 3
4280 :DRILL_TOTAL_REPEATS: 3
4281 :DRILL_FAILURE_COUNT: 0
4282 :DRILL_AVERAGE_QUALITY: 5.0
4283 :DRILL_EASE: 5.815
4284 :DRILL_LAST_QUALITY: 5
4285 :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:41>
4286 :END:
4287 next/previous isearch history
4288 *** [C-o] :drill:
4289 SCHEDULED: <2014-03-11 Tue>
4290 :PROPERTIES:
4291 :ID: 8e36b562-7e0c-45e6-a41b-3cd96c134b33
4292 :DRILL_LAST_INTERVAL: 19.9622
4293 :DRILL_REPEATS_SINCE_FAIL: 4
4294 :DRILL_TOTAL_REPEATS: 4
4295 :DRILL_FAILURE_COUNT: 0
4296 :DRILL_AVERAGE_QUALITY: 3.5
4297 :DRILL_EASE: 2.73
4298 :DRILL_LAST_QUALITY: 4
4299 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 16:30>
4300 :END:
4301 isearch-occur
4302 Activate occur easily inside isearch
4303 [
4304 from starter-kit
4305 #+begin_src emacs-lisp
4306 (define-key isearch-mode-map (kbd "C-o")
4307 (lambda () (interactive)
4308 (let ((case-fold-search isearch-case-fold-search))
4309 (occur (if isearch-regexp
4310 isearch-string
4311 (regexp-quote isearch-string))))))
4312 #+end_src
4313 ]
4314 *** [m-r]
4315 #+begin_src emacs-lisp
4316 (defun my-isearch-toggle-regexp ()
4317 (interactive)
4318 (isearch-toggle-regexp)
4319 (cond (isearch-regexp
4320 (global-set-key (kbd "C-r") 'isearch-backward-regexp)
4321 (define-key global-map (kbd search-key) 'isearch-forward-regexp))
4322 (t
4323 (global-set-key (kbd "C-r") 'isearch-backward)
4324 (define-key global-map (kbd search-key) 'isearch-forward))))
4325 (define-key isearch-mode-map (kbd "M-r") 'my-isearch-toggle-regexp)
4326 #+end_src
4327
4328 ** icomplete
4329 *** C-. C-,
4330 icomplete-forward/backward-completions
4331
4332 ** ido
4333 *** [C-j] :drill:
4334 SCHEDULED: <2014-04-01 Tue>
4335 :PROPERTIES:
4336 :ID: 9cc3392d-00a1-4564-8c57-b418a20d9235
4337 :DRILL_LAST_INTERVAL: 22.6411
4338 :DRILL_REPEATS_SINCE_FAIL: 5
4339 :DRILL_TOTAL_REPEATS: 6
4340 :DRILL_FAILURE_COUNT: 1
4341 :DRILL_AVERAGE_QUALITY: 2.833
4342 :DRILL_EASE: 2.378
4343 :DRILL_LAST_QUALITY: 3
4344 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:34>
4345 :END:
4346 ido-find-file create file
4347 *** [//] :drill:
4348 SCHEDULED: <2014-03-27 Thu>
4349 :PROPERTIES:
4350 :ID: 18ce7d51-93ca-4d41-8e8d-1958cff9c726
4351 :DRILL_LAST_INTERVAL: 50.6823
4352 :DRILL_REPEATS_SINCE_FAIL: 3
4353 :DRILL_TOTAL_REPEATS: 3
4354 :DRILL_FAILURE_COUNT: 0
4355 :DRILL_AVERAGE_QUALITY: 5.0
4356 :DRILL_EASE: 5.815
4357 :DRILL_LAST_QUALITY: 5
4358 :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:40>
4359 :END:
4360 ido goto root
4361 *** [C-k] :drill:
4362 :PROPERTIES:
4363 :ID: af4cc865-fe0c-424b-aa5b-2097320d6fb6
4364 :DRILL_LAST_INTERVAL: 0.0
4365 :DRILL_REPEATS_SINCE_FAIL: 0
4366 :DRILL_TOTAL_REPEATS: 5
4367 :DRILL_FAILURE_COUNT: 2
4368 :DRILL_AVERAGE_QUALITY: 3.083
4369 :DRILL_EASE: 2.496
4370 :DRILL_LAST_QUALITY: 2
4371 :DRILL_LAST_REVIEWED: <2014-04-14 Mon 11:31>
4372 :END:
4373 ido kill buffer/file
4374 *** [C-d] :drill:
4375 SCHEDULED: <2014-04-04 Fri>
4376 :PROPERTIES:
4377 :ID: c93d6e0c-ae33-45aa-9610-ce33cfc406a0
4378 :DRILL_LAST_INTERVAL: 25.8141
4379 :DRILL_REPEATS_SINCE_FAIL: 5
4380 :DRILL_TOTAL_REPEATS: 5
4381 :DRILL_FAILURE_COUNT: 1
4382 :DRILL_AVERAGE_QUALITY: 3.0
4383 :DRILL_EASE: 2.456
4384 :DRILL_LAST_QUALITY: 3
4385 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:37>
4386 :END:
4387 ido open dired buffer
4388 *** [M-d] :drill:
4389 SCHEDULED: <2014-03-11 Tue>
4390 :PROPERTIES:
4391 :ID: 8eab4299-207f-4a4a-a698-38f31cb5ff1b
4392 :DRILL_LAST_INTERVAL: 1.7651
4393 :DRILL_REPEATS_SINCE_FAIL: 1
4394 :DRILL_TOTAL_REPEATS: 6
4395 :DRILL_FAILURE_COUNT: 6
4396 :DRILL_AVERAGE_QUALITY: 2.583
4397 :DRILL_EASE: 2.258
4398 :DRILL_LAST_QUALITY: 3
4399 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:38>
4400 :END:
4401 ido search within all subdirectories
4402 *** [M-m] :drill:
4403 SCHEDULED: <2014-03-10 Mon>
4404 :PROPERTIES:
4405 :ID: cb7f6420-1f70-4ddb-ad73-83c3b22ef0e2
4406 :DRILL_LAST_INTERVAL: 7.6174
4407 :DRILL_REPEATS_SINCE_FAIL: 3
4408 :DRILL_TOTAL_REPEATS: 8
4409 :DRILL_FAILURE_COUNT: 4
4410 :DRILL_AVERAGE_QUALITY: 2.583
4411 :DRILL_EASE: 2.257
4412 :DRILL_LAST_QUALITY: 3
4413 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:01>
4414 :END:
4415 ido create subdirectory
4416 *** [M-s] :drill:
4417 SCHEDULED: <2014-04-01 Tue>
4418 :PROPERTIES:
4419 :ID: eb798918-4dd2-40e1-9d08-82ade145869d
4420 :DRILL_LAST_INTERVAL: 23.2268
4421 :DRILL_REPEATS_SINCE_FAIL: 5
4422 :DRILL_TOTAL_REPEATS: 6
4423 :DRILL_FAILURE_COUNT: 4
4424 :DRILL_AVERAGE_QUALITY: 3.083
4425 :DRILL_EASE: 2.496
4426 :DRILL_LAST_QUALITY: 3
4427 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:34>
4428 :END:
4429 ido search recently used directories
4430 *** [M-n/p] :drill:
4431 SCHEDULED: <2014-03-14 Fri>
4432 :PROPERTIES:
4433 :ID: db965c9e-feb0-4213-b631-7cfa0208cfdb
4434 :DRILL_LAST_INTERVAL: 23.0811
4435 :DRILL_REPEATS_SINCE_FAIL: 4
4436 :DRILL_TOTAL_REPEATS: 4
4437 :DRILL_FAILURE_COUNT: 1
4438 :DRILL_AVERAGE_QUALITY: 3.75
4439 :DRILL_EASE: 2.929
4440 :DRILL_LAST_QUALITY: 4
4441 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 16:36>
4442 :END:
4443 ido next/previous recently used directory
4444 *** [C-s]
4445 **** TODO implement this keybind, normally ctrl-space
4446 ido use current pattern and start a new one
4447 ** info
4448 *** [[]]
4449 goto next-prev node regardless of structure
4450 *** [f]
4451 goto cross reference
4452 *** [x]
4453 Info-follow-nearest-node
4454 #+begin_src emacs-lisp
4455 (define-key Info-mode-map "x" 'Info-follow-nearest-node)
4456 #+end_src
4457 m, f, n, p or ^ command, depending on where you click.
4458 ** auto-complete
4459 *** [S-return] :drill:
4460 SCHEDULED: <2014-03-11 Tue>
4461 :PROPERTIES:
4462 :ID: b9e47939-8033-4adc-8bf4-734b25f4fc47
4463 :DRILL_LAST_INTERVAL: 2.0943
4464 :DRILL_REPEATS_SINCE_FAIL: 1
4465 :DRILL_TOTAL_REPEATS: 7
4466 :DRILL_FAILURE_COUNT: 3
4467 :DRILL_AVERAGE_QUALITY: 2.633
4468 :DRILL_EASE: 2.282
4469 :DRILL_LAST_QUALITY: 3
4470 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:38>
4471 :END:
4472 ac-expand, then select next candidates
4473 *** [C-s] :drill:
4474 SCHEDULED: <2014-03-14 Fri>
4475 :PROPERTIES:
4476 :ID: 828416d4-7ce4-4817-aede-068b80f3041f
4477 :DRILL_LAST_INTERVAL: 23.0811
4478 :DRILL_REPEATS_SINCE_FAIL: 4
4479 :DRILL_TOTAL_REPEATS: 4
4480 :DRILL_FAILURE_COUNT: 1
4481 :DRILL_AVERAGE_QUALITY: 3.75
4482 :DRILL_EASE: 2.929
4483 :DRILL_LAST_QUALITY: 4
4484 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 16:38>
4485 :END:
4486 ac filter completions
4487 ** agenda
4488 *** [t] :drill:
4489 SCHEDULED: <2014-03-22 Sat>
4490 :PROPERTIES:
4491 :ID: 173e9cec-e401-4f03-90cc-72cba462b2f2
4492 :DRILL_LAST_INTERVAL: 31.1381
4493 :DRILL_REPEATS_SINCE_FAIL: 4
4494 :DRILL_TOTAL_REPEATS: 4
4495 :DRILL_FAILURE_COUNT: 0
4496 :DRILL_AVERAGE_QUALITY: 3.75
4497 :DRILL_EASE: 2.929
4498 :DRILL_LAST_QUALITY: 3
4499 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:50>
4500 :END:
4501 agenda cycle todo state
4502 ** org
4503 *** [C-c / t] :drill:
4504 SCHEDULED: <2014-03-13 Thu>
4505 :PROPERTIES:
4506 :ID: a5775c4f-c5d3-4024-a280-6628c5e7ab39
4507 :DRILL_LAST_INTERVAL: 10.7692
4508 :DRILL_REPEATS_SINCE_FAIL: 3
4509 :DRILL_TOTAL_REPEATS: 6
4510 :DRILL_FAILURE_COUNT: 1
4511 :DRILL_AVERAGE_QUALITY: 3.167
4512 :DRILL_EASE: 2.537
4513 :DRILL_LAST_QUALITY: 4
4514 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:09>
4515 :END:
4516 show todo items
4517 *** [S-<tab>] :drill:
4518 SCHEDULED: <2014-03-27 Thu>
4519 :PROPERTIES:
4520 :ID: 1c1a4061-5cff-4826-aec2-8f677aab33a9
4521 :DRILL_LAST_INTERVAL: 50.6823
4522 :DRILL_REPEATS_SINCE_FAIL: 3
4523 :DRILL_TOTAL_REPEATS: 3
4524 :DRILL_FAILURE_COUNT: 0
4525 :DRILL_AVERAGE_QUALITY: 5.0
4526 :DRILL_EASE: 5.815
4527 :DRILL_LAST_QUALITY: 5
4528 :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:44>
4529 :END:
4530 org-shifttab global visibility cycle / move table cell
4531 *** [C-cs] :drill:
4532 SCHEDULED: <2014-03-14 Fri>
4533 :PROPERTIES:
4534 :ID: 9ba74a38-655c-4f96-8443-b574ee25c544
4535 :DRILL_LAST_INTERVAL: 5.238
4536 :DRILL_REPEATS_SINCE_FAIL: 2
4537 :DRILL_TOTAL_REPEATS: 7
4538 :DRILL_FAILURE_COUNT: 2
4539 :DRILL_AVERAGE_QUALITY: 2.801
4540 :DRILL_EASE: 2.362
4541 :DRILL_LAST_QUALITY: 3
4542 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:33>
4543 :END:
4544 schedule todo item
4545 *** [C-cx p] :drill:
4546 SCHEDULED: <2014-03-15 Sat>
4547 :PROPERTIES:
4548 :ID: 4b486f48-219d-4517-96c2-83ef839abda5
4549 :DRILL_LAST_INTERVAL: 24.4352
4550 :DRILL_REPEATS_SINCE_FAIL: 4
4551 :DRILL_TOTAL_REPEATS: 4
4552 :DRILL_FAILURE_COUNT: 0
4553 :DRILL_AVERAGE_QUALITY: 3.75
4554 :DRILL_EASE: 2.929
4555 :DRILL_LAST_QUALITY: 4
4556 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:39>
4557 :END:
4558 org set property
4559 *** [C-c -] :drill:
4560 SCHEDULED: <2014-03-24 Mon>
4561 :PROPERTIES:
4562 :ID: 60e57e56-d815-4d9b-ba78-2a56164db209
4563 :DRILL_LAST_INTERVAL: 32.7466
4564 :DRILL_REPEATS_SINCE_FAIL: 4
4565 :DRILL_TOTAL_REPEATS: 4
4566 :DRILL_FAILURE_COUNT: 0
4567 :DRILL_AVERAGE_QUALITY: 4.0
4568 :DRILL_EASE: 3.204
4569 :DRILL_LAST_QUALITY: 4
4570 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:52>
4571 :END:
4572 org insert horizontal line
4573 *** [C-cq] :drill:
4574 SCHEDULED: <2014-03-24 Mon>
4575 :PROPERTIES:
4576 :ID: 6987ba15-fbc0-459b-bc27-cf9016baebc3
4577 :DRILL_LAST_INTERVAL: 32.7466
4578 :DRILL_REPEATS_SINCE_FAIL: 4
4579 :DRILL_TOTAL_REPEATS: 4
4580 :DRILL_FAILURE_COUNT: 0
4581 :DRILL_AVERAGE_QUALITY: 4.0
4582 :DRILL_EASE: 3.204
4583 :DRILL_LAST_QUALITY: 4
4584 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:50>
4585 :END:
4586 org tag
4587 ** calc
4588 i'd like to drill these sometime when I have space in my head, or I
4589 plan to use calc.
4590 *** space
4591 [enter input to the stack, or duplicate top stack item]
4592 *** C-M-i
4593 [cycle 3 elements on stack]
4594 *** tab
4595 [cycle 2 elements on stack]
4596 *** n
4597 [negate]
4598 *** _
4599 [begin negative number]
4600 *** /
4601 [reciprocal]
4602 *** x
4603 [calc named command]
4604 *** M-delete
4605 [delete 2nd from top of stack]
4606 *** C-u [-]0-9
4607 [0=whole stack, 1-9=that many, -1-9=that element]
4608 *** delete
4609 [remove from the top of the stack]
4610 *** '
4611 [algebraic mode. infix expressions are calculated when input to the stack]
4612 *** m a
4613 [auto algebraic mode]
4614 *** $,$$,$$$
4615 [top x of stack reference]
4616 *** s s/t/r/u
4617 [store to variable: store, top, retrieve, unstore. the quick variables 0-9 don't need s prefix]
4618 *** U/D
4619 [undo/redo]
4620 *** t p/n/]/y
4621 [trail prev/next/end/yankh]
4622 *** `
4623 [calc edit mode, to edit the top of stack]
4624
4625 ** single/special keys
4626 :PROPERTIES:
4627 :ID: beginning-of-keybind-table-data
4628 :END:
4629 *** [tab key]
4630 :PROPERTIES:
4631 :CUSTOM_ID: 6c10a716-1d8e-4ce4-8e26-64468f19c17a
4632 :END:
4633 isearch
4634 #+begin_src emacs-lisp
4635 (define-key isearch-mode-map (kbd "<tab>") 'isearch-query-replace)
4636 #+end_src
4637 *** tab
4638 :PROPERTIES:
4639 :ID: d93321a4-6732-421f-9c03-0073c4cbfdcb
4640 :CUSTOM_ID: 51ece189-1840-41a1-8ca0-19f9a0481895
4641 :END:
4642 isearch-forward
4643 #+begin_src emacs-lisp
4644 ;; explained in http://stackoverflow.com/questions/7411920/how-to-bind-search-and-search-repeat-to-c-f-in-emacs
4645 (global-set-key (kbd search-key) 'isearch-forward)
4646 (define-key isearch-mode-map "\t" nil)
4647 (define-key isearch-mode-map (kbd search-key) 'isearch-repeat-forward)
4648 ;; get rid of the standard completion binding, always use auto-complete
4649 ;; this didn't work very well
4650 ;;(global-set-key (kbd "TAB") 'auto-complete)
4651 (define-key global-map [remap completion-at-point] 'auto-complete)
4652
4653 #+end_src
4654
4655 *** end
4656 :PROPERTIES:
4657 :ID: 7e71b6fe-dcef-4f91-87d9-d996ddf7db5d
4658 :CUSTOM_ID: 00d589b7-2b8e-494c-b761-3afefebe6ec6
4659 :END:
4660 move-end-of-line
4661 #+begin_src emacs-lisp
4662 ;; taken from emacs wiki, along with home function
4663 ;; http://www.emacswiki.org/emacs/BackToIndentationOrBeginning
4664 (defun point-in-comment ()
4665 "Determine if the point is inside a comment"
4666 (interactive)
4667 (let ((syn (syntax-ppss)))
4668 (and (nth 8 syn)
4669 (not (nth 3 syn)))))
4670 (defun end-of-code-or-line (arg)
4671 "Move to end of line, or before start of comments depending on situation.
4672 Toggle back and forth positions if we are already at one.
4673 Comments are recognized in any mode that sets syntax-ppss
4674 properly."
4675 (interactive "P")
4676 (when (catch 'bol
4677 (let ((start (point))
4678 (bol (save-excursion
4679 (beginning-of-line)
4680 (point)))
4681 (eol (progn (move-end-of-line arg) (point))))
4682 (while (point-in-comment)
4683 (backward-char)
4684 (when (= (point) bol)
4685 (throw 'bol t)))
4686 (throw 'bol (and (not (= eol start)) (>= start (point))))))
4687 (move-end-of-line arg)))
4688
4689 (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)))
4690 #+end_src
4691
4692 *** home
4693 :PROPERTIES:
4694 :ID: f52de4a4-212c-4133-9038-2b652c739ad2
4695 :CUSTOM_ID: 7800e455-c3f6-4a8f-8907-b2292449ab67
4696 :END:
4697 back-to-indentation
4698 #+begin_src emacs-lisp
4699 (defun back-to-indentation-or-beginning ()
4700 (interactive)
4701 (if (= (point) (progn (back-to-indentation) (point)))
4702 (if (derived-mode-p 'org-mode)
4703 (org-beginning-of-line)
4704 (beginning-of-line))))
4705 (global-set-key (kbd "<home>") 'back-to-indentation-or-beginning)
4706
4707 #+end_src
4708
4709 *** [s-tab]
4710 :PROPERTIES:
4711 :CUSTOM_ID: 3072901e-5cf3-4d6e-9ac8-3ef64a5f6ad2
4712 :END:
4713 indent-buffer
4714 [
4715 #+begin_src emacs-lisp
4716 (global-set-key (kbd "<S-iso-lefttab>") 'indent-buffer)
4717 #+end_src
4718 ]
4719 *** [s-delete]
4720 :PROPERTIES:
4721 :CUSTOM_ID: e53728b6-054d-4443-a03e-6cf02d13724d
4722 :END:
4723 send-shell
4724 #+begin_src emacs-lisp
4725
4726 (global-set-key (kbd "<S-delete>") 'send-shell)
4727
4728 ;; optional variables used by send-shell
4729 (setq shell-send-yank-key nil)
4730
4731 (defun repeat-shell ()
4732 (interactive)
4733 "Repeat the last command in shell-mode, displaying the window if needed."
4734 (let ((shell-buffer (get-buffer "*shell*")))
4735 (if shell-buffer
4736 (buffer-window-show shell-buffer)
4737 (let ((original-buffer (current-buffer)))
4738 (funcall 'shell)
4739 (setq shell-buffer (current-buffer))
4740 (switch-to-buffer original-buffer)))
4741 (with-current-buffer shell-buffer
4742 (goto-char (point-max))
4743 (call-interactively 'comint-previous-input)
4744 ;; the t flag makes the buffer advance
4745 (comint-send-input nil t))))
4746
4747 (setq compilation-filenames '("Makefile" "makefile"))
4748
4749 (defun get-nearest-compilation-file ()
4750 "Search for the compilation file traversing up the directory tree."
4751 (interactive)
4752 (let ((dir default-directory)
4753 (parent-dir (file-name-directory (directory-file-name default-directory)))
4754 (nearest-compilation-file 'nil))
4755 (while (and (not (string= dir parent-dir))
4756 (not nearest-compilation-file))
4757 (dolist (filename compilation-filenames)
4758 (setq file-path (concat dir filename))
4759 (when (file-readable-p file-path)
4760 (setq nearest-compilation-file file-path)))
4761 (setq dir parent-dir
4762 parent-dir (file-name-directory (directory-file-name parent-dir))))
4763 nearest-compilation-file))
4764 (defun run ()
4765 (interactive)
4766 "call run-fun if it is set, else run make if there is a makefile,
4767 else save and repeat last shell command.
4768 run-fun is meant to store file local variables, which show how to
4769 do the main thing we want on this file, generally compile and
4770 run.
4771
4772 example of setting it in a file:
4773 ;; Local Variables:
4774 ;; run-fun: merge-test
4775 ;; End: "
4776 (basic-save-buffer)
4777 (if (and (boundp 'run-fun) run-fun)
4778 (funcall run-fun)
4779 (let ((makefile (get-nearest-compilation-file)))
4780 (if (and makefile (stringp mode-name) (string= mode-name "C/l"))
4781 (compile (format
4782 "make -f %s" (get-nearest-compilation-file)))
4783 (repeat-shell)))))
4784
4785
4786 (defun send-shell ()
4787 (interactive)
4788 (send-shell-buffer "*shell*" 'shell (kbd "C-v")))
4789
4790 (defun send-python ()
4791 (interactive)
4792 (send-shell-buffer "*Python*" 'py-shell (kbd "C-v")))
4793
4794
4795 (defun send-shell-buffer (buffer-name &optional init shell-send-yank-key)
4796 "Send current line or region to shell-mode buffer.
4797 When in shell-mode, copy the current line to the
4798 most recently visited visible window.
4799
4800 SHELL-SEND-YANK-KEY: key to use instead
4801 of yank to paste into recent window. This allows compatibility with
4802 modes like org-mode which have their own yank function."
4803 (if (string= (buffer-name) buffer-name)
4804 ;; this section is copied out of comint-send-input
4805 (progn
4806 (let ((proc (get-buffer-process (current-buffer))))
4807 (if (not proc) (user-error "Current buffer has no process")
4808 (widen)
4809
4810 (let* ((pmark (process-mark proc))
4811 (intxt (if (>= (point) (marker-position pmark))
4812 (progn (if comint-eol-on-send (end-of-line))
4813 (buffer-substring pmark (point)))
4814 (let ((copy (funcall comint-get-old-input)))
4815 (goto-char pmark)
4816 (insert copy)
4817 copy))))
4818
4819 (if (= (length intxt) 0)
4820 (kill-new (comint-previous-matching-input-string "." 1))
4821 (kill-new intxt)))))
4822 (kill-append "\n" nil)
4823 (select-window (previous-window nil nil 'visible))
4824 (if (and (boundp 'shell-send-yank-key) shell-send-yank-key)
4825 (call-interactively (global-key-binding shell-send-yank-key))
4826 (yank))
4827 (select-window (next-window nil nil 'visible)))
4828 (let (start end)
4829 (if mark-active
4830 (setq start (mark)
4831 end (point))
4832 (setq start (save-excursion (beginning-of-line) (point))
4833 end (save-excursion (end-of-line) (point)))
4834 (let (line-move-visual)
4835 (call-interactively 'next-line)))
4836 (send-comint-input buffer-name start end init))))
4837
4838 ;; supporting functions
4839
4840
4841 (defun send-comint-input (buffer-name start end &optional init)
4842 "Input the region to BUFFER-NAME, assuming it is a comint-derived buffer.
4843 Show BUFFER-NAME if it is not show.
4844 Call INIT if BUFFER-NAME does not exist."
4845 (let ((input (filter-buffer-substring start end))
4846 (buffer (get-buffer buffer-name)))
4847 (unless buffer
4848 (message "nobuffer")
4849 ;; save-excursion etc. don't work for (shell), so I do this instead
4850 (if init (let ((original-buffer (current-buffer)))
4851 (funcall init (and (boundp 'send-shell-buffer-name) send-shell-buffer-name))
4852 (switch-to-buffer original-buffer)
4853 (setq buffer (get-buffer buffer-name)))
4854 (error "No existing buffer found and no init function argument. ")))
4855 (buffer-window-show buffer)
4856 (with-current-buffer buffer
4857 (let ((proc (get-buffer-process buffer)))
4858 (goto-char (process-mark proc))
4859 (insert input)
4860 (comint-send-input nil t)))))
4861
4862 (defun buffer-window-show (&optional buffer action)
4863 "Like temp-buffer-window-show, but removed stuff
4864 relevant to it being temp or help."
4865 (let (window frame)
4866 (with-current-buffer buffer
4867 (when (let ((window-combination-limit
4868 ;; When `window-combination-limit' equals
4869 ;; `temp-buffer' or `temp-buffer-resize' and
4870 ;; `temp-buffer-resize-mode' is enabled in this
4871 ;; buffer bind it to t so resizing steals space
4872 ;; preferably from the window that was split.
4873 (if (or (eq window-combination-limit 'temp-buffer)
4874 (and (eq window-combination-limit
4875 'temp-buffer-resize)
4876 temp-buffer-resize-mode))
4877 t
4878 window-combination-limit)))
4879 ;; debug
4880 ;;(message "window-combination-limit")
4881 ;;(print window-combination-limit)
4882 (setq window (display-buffer buffer action)))
4883 (setq frame (window-frame window))
4884 (unless (eq frame (selected-frame))
4885 (raise-frame frame))
4886 (setq minibuffer-scroll-window window)
4887 (set-window-hscroll window 0)
4888 ;; Return the window.
4889 window))))
4890
4891
4892 ;; when poping help, etc, allow reusing a window in a different frame if it is visible
4893 ;; figured this out after spending quite a while reading doc string for display-buffer
4894 ;; which is the main function which uses this.
4895 ;; it will use other vars or its arg to override this,
4896 ;; but those things are often nil.
4897 ;; aha moments in reading it: ACTION = (FUNCTION-or-FUNCTIONLIST ALIST)
4898 ;; FRAME adds an association to ACTION's alist, but it's not used if ACTION arg is nil.
4899 (setq display-buffer-fallback-action `(,(car display-buffer-fallback-action) . '(reusable-frames . visible)))
4900 ;; stop splitting windows verticallly when I open a buffer or shell
4901 (setq split-height-threshold nil)
4902 #+end_src
4903
4904 *** s-left arrow
4905 :PROPERTIES:
4906 :CUSTOM_ID: d8c473ac-5507-4a6b-9e5a-46558c17b09f
4907 :END:
4908 shell
4909 #+begin_src emacs-lisp
4910 (global-set-key (kbd shell-key) 'shell-wrap)
4911 #+end_src
4912 *** s-right arrow
4913 :PROPERTIES:
4914 :CUSTOM_ID: 2365f5a7-b89a-4a97-b272-ac8ae9c2cc66
4915 :END:
4916 previous-buffer
4917 #+begin_src emacs-lisp
4918 (global-set-key (kbd "<S-kp-divide>") 'previous-buffer)
4919 #+end_src
4920 *** esc
4921 :PROPERTIES:
4922 :CUSTOM_ID: 60a56803-f38d-4d0a-8ed5-1c94ba97b6f6
4923 :END:
4924 *** return
4925 :PROPERTIES:
4926 :CUSTOM_ID: fab6adea-ed20-45ab-a0a3-776c68d5c3a5
4927 :END:
4928 new line
4929
4930 #+begin_src emacs-lisp
4931 ;; todo, this doesn't set the keybind for the help minibuffer
4932 (when (boundp 'icomplete-minibuffer-map)
4933 (define-key icomplete-minibuffer-map (kbd "<return>")
4934 'minibuffer-force-complete-and-exit))
4935
4936 (add-hook 'ido-setup-hook
4937 (lambda()
4938 (define-key ido-completion-map (kbd "<return>") 'ido-exit-minibuffer)))
4939 (define-key minibuffer-local-completion-map (kbd "<return>") 'exit-minibuffer)
4940
4941
4942 (define-key isearch-mode-map (kbd "<return>") 'isearch-exit)
4943 (define-key isearch-mode-map "\r" nil)
4944
4945
4946 (global-set-key (kbd "<return>") 'indent-new-comment-line)
4947 (define-key ac-completing-map (kbd "<return>") nil)
4948 (define-key ac-completing-map "\r" nil)
4949 (define-key minibuffer-local-map "\r" nil)
4950 (define-key minibuffer-local-map (kbd "<return>") 'exit-minibuffer)
4951 (define-key icomplete-minibuffer-map (kbd "C-j") 'exit-minibuffer)
4952 (define-key minibuffer-local-map (kbd "C-j") 'exit-minibuffer)
4953 (define-key minibuffer-local-must-match-map (kbd "C-j") 'exit-minibuffer)
4954 (define-key minibuffer-local-must-match-map "\r" nil)
4955 (define-key minibuffer-local-must-match-map (kbd "<return>")
4956 'minibuffer-complete-and-exit)
4957
4958 (add-hook 'Man-mode-hook
4959 (lambda ()
4960 (define-key Man-mode-map "\r" nil)
4961 (define-key Man-mode-map "x" 'man-follow)))
4962
4963 (add-hook 'comint-mode-hook
4964 (lambda ()
4965 (define-key comint-mode-map "\r" nil)
4966 (define-key comint-mode-map (kbd "<return>") 'comint-send-input)))
4967
4968 (add-hook 'org-mode-hook
4969 (lambda ()
4970 (define-key org-mode-map "\r" nil)
4971 (define-key org-mode-map (kbd "<return>") 'org-return-indent)))
4972
4973 (add-hook 'comint-mode-hook
4974 (lambda ()
4975 (define-key comint-mode-map "\C-m" nil)
4976 (define-key comint-mode-map "\C-d" nil)))
4977 ;; use space instead of enter in calc mode,
4978 ;; cuz it is not easy to rebind enter in calc mode
4979 #+end_src
4980
4981 *** [s-return] :drill:
4982 SCHEDULED: <2014-03-10 Mon>
4983 :PROPERTIES:
4984 auto-correct-prev-word
4985 :ID: db46193b-f202-4927-bc76-2ad74d9f0ed7
4986 :CUSTOM_ID: 819cfb55-3a2f-4f20-8591-f819d1a6869a
4987 :DRILL_LAST_INTERVAL: 7.9493
4988 :DRILL_REPEATS_SINCE_FAIL: 3
4989 :DRILL_TOTAL_REPEATS: 7
4990 :DRILL_FAILURE_COUNT: 4
4991 :DRILL_AVERAGE_QUALITY: 2.696
4992 :DRILL_EASE: 2.312
4993 :DRILL_LAST_QUALITY: 3
4994 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:05>
4995 :END:
4996 auto-correct-prev-word
4997 [
4998 #+begin_src emacs-lisp
4999 (global-set-key (kbd "<S-return>") 'flyspell-auto-correct-previous-word)
5000 #+end_src
5001 ]
5002
5003 *** down arrow
5004 :PROPERTIES:
5005 :CUSTOM_ID: 7a868484-9c63-4a73-abda-7751cb2c02be
5006 :END:
5007 mark
5008 #+begin_src emacs-lisp
5009 (global-set-key (kbd "<kp-enter>") 'set-mark-command)
5010 #+end_src
5011 *** s-down arrow
5012 :PROPERTIES:
5013 :CUSTOM_ID: 097b97e0-8ad8-40f7-8388-c4ace1706b38
5014 :END:
5015 extended command
5016 #+begin_src emacs-lisp
5017 (global-set-key (kbd "<S-kp-enter>") 'smex)
5018 #+end_src
5019 *** s-up arrow
5020
5021 ** mouse
5022 *** [mouse-2 mode line] :drill:
5023 SCHEDULED: <2014-03-17 Mon>
5024 :PROPERTIES:
5025 :ID: d79167ad-9782-40b3-8e40-55aaa8428dec
5026 :CUSTOM_ID: 69aaa631-6fb5-4beb-b2d8-c0f3d92c0a98
5027 :DRILL_LAST_INTERVAL: 15.2345
5028 :DRILL_REPEATS_SINCE_FAIL: 4
5029 :DRILL_TOTAL_REPEATS: 7
5030 :DRILL_FAILURE_COUNT: 2
5031 :DRILL_AVERAGE_QUALITY: 2.893
5032 :DRILL_EASE: 2.405
5033 :DRILL_LAST_QUALITY: 3
5034 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:06>
5035 :END:
5036 mouse-delete-other-windows
5037 *** C-mouse-2 mode line
5038 :PROPERTIES:
5039 :CUSTOM_ID: 501479ab-e1e2-497e-bd86-071f8afa3378
5040 :END:
5041 mouse-split-window-horizontally
5042 *** M-mouse-2 mode line
5043 :PROPERTIES:
5044 :CUSTOM_ID: 8de14d73-499e-406a-b5c4-e295e53d3f4c
5045 :END:
5046 *** S-mouse-2 mode line
5047 :PROPERTIES:
5048 :CUSTOM_ID: f389cdbb-186a-4cad-af45-b3c75a508275
5049 :END:
5050 *** C-M-mouse-2 mode line
5051 :PROPERTIES:
5052 :CUSTOM_ID: cb2be69c-f86c-4120-b7f2-1c09b7bcd816
5053 :END:
5054 *** C-S-mouse2 mode line
5055 :PROPERTIES:
5056 :CUSTOM_ID: 7b4eced3-ce5e-49ce-8bfe-8823e8f5f93e
5057 :END:
5058 *** [mouse-3 mode line] :drill:
5059 SCHEDULED: <2014-03-19 Wed>
5060 :PROPERTIES:
5061 :ID: 324e43e7-d468-4edc-b892-c1e249ff49fa
5062 :CUSTOM_ID: 917a1844-8c38-4f31-8616-50fc81334f2c
5063 :DRILL_LAST_INTERVAL: 27.607
5064 :DRILL_REPEATS_SINCE_FAIL: 4
5065 :DRILL_TOTAL_REPEATS: 4
5066 :DRILL_FAILURE_COUNT: 0
5067 :DRILL_AVERAGE_QUALITY: 3.5
5068 :DRILL_EASE: 2.73
5069 :DRILL_LAST_QUALITY: 3
5070 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:50>
5071 :END:
5072 mouse-delete-window
5073 *** C-mouse-3 mode line
5074 :PROPERTIES:
5075 :CUSTOM_ID: b36a218f-6a92-4594-940b-13ffdf79cc9c
5076 :END:
5077 *** M-mouse-3 mode line
5078 :PROPERTIES:
5079 :CUSTOM_ID: 11c48311-05a4-440e-b742-ec397f22f479
5080 :END:
5081 *** S-mouse-3 mode line
5082 :PROPERTIES:
5083 :CUSTOM_ID: 03768943-d8cd-4dcb-bc48-393e9a6bb31f
5084 :END:
5085 *** C-M-mouse-3 mode line
5086 :PROPERTIES:
5087 :CUSTOM_ID: ab213201-bab7-4d30-8f61-fee80e7f2c6f
5088 :END:
5089 *** C-S-mouse-3 mode line
5090 :PROPERTIES:
5091 :CUSTOM_ID: 0bcac7a3-2943-49b7-b281-d834d374caf9
5092 :END:
5093 *** mouse-1
5094 :PROPERTIES:
5095 :CUSTOM_ID: 4e60e2e4-8c2f-4450-8060-2d793ede530c
5096 :END:
5097 set cursor/mark
5098 *** [C-mouse-1] :drill:
5099 SCHEDULED: <2014-03-15 Sat>
5100 :PROPERTIES:
5101 :CUSTOM_ID: b661f84f-57df-4095-9dc1-d1a876a53ee5
5102 :ID: 6b82708e-d5de-48cc-8abd-225186eb8729
5103 :DRILL_LAST_INTERVAL: 24.4352
5104 :DRILL_REPEATS_SINCE_FAIL: 4
5105 :DRILL_TOTAL_REPEATS: 4
5106 :DRILL_FAILURE_COUNT: 0
5107 :DRILL_AVERAGE_QUALITY: 3.75
5108 :DRILL_EASE: 2.929
5109 :DRILL_LAST_QUALITY: 4
5110 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 18:03>
5111 :END:
5112 buffer list context menu
5113 *** M-mouse-1
5114 :PROPERTIES:
5115 :CUSTOM_ID: c71c8a71-7027-44f3-be19-1d3c18ff5129
5116 :END:
5117 *** S-mouse-1
5118 :PROPERTIES:
5119 :CUSTOM_ID: 84507cd6-8a75-4754-bf9e-5a30f57fa4ac
5120 :END:
5121 *** C-M-mouse-1
5122 :PROPERTIES:
5123 :CUSTOM_ID: 95eea58e-82b0-48a3-a7c8-0d17c50b7c2e
5124 :END:
5125 *** C-S-mouse-1
5126 :PROPERTIES:
5127 :CUSTOM_ID: 2d450c06-d9aa-4751-a926-0922c0c3a402
5128 :END:
5129 *** mouse-2
5130 :PROPERTIES:
5131 :CUSTOM_ID: 086b0b50-054f-462d-92fa-b27852f887b0
5132 :END:
5133 paste
5134 *** C-mouse-2
5135 :PROPERTIES:
5136 :CUSTOM_ID: 48b8de22-6638-44da-986f-16e0e69312dd
5137 :END:
5138 *** M-mouse-2
5139 :PROPERTIES:
5140 :CUSTOM_ID: fb315a27-6351-4ce2-9692-589608793c43
5141 :END:
5142 *** S-mouse-2
5143 :PROPERTIES:
5144 :CUSTOM_ID: 7cc73036-844b-44d3-afe1-1e76ee626b53
5145 :END:
5146 *** C-M-mouse-2
5147 :PROPERTIES:
5148 :CUSTOM_ID: 85f35287-5130-47ab-832d-af78dc2a3e70
5149 :END:
5150 *** C-S-mouse-2
5151 :PROPERTIES:
5152 :CUSTOM_ID: a27ad43f-3be2-4155-9a9f-c144170372ce
5153 :END:
5154 *** mouse-3
5155 :PROPERTIES:
5156 :CUSTOM_ID: 0481632e-9c50-4328-9365-c4b5bf967b66
5157 :END:
5158 set-mark
5159 #+begin_src emacs-lisp
5160 (define-key global-map [down-mouse-3] 'mouse3-func)
5161 (global-set-key [mouse-3] 'mouse3-set-mark)
5162 (global-set-key [drag-mouse-3] 'mouse3-set-mark)
5163 #+end_src
5164 *** [C-mouse-3] :drill:
5165 SCHEDULED: <2014-03-13 Thu>
5166 :PROPERTIES:
5167 :ID: b075e62c-55c6-46f5-a23a-4c4c5b9f267e
5168 :CUSTOM_ID: 9623c78f-7705-4cbe-a990-c24eb1067377
5169 :DRILL_LAST_INTERVAL: 22.1939
5170 :DRILL_REPEATS_SINCE_FAIL: 4
5171 :DRILL_TOTAL_REPEATS: 4
5172 :DRILL_FAILURE_COUNT: 0
5173 :DRILL_AVERAGE_QUALITY: 3.5
5174 :DRILL_EASE: 2.73
5175 :DRILL_LAST_QUALITY: 4
5176 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 16:38>
5177 :END:
5178 global menu
5179 *** M-mouse-3
5180 :PROPERTIES:
5181 :CUSTOM_ID: fb6f4840-7e44-4c94-b913-f2014fda3325
5182 :END:
5183 *** S-mouse-3
5184 :PROPERTIES:
5185 :CUSTOM_ID: a6d91332-c731-474c-9959-ddd03e8b2786
5186 :END:
5187 *** C-M-mouse-3
5188 :PROPERTIES:
5189 :CUSTOM_ID: 6b4d0e4d-1a2c-4e42-a925-e39548c4e264
5190 :END:
5191 *** C-S-mouse-3
5192 :PROPERTIES:
5193 :CUSTOM_ID: a983a7c5-c17e-4e08-b3e2-a45a44d7a2b6
5194 :END:
5195 *** [mouse-9]
5196 :PROPERTIES:
5197 :CUSTOM_ID: efaec161-b279-4129-86fd-b410430926e4
5198 :END:
5199 move-mouse-to-point
5200 [
5201 #+begin_src emacs-lisp
5202 (global-set-key (kbd "<mouse-6>") 'move-mouse-to-point)
5203 #+end_src
5204 ]
5205 *** C-mouse-9
5206 :PROPERTIES:
5207 :CUSTOM_ID: e055ae8a-cc94-4e0f-9e98-9cb62453b8d6
5208 :END:
5209 *** M-mouse-9
5210 :PROPERTIES:
5211 :CUSTOM_ID: 7d1c03a9-b153-47dc-a037-7ee333ca8da9
5212 :END:
5213 *** S-mouse-9
5214 :PROPERTIES:
5215 :CUSTOM_ID: 8f688d00-8cdb-4163-818c-a0cfba3b1c0a
5216 :END:
5217 *** C-M-mouse-9
5218 :PROPERTIES:
5219 :CUSTOM_ID: 90ce7df8-2346-4203-8ced-5da51c7c1bfc
5220 :END:
5221 *** C-S-mouse-9
5222 :PROPERTIES:
5223 :CUSTOM_ID: 0afdad0a-f9c4-4bfa-baa8-cc20d6cab628
5224 :END:
5225 *** mouse-8
5226 :PROPERTIES:
5227 :CUSTOM_ID: ea9d2415-0fd7-4f83-9867-a7a81899e74b
5228 :END:
5229 *** C-mouse-8
5230 :PROPERTIES:
5231 :CUSTOM_ID: dc2428d2-412c-4811-8327-3bb70bfa0e76
5232 :END:
5233 *** M-mouse-8
5234 :PROPERTIES:
5235 :CUSTOM_ID: 530ed41d-6ed6-4bcd-9df7-58ddbfe8b44a
5236 :END:
5237 *** S-mouse-8
5238 :PROPERTIES:
5239 :CUSTOM_ID: c7d388c3-f4a6-4489-b23a-20ebb7515430
5240 :END:
5241 *** C-M-mouse-8
5242 :PROPERTIES:
5243 :CUSTOM_ID: fc6ac9e8-fd9a-4270-9cd8-26713d6bc40f
5244 :END:
5245 *** C-S-mouse-8
5246 :PROPERTIES:
5247 :CUSTOM_ID: 401503ad-3750-4002-a28e-1f1345412bc6
5248 :END:
5249 *** 1/kp-end
5250 :PROPERTIES:
5251 :CUSTOM_ID: c306a3ef-4b81-4d54-a914-99f312d8f92f
5252 :END:
5253 *** C-1/kp-end
5254 :PROPERTIES:
5255 :CUSTOM_ID: 11059916-0a48-4f08-b85a-9b82243e4145
5256 :END:
5257 *** M-1/kp-end
5258 :PROPERTIES:
5259 :CUSTOM_ID: fddd8716-5b16-484e-9d70-358fea201d99
5260 :END:
5261 *** S-1/kp-end
5262 :PROPERTIES:
5263 :CUSTOM_ID: c6a7978b-a5cf-4ae7-b1d2-57ea72adb487
5264 :END:
5265 *** C-M-1/kp-end
5266 :PROPERTIES:
5267 :CUSTOM_ID: 376b8b84-ae1b-4bff-b1c8-263049186637
5268 :END:
5269 *** C-S-1/kp-end
5270 :PROPERTIES:
5271 :CUSTOM_ID: 4e8081cb-5692-4d2e-8657-c6c7931046fd
5272 :END:
5273 *** 2/kp-down
5274 :PROPERTIES:
5275 :CUSTOM_ID: a1108fd9-0df0-43ac-9dbb-0402d24f5b57
5276 :END:
5277 *** C-2/kp-down
5278 :PROPERTIES:
5279 :CUSTOM_ID: e9fe4916-14f5-4dc6-8dba-ed982b7172a1
5280 :END:
5281 *** M-2/kp-down
5282 :PROPERTIES:
5283 :CUSTOM_ID: 50db5a06-452e-491f-875b-3de936a4d04a
5284 :END:
5285 #+begin_src emacs-lisp
5286 ;; for when we have a standard keyboard which is not remapped
5287 (global-set-key (kbd "M-2") 'smex)
5288
5289 #+end_src
5290
5291 *** S-2/kp-down
5292 :PROPERTIES:
5293 :CUSTOM_ID: c3ad691b-0082-46f3-8588-ef2223eab643
5294 :END:
5295 *** C-M-2/kp-down
5296 :PROPERTIES:
5297 :CUSTOM_ID: 90963055-086b-4d96-8131-d890ff3cb597
5298 :END:
5299 *** C-S-2/kp-down
5300 :PROPERTIES:
5301 :CUSTOM_ID: 4d13741e-2207-4d2c-a719-e818bb9f3419
5302 :END:
5303 *** 3/kp-next
5304 :PROPERTIES:
5305 :CUSTOM_ID: b441f9e2-d035-4907-b947-0f3b4d6d062d
5306 :END:
5307 *** C-3/kp-next
5308 :PROPERTIES:
5309 :CUSTOM_ID: 3ea6ff26-4db4-46c8-b681-e08acd9b6a06
5310 :END:
5311 *** M-3/kp-next
5312 :PROPERTIES:
5313 :CUSTOM_ID: a376d2fb-999d-48fd-8c9e-36b7661c5ba7
5314 :END:
5315 *** S-3/kp-next
5316 :PROPERTIES:
5317 :CUSTOM_ID: 50b8356c-7ba5-4e89-b4d6-618f6c571678
5318 :END:
5319 *** C-M-3/kp-next
5320 :PROPERTIES:
5321 :CUSTOM_ID: cd997379-f611-4d06-91c7-ed6cabb618ee
5322 :END:
5323 *** C-S-3/kp-next
5324 :PROPERTIES:
5325 :CUSTOM_ID: 1c8941c9-3025-4dff-bcf3-09d8de44f44f
5326 :END:
5327 *** 4/kp-left
5328 :PROPERTIES:
5329 :ID: bef4fed5-5338-4c66-a759-13dc20ab9bfb
5330 :CUSTOM_ID: c44d0f65-9502-4cc6-9642-96d907f6b093
5331 :END:
5332 indent-region
5333 #+begin_src emacs-lisp
5334 (global-set-key (kbd "<kp-left>") 'indent-region)
5335 #+end_src
5336 *** C-4/kp-left
5337 :PROPERTIES:
5338 :CUSTOM_ID: dd0cd32a-1d62-4b19-9d4f-ee242fb7c7b9
5339 :END:
5340 *** M-4/kp-left
5341 :PROPERTIES:
5342 :CUSTOM_ID: 4f7c3799-28a7-4fc2-85fc-16d768d2047c
5343 :END:
5344 *** S-4/kp-left
5345 :PROPERTIES:
5346 :CUSTOM_ID: f84a7347-f88a-4888-bf5d-e15b98b5c3a2
5347 :END:
5348 *** C-M-4/kp-left
5349 :PROPERTIES:
5350 :CUSTOM_ID: 74a1afca-bd24-469b-93e9-7a9681a9e467
5351 :END:
5352 *** C-S-4/kp-left
5353 :PROPERTIES:
5354 :CUSTOM_ID: 6c822a4a-0e64-430b-8d21-46b387911f2f
5355 :END:
5356 *** 5/kp-begin
5357 :PROPERTIES:
5358 :ID: 0e93f6a0-3d6f-45b1-b14e-10abbdfa3ee4
5359 :CUSTOM_ID: 2458c6bc-7113-4d4b-bbdf-206e1cb842a7
5360 :END:
5361 mark-defun
5362 #+begin_src emacs-lisp
5363 (global-set-key (kbd "<kp-begin>") 'mark-defun)
5364 #+end_src
5365 *** C-5/kp-begin
5366 :PROPERTIES:
5367 :CUSTOM_ID: 39588066-77b8-4863-be0d-0f1fad8f0e2a
5368 :END:
5369 *** M-5/kp-begin
5370 :PROPERTIES:
5371 :CUSTOM_ID: b3542b42-9d71-4a3f-92b1-f79f275bcf52
5372 :END:
5373 *** S-5/kp-begin
5374 :PROPERTIES:
5375 :CUSTOM_ID: 66aed3e7-d7bb-4393-a95b-b90b3a410684
5376 :END:
5377 *** C-M-5/kp-begin
5378 :PROPERTIES:
5379 :CUSTOM_ID: 1060d464-eed3-4a17-a5c4-d8e8941f6925
5380 :END:
5381 *** C-S-5/kp-begin
5382 :PROPERTIES:
5383 :CUSTOM_ID: efd7867a-a87f-43ef-a849-0e4029431d7f
5384 :END:
5385 *** 6/kp-right
5386 :PROPERTIES:
5387 :ID: d156225a-b48e-45e2-80a7-ea1a7dbbc794
5388 :CUSTOM_ID: 3b79bc58-6067-43bd-9471-9d592744a25a
5389 :END:
5390 ibuffer
5391 #+begin_src emacs-lisp
5392 (global-set-key (kbd "<kp-right>") 'ibuffer)
5393 #+end_src
5394 *** C-6/kp-right
5395 :PROPERTIES:
5396 :CUSTOM_ID: 5592b3d3-7ade-4486-ac94-aed0aa3d78f5
5397 :END:
5398 *** M-6/kp-right
5399 :PROPERTIES:
5400 :CUSTOM_ID: c76bedd9-90a7-41fe-9327-607f88f60a3a
5401 :END:
5402 *** S-6/kp-right
5403 :PROPERTIES:
5404 :CUSTOM_ID: 8bbda9a2-7909-44fb-af24-a86dbbd5d16f
5405 :END:
5406 *** C-M-6/kp-right
5407 :PROPERTIES:
5408 :CUSTOM_ID: 7c5838f6-5cc9-4bbc-bd07-403cc009cf35
5409 :END:
5410 *** C-S-6/kp-right
5411 :PROPERTIES:
5412 :CUSTOM_ID: c6f2edc9-ffd3-400f-8014-bb92ea6e520b
5413 :END:
5414 *** 7/kp-home
5415 :PROPERTIES:
5416 :CUSTOM_ID: c98ba390-f2e3-4c14-8d41-142b54e76d77
5417 :END:
5418 *** C-7/kp-home
5419 :PROPERTIES:
5420 :CUSTOM_ID: 5597d00f-4a89-4af2-aac1-98808763744c
5421 :END:
5422 *** M-7/kp-home
5423 :PROPERTIES:
5424 :CUSTOM_ID: 5cbafd0e-0c8f-4e14-a24e-f847c341e5c1
5425 :END:
5426 *** S-7/kp-home
5427 :PROPERTIES:
5428 :CUSTOM_ID: 92f7d836-ae32-4bba-9120-72e747feb832
5429 :END:
5430 *** C-M-7/kp-home
5431 :PROPERTIES:
5432 :CUSTOM_ID: 30170d01-412e-4098-b27e-ed9294d8cf92
5433 :END:
5434 *** C-S-7/kp-home
5435 :PROPERTIES:
5436 :CUSTOM_ID: 81300d39-e60e-4b09-865e-584153f3b827
5437 :END:
5438 *** 8/kp-up
5439 :PROPERTIES:
5440 :CUSTOM_ID: 0591db2b-6c5c-4438-9451-dcd686170c9d
5441 :END:
5442 *** C-8/kp-up
5443 :PROPERTIES:
5444 :CUSTOM_ID: 028ad953-1641-4f0c-83c2-72787310e447
5445 :END:
5446 *** M-8/kp-up
5447 :PROPERTIES:
5448 :CUSTOM_ID: 7c55f717-1093-48a7-b764-8f788540a4d7
5449 :END:
5450 *** S-8/kp-up
5451 :PROPERTIES:
5452 :CUSTOM_ID: f477fa15-3f04-48f6-a66a-4ba6eb0475f1
5453 :END:
5454 *** C-M-8/kp-up
5455 :PROPERTIES:
5456 :CUSTOM_ID: f280c9ab-49a8-4399-987b-bfde07c339be
5457 :END:
5458 *** C-S-8/kp-up
5459 :PROPERTIES:
5460 :CUSTOM_ID: 68a316aa-a05d-4ab0-87e4-88e8f2613795
5461 :END:
5462 *** 9/kp-prior
5463 :PROPERTIES:
5464 :ID: f3c60889-d948-4144-b5b0-04aeeec95309
5465 :CUSTOM_ID: a3b51adb-4405-4d9f-9b88-a8faa479fbe7
5466 :END:
5467 delete-horizontal-space
5468 #+begin_src emacs-lisp
5469 (global-set-key (kbd "<kp-prior>") 'delete-horizontal-space)
5470 #+end_src
5471 *** C-9/kp-prior
5472 :PROPERTIES:
5473 :CUSTOM_ID: 2683f49c-a465-42d0-b85b-6aa345ac2213
5474 :END:
5475 *** M-9/kp-prior
5476 :PROPERTIES:
5477 :CUSTOM_ID: 91b0ee09-9eba-4b60-b05f-720eaca53065
5478 :END:
5479 *** S-9/kp-prior
5480 :PROPERTIES:
5481 :CUSTOM_ID: b79e626c-4425-409f-92ce-b88335629c34
5482 :END:
5483 *** C-M-9/kp-prior
5484 :PROPERTIES:
5485 :CUSTOM_ID: 4838285f-905b-4e18-8605-ff24a20ce9e1
5486 :END:
5487 *** C-S-9/kp-prior
5488 :PROPERTIES:
5489 :CUSTOM_ID: 763edfac-da7d-4360-a383-6a7f42cc2e02
5490 :END:
5491 *** 10/kp-insert
5492 :PROPERTIES:
5493 :CUSTOM_ID: 57e1a794-26f8-4fb6-b753-ef1ad1ff0af9
5494 :END:
5495 *** C-10/kp-insert
5496 :PROPERTIES:
5497 :CUSTOM_ID: 32426751-f87b-4fd5-b435-914ac8f54e5f
5498 :END:
5499 *** M-10/kp-insert
5500 :PROPERTIES:
5501 :CUSTOM_ID: 1b83659c-61dc-425f-bead-fc2a0d198dde
5502 :END:
5503 *** S-10/kp-insert
5504 :PROPERTIES:
5505 :CUSTOM_ID: d2f07180-2d20-4633-9c79-78f4d992f7a6
5506 :END:
5507 *** C-M-10/kp-insert
5508 :PROPERTIES:
5509 :CUSTOM_ID: 1f6eabdc-703c-4a05-829c-553ccf7d082d
5510 :END:
5511 *** C-S-10/kp-insert
5512 :PROPERTIES:
5513 :CUSTOM_ID: bb361418-370f-4b15-b7e1-8e85c7a6f032
5514 :END:
5515 *** 11/kp-subtract
5516 :PROPERTIES:
5517 :CUSTOM_ID: 0f84dddc-a1d2-428d-8c17-cf9ddbd24784
5518 :END:
5519 *** C-11/kp-subtract
5520 :PROPERTIES:
5521 :CUSTOM_ID: 4c3309ee-eb67-43ff-bc4a-44574b1c5e0f
5522 :END:
5523 *** M-11/kp-subtract
5524 :PROPERTIES:
5525 :CUSTOM_ID: e95a2822-5f0d-4b32-a17f-15d4650e086f
5526 :END:
5527 *** S-11/kp-subtract
5528 :PROPERTIES:
5529 :CUSTOM_ID: 667a9853-38c6-4bb2-8c01-6a30075929b4
5530 :END:
5531 *** C-M-11/kp-subtract
5532 :PROPERTIES:
5533 :CUSTOM_ID: d5b17698-9bfe-4bd7-af26-b5dd51684e7d
5534 :END:
5535 *** C-S-11/kp-subtract
5536 :PROPERTIES:
5537 :CUSTOM_ID: cfde57be-a728-4955-8b96-9ae5aa1cce01
5538 :END:
5539 *** 12/kp-add
5540 :PROPERTIES:
5541 :CUSTOM_ID: 5e7a0116-a847-4fec-81ed-a0286bb08ac5
5542 :END:
5543 *** C-12/kp-add
5544 :PROPERTIES:
5545 :CUSTOM_ID: 41dcdb69-8436-495b-9e55-a0cd623ac5aa
5546 :END:
5547 *** M-12/kp-add
5548 :PROPERTIES:
5549 :CUSTOM_ID: ebda57a2-cab3-4fed-b3b0-014a7e60c96f
5550 :END:
5551 *** S-12/kp-add
5552 :PROPERTIES:
5553 :CUSTOM_ID: 7e4c6085-cfbe-4c05-9edb-2aec2325f7b9
5554 :END:
5555 *** C-M-12/kp-add
5556 :PROPERTIES:
5557 :CUSTOM_ID: 7904cafb-7371-4bc9-a661-262d78f8f9b8
5558 :END:
5559 *** C-S-12/kp-add
5560 :PROPERTIES:
5561 :CUSTOM_ID: dcf498f0-5bcf-4402-bce0-561c11effb38
5562 :END:
5563 *** scroll
5564 :PROPERTIES:
5565 :CUSTOM_ID: 33433f0f-5b0e-46ba-8452-d2a51e54769b
5566 :END:
5567 up/dn / scroll
5568 on standard mouse, this scrolls,
5569 because we have the accuracy to pick things up and
5570 down easier, and because it is familiar.
5571 *** [C-scroll] :drill:
5572 SCHEDULED: <2014-03-27 Thu>
5573 :PROPERTIES:
5574 cycle recent buffers
5575 :ID: 678b14e8-e991-46da-84a0-50d142ecbbba
5576 :CUSTOM_ID: 16506ba5-e8f2-4aec-bc1b-d2854d4e504c
5577 :DRILL_LAST_INTERVAL: 50.6823
5578 :DRILL_REPEATS_SINCE_FAIL: 3
5579 :DRILL_TOTAL_REPEATS: 3
5580 :DRILL_FAILURE_COUNT: 0
5581 :DRILL_AVERAGE_QUALITY: 5.0
5582 :DRILL_EASE: 5.815
5583 :DRILL_LAST_QUALITY: 5
5584 :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:36>
5585 :END:
5586 cursor up/down fast
5587 [
5588 #+begin_src emacs-lisp
5589 ;; compiling warns that next-line should be called interactively,
5590 ;; but we would have to do something dumb, like give it a
5591 ;; vector of keys in order to supply the 8 argument
5592 (defun down-fast ()
5593 (interactive)
5594 (next-line 8))
5595 (defun up-fast ()
5596 (interactive)
5597 (next-line -8))
5598
5599 (global-set-key (kbd "<C-up>") 'up-fast)
5600 (global-set-key (kbd "<C-down>") 'down-fast)
5601
5602 (add-hook 'comint-mode-hook
5603 (lambda ()
5604 (define-key comint-mode-map (kbd "<C-mouse-4>") 'comint-previous-prompt)
5605 (define-key comint-mode-map (kbd "<C-mouse-5>") 'comint-next-prompt)))
5606 #+end_src
5607 ]
5608
5609 *** [M-scroll]
5610 :PROPERTIES:
5611 :CUSTOM_ID: e1e2e253-450d-4620-af9e-78d378f49ad5
5612 :END:
5613 forward/back s-exp
5614 [
5615 #+begin_src emacs-lisp
5616 (global-set-key (kbd "<M-mouse-4>") 'backward-sexp)
5617 (global-set-key (kbd "<M-mouse-5>") 'forward-sexp)
5618 #+end_src
5619 ]
5620 *** [S-scroll] :drill:
5621 SCHEDULED: <2014-03-22 Sat>
5622 :PROPERTIES:
5623 expand region
5624 :ID: c2da442e-b8c0-4b8a-899f-989af89bd857
5625 :CUSTOM_ID: 74b2196a-345d-453a-b7be-1915360eb201
5626 :DRILL_LAST_INTERVAL: 27.0855
5627 :DRILL_REPEATS_SINCE_FAIL: 5
5628 :DRILL_TOTAL_REPEATS: 5
5629 :DRILL_FAILURE_COUNT: 2
5630 :DRILL_AVERAGE_QUALITY: 3.4
5631 :DRILL_EASE: 2.666
5632 :DRILL_LAST_QUALITY: 4
5633 :DRILL_LAST_REVIEWED: <2014-02-23 Sun 02:26>
5634 :END:
5635 expand/contract region
5636 [
5637 #+begin_src emacs-lisp
5638 (global-set-key (kbd "<S-mouse-13>") 'my-contract-region)
5639 (global-set-key (kbd "<S-mouse-14>") 'er/expand-region)
5640 (global-set-key (kbd "<S-mouse-4>") 'my-contract-region)
5641 (global-set-key (kbd "<S-mouse-5>") 'er/expand-region)
5642 (global-set-key (kbd "<S-up>") 'my-contract-region)
5643 (global-set-key (kbd "<S-down>") 'er/expand-region)
5644
5645 (defun my-contract-region (arg)
5646 (interactive "p")
5647 (let ((current-prefix-arg '-))
5648 (call-interactively 'er/expand-region)))
5649 #+end_src
5650 ]
5651 *** [C-M-scroll] :drill:
5652 SCHEDULED: <2014-03-27 Thu>
5653 :PROPERTIES:
5654 scroll
5655 :ID: b94d89ed-5a06-4916-b5f5-e0bf1a552362
5656 :CUSTOM_ID: bd2ca117-408c-49fc-a5ac-a938be21dfc0
5657 :DRILL_LAST_INTERVAL: 50.6823
5658 :DRILL_REPEATS_SINCE_FAIL: 3
5659 :DRILL_TOTAL_REPEATS: 3
5660 :DRILL_FAILURE_COUNT: 0
5661 :DRILL_AVERAGE_QUALITY: 5.0
5662 :DRILL_EASE: 5.815
5663 :DRILL_LAST_QUALITY: 5
5664 :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:40>
5665 :END:
5666 scroll
5667 [
5668 background: I originally tried to make c-scroll be scroll
5669 , but this made
5670 for better compatibility with the standard mouse
5671 #+begin_src emacs-lisp
5672 (global-set-key (kbd "<C-M-mouse-4>") 'mwheel-scroll)
5673 (global-set-key (kbd "<C-M-mouse-5>") 'mwheel-scroll)
5674 ; (require 'smooth-scroll)
5675 ; (smooth-scroll-mode nil)
5676 ; (global-set-key (kbd "<C-M-mouse-4>") 'scroll-up-1)
5677 ;(global-set-key (kbd "<C-M-mouse-5>") 'scroll-down-1)
5678 #+end_src
5679 ]
5680 *** [C-S-scroll] :drill:
5681 SCHEDULED: <2014-03-18 Tue>
5682 :PROPERTIES:
5683 zoom
5684 :ID: 368f60cb-91e5-4694-b342-e0049e5d3e2c
5685 :CUSTOM_ID: a69254a4-cf2d-450f-b477-2694b44a7e0d
5686 :DRILL_LAST_INTERVAL: 9.2113
5687 :DRILL_REPEATS_SINCE_FAIL: 3
5688 :DRILL_TOTAL_REPEATS: 7
5689 :DRILL_FAILURE_COUNT: 3
5690 :DRILL_AVERAGE_QUALITY: 2.943
5691 :DRILL_EASE: 2.429
5692 :DRILL_LAST_QUALITY: 3
5693 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:34>
5694 :END:
5695 increase / decrease text size
5696 [
5697 #+begin_src emacs-lisp
5698 (global-set-key (kbd "<C-S-mouse-4>") 'text-scale-increase)
5699 (global-set-key (kbd "<C-S-mouse-5>") 'text-scale-decrease)
5700 (global-set-key (kbd "<C-S-mouse-13>") 'text-scale-increase)
5701 (global-set-key (kbd "<C-S-mouse-14>") 'text-scale-decrease)
5702 (global-set-key (kbd "<C-S-down>") 'text-scale-increase)
5703 (global-set-key (kbd "<C-S-up>") 'text-scale-decrease)
5704 #+end_src
5705 ]
5706 *** left-scroll
5707 :PROPERTIES:
5708 :CUSTOM_ID: d2d5c5c7-f0de-4e08-953b-d41d3e282ba7
5709 :END:
5710 left/right
5711 *** [C-left-scroll] :drill:
5712 SCHEDULED: <2014-03-27 Thu>
5713 :PROPERTIES:
5714 :CUSTOM_ID: 7bb95aa5-381e-454a-a6c6-aaeec728db08
5715 :ID: 04bdffa0-52fe-4d90-a222-a6e41d75b13b
5716 :DRILL_LAST_INTERVAL: 50.6823
5717 :DRILL_REPEATS_SINCE_FAIL: 3
5718 :DRILL_TOTAL_REPEATS: 3
5719 :DRILL_FAILURE_COUNT: 0
5720 :DRILL_AVERAGE_QUALITY: 5.0
5721 :DRILL_EASE: 5.815
5722 :DRILL_LAST_QUALITY: 5
5723 :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:35>
5724 :END:
5725 back / forward word
5726 #+begin_src emacs-lisp
5727 (global-set-key (kbd "<C-left>") 'backward-symbol)
5728 (global-set-key (kbd "<C-right>") 'forward-symbol)
5729 #+end_src
5730 *** [M-left-scroll] :drill:
5731 :PROPERTIES:
5732 winner undo redo
5733 :CUSTOM_ID: 49db3764-b154-4cfc-8d0d-f0e0451815e3
5734 :ID: 97ef29fd-aea5-49ce-aff2-7a8c8d1b3d5d
5735 :DRILL_LAST_INTERVAL: 0.0
5736 :DRILL_REPEATS_SINCE_FAIL: 0
5737 :DRILL_TOTAL_REPEATS: 9
5738 :DRILL_FAILURE_COUNT: 10
5739 :DRILL_AVERAGE_QUALITY: 2.518
5740 :DRILL_EASE: 2.225
5741 :DRILL_LAST_QUALITY: 2
5742 :DRILL_LAST_REVIEWED: <2014-04-14 Mon 11:30>
5743 :END:
5744
5745 *** S-left-scroll
5746 :PROPERTIES:
5747 :CUSTOM_ID: ca5cdcd4-b3da-4d7b-86ab-4c7c0ac2caf7
5748 :END:
5749 ---
5750 unreachable
5751 *** C-M-left-scroll
5752 unreachable
5753 *** C-S-left-scroll
5754 :PROPERTIES:
5755 :CUSTOM_ID: 7b4f1f49-6d93-4210-a30c-8278d6e63655
5756 :ID: b6ea3b66-d9a6-4a33-ae1c-0464d118f006
5757 :END:
5758 unreachable
5759 ** left primary
5760 *** [C-2] :drill:
5761 SCHEDULED: <2014-04-04 Fri>
5762 :PROPERTIES:
5763 :ID: 845cf47f-22d5-4100-837d-fbc066e33c9c
5764 :CUSTOM_ID: 4f29b011-3844-4a4a-b75d-cdf8f49e9adb
5765 :DRILL_LAST_INTERVAL: 26.3927
5766 :DRILL_REPEATS_SINCE_FAIL: 5
5767 :DRILL_TOTAL_REPEATS: 6
5768 :DRILL_FAILURE_COUNT: 2
5769 :DRILL_AVERAGE_QUALITY: 3.25
5770 :DRILL_EASE: 2.58
5771 :DRILL_LAST_QUALITY: 4
5772 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:36>
5773 :END:
5774 narrow-to-defun/subtree
5775 [
5776 #+begin_src emacs-lisp
5777 (global-unset-key (kbd "C-2"))
5778 (defun copy-symbol (&optional arg)
5779 "Copy symbol at point into kill-ring"
5780 (interactive "P")
5781 (kill-new (thing-at-point 'symbol)))
5782
5783 (global-set-key (kbd "C-2") 'copy-symbol)
5784
5785 (global-set-key (kbd "C-4") 'narrow-to-defun)
5786 (add-hook 'org-mode-hook
5787 (lambda () (local-set-key (kbd "C-4") 'org-narrow-to-subtree)))
5788 #+end_src
5789 ]
5790 *** M-2
5791 :PROPERTIES:
5792 :CUSTOM_ID: 53ecfda2-d9f6-4882-b7a2-9b3c859e3bcb
5793 :END:
5794 *** [C-M-2]
5795 :PROPERTIES:
5796 :CUSTOM_ID: 33c4996d-92bc-4df0-b005-11553677be13
5797 :END:
5798 ---
5799 [
5800 #+begin_src emacs-lisp
5801 (global-unset-key (kbd "C-M-2"))
5802 #+end_src
5803 ]
5804 *** C-S-2
5805 :PROPERTIES:
5806 :CUSTOM_ID: 43af8e87-216d-47f7-9779-48ef66c7ca5f
5807 :END:
5808 *** [C-3] :drill:
5809 SCHEDULED: <2014-03-27 Thu>
5810 :PROPERTIES:
5811 :ID: 9495ba60-017a-49b0-b0b6-366c3334e909
5812 :CUSTOM_ID: 7851a05e-7177-4a8f-af5a-3325a8f116fe
5813 :DRILL_LAST_INTERVAL: 50.6823
5814 :DRILL_REPEATS_SINCE_FAIL: 3
5815 :DRILL_TOTAL_REPEATS: 3
5816 :DRILL_FAILURE_COUNT: 0
5817 :DRILL_AVERAGE_QUALITY: 5.0
5818 :DRILL_EASE: 5.815
5819 :DRILL_LAST_QUALITY: 5
5820 :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:41>
5821 :END:
5822 dot-mode-execute
5823 [
5824 #+begin_src emacs-lisp
5825 (global-set-key (kbd "C-3") 'dot-mode-execute)
5826 #+end_src
5827 ]
5828 *** M-3
5829 :PROPERTIES:
5830 :CUSTOM_ID: ddceb843-06db-4078-914f-da225cac107e
5831 :END:
5832 *** [C-M-3] :drill:
5833 SCHEDULED: <2014-03-11 Tue>
5834 :PROPERTIES:
5835 :CUSTOM_ID: 9a00e17f-a1c9-48fc-b03b-c6a1a3cbda1c
5836 :ID: 75be5945-8bc4-4041-a44f-de2d9af66f4f
5837 :DRILL_LAST_INTERVAL: 19.6736
5838 :DRILL_REPEATS_SINCE_FAIL: 4
5839 :DRILL_TOTAL_REPEATS: 5
5840 :DRILL_FAILURE_COUNT: 1
5841 :DRILL_AVERAGE_QUALITY: 3.4
5842 :DRILL_EASE: 2.666
5843 :DRILL_LAST_QUALITY: 4
5844 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:48>
5845 :END:
5846 recenter-top-bottom
5847 [
5848 #+begin_src emacs-lisp
5849 (global-set-key (kbd "C-M-3") 'recenter-top-bottom)
5850 #+end_src
5851 ]
5852 *** C-S-3
5853 :PROPERTIES:
5854 :CUSTOM_ID: 224cf9b0-2e12-4cc7-a7e1-746784c87777
5855 :END:
5856 *** [C-q] :drill:
5857 SCHEDULED: <2014-03-27 Thu>
5858 :PROPERTIES:
5859 :ID: e7f30a61-8557-4b7e-898c-96db9d649f39
5860 :CUSTOM_ID: 679fd3cd-c43b-409c-be36-4175a5f27cd3
5861 :DRILL_LAST_INTERVAL: 50.6823
5862 :DRILL_REPEATS_SINCE_FAIL: 3
5863 :DRILL_TOTAL_REPEATS: 3
5864 :DRILL_FAILURE_COUNT: 0
5865 :DRILL_AVERAGE_QUALITY: 5.0
5866 :DRILL_EASE: 5.815
5867 :DRILL_LAST_QUALITY: 5
5868 :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:42>
5869 :END:
5870 org-cycle, comint previous arg
5871 [
5872 #+begin_src emacs-lisp
5873 (add-hook 'org-mode-hook
5874 (lambda () (define-key org-mode-map (kbd "C-q") 'org-cycle)))
5875 (define-key widget-keymap (kbd "C-q") 'widget-forward)
5876 (add-hook 'comint-mode-hook
5877 (lambda () (define-key comint-mode-map (kbd "C-q") 'comint-insert-previous-argument)))
5878 #+end_src
5879 ]
5880 *** [M-q] :drill:
5881 SCHEDULED: <2014-03-19 Wed>
5882 :PROPERTIES:
5883 org-archive-to-archive-sibling
5884 :CUSTOM_ID: 72bada0e-5d62-4a8f-ae62-4972778ff1bc
5885 :ID: 4c8104f4-9251-4915-b076-6989c7cce3be
5886 :DRILL_LAST_INTERVAL: 10.3717
5887 :DRILL_REPEATS_SINCE_FAIL: 4
5888 :DRILL_TOTAL_REPEATS: 8
5889 :DRILL_FAILURE_COUNT: 6
5890 :DRILL_AVERAGE_QUALITY: 2.6
5891 :DRILL_EASE: 2.266
5892 :DRILL_LAST_QUALITY: 3
5893 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:35>
5894 :END:
5895 org-archive-to-archive-sibling
5896 [
5897 #+begin_src emacs-lisp
5898 (global-set-key (kbd "M-q") 'org-archive-to-archive-sibling)
5899 #+end_src
5900 ]
5901
5902 *** [C-M-q] :drill:
5903 SCHEDULED: <2014-03-12 Wed>
5904 :PROPERTIES:
5905 :ID: ab67e1da-41dd-40bd-96c1-556cafc6b630
5906 :DRILL_LAST_INTERVAL: 9.9427
5907 :DRILL_REPEATS_SINCE_FAIL: 3
5908 :DRILL_TOTAL_REPEATS: 6
5909 :DRILL_FAILURE_COUNT: 2
5910 :DRILL_AVERAGE_QUALITY: 3.104
5911 :DRILL_EASE: 2.506
5912 :DRILL_LAST_QUALITY: 4
5913 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 20:57>
5914 :CUSTOM_ID: 1f5e9b63-7ce0-445c-a426-b41839585d38
5915 :END:
5916 quoted-insert
5917 [
5918 #+begin_src emacs-lisp
5919 (global-set-key (kbd "C-M-q") 'quoted-insert)
5920 #+end_src
5921 ]
5922 *** C-S-q
5923 :PROPERTIES:
5924 :CUSTOM_ID: c16f1753-126b-499b-af0e-669129ccd3ea
5925 :END:
5926 *** [C-w]
5927 :PROPERTIES:
5928 :CUSTOM_ID: 20005b6d-9a9d-4b58-882c-7ce860c7a395
5929 :END:
5930 goto-t.org
5931 [
5932 #+begin_src emacs-lisp
5933 (global-set-key (kbd "C-w") (lambda () (interactive) (goto-buffer-or-find-file "/a/t.org")))
5934 #+end_src
5935 ]
5936 *** [M-w] :drill:
5937 SCHEDULED: <2014-03-18 Tue>
5938 :PROPERTIES:
5939 org-clock-in
5940 :ID: c271d82d-e40a-43c3-9c16-753633c1fc14
5941 :CUSTOM_ID: 331da6e5-7936-4663-8f58-9d8601b5915c
5942 :DRILL_LAST_INTERVAL: 41.7787
5943 :DRILL_REPEATS_SINCE_FAIL: 3
5944 :DRILL_TOTAL_REPEATS: 3
5945 :DRILL_FAILURE_COUNT: 0
5946 :DRILL_AVERAGE_QUALITY: 4.667
5947 :DRILL_EASE: 4.583
5948 :DRILL_LAST_QUALITY: 4
5949 :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:36>
5950 :END:
5951 org-clock-in
5952 [
5953 #+begin_src emacs-lisp
5954 (global-set-key (kbd "M-w") 'org-clock-in)
5955 #+end_src
5956 ]
5957 *** C-M-w
5958 :PROPERTIES:
5959 :CUSTOM_ID: cede4936-de2f-404f-a0e6-264f08215a7c
5960 :END:
5961 *** C-S-w
5962 :PROPERTIES:
5963 :CUSTOM_ID: 3465b986-717a-43b4-910f-3d187789c027
5964 :END:
5965 *** [C-e]
5966 copy-line
5967 [
5968 #+begin_src emacs-lisp
5969 ; todo, make repeated calls to this append the kills
5970 (defun copy-line (&optional arg)
5971 "Copy lines (as many as prefix argument) in the kill ring.
5972 Ease of use features:
5973 - Move to start of next line.
5974 - Appends the copy on sequential calls.
5975 - Use newline as last char even on the last line of the buffer.
5976 - If region is active, copy its lines."
5977 (interactive "p")
5978 (let ((beg (line-beginning-position))
5979 (end (line-end-position (or arg 1))))
5980 (when mark-active
5981 (if (> (point) (mark))
5982 (setq beg (save-excursion (goto-char (mark)) (line-beginning-position)))
5983 (setq end (save-excursion (goto-char (mark)) (line-end-position)))))
5984 (if (eq last-command 'copy-line)
5985 (kill-append (buffer-substring beg end) (< end beg))
5986 (kill-ring-save beg end)))
5987 (kill-append "\n" nil)
5988 ;; dun need cuz I have yank-better
5989 ;;(beginning-of-line (or (and arg (1+ arg)) 2))
5990 (if (and arg (not (= 1 arg))) (message "%d lines copied" arg)))
5991
5992 (global-set-key (kbd "C-e") 'copy-line)
5993 #+end_src
5994 :PROPERTIES:
5995 :ID: 4ff8e0ad-15c0-4cb0-b6cc-314e7b5f80c0
5996 :CUSTOM_ID: 24e34f4b-d1e8-4380-933f-ab1f78ebc782
5997 :DRILL_LAST_INTERVAL: 2.4849
5998 :DRILL_REPEATS_SINCE_FAIL: 1
5999 :DRILL_TOTAL_REPEATS: 1
6000 :DRILL_FAILURE_COUNT: 0
6001 :DRILL_AVERAGE_QUALITY: 5.0
6002 :DRILL_EASE: 5.815
6003 :DRILL_LAST_QUALITY: 5
6004 :DRILL_LAST_REVIEWED: <2014-01-11 Sat 01:30>
6005 :END:
6006 ]
6007 *** [M-e] :drill:
6008 SCHEDULED: <2014-04-01 Tue>
6009 :PROPERTIES:
6010 org-clock-in-last
6011 :ID: 39424175-21e2-4126-9a51-dea451497841
6012 :CUSTOM_ID: 0a771449-0cd5-4dc9-82ca-bcac5f7abd17
6013 :DRILL_LAST_INTERVAL: 36.7949
6014 :DRILL_REPEATS_SINCE_FAIL: 4
6015 :DRILL_TOTAL_REPEATS: 4
6016 :DRILL_FAILURE_COUNT: 0
6017 :DRILL_AVERAGE_QUALITY: 4.0
6018 :DRILL_EASE: 3.204
6019 :DRILL_LAST_QUALITY: 3
6020 :DRILL_LAST_REVIEWED: <2014-02-23 Sun 01:48>
6021 :END:
6022 org-clock-in-last
6023 [
6024 #+begin_src emacs-lisp
6025 (global-set-key (kbd "M-e") 'org-clock-in-last)
6026 #+end_src
6027 ]
6028 *** C-M-e
6029 :PROPERTIES:
6030 :CUSTOM_ID: 4a7a4324-e03d-43dc-8e9c-9622788519fb
6031 :END:
6032 *** C-S-e
6033 :PROPERTIES:
6034 :CUSTOM_ID: e202e1d5-b7ac-4171-b86a-b77592344f30
6035 :END:
6036 *** [C-r] :drill:
6037 SCHEDULED: <2014-04-07 Mon>
6038 :PROPERTIES:
6039 isearch-backward
6040 :ID: 39bcde9c-2b49-401e-9e81-ee42941233bf
6041 :CUSTOM_ID: 5c55f461-f43f-493d-81eb-1ca747175ef1
6042 :DRILL_LAST_INTERVAL: 42.8284
6043 :DRILL_REPEATS_SINCE_FAIL: 4
6044 :DRILL_TOTAL_REPEATS: 4
6045 :DRILL_FAILURE_COUNT: 0
6046 :DRILL_AVERAGE_QUALITY: 4.5
6047 :DRILL_EASE: 4.122
6048 :DRILL_LAST_QUALITY: 5
6049 :DRILL_LAST_REVIEWED: <2014-02-23 Sun 01:51>
6050 :END:
6051 isearch-backward
6052 [
6053 #+begin_src emacs-lisp
6054 (global-set-key (kbd "C-r") 'isearch-backward)
6055 (add-hook 'comint-mode-hook
6056 (lambda ()
6057 (define-key comint-mode-map (kbd "C-r") 'comint-history-isearch-backward-regexp)))
6058
6059 #+end_src
6060 ]
6061 *** [M-r] :drill:
6062 SCHEDULED: <2014-04-30 Wed>
6063 :PROPERTIES:
6064 org-clock-out
6065 :ID: dc2c7192-6cfb-4c06-bd17-ff2cef3b05a6
6066 :CUSTOM_ID: dd9575bd-e471-418e-9519-4fc2b874ddcd
6067 :DRILL_LAST_INTERVAL: 59.1432
6068 :DRILL_REPEATS_SINCE_FAIL: 4
6069 :DRILL_TOTAL_REPEATS: 4
6070 :DRILL_FAILURE_COUNT: 0
6071 :DRILL_AVERAGE_QUALITY: 4.25
6072 :DRILL_EASE: 3.59
6073 :DRILL_LAST_QUALITY: 3
6074 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:10>
6075 :END:
6076 org-clock-out
6077 [
6078 #+begin_src emacs-lisp
6079 (global-set-key (kbd "M-r") 'org-clock-out)
6080 #+end_src
6081 ]
6082 *** C-M-r
6083 *** C-S-r
6084 :PROPERTIES:
6085 :CUSTOM_ID: 05e2290b-0d2c-407c-9bf0-adc7a008336b
6086 :END:
6087 *** [C-a] :drill:
6088 SCHEDULED: <2014-03-15 Sat>
6089 :PROPERTIES:
6090 copy-all
6091 :CUSTOM_ID: db4b76df-9420-4256-8242-dc44b56d55d7
6092 :ID: f6b2b504-b88d-418b-b6b0-5e0e582bd205
6093 :DRILL_LAST_INTERVAL: 24.4352
6094 :DRILL_REPEATS_SINCE_FAIL: 4
6095 :DRILL_TOTAL_REPEATS: 4
6096 :DRILL_FAILURE_COUNT: 0
6097 :DRILL_AVERAGE_QUALITY: 3.75
6098 :DRILL_EASE: 2.929
6099 :DRILL_LAST_QUALITY: 4
6100 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:39>
6101 :END:
6102 copy buffer
6103 [
6104 #+begin_src emacs-lisp
6105 (defun copy-all ()
6106 "Copy entire buffer to clipboard"
6107 (interactive)
6108 (clipboard-kill-ring-save (point-min) (point-max)))
6109 (global-set-key (kbd "C-a") 'copy-all)
6110 #+end_src
6111 ]
6112 *** [M-a] :drill:
6113 SCHEDULED: <2014-03-27 Thu>
6114 :PROPERTIES:
6115 kmacro-start-macro-or-in...
6116 :ID: 4019514b-abb1-464e-b4c9-d9ca39af2a82
6117 :CUSTOM_ID: e865a1e5-55bf-4a98-a0d0-cb05a88de352
6118 :DRILL_LAST_INTERVAL: 50.6823
6119 :DRILL_REPEATS_SINCE_FAIL: 3
6120 :DRILL_TOTAL_REPEATS: 3
6121 :DRILL_FAILURE_COUNT: 0
6122 :DRILL_AVERAGE_QUALITY: 5.0
6123 :DRILL_EASE: 5.815
6124 :DRILL_LAST_QUALITY: 5
6125 :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:40>
6126 :END:
6127 macro record
6128 [
6129 #+begin_src emacs-lisp
6130 (global-set-key (kbd "M-a") 'kmacro-start-macro-or-insert-counter)
6131
6132 #+end_src
6133 ]
6134 *** [C-M-a] :drill:
6135 SCHEDULED: <2014-03-27 Thu>
6136 :PROPERTIES:
6137 kmacro-end-or-call-macro
6138 :ID: 10cdc522-2bea-4601-acf9-ec81a52a34d8
6139 :CUSTOM_ID: c6278a5a-024f-4c80-a8d4-65f127fd24a8
6140 :DRILL_LAST_INTERVAL: 50.6823
6141 :DRILL_REPEATS_SINCE_FAIL: 3
6142 :DRILL_TOTAL_REPEATS: 3
6143 :DRILL_FAILURE_COUNT: 0
6144 :DRILL_AVERAGE_QUALITY: 5.0
6145 :DRILL_EASE: 5.815
6146 :DRILL_LAST_QUALITY: 5
6147 :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:35>
6148 :END:
6149 macro end / call
6150 [
6151 #+begin_src emacs-lisp
6152 (global-set-key (kbd "C-M-a") 'kmacro-end-or-call-macro)
6153 (add-hook 'LaTeX-mode-hook (lambda () (define-key LaTeX-mode-map (kbd "C-M-a") nil)))
6154 (add-hook 'c-mode-hook
6155 (lambda () (define-key c-mode-map (kbd "C-M-a") nil)))
6156
6157 #+end_src
6158 ]
6159 *** C-S-a
6160 :PROPERTIES:
6161 :CUSTOM_ID: 649a3fe7-3932-475a-b23c-28db9874de27
6162 :END:
6163 *** C-s
6164 :PROPERTIES:
6165 C-x prefix
6166 :ID: e05a67d7-f7ee-4b23-afb1-0053d5eefb4c
6167 :CUSTOM_ID: 01da04da-cdba-493f-892b-c4c064cf937e
6168 :END:
6169 c-x prefix
6170
6171 *** M-s
6172 :PROPERTIES:
6173 :CUSTOM_ID: 5e4bf939-90a1-4ace-a7bf-add95c8596d2
6174 :END:
6175 *** [C-M-s] :drill:
6176 SCHEDULED: <2014-03-18 Tue>
6177 :PROPERTIES:
6178 split-window-vertically
6179 :ID: 18a271e1-c1d2-45e6-aed3-6b81b4b6ea71
6180 :CUSTOM_ID: 4b33022d-27f0-4d21-9931-2e2e692790e8
6181 :DRILL_LAST_INTERVAL: 26.5334
6182 :DRILL_REPEATS_SINCE_FAIL: 4
6183 :DRILL_TOTAL_REPEATS: 4
6184 :DRILL_FAILURE_COUNT: 0
6185 :DRILL_AVERAGE_QUALITY: 3.75
6186 :DRILL_EASE: 2.929
6187 :DRILL_LAST_QUALITY: 3
6188 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:46>
6189 :END:
6190 split-window-vertically
6191 [
6192 #+begin_src emacs-lisp
6193 (global-set-key (kbd "C-M-s") 'split-window-vertically)
6194 #+end_src
6195 ]
6196 *** C-S-s
6197 :PROPERTIES:
6198 :CUSTOM_ID: 901a2445-200c-42f2-91c6-4309d71b39dd
6199 :END:
6200 *** C-d
6201 :PROPERTIES:
6202 :CUSTOM_ID: b699614a-9994-4fe7-b2c6-f0fe81b7ad2b
6203 :END:
6204 C-c prefix
6205 *** [M-d] :drill:
6206 SCHEDULED: <2014-04-05 Sat>
6207 :PROPERTIES:
6208 whitespace-cleanup
6209 :ID: 58f5421a-9df0-44cd-acb9-d018ccdba58c
6210 :CUSTOM_ID: 06bcc5e2-f3a7-41c6-a793-ac6c9813fb6e
6211 :DRILL_LAST_INTERVAL: 27.3693
6212 :DRILL_REPEATS_SINCE_FAIL: 5
6213 :DRILL_TOTAL_REPEATS: 6
6214 :DRILL_FAILURE_COUNT: 2
6215 :DRILL_AVERAGE_QUALITY: 3.417
6216 :DRILL_EASE: 2.676
6217 :DRILL_LAST_QUALITY: 4
6218 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:36>
6219 :END:
6220 whitespace-cleanup
6221 [
6222 #+begin_src emacs-lisp
6223 (global-set-key (kbd "M-d") 'whitespace-cleanup)
6224 #+end_src
6225 ]
6226 *** [C-M-d] :drill:
6227 SCHEDULED: <2014-03-19 Wed>
6228 :PROPERTIES:
6229 swap buffer
6230 :CUSTOM_ID: 8cf6053d-792b-4abd-a3a6-66efd7fbee68
6231 :ID: 747aabec-b164-4813-93c8-92d5c8778635
6232 :DRILL_LAST_INTERVAL: 9.5325
6233 :DRILL_REPEATS_SINCE_FAIL: 4
6234 :DRILL_TOTAL_REPEATS: 10
6235 :DRILL_FAILURE_COUNT: 8
6236 :DRILL_AVERAGE_QUALITY: 2.636
6237 :DRILL_EASE: 2.284
6238 :DRILL_LAST_QUALITY: 3
6239 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:35>
6240 :END:
6241 swap buffer across windows
6242 [
6243 from http://www.emacswiki.org/emacs/TransposeWindows
6244 #+begin_src emacs-lisp
6245 (setq swapping-buffer nil)
6246 (setq swapping-window nil)
6247 (defun swap-buffers-in-windows ()
6248 "Swap buffers between two windows"
6249 (interactive)
6250 (if (and swapping-window
6251 swapping-buffer)
6252 (let ((this-buffer (current-buffer))
6253 (this-window (selected-window)))
6254 (if (and (window-live-p swapping-window)
6255 (buffer-live-p swapping-buffer))
6256 (progn (switch-to-buffer swapping-buffer)
6257 (select-window swapping-window)
6258 (switch-to-buffer this-buffer)
6259 (select-window this-window)
6260 (message "Swapped buffers."))
6261 (message "Old buffer/window killed. Aborting."))
6262 (setq swapping-buffer nil)
6263 (setq swapping-window nil))
6264 (progn
6265 (setq swapping-buffer (current-buffer))
6266 (setq swapping-window (selected-window))
6267 (message "Buffer and window marked for swapping."))))
6268
6269 (global-set-key (kbd "C-M-d") 'swap-buffers-in-windows)
6270 #+end_src
6271 ]
6272 *** C-S-d
6273 :PROPERTIES:
6274 :CUSTOM_ID: d3166178-3d87-4caa-a937-9797fc2b6a39
6275 :END:
6276 *** [C-f]
6277 :PROPERTIES:
6278 :CUSTOM_ID: 2695ed8a-e0d3-4e84-8688-98e3c50723b0
6279 :END:
6280 kill-whole-line
6281 [
6282 #+begin_src emacs-lisp
6283 (global-set-key (kbd "C-f") 'kill-whole-line-wrapper)
6284 (defun kill-whole-line-wrapper (&optional arg)
6285 "If we are at the end of the file, kill backwards instead of doing nothing."
6286 (interactive "P")
6287 (if (= (point) (point-max))
6288 (kill-whole-line -1)
6289 (kill-whole-line arg)))
6290 #+end_src
6291 ]
6292 *** M-f
6293 :PROPERTIES:
6294 :CUSTOM_ID: 869f0aec-c739-4fb7-8e3a-8b55ab637765
6295 :END:
6296 *** [C-M-f]
6297 :PROPERTIES:
6298 :CUSTOM_ID: e7e4dd0b-418f-48ee-b366-9e733e3bec61
6299 :END:
6300 kill rest of line
6301 [
6302 #+begin_src emacs-lisp
6303
6304 (add-hook 'org-mode-hook
6305 (lambda ()
6306 (define-key org-mode-map (kbd "C-M-f") 'org-kill-line)))
6307
6308 (global-set-key (kbd "C-M-f") 'kill-line)
6309 #+end_src
6310 ]
6311 *** C-S-f
6312 :PROPERTIES:
6313 :CUSTOM_ID: a59eb2ca-9439-4836-81f9-384bc8c07739
6314 :END:
6315 *** [C-g]
6316 SCHEDULED: <2014-01-13 Mon>
6317 :PROPERTIES:
6318 other-window / cancel
6319 :ID: a4e9c495-02c1-432e-beba-12a9d4d61e8a
6320 :CUSTOM_ID: 4af40595-7010-4be6-8cfe-a43797ca6e33
6321 :DRILL_LAST_INTERVAL: 2.4849
6322 :DRILL_REPEATS_SINCE_FAIL: 1
6323 :DRILL_TOTAL_REPEATS: 1
6324 :DRILL_FAILURE_COUNT: 0
6325 :DRILL_AVERAGE_QUALITY: 5.0
6326 :DRILL_EASE: 5.815
6327 :DRILL_LAST_QUALITY: 5
6328 :DRILL_LAST_REVIEWED: <2014-01-11 Sat 01:41>
6329 :END:
6330 cancel / other window
6331 [
6332 #+begin_src emacs-lisp
6333 (global-set-key (kbd "C-g") 'other-window)
6334 #+end_src
6335 ]
6336 *** [M-g] :drill:
6337 SCHEDULED: <2014-03-13 Thu>
6338 :PROPERTIES:
6339 abort-recursive-edit
6340 :ID: 1e8e0c57-2885-4c0c-9b94-3ec0c02b706e
6341 :CUSTOM_ID: fb0b343f-fdff-463a-94f4-3152191e17c4
6342 :DRILL_LAST_INTERVAL: 22.1939
6343 :DRILL_REPEATS_SINCE_FAIL: 4
6344 :DRILL_TOTAL_REPEATS: 4
6345 :DRILL_FAILURE_COUNT: 0
6346 :DRILL_AVERAGE_QUALITY: 3.5
6347 :DRILL_EASE: 2.73
6348 :DRILL_LAST_QUALITY: 4
6349 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 16:33>
6350 :END:
6351 abort-recursive-edit
6352 [
6353 #+begin_src emacs-lisp
6354 (global-set-key (kbd "M-g") 'abort-recursive-edit)
6355 #+end_src
6356 ]
6357 *** [C-M-g]
6358 :PROPERTIES:
6359 :CUSTOM_ID: 327e18af-30b7-47e5-aa53-5f678788b4c1
6360 :END:
6361 gnus
6362 [
6363 #+begin_src emacs-lisp
6364 (global-set-key (kbd "C-M-g") 'gnus)
6365 #+end_src
6366 ]
6367 *** C-S-g
6368 :PROPERTIES:
6369 :CUSTOM_ID: 1d4edc55-7b30-4648-b869-b82f8f1d7b1a
6370 :END:
6371 *** C-z
6372 :PROPERTIES:
6373 undo-tree-undo
6374 :ID: 42d7f2bf-3ba3-488b-b501-bd4680dbb8de
6375 :CUSTOM_ID: 707c4938-a790-4da9-8230-61855ea57d09
6376 :END:
6377 [
6378 #+begin_src emacs-lisp
6379 (global-set-key (kbd "C-z") 'undo-tree-undo)
6380 #+end_src
6381 ]
6382 *** M-z
6383 :PROPERTIES:
6384 :CUSTOM_ID: a01c110e-9970-4571-84ab-379eecc7dd31
6385 :END:
6386 *** [C-M-z]
6387 *** C-S-z
6388 :PROPERTIES:
6389 :CUSTOM_ID: 3d56370d-11cd-4026-8e6b-3ae9b7b51714
6390 :END:
6391 *** C-x
6392 :PROPERTIES:
6393 :CUSTOM_ID: ec1403d3-528e-41b1-a195-5563bc93e124
6394 :END:
6395 kill-region
6396 #+begin_src emacs-lisp
6397 (global-set-key (kbd "C-s") 'kill-region)
6398 #+end_src
6399 *** [M-x] :drill:
6400 SCHEDULED: <2014-03-31 Mon>
6401 :PROPERTIES:
6402 :CUSTOM_ID: bb7c95d5-dd97-439d-bf1f-cdac98d11543
6403 :ID: 909cf249-c2f2-4251-bf18-c990ca9c6ff9
6404 :DRILL_LAST_INTERVAL: 21.5453
6405 :DRILL_REPEATS_SINCE_FAIL: 4
6406 :DRILL_TOTAL_REPEATS: 4
6407 :DRILL_FAILURE_COUNT: 0
6408 :DRILL_AVERAGE_QUALITY: 3.25
6409 :DRILL_EASE: 2.58
6410 :DRILL_LAST_QUALITY: 3
6411 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:33>
6412 :END:
6413 append-next-kill
6414 [
6415 #+begin_src emacs-lisp
6416 (global-set-key (kbd "M-x") 'append-next-kill)
6417 #+end_src
6418 ]
6419 *** [C-M-x] :drill:
6420 SCHEDULED: <2014-03-17 Mon>
6421 :PROPERTIES:
6422 append-next-kill
6423 :ID: b2b60fb4-95a3-4311-8ccd-7132f03ac9a8
6424 :CUSTOM_ID: c988370e-602c-431c-80a9-608459583f8b
6425 :DRILL_LAST_INTERVAL: 26.0772
6426 :DRILL_REPEATS_SINCE_FAIL: 4
6427 :DRILL_TOTAL_REPEATS: 4
6428 :DRILL_FAILURE_COUNT: 1
6429 :DRILL_AVERAGE_QUALITY: 3.5
6430 :DRILL_EASE: 2.73
6431 :DRILL_LAST_QUALITY: 3
6432 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:49>
6433 :END:
6434 cut-to-register
6435 [
6436 #+begin_src emacs-lisp
6437 ;; same args as copy-to-register
6438 (defun cut-to-register (register start end &optional delete-flag region)
6439 (interactive (list (register-read-with-preview "Cut to register: ")
6440 (region-beginning)
6441 (region-end)
6442 current-prefix-arg
6443 t))
6444 (copy-to-register register start end t region))
6445
6446 (global-set-key (kbd "C-M-x") 'cut-to-register)
6447 #+end_src
6448 ]
6449 *** C-S-x
6450 :PROPERTIES:
6451 :CUSTOM_ID: 0ce7383c-0776-407e-9ac5-981d1476f541
6452 :END:
6453 *** C-c
6454 :PROPERTIES:
6455 :ID: 5416e482-6f36-4d35-84c3-49bb184a53e9
6456 :CUSTOM_ID: 400f06e1-8e45-443c-8d7b-3d1bb1176aab
6457 :END:
6458 copy
6459 #+begin_src emacs-lisp
6460 (global-set-key (kbd "C-d") 'kill-ring-save)
6461 (add-hook 'c-mode-hook
6462 (lambda () (define-key c-mode-map (kbd "C-d") nil)))
6463 (add-hook 'comint-mode-hook
6464 (lambda ()
6465 (define-key comint-mode-map (kbd "C-d") nil)))
6466 ;; the base map is shared by many c-modes, like java
6467 (add-hook 'c-mode-hook
6468 (lambda ()
6469 (define-key c-mode-base-map "\C-d" nil)
6470 (define-key c-mode-base-map (kbd "<deletechar>") 'c-electric-delete-forward)))
6471
6472 #+end_src
6473 *** [M-c] :drill:
6474 SCHEDULED: <2014-03-24 Mon>
6475 :PROPERTIES:
6476 org-capture
6477 :ID: bf1cb358-ec72-425d-aebb-0c1f0ece7717
6478 :CUSTOM_ID: f4c3317a-a317-4d04-8cb7-e46d0716bf1d
6479 :DRILL_LAST_INTERVAL: 32.7466
6480 :DRILL_REPEATS_SINCE_FAIL: 4
6481 :DRILL_TOTAL_REPEATS: 4
6482 :DRILL_FAILURE_COUNT: 0
6483 :DRILL_AVERAGE_QUALITY: 4.0
6484 :DRILL_EASE: 3.204
6485 :DRILL_LAST_QUALITY: 4
6486 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:53>
6487 :END:
6488 org-capture
6489 [
6490 #+begin_src emacs-lisp
6491 (define-key global-map "\M-c" 'org-capture)
6492 #+end_src
6493 ]
6494 *** [C-M-c] :drill:
6495 SCHEDULED: <2014-03-24 Mon>
6496 :PROPERTIES:
6497 copy-to-register
6498 :ID: 956fd2ec-ad26-4842-b56c-f2165648c461
6499 :CUSTOM_ID: 0a151d99-47ae-4e8f-8407-82e77d24a3e7
6500 :DRILL_LAST_INTERVAL: 32.7466
6501 :DRILL_REPEATS_SINCE_FAIL: 4
6502 :DRILL_TOTAL_REPEATS: 4
6503 :DRILL_FAILURE_COUNT: 0
6504 :DRILL_AVERAGE_QUALITY: 4.0
6505 :DRILL_EASE: 3.204
6506 :DRILL_LAST_QUALITY: 4
6507 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:51>
6508 :END:
6509 copy-to-register
6510 [
6511 #+begin_src emacs-lisp
6512 (global-set-key (kbd "C-M-c") 'copy-to-register)
6513 #+end_src
6514 ]
6515 *** C-S-c
6516 :PROPERTIES:
6517 :CUSTOM_ID: b78d717f-cfb3-477a-b951-63f523635f5c
6518 :END:
6519 *** C-v
6520 :PROPERTIES:
6521 :CUSTOM_ID: 16411f68-7fe0-49e8-9a73-212471594f9e
6522 :END:
6523 yank
6524 #+begin_src emacs-lisp
6525 (global-set-key (kbd "C-v") 'yank-better)
6526
6527
6528
6529 (defun yank-better (arg)
6530 "Paste, linewise if our kill ends with a newline.
6531 I change the behavior of plain prefix. It makes it not do linewise paste,
6532 because sometimes you want to yank pop and a linewise paste screws that up.
6533 c-u with no number normally makes the point go before the yank.
6534 That is pointless for me, as it would be just as easier and less
6535 thought to pop the mark after yanking cuz it is set to before the mark."
6536 (interactive "*P")
6537 (if (and (not (equal arg '(4))) (string-suffix-p "\n" (current-kill 0 t)))
6538 (beginning-of-line))
6539 (if (and (stringp mode-name) (string= mode-name "Org"))
6540 (call-interactively 'org-yank)
6541 (setq this-command 'yank)
6542 (call-interactively 'yank (and (not (equal arg '(4)))))))
6543
6544 (put 'yank-better 'delete-selection 'yank)
6545 #+end_src
6546 *** [M-v] :drill:
6547 SCHEDULED: <2014-03-11 Tue>
6548 :PROPERTIES:
6549 insert-register
6550 :ID: 7e21df8d-fdf7-47ed-8648-f9d182445145
6551 :CUSTOM_ID: d67f6371-a13f-4a75-8d8c-e4013ff4e131
6552 :DRILL_LAST_INTERVAL: 2.2172
6553 :DRILL_REPEATS_SINCE_FAIL: 1
6554 :DRILL_TOTAL_REPEATS: 5
6555 :DRILL_FAILURE_COUNT: 2
6556 :DRILL_AVERAGE_QUALITY: 2.84
6557 :DRILL_EASE: 2.381
6558 :DRILL_LAST_QUALITY: 3
6559 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:38>
6560 :END:
6561 insert-register
6562 [
6563 #+begin_src emacs-lisp
6564 (global-set-key (kbd "M-v") 'insert-register)
6565 #+end_src
6566 ]
6567 *** [C-M-v] :drill:
6568 SCHEDULED: <2014-05-13 Tue>
6569 :PROPERTIES:
6570 yank pop
6571 :ID: e05d9d8f-1387-44b3-b348-a45cf6083bd2
6572 :CUSTOM_ID: 25f86658-9999-40f7-b3a4-615981751b93
6573 :DRILL_LAST_INTERVAL: 71.5839
6574 :DRILL_REPEATS_SINCE_FAIL: 4
6575 :DRILL_TOTAL_REPEATS: 4
6576 :DRILL_FAILURE_COUNT: 0
6577 :DRILL_AVERAGE_QUALITY: 4.75
6578 :DRILL_EASE: 4.85
6579 :DRILL_LAST_QUALITY: 5
6580 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:10>
6581 :END:
6582 yank-pop
6583 [
6584 #+begin_src emacs-lisp
6585 (global-set-key (kbd "C-M-v") 'yank-pop)
6586 #+end_src
6587 ]
6588 *** C-S-v
6589 :PROPERTIES:
6590 :CUSTOM_ID: 6732ed10-a473-445d-b14a-5f4c17c6a3ef
6591 :END:
6592 *** [C-b] :drill:
6593 SCHEDULED: <2014-03-27 Thu>
6594 :PROPERTIES:
6595 delete-other-windows
6596 :ID: c9309da7-6801-4d94-a21e-140f4b258c28
6597 :CUSTOM_ID: e682305e-0110-4d2f-afbd-2c401bcb9313
6598 :DRILL_LAST_INTERVAL: 50.6823
6599 :DRILL_REPEATS_SINCE_FAIL: 3
6600 :DRILL_TOTAL_REPEATS: 3
6601 :DRILL_FAILURE_COUNT: 0
6602 :DRILL_AVERAGE_QUALITY: 5.0
6603 :DRILL_EASE: 5.815
6604 :DRILL_LAST_QUALITY: 5
6605 :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:34>
6606 :END:
6607 delete-other-windows
6608 [
6609 #+begin_src emacs-lisp
6610 (global-set-key (kbd "C-b") 'delete-other-windows)
6611 #+end_src
6612 ]
6613 *** [M-b] :drill:
6614 SCHEDULED: <2014-04-07 Mon>
6615 :PROPERTIES:
6616 isearch-backward-current-symbol
6617 :CUSTOM_ID: 05e3d0db-36dc-455f-8bed-f87886ca6004
6618 :ID: 0272efdb-eb85-485c-b24f-410ceabeb330
6619 :DRILL_LAST_INTERVAL: 28.6736
6620 :DRILL_REPEATS_SINCE_FAIL: 5
6621 :DRILL_TOTAL_REPEATS: 5
6622 :DRILL_FAILURE_COUNT: 1
6623 :DRILL_AVERAGE_QUALITY: 3.4
6624 :DRILL_EASE: 2.666
6625 :DRILL_LAST_QUALITY: 4
6626 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:36>
6627 :END:
6628 isearch-backward-current-symbol
6629 [
6630 #+begin_src emacs-lisp
6631 (global-set-key (kbd "M-b") 'isearch-backward-current-symbol)
6632 #+end_src
6633 ]
6634 *** [C-M-b] :drill:
6635 SCHEDULED: <2014-04-04 Fri>
6636 :PROPERTIES:
6637 isearch-current-symbol
6638 :ID: 235b96a8-e724-419d-8d07-8d0a021213eb
6639 :CUSTOM_ID: 6c63790c-28c1-4b73-96e2-ee859f57e734
6640 :DRILL_LAST_INTERVAL: 40.0706
6641 :DRILL_REPEATS_SINCE_FAIL: 4
6642 :DRILL_TOTAL_REPEATS: 4
6643 :DRILL_FAILURE_COUNT: 0
6644 :DRILL_AVERAGE_QUALITY: 3.75
6645 :DRILL_EASE: 2.929
6646 :DRILL_LAST_QUALITY: 3
6647 :DRILL_LAST_REVIEWED: <2014-02-23 Sun 02:26>
6648 :END:
6649 isearch-current-symbol
6650 [
6651 #+begin_src emacs-lisp
6652 (global-set-key (kbd "C-M-b") 'isearch-current-symbol)
6653 #+end_src
6654 ]
6655 *** C-S-b
6656 :PROPERTIES:
6657 :CUSTOM_ID: a220d7e0-12df-4d37-a57a-266785e7f3c5
6658 :END:
6659 *** [C-tab] :drill:
6660 SCHEDULED: <2014-03-27 Thu>
6661 :PROPERTIES:
6662 yas-insert-snippet
6663 :CUSTOM_ID: edc45592-c69f-4439-8305-48f2c65696c3
6664 :ID: 92eac3e1-0675-4746-a130-7539f9bc213a
6665 :DRILL_LAST_INTERVAL: 50.6823
6666 :DRILL_REPEATS_SINCE_FAIL: 3
6667 :DRILL_TOTAL_REPEATS: 3
6668 :DRILL_FAILURE_COUNT: 0
6669 :DRILL_AVERAGE_QUALITY: 5.0
6670 :DRILL_EASE: 5.815
6671 :DRILL_LAST_QUALITY: 5
6672 :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:42>
6673 :END:
6674 yas-expand
6675 [
6676 #+begin_src emacs-lisp
6677 ;; yas keymaps are already initialized when this runs,
6678 ;; but I use a hook because it the way I do it for all other minor modes
6679 (add-hook 'yas-minor-mode-hook (lambda ()
6680 (define-key yas-minor-mode-map (kbd "<C-tab>") 'yas-expand)
6681 (define-key yas-keymap (kbd "<C-tab>") 'yas-next-field-or-maybe-expand)))
6682 (global-set-key (kbd "<C-tab>") 'yas-insert-snippet)
6683 #+end_src
6684 ]
6685 *** [M-tab] :drill:
6686 SCHEDULED: <2014-03-14 Fri>
6687 :PROPERTIES:
6688 indent line
6689 :ID: 35b77d8a-9e69-4f8e-a2ac-c78fcf6dc1f5
6690 :CUSTOM_ID: 71264957-45fd-455a-a6d1-b08823c02d25
6691 :DRILL_LAST_INTERVAL: 23.0811
6692 :DRILL_REPEATS_SINCE_FAIL: 4
6693 :DRILL_TOTAL_REPEATS: 4
6694 :DRILL_FAILURE_COUNT: 1
6695 :DRILL_AVERAGE_QUALITY: 3.75
6696 :DRILL_EASE: 2.929
6697 :DRILL_LAST_QUALITY: 4
6698 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 16:35>
6699 :END:
6700 indent line
6701 [
6702 #+begin_src emacs-lisp
6703
6704 (global-set-key (kbd "<M-tab>") 'indent-for-tab-command)
6705
6706 ; todo, <M-tab> overrides calculator mode map
6707 #+end_src
6708 ]
6709 *** C-M-tab
6710 :PROPERTIES:
6711 :CUSTOM_ID: 33b76824-317c-4657-8a5b-2b126b8f7fc9
6712 :END:
6713 *** C-S-tab
6714 :PROPERTIES:
6715 :CUSTOM_ID: 89d1aeca-47ed-4e4a-89d2-ff70c06e08c8
6716 :END:
6717 *** [C-delete] :drill:
6718 SCHEDULED: <2014-05-13 Tue>
6719 :PROPERTIES:
6720 kill-symbol
6721 :ID: bb7ae41f-8fab-42ee-9338-33dd22d7f173
6722 :CUSTOM_ID: 2688b61d-9fdd-44af-b9bd-b126f0da00bd
6723 :DRILL_LAST_INTERVAL: 71.5839
6724 :DRILL_REPEATS_SINCE_FAIL: 4
6725 :DRILL_TOTAL_REPEATS: 4
6726 :DRILL_FAILURE_COUNT: 0
6727 :DRILL_AVERAGE_QUALITY: 4.75
6728 :DRILL_EASE: 4.85
6729 :DRILL_LAST_QUALITY: 5
6730 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:12>
6731 :END:
6732 kill-symbol
6733 [
6734 #+begin_src emacs-lisp
6735 (global-set-key (kbd "<C-delete>") 'kill-symbol)
6736 (defun kill-symbol (arg)
6737 (interactive "p")
6738 (kill-region (point) (save-excursion (forward-symbol arg) (point))))
6739
6740 #+end_src
6741 ]
6742 *** M-delete
6743 :PROPERTIES:
6744 :CUSTOM_ID: 60747222-b0e5-4983-9bed-e6d44f65483a
6745 :END:
6746 *** [C-M-delete] :drill:
6747 SCHEDULED: <2014-03-24 Mon>
6748 :PROPERTIES:
6749 kill-sexp
6750 kill-sexp
6751 :CUSTOM_ID: 21876759-a8e6-4896-8a08-eda40d0eaff3
6752 :ID: 7f2797e1-dd39-4d0a-8b87-264e2757543b
6753 :DRILL_LAST_INTERVAL: 28.5089
6754 :DRILL_REPEATS_SINCE_FAIL: 5
6755 :DRILL_TOTAL_REPEATS: 5
6756 :DRILL_FAILURE_COUNT: 2
6757 :DRILL_AVERAGE_QUALITY: 3.6
6758 :DRILL_EASE: 2.802
6759 :DRILL_LAST_QUALITY: 4
6760 :DRILL_LAST_REVIEWED: <2014-02-23 Sun 02:27>
6761 :END:
6762 kill-sexp
6763 [
6764 #+begin_src emacs-lisp
6765 (global-set-key (kbd "<C-M-delete>") 'kill-sexp)
6766 #+end_src
6767 ]
6768 *** C-S-delete
6769 :PROPERTIES:
6770 :CUSTOM_ID: 696e9e0f-f717-44cd-90e7-a73d76a58162
6771 :END:
6772
6773 *** [C-left-arrow] :drill:
6774 SCHEDULED: <2014-03-15 Sat>
6775 :PROPERTIES:
6776 compile
6777 :ID: fbc09f29-fb89-479f-b509-255352e4e9d1
6778 :CUSTOM_ID: b15da91f-0786-49d1-b0b9-331b3b94f6ae
6779 :DRILL_LAST_INTERVAL: 24.2738
6780 :DRILL_REPEATS_SINCE_FAIL: 4
6781 :DRILL_TOTAL_REPEATS: 4
6782 :DRILL_FAILURE_COUNT: 1
6783 :DRILL_AVERAGE_QUALITY: 4.0
6784 :DRILL_EASE: 3.204
6785 :DRILL_LAST_QUALITY: 5
6786 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:24>
6787 :END:
6788 compile / comint search
6789 [
6790 #+begin_src emacs-lisp
6791 (defun set-p (var)
6792 (and (bound-and-true-p var)
6793 (not (eq var 'unset))))
6794 (global-set-key (kbd "C-(") 'run)
6795
6796 ;; make compile work from the gtags root dir
6797 (defadvice compile (before pre-compile-advice activate)
6798 (basic-save-buffer)
6799 (when (set-p ggtags-project-root)
6800 (setq-local compile-saved-dir default-directory)
6801 (setq default-directory ggtags-project-root)))
6802 (defadvice compile (after post-compile-advice activate)
6803 (when (bound-and-true-p compile-saved-dir)
6804 (setq default-directory compile-saved-dir)))
6805
6806
6807 (add-hook 'c-mode-hook (lambda () (define-key c-mode-map (kbd "C-(") 'compile)))
6808 (add-hook 'comint-mode-hook
6809 (lambda ()
6810 (define-key isearch-mode-map (kbd "C-(") 'isearch-repeat-backward)
6811 (define-key comint-mode-map (kbd "C-(") 'isearch-backward)))
6812
6813 #+end_src
6814 ]
6815 *** M-left-arrow
6816 :PROPERTIES:
6817 :CUSTOM_ID: 73085b60-95f3-44bf-af71-70d6a7f9b9c6
6818 :END:
6819 *** [C-M-left-arrow] :drill:
6820 SCHEDULED: <2014-03-10 Mon>
6821 :PROPERTIES:
6822 org-shiftup
6823 :CUSTOM_ID: 13faf5d4-34be-4363-948d-4ff04a9f570b
6824 :ID: 39390478-6d33-460e-ab47-0dc6ac4c5249
6825 :DRILL_LAST_INTERVAL: 7.6079
6826 :DRILL_REPEATS_SINCE_FAIL: 3
6827 :DRILL_TOTAL_REPEATS: 7
6828 :DRILL_FAILURE_COUNT: 6
6829 :DRILL_AVERAGE_QUALITY: 2.886
6830 :DRILL_EASE: 2.402
6831 :DRILL_LAST_QUALITY: 3
6832 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:01>
6833 :END:
6834 org-shiftup
6835 [
6836 #+begin_src emacs-lisp
6837 (add-hook 'org-mode-hook
6838 (lambda () (define-key org-mode-map (kbd "C-M-(") 'org-shiftup)))
6839 #+end_src
6840 ]
6841 *** C-S-left-arrow
6842 :PROPERTIES:
6843 :CUSTOM_ID: 4e3a7ead-efb5-46d8-9465-1867d47e5ec2
6844 :END:
6845 *** [C-right-arrow] :drill:
6846 SCHEDULED: <2014-05-13 Tue>
6847 :PROPERTIES:
6848 paste selection
6849 :CUSTOM_ID: 3f3cac16-097d-451a-a14a-da7717d06730
6850 :ID: 1b0ac338-d87b-4a37-b192-bc4305a337cc
6851 :DRILL_LAST_INTERVAL: 71.5839
6852 :DRILL_REPEATS_SINCE_FAIL: 4
6853 :DRILL_TOTAL_REPEATS: 4
6854 :DRILL_FAILURE_COUNT: 0
6855 :DRILL_AVERAGE_QUALITY: 4.75
6856 :DRILL_EASE: 4.85
6857 :DRILL_LAST_QUALITY: 5
6858 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:11>
6859 :END:
6860 keyboard-yank-primary
6861 [
6862 #+begin_src emacs-lisp
6863 (defun keyboard-yank-primary ()
6864 (interactive)
6865 (let ((mouse-yank-at-point t))
6866 (mouse-yank-primary nil)))
6867 ;; paste selection
6868 (global-set-key (kbd "C-)") 'keyboard-yank-primary)
6869 #+end_src
6870 ]
6871 *** M-right-arrow
6872 :PROPERTIES:
6873 :CUSTOM_ID: 97a4513f-6837-47c5-9e2b-354542d67d29
6874 :END:
6875 *** C-M-right-arrow
6876 :PROPERTIES:
6877 org-shiftdown
6878 :CUSTOM_ID: 34e66314-1d97-4eeb-b704-fe0733849ae4
6879 :END:
6880 [
6881 #+begin_src emacs-lisp
6882 (add-hook 'org-mode-hook
6883 (lambda () (define-key org-mode-map (kbd "C-M-)") 'org-shiftdown)))
6884 #+end_src
6885 ]
6886 *** C-S-right-arrow
6887 :PROPERTIES:
6888 :CUSTOM_ID: f441e351-ccd7-4ac1-9a4d-a0a1dd17b73e
6889 :END:
6890 *** [C-backspace] :drill:
6891 SCHEDULED: <2014-05-13 Tue>
6892 :PROPERTIES:
6893 backward-kill-symbol
6894 :CUSTOM_ID: 85bb4701-42e6-4617-8de8-dfb1f03b0358
6895 :ID: 9c0e1f0a-7b45-4670-86a2-9df945142cbe
6896 :DRILL_LAST_INTERVAL: 71.5839
6897 :DRILL_REPEATS_SINCE_FAIL: 4
6898 :DRILL_TOTAL_REPEATS: 4
6899 :DRILL_FAILURE_COUNT: 0
6900 :DRILL_AVERAGE_QUALITY: 4.75
6901 :DRILL_EASE: 4.85
6902 :DRILL_LAST_QUALITY: 5
6903 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:12>
6904 :END:
6905 backward-kill-symbol
6906 [
6907 #+begin_src emacs-lisp
6908 (global-set-key (kbd "<C-backspace>") 'backward-kill-symbol)
6909 (add-hook 'comint-mode-hook
6910 (lambda ()
6911 (define-key comint-mode-map (kbd "<C-backspace>") 'backward-kill-word)))
6912 (defun backward-kill-symbol (arg)
6913 (interactive "p")
6914 (kill-region (point) (save-excursion (backward-symbol arg) (point))))
6915 #+end_src
6916 ]
6917 *** M-backspace
6918 :PROPERTIES:
6919 :CUSTOM_ID: d4b3e996-208a-4b6d-a747-076e56bd7da3
6920 :END:
6921 *** [C-M-backspace] :drill:
6922 SCHEDULED: <2014-03-18 Tue>
6923 :PROPERTIES:
6924 :ID: 1030c81d-2cc2-42ba-8aa5-fe98271a00f2
6925 :DRILL_LAST_INTERVAL: 26.5334
6926 :DRILL_REPEATS_SINCE_FAIL: 4
6927 :DRILL_TOTAL_REPEATS: 4
6928 :DRILL_FAILURE_COUNT: 0
6929 :DRILL_AVERAGE_QUALITY: 3.75
6930 :DRILL_EASE: 2.929
6931 :DRILL_LAST_QUALITY: 3
6932 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:46>
6933 :CUSTOM_ID: 606b0991-7431-4a8a-a909-b872e104cc88
6934 :END:
6935 backward-kill-sexp
6936 [
6937 #+begin_src emacs-lisp
6938 (global-set-key (kbd "<C-M-backspace>") 'backward-kill-sexp)
6939 #+end_src
6940 ]
6941 *** C-S-backspace
6942 :PROPERTIES:
6943 :CUSTOM_ID: 9c826109-76fd-403e-b15e-ceee5f925f6c
6944 :END:
6945 *** C-f7
6946 :PROPERTIES:
6947 :CUSTOM_ID: 8e4b9a2c-35ff-4300-91ff-65d19d6b2fde
6948 :END:
6949 *** M-f7
6950 :PROPERTIES:
6951 :CUSTOM_ID: 390a5b78-f5fe-41b6-bb36-ea9c81806989
6952 :END:
6953 *** C-M-f7
6954 :PROPERTIES:
6955 :CUSTOM_ID: a8e9d8e4-4f29-4da6-a7b8-3d136a3e1c18
6956 :END:
6957 *** C-S-f7
6958 :PROPERTIES:
6959 :CUSTOM_ID: 60bb5cd8-aeb3-4014-81f2-4cee72e9547c
6960 :END:
6961
6962 ** right primary
6963 *** [C-*] :drill:
6964 SCHEDULED: <2014-03-16 Sun>
6965 :PROPERTIES:
6966 split-window-horizontally
6967 :ID: c9f11b06-583f-48e5-8d0a-56107feb0010
6968 :CUSTOM_ID: f745b337-8b65-44cc-849a-5e0953c9ebd9
6969 :DRILL_LAST_INTERVAL: 13.9711
6970 :DRILL_REPEATS_SINCE_FAIL: 4
6971 :DRILL_TOTAL_REPEATS: 6
6972 :DRILL_FAILURE_COUNT: 3
6973 :DRILL_AVERAGE_QUALITY: 2.982
6974 :DRILL_EASE: 2.447
6975 :DRILL_LAST_QUALITY: 4
6976 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:04>
6977 :END:
6978 split-window-horizontally
6979 [
6980 #+begin_src emacs-lisp
6981 (global-set-key (kbd "C-*") 'split-window-horizontally)
6982 #+end_src
6983 ]
6984 *** M-*
6985 *** [C-M-*] :drill:
6986 SCHEDULED: <2014-03-17 Mon>
6987 :PROPERTIES:
6988 calc-dispatch
6989 :CUSTOM_ID: 5dbe3437-7364-4802-b558-00b2d5faacf6
6990 :ID: 2cffe3fb-a21a-4a49-83f8-65218c7a45a2
6991 :DRILL_LAST_INTERVAL: 15.2345
6992 :DRILL_REPEATS_SINCE_FAIL: 4
6993 :DRILL_TOTAL_REPEATS: 7
6994 :DRILL_FAILURE_COUNT: 2
6995 :DRILL_AVERAGE_QUALITY: 2.893
6996 :DRILL_EASE: 2.405
6997 :DRILL_LAST_QUALITY: 3
6998 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:09>
6999 :END:
7000 calc-dispatch
7001 [
7002 #+begin_src emacs-lisp
7003 (global-set-key (kbd "C-M-*") 'calc-dispatch)
7004 #+end_src
7005 ]
7006 *** C-S-*
7007 :PROPERTIES:
7008 :CUSTOM_ID: 8c414142-8a42-46df-9ab2-898f1be636c8
7009 :END:
7010 *** [C-9] :drill:
7011 SCHEDULED: <2014-03-27 Thu>
7012 :PROPERTIES:
7013 :ID: eda4444e-f1c4-4db7-918d-96789f6a0b2b
7014 :CUSTOM_ID: 43d14154-2722-4ba5-b547-1b78c6274ebf
7015 :DRILL_LAST_INTERVAL: 50.6823
7016 :DRILL_REPEATS_SINCE_FAIL: 3
7017 :DRILL_TOTAL_REPEATS: 3
7018 :DRILL_FAILURE_COUNT: 0
7019 :DRILL_AVERAGE_QUALITY: 5.0
7020 :DRILL_EASE: 5.815
7021 :DRILL_LAST_QUALITY: 5
7022 :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:40>
7023 :END:
7024 delete-window-or-exit
7025 [
7026 #+begin_src emacs-lisp
7027 (global-set-key (kbd "C-9") 'delete-window-or-exit)
7028
7029 (defun delete-window-or-exit ()
7030 "Delete window or exit emacs."
7031 (interactive)
7032 (if (condition-case nil (delete-window) (error t))
7033 (if (or (boundp 'server-process) (> (length (frame-list)) 1))
7034 (delete-frame)
7035 (save-buffers-kill-terminal t))))
7036
7037 #+end_src
7038 ]
7039 *** [M-9] :drill:
7040 SCHEDULED: <2014-03-12 Wed>
7041 :PROPERTIES:
7042 kill-buffer-and-window
7043 :CUSTOM_ID: 9dc95338-4321-4354-9de2-69409f383a10
7044 :ID: 24b7dd06-c5cc-4264-954f-d8190d44c1bf
7045 :DRILL_LAST_INTERVAL: 20.7344
7046 :DRILL_REPEATS_SINCE_FAIL: 4
7047 :DRILL_TOTAL_REPEATS: 4
7048 :DRILL_FAILURE_COUNT: 0
7049 :DRILL_AVERAGE_QUALITY: 3.75
7050 :DRILL_EASE: 2.928
7051 :DRILL_LAST_QUALITY: 5
7052 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 16:33>
7053 :END:
7054 kill-buffer
7055 [
7056 #+begin_src emacs-lisp
7057 (defun kill-buffer-no-ido ()
7058 "kill-buffer, avoid the ido remapping"
7059 (interactive)
7060 (kill-buffer))
7061 (global-set-key (kbd "M-9") 'kill-buffer-no-ido)
7062 #+end_src
7063 ]
7064 strangely, in simple mode, this is overridden.
7065 I found this map to override, but it didn't work, so it seems its being bound some other way.
7066 I did a grep of the emacs sources, but couldn't find anything.
7067 (define-key universal-argument-map [?9] nil)
7068
7069 *** [C-M-9] :drill:
7070 SCHEDULED: <2014-03-17 Mon>
7071 :PROPERTIES:
7072 kill client buffer
7073 :ID: 2046ac28-1c06-410b-bdd9-39eaeada50c0
7074 :CUSTOM_ID: ffe9f636-31e5-48ba-b8fe-7c158ace744c
7075 :DRILL_LAST_INTERVAL: 25.6978
7076 :DRILL_REPEATS_SINCE_FAIL: 4
7077 :DRILL_TOTAL_REPEATS: 4
7078 :DRILL_FAILURE_COUNT: 0
7079 :DRILL_AVERAGE_QUALITY: 4.0
7080 :DRILL_EASE: 3.204
7081 :DRILL_LAST_QUALITY: 5
7082 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:41>
7083 :END:
7084 end server edit
7085 ,save & kill buffer it was opened externally via emacsclient
7086
7087 [
7088 #+begin_src emacs-lisp
7089 (defun server-edit-save ()
7090 (interactive)
7091 (save-buffer)
7092 (server-edit))
7093 (global-set-key (kbd "C-M-9") 'server-edit-save)
7094 #+end_src
7095 ]
7096 *** C-S-9
7097 :PROPERTIES:
7098 :CUSTOM_ID: 56d86cb3-cb86-42d8-9516-d7f2e086d88a
7099 :END:
7100 *** [C-u] :drill:
7101 SCHEDULED: <2014-03-27 Thu>
7102 :PROPERTIES:
7103 :ID: a254c137-8a33-440d-b71e-5fbf9a21e2f5
7104 :CUSTOM_ID: 327992c0-6eba-4935-aec1-49871c2a8619
7105 :DRILL_LAST_INTERVAL: 50.6823
7106 :DRILL_REPEATS_SINCE_FAIL: 3
7107 :DRILL_TOTAL_REPEATS: 3
7108 :DRILL_FAILURE_COUNT: 0
7109 :DRILL_AVERAGE_QUALITY: 5.0
7110 :DRILL_EASE: 5.815
7111 :DRILL_LAST_QUALITY: 5
7112 :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:45>
7113 :END:
7114 universal-argument
7115 *** M-u
7116 *** [C-M-u] :drill:
7117 SCHEDULED: <2014-03-27 Thu>
7118 :PROPERTIES:
7119 search-keybind
7120 :ID: a2e31aed-143f-4aa2-841b-857729417993
7121 :CUSTOM_ID: 62735d64-b89a-46b7-b32e-2453b651039d
7122 :DRILL_LAST_INTERVAL: 50.6823
7123 :DRILL_REPEATS_SINCE_FAIL: 3
7124 :DRILL_TOTAL_REPEATS: 3
7125 :DRILL_FAILURE_COUNT: 0
7126 :DRILL_AVERAGE_QUALITY: 5.0
7127 :DRILL_EASE: 5.815
7128 :DRILL_LAST_QUALITY: 5
7129 :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:43>
7130 :END:
7131 search-keybind
7132 [
7133 #+begin_src emacs-lisp
7134 (global-set-key (kbd "C-M-u") 'search-keybind)
7135
7136 (defun search-keybind (regexp &optional nlines)
7137 (interactive (occur-read-primary-args))
7138 (save-excursion
7139 (describe-bindings)
7140 (set-buffer "*Help*")
7141 (occur regexp)
7142 (delete-windows-on "*Help*")
7143 ))
7144 #+end_src
7145 ]
7146 *** C-S-u
7147 :PROPERTIES:
7148 :CUSTOM_ID: 7f72dfa0-ba8e-4cd5-b25b-8ff6066464e6
7149 :END:
7150 *** C-i
7151 :PROPERTIES:
7152 :CUSTOM_ID: 3124e200-1d6e-4ad2-9a36-0d03e1e7dc38
7153 :END:
7154 -----
7155 *** M-i
7156 :PROPERTIES:
7157 :CUSTOM_ID: 95ab2045-88bf-4656-b8b1-6cebc87b89e0
7158 :END:
7159 *** [C-M-i] :drill:
7160 SCHEDULED: <2014-03-17 Mon>
7161 :PROPERTIES:
7162 query-replace-regexp
7163 :CUSTOM_ID: a3260b61-7c51-4d97-9a91-3ed702c5ae29
7164 :ID: 93f569b8-4bc8-49e1-a38e-ced3d3198ce8
7165 :DRILL_LAST_INTERVAL: 26.3579
7166 :DRILL_REPEATS_SINCE_FAIL: 4
7167 :DRILL_TOTAL_REPEATS: 4
7168 :DRILL_FAILURE_COUNT: 1
7169 :DRILL_AVERAGE_QUALITY: 4.0
7170 :DRILL_EASE: 3.204
7171 :DRILL_LAST_QUALITY: 4
7172 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:45>
7173 :END:
7174 query-replace-regexp
7175 [
7176 #+begin_src emacs-lisp
7177 (global-set-key (kbd "C-M-i") 'query-replace-regexp)
7178 (add-hook 'flyspell-mode-hook
7179 (lambda () (define-key flyspell-mode-map (kbd "C-M-i") nil)))
7180 (add-hook 'text-mode-hook
7181 (lambda () (define-key text-mode-map (kbd "C-M-i") nil)))
7182
7183 #+end_src
7184 ]
7185 *** C-S-i
7186 :PROPERTIES:
7187 :CUSTOM_ID: 076edcc2-040e-4371-9851-4e587766e1fe
7188 :END:
7189 *** [C-o] :drill:
7190 SCHEDULED: <2014-05-13 Tue>
7191 :PROPERTIES:
7192 occur
7193 :ID: a502687a-24b4-4b73-9abc-bc85b89ab235
7194 :CUSTOM_ID: 82215193-63b3-4d63-8f70-d11a328fe72d
7195 :DRILL_LAST_INTERVAL: 71.5839
7196 :DRILL_REPEATS_SINCE_FAIL: 4
7197 :DRILL_TOTAL_REPEATS: 4
7198 :DRILL_FAILURE_COUNT: 0
7199 :DRILL_AVERAGE_QUALITY: 4.75
7200 :DRILL_EASE: 4.85
7201 :DRILL_LAST_QUALITY: 5
7202 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:10>
7203 :END:
7204 occur
7205 [
7206 #+begin_src emacs-lisp
7207 (global-set-key (kbd "C-o") 'occur)
7208 #+end_src
7209 ]
7210 *** M-o
7211 :PROPERTIES:
7212 :CUSTOM_ID: 8c58b99d-b1e4-4270-8d4a-8ae72e2a6470
7213 :END:
7214 *** [C-M-o] :drill:
7215 SCHEDULED: <2014-03-12 Wed>
7216 :PROPERTIES:
7217 ido-goto-symbol
7218 :CUSTOM_ID: 05d1ef50-43ee-46d7-b1ad-dd952543ab45
7219 :ID: 6dfcaa31-d223-4a14-904e-2f2395b2cf75
7220 :DRILL_LAST_INTERVAL: 10.3122
7221 :DRILL_REPEATS_SINCE_FAIL: 4
7222 :DRILL_TOTAL_REPEATS: 9
7223 :DRILL_FAILURE_COUNT: 9
7224 :DRILL_AVERAGE_QUALITY: 2.994
7225 :DRILL_EASE: 2.453
7226 :DRILL_LAST_QUALITY: 4
7227 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:09>
7228 :END:
7229 ido-goto-symbol
7230 [
7231 #+begin_src emacs-lisp
7232 (global-set-key (kbd "C-M-o") 'ido-goto-symbol)
7233 #+end_src
7234 ]
7235 *** C-S-o
7236 :PROPERTIES:
7237 :CUSTOM_ID: 7eacf048-4da8-4b2b-8a51-a4772111e285
7238 :END:
7239 *** [C-p] :drill:
7240 SCHEDULED: <2014-03-15 Sat>
7241 :PROPERTIES:
7242 move-mouse-to-point
7243 :ID: 6b1abcf6-7f95-45c4-a87f-0e86c43c5af1
7244 :CUSTOM_ID: 9c2e2ba9-f34e-48fe-b4ff-b9826882c1cc
7245 :DRILL_LAST_INTERVAL: 23.5247
7246 :DRILL_REPEATS_SINCE_FAIL: 4
7247 :DRILL_TOTAL_REPEATS: 4
7248 :DRILL_FAILURE_COUNT: 0
7249 :DRILL_AVERAGE_QUALITY: 3.5
7250 :DRILL_EASE: 2.73
7251 :DRILL_LAST_QUALITY: 3
7252 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:41>
7253 :END:
7254 move-mouse-to-point
7255 [
7256 #+begin_src emacs-lisp
7257 (global-set-key (kbd "C-p") 'move-mouse-to-point)
7258 #+end_src
7259 ]
7260 *** M-p
7261 *** [C-M-p] :drill:leech:
7262 :PROPERTIES:
7263 delete-horizontal-space
7264 :ID: e2972d5b-28e7-46aa-896f-66d68a6df0de
7265 :CUSTOM_ID: d55616d3-a3f6-4e83-8807-748578a7b726
7266 :DRILL_LAST_INTERVAL: 0.0
7267 :DRILL_REPEATS_SINCE_FAIL: 0
7268 :DRILL_TOTAL_REPEATS: 10
7269 :DRILL_FAILURE_COUNT: 16
7270 :DRILL_AVERAGE_QUALITY: 2.433
7271 :DRILL_EASE: 2.18
7272 :DRILL_LAST_QUALITY: 2
7273 :DRILL_LAST_REVIEWED: <2014-04-14 Mon 11:31>
7274 :END:
7275 delete-horizontal-space
7276 [
7277 #+begin_src emacs-lisp
7278 (global-set-key (kbd "C-M-p") 'delete-horizontal-space)
7279 #+end_src
7280 ]
7281 *** C-S-p
7282 :PROPERTIES:
7283 :CUSTOM_ID: f0cffe8d-d2cb-4f5d-a3f2-fa900e093ef7
7284 :END:
7285 *** [C-j] :drill:
7286 SCHEDULED: <2014-03-15 Sat>
7287 pop-to-mark
7288 [
7289 #+begin_src emacs-lisp
7290 (defun my-pop-to-mark-command ()
7291 "Jump to mark, and pop a new position for mark off the ring.
7292 \(Does not affect global mark ring\)."
7293 (interactive)
7294 (pop-to-mark-command)
7295 (if (and (derived-mode-p 'org-mode) (outline-invisible-p))
7296 (org-show-context 'mark-goto)))
7297
7298 (global-set-key (kbd "C-j") 'my-pop-to-mark-command)
7299 (define-key ido-common-completion-map (kbd "C-j") 'ido-select-text)
7300 (add-hook 'ido-setup-hook
7301 (lambda () (define-key ido-common-completion-map (kbd "C-j") 'ido-select-text)))
7302 (add-hook 'lisp-interaction-mode-hook
7303 (lambda ()
7304 (define-key lisp-interaction-mode-map (kbd "C-j") nil)))
7305
7306 #+end_src
7307 ]
7308 *** [M-j] :drill:
7309 SCHEDULED: <2014-03-13 Thu>
7310 :PROPERTIES:
7311 previous-error
7312 :ID: cb5f0e6f-815d-488f-bfb2-5d31bd5dc215
7313 :CUSTOM_ID: 474a3e12-95ac-4f43-b83a-36716f3e6f76
7314 :DRILL_LAST_INTERVAL: 21.5453
7315 :DRILL_REPEATS_SINCE_FAIL: 4
7316 :DRILL_TOTAL_REPEATS: 4
7317 :DRILL_FAILURE_COUNT: 0
7318 :DRILL_AVERAGE_QUALITY: 3.25
7319 :DRILL_EASE: 2.58
7320 :DRILL_LAST_QUALITY: 3
7321 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 16:39>
7322 :END:
7323 previous-error
7324 [
7325 #+begin_src emacs-lisp
7326 (global-set-key (kbd "M-j") 'previous-error)
7327 #+end_src
7328 ]
7329 *** [C-M-j]
7330
7331 register prefix
7332 [
7333 :PROPERTIES:
7334 :CUSTOM_ID: ebcf7c71-3c93-431b-af6b-7c5df7f2945e
7335 :ID: d2604f6e-341d-4d57-91c8-ec6f2cdeb901
7336 :DRILL_LAST_INTERVAL: 23.5247
7337 :DRILL_REPEATS_SINCE_FAIL: 4
7338 :DRILL_TOTAL_REPEATS: 4
7339 :DRILL_FAILURE_COUNT: 0
7340 :DRILL_AVERAGE_QUALITY: 3.5
7341 :DRILL_EASE: 2.73
7342 :DRILL_LAST_QUALITY: 3
7343 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:45>
7344 :END:
7345 #+begin_src emacs-lisp
7346 (define-key global-map (kbd "C-M-j") ctl-x-r-map)
7347 (define-key ctl-x-r-map "m" 'kmacro-to-register)
7348 #+end_src
7349 ]
7350
7351 *** C-S-j
7352 :PROPERTIES:
7353 :CUSTOM_ID: 381a6c7c-e763-4d9a-86f5-55a5e0afcee1
7354 :END:
7355 *** [C-k] :drill:
7356 SCHEDULED: <2014-05-13 Tue>
7357 :PROPERTIES:
7358 jump to register
7359 :CUSTOM_ID: 25a7ba1c-ddf3-47f1-9516-914a552e7a36
7360 :ID: 095be13e-f98c-4f42-9353-08329fa47d06
7361 :DRILL_LAST_INTERVAL: 71.5839
7362 :DRILL_REPEATS_SINCE_FAIL: 4
7363 :DRILL_TOTAL_REPEATS: 4
7364 :DRILL_FAILURE_COUNT: 0
7365 :DRILL_AVERAGE_QUALITY: 4.75
7366 :DRILL_EASE: 4.85
7367 :DRILL_LAST_QUALITY: 5
7368 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:10>
7369 :END:
7370 jump-to-register
7371 [
7372 #+begin_src emacs-lisp
7373
7374 (global-set-key (kbd "C-k") 'jump-to-register)
7375 #+end_src
7376 ]
7377 *** [M-k] :drill:
7378 SCHEDULED: <2014-03-15 Sat>
7379 :PROPERTIES:
7380 next-error
7381 :ID: c9f19dcc-4c14-4bdd-b350-c426dff14189
7382 :CUSTOM_ID: a96691bb-9e4c-414b-a093-d9961d453e21
7383 :DRILL_LAST_INTERVAL: 24.4352
7384 :DRILL_REPEATS_SINCE_FAIL: 4
7385 :DRILL_TOTAL_REPEATS: 4
7386 :DRILL_FAILURE_COUNT: 0
7387 :DRILL_AVERAGE_QUALITY: 3.75
7388 :DRILL_EASE: 2.929
7389 :DRILL_LAST_QUALITY: 4
7390 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:40>
7391 :END:
7392 next-error
7393 [
7394 #+begin_src emacs-lisp
7395 (global-set-key (kbd "M-k") 'next-error)
7396 #+end_src
7397 ]
7398 *** [C-M-k] :drill:
7399 SCHEDULED: <2014-03-21 Fri>
7400 :PROPERTIES:
7401 man
7402 :CUSTOM_ID: f61ea4ea-4597-422e-b7e3-d3cfad82603d
7403 :ID: 4c874a82-22dd-4bc2-a0ac-24420c30b888
7404 :DRILL_LAST_INTERVAL: 29.8228
7405 :DRILL_REPEATS_SINCE_FAIL: 4
7406 :DRILL_TOTAL_REPEATS: 4
7407 :DRILL_FAILURE_COUNT: 0
7408 :DRILL_AVERAGE_QUALITY: 4.25
7409 :DRILL_EASE: 3.589
7410 :DRILL_LAST_QUALITY: 5
7411 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:46>
7412 :END:
7413 man
7414 [
7415 #+begin_src emacs-lisp
7416 (global-set-key (kbd "C-M-k") 'man)
7417 #+end_src
7418 ]
7419 *** C-S-k
7420 :PROPERTIES:
7421 :CUSTOM_ID: da51b99a-1782-45ad-92be-f4c0a645bea8
7422 :END:
7423 *** [C-l] :drill:
7424 SCHEDULED: <2014-05-13 Tue>
7425 :PROPERTIES:
7426 ido-switch-buffer
7427 :ID: 3c7fabd9-572d-4945-ab4b-d7a8dc2cd9c5
7428 :CUSTOM_ID: 8a7572bd-4b5e-4464-b937-3d35adb1783f
7429 :DRILL_LAST_INTERVAL: 71.5839
7430 :DRILL_REPEATS_SINCE_FAIL: 4
7431 :DRILL_TOTAL_REPEATS: 4
7432 :DRILL_FAILURE_COUNT: 0
7433 :DRILL_AVERAGE_QUALITY: 4.75
7434 :DRILL_EASE: 4.85
7435 :DRILL_LAST_QUALITY: 5
7436 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:10>
7437 :END:
7438 ido-switch-buffer
7439 [
7440 #+begin_src emacs-lisp
7441 (global-set-key (kbd "C-l") 'ido-switch-buffer)
7442 #+end_src
7443 ]
7444 *** M-l
7445 :PROPERTIES:
7446 :CUSTOM_ID: 27f47c6c-36ad-430e-b4b0-5e96b635bf36
7447 :END:
7448
7449 *** [C-M-l] :drill:
7450 SCHEDULED: <2014-04-04 Fri>
7451 :PROPERTIES:
7452 move cursor top bottom mid
7453 :ID: 37a3ccad-9b61-44b0-bddb-219a024cd963
7454 :CUSTOM_ID: 24b660d4-3ec4-4416-8a6a-b8224ed1ee8b
7455 :DRILL_LAST_INTERVAL: 25.8141
7456 :DRILL_REPEATS_SINCE_FAIL: 5
7457 :DRILL_TOTAL_REPEATS: 5
7458 :DRILL_FAILURE_COUNT: 1
7459 :DRILL_AVERAGE_QUALITY: 3.0
7460 :DRILL_EASE: 2.456
7461 :DRILL_LAST_QUALITY: 3
7462 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:36>
7463 :END:
7464 move cursor top bottom mid, comint clear screen
7465 [
7466 #+begin_src emacs-lisp
7467 (global-set-key (kbd "C-M-l") 'move-to-window-line-top-bottom)
7468 #+end_src
7469 ]
7470 *** C-S-l
7471 :PROPERTIES:
7472 :CUSTOM_ID: c355178f-c9b4-4ae7-9627-b4117fef45b9
7473 :END:
7474 *** [C-;] :drill:
7475 SCHEDULED: <2014-03-19 Wed>
7476 :PROPERTIES:
7477 comment-dwim
7478 :CUSTOM_ID: 7e3710eb-5460-4460-8bf0-488302e4ce35
7479 :ID: 1c1b7a4a-484b-4faf-ae20-65d096ff2574
7480 :DRILL_LAST_INTERVAL: 27.9041
7481 :DRILL_REPEATS_SINCE_FAIL: 4
7482 :DRILL_TOTAL_REPEATS: 4
7483 :DRILL_FAILURE_COUNT: 0
7484 :DRILL_AVERAGE_QUALITY: 4.0
7485 :DRILL_EASE: 3.204
7486 :DRILL_LAST_QUALITY: 4
7487 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:45>
7488 :END:
7489 comment-dwim
7490 [
7491 #+begin_src emacs-lisp
7492 (global-set-key (kbd "C-;") 'comment-dwim)
7493 (add-hook 'flyspell-mode-hook
7494 (lambda () (define-key flyspell-mode-map (kbd "C-;") nil)))
7495 #+end_src
7496 ]
7497 *** M-;
7498 :PROPERTIES:
7499 :CUSTOM_ID: 211e76d9-d89a-4cc6-abce-69397d456fda
7500 :END:
7501 *** [C-M-;] :drill:
7502 SCHEDULED: <2014-04-07 Mon>
7503 :PROPERTIES:
7504 comment-current-line-dwim
7505 :ID: 9ff312cc-f460-4f5d-9e4b-37f7ed538209
7506 :CUSTOM_ID: 28680a96-5223-4632-80b9-b1facdd541e7
7507 :DRILL_LAST_INTERVAL: 42.8284
7508 :DRILL_REPEATS_SINCE_FAIL: 4
7509 :DRILL_TOTAL_REPEATS: 4
7510 :DRILL_FAILURE_COUNT: 0
7511 :DRILL_AVERAGE_QUALITY: 4.5
7512 :DRILL_EASE: 4.122
7513 :DRILL_LAST_QUALITY: 5
7514 :DRILL_LAST_REVIEWED: <2014-02-23 Sun 01:51>
7515 :END:
7516 comment-current-line-dwim
7517 [
7518 #+begin_src emacs-lisp
7519 (defun comment-current-line-dwim ()
7520 "Comment or uncomment the current line."
7521 (interactive)
7522 (save-excursion
7523 (push-mark (beginning-of-line) t t)
7524 (end-of-line)
7525 (comment-dwim nil))
7526 (move-beginning-of-line 2))
7527 (global-set-key (kbd "C-M-;") 'comment-current-line-dwim)
7528 #+end_src
7529 ]
7530 *** C-S-;
7531 :PROPERTIES:
7532 :CUSTOM_ID: c9f00d6c-f9d2-420f-a08e-21ea78023066
7533 :END:
7534 *** [C-m]
7535 :PROPERTIES:
7536 :CUSTOM_ID: deee53ba-dfa2-4910-894c-55ae98d11aa4
7537 :END:
7538 *** M-m
7539 :PROPERTIES:
7540 :CUSTOM_ID: f7237459-96b6-4de9-937f-5fbfa9ca5b1e
7541 :END:
7542 *** [C-M-m] :drill:
7543 SCHEDULED: <2014-03-11 Tue>
7544 :PROPERTIES:
7545 recursive grep
7546 :CUSTOM_ID: f283f705-cba0-45db-b80f-5d20415b2eee
7547 :ID: b952fa90-b492-4f85-9d8e-5cd24c060b94
7548 :DRILL_LAST_INTERVAL: 9.1491
7549 :DRILL_REPEATS_SINCE_FAIL: 3
7550 :DRILL_TOTAL_REPEATS: 7
7551 :DRILL_FAILURE_COUNT: 3
7552 :DRILL_AVERAGE_QUALITY: 2.924
7553 :DRILL_EASE: 2.42
7554 :DRILL_LAST_QUALITY: 3
7555 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:05>
7556 :END:
7557 recursive grep
7558 [
7559 #+begin_src emacs-lisp
7560 (define-key global-map (kbd "C-M-m") 'rgrep)
7561 #+end_src
7562 ]
7563 *** C-S-m
7564 :PROPERTIES:
7565 :CUSTOM_ID: dd3136a5-5383-4fc7-8c9f-fcbaba251a76
7566 :END:
7567 *** [C-,] :drill:
7568 SCHEDULED: <2014-05-13 Tue>
7569 :PROPERTIES:
7570 ido-find-file
7571 :CUSTOM_ID: 6cbf3a85-f260-453a-920b-850ff5e986b1
7572 :ID: df0f3769-bcfc-4cb9-8943-bb86dafb2711
7573 :DRILL_LAST_INTERVAL: 71.5839
7574 :DRILL_REPEATS_SINCE_FAIL: 4
7575 :DRILL_TOTAL_REPEATS: 4
7576 :DRILL_FAILURE_COUNT: 0
7577 :DRILL_AVERAGE_QUALITY: 4.75
7578 :DRILL_EASE: 4.85
7579 :DRILL_LAST_QUALITY: 5
7580 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:10>
7581 :END:
7582 ido-find-file
7583 [
7584 #+begin_src emacs-lisp
7585 (global-set-key (kbd "C-,") 'ido-find-file)
7586 (add-hook 'flyspell-mode-hook
7587 (lambda () (define-key flyspell-mode-map (kbd "C-,") nil)))
7588 #+end_src
7589 ]
7590 *** M-,
7591 *** [C-M-,] :drill:
7592 SCHEDULED: <2014-03-19 Wed>
7593 :PROPERTIES:
7594 find-file-in-project
7595 :ID: fca85295-0567-4443-ac74-a54b93a2e603
7596 :CUSTOM_ID: bfdf6111-029d-462b-bcca-50a3ed2162d5
7597 :DRILL_LAST_INTERVAL: 24.3844
7598 :DRILL_REPEATS_SINCE_FAIL: 5
7599 :DRILL_TOTAL_REPEATS: 5
7600 :DRILL_FAILURE_COUNT: 2
7601 :DRILL_AVERAGE_QUALITY: 3.0
7602 :DRILL_EASE: 2.456
7603 :DRILL_LAST_QUALITY: 3
7604 :DRILL_LAST_REVIEWED: <2014-02-23 Sun 01:51>
7605 :END:
7606 find-file-in-project
7607 [
7608 #+begin_src emacs-lisp
7609 (global-set-key (kbd "C-M-,") 'find-file-in-project)
7610 #+end_src
7611 ]
7612 *** C-S-,
7613 :PROPERTIES:
7614 :CUSTOM_ID: 74a86b9e-9a56-4f5e-a6eb-9f2cd09da613
7615 :END:
7616 *** [C-.] :drill:
7617 SCHEDULED: <2014-03-27 Thu>
7618 :PROPERTIES:
7619 recentf-ido-find-file
7620 :CUSTOM_ID: 0675c171-8677-44a8-882c-e7ed42715e31
7621 :ID: a600d171-1964-4a81-a39e-cfac4716f96d
7622 :DRILL_LAST_INTERVAL: 50.6823
7623 :DRILL_REPEATS_SINCE_FAIL: 3
7624 :DRILL_TOTAL_REPEATS: 3
7625 :DRILL_FAILURE_COUNT: 0
7626 :DRILL_AVERAGE_QUALITY: 5.0
7627 :DRILL_EASE: 5.815
7628 :DRILL_LAST_QUALITY: 5
7629 :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:41>
7630 :END:
7631 find recent file
7632 [
7633 Taken from starter kit.
7634 #+begin_src emacs-lisp
7635 (defun recentf-ido-find-file ()
7636 "Find a recent file using Ido."
7637 (interactive)
7638 (let* ((file-assoc-list
7639 (mapcar (lambda (x)
7640 (cons (file-name-nondirectory x)
7641 x))
7642 recentf-list))
7643 (filename-list
7644 (remove-duplicates (mapcar #'car file-assoc-list)
7645 :test #'string=))
7646 (filename (ido-completing-read "Choose recent file: "
7647 filename-list
7648 nil
7649 t)))
7650 (when filename
7651 (find-file (cdr (assoc filename
7652 file-assoc-list))))))
7653
7654 (add-hook 'flyspell-mode-hook
7655 (lambda () (define-key flyspell-mode-map (kbd "C-.") nil)))
7656 (define-key dot-mode-map (kbd "C-.") nil)
7657 (global-set-key (kbd "C-.") 'recentf-ido-find-file)
7658 (add-hook 'php-mode-hook
7659 (lambda () (define-key php-mode-map (kbd "C-.") nil)))
7660 #+end_src
7661 ]
7662 *** M-.
7663 *** C-M-.
7664 :PROPERTIES:
7665 :CUSTOM_ID: 824d422c-67b6-4d68-af11-6a2135e528f5
7666 :END:
7667 -
7668 [
7669 #+begin_src emacs-lisp
7670 (define-key dot-mode-map (kbd "C-M-.") nil)
7671 ;; (global-set-key (kbd "C-M-.") 'execute-extended-command)
7672 #+end_src
7673 ]
7674 *** C-S-.
7675 :PROPERTIES:
7676 :CUSTOM_ID: 346effe7-027b-4c4a-a236-3bc6ef541a0c
7677 :END:
7678 *** [C-/] :drill:
7679 :PROPERTIES:
7680 :CUSTOM_ID: 941a7fa8-84b9-434d-89a0-1487385ec479
7681 :ID: 1bf4af8d-58bb-4b58-af60-2ed87f32f4eb
7682 :END:
7683 join lines
7684 [
7685 #+begin_src emacs-lisp
7686 (defun vim-style-join-line ()
7687 (interactive)
7688 (join-line '(4)))
7689 (global-set-key (kbd "C-/") 'vim-style-join-line)
7690 (define-key undo-tree-map (kbd "C-/") nil)
7691 #+end_src
7692 ]
7693 *** M-/
7694 :PROPERTIES:
7695 :CUSTOM_ID: f65acefa-7e11-438e-a59c-42a9c7c71607
7696 :END:
7697 *** [C-M-/] :drill:
7698 :PROPERTIES:
7699 :CUSTOM_ID: 37f67593-4f60-4d3b-9aad-6c9bc4882443
7700 :ID: c41dd5ab-619f-40fe-9471-9ba59d0fef46
7701 :END:
7702 copy-variable
7703 [
7704 #+begin_src emacs-lisp
7705 (defun copy-variable (variable)
7706 (interactive
7707 (let ((v (variable-at-point))
7708 (enable-recursive-minibuffers t)
7709 val)
7710 (setq val (completing-read (if (symbolp v)
7711 (format
7712 "Describe variable (default %s): " v)
7713 "Describe variable: ")
7714 obarray
7715 (lambda (vv)
7716 (or (get vv 'variable-documentation)
7717 (and (boundp vv) (not (keywordp vv)))))
7718 t nil nil
7719 (if (symbolp v) (symbol-name v))))
7720 (list (if (equal val "")
7721 v (intern val)))))
7722 (kill-new (symbol-value variable)))
7723 (global-set-key (kbd "C-M-/") 'copy-variable)
7724
7725 #+end_src
7726 ]
7727 *** C-S-/
7728 :PROPERTIES:
7729 :CUSTOM_ID: ff612b05-8a3f-4599-a95b-f8af19b71b47
7730 :END:
7731 *** [C-8] :drill:
7732 SCHEDULED: <2014-03-13 Thu>
7733 :PROPERTIES:
7734 calc-embedded-word
7735 :CUSTOM_ID: 251c4a1a-a683-4804-a706-d0d3752e42fa
7736 :ID: 8084cd41-1833-4e16-ac01-60a5738d0bf3
7737 :DRILL_LAST_INTERVAL: 22.2211
7738 :DRILL_REPEATS_SINCE_FAIL: 4
7739 :DRILL_TOTAL_REPEATS: 4
7740 :DRILL_FAILURE_COUNT: 1
7741 :DRILL_AVERAGE_QUALITY: 3.5
7742 :DRILL_EASE: 2.73
7743 :DRILL_LAST_QUALITY: 3
7744 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 16:35>
7745 :END:
7746 calc-embedded-word
7747 [
7748 #+begin_src emacs-lisp
7749 (global-set-key (kbd "C-8") 'calc-embedded-word)
7750 #+end_src
7751 ]
7752 *** M-8
7753 :PROPERTIES:
7754 :CUSTOM_ID: 34f4f850-c3e4-4724-aabc-08eee19f034a
7755 :END:
7756 *** C-M-8
7757 :PROPERTIES:
7758 :CUSTOM_ID: 52191c76-756e-4dcc-87a5-2b84c550db5f
7759 :END:
7760 *** C-S-8
7761 :PROPERTIES:
7762 :CUSTOM_ID: 3f677c1a-7011-467e-ae4c-4b944807376b
7763 :END:
7764 *** [C-up-arrow] :drill:
7765 SCHEDULED: <2014-03-14 Fri>
7766 :PROPERTIES:
7767 back defun/headline
7768 :CUSTOM_ID: f47d312a-063d-42ed-a352-176298a2cb0c
7769 :ID: 93fe8dac-4206-4131-9264-3411e6467b01
7770 :DRILL_LAST_INTERVAL: 23.4066
7771 :DRILL_REPEATS_SINCE_FAIL: 5
7772 :DRILL_TOTAL_REPEATS: 5
7773 :DRILL_FAILURE_COUNT: 3
7774 :DRILL_AVERAGE_QUALITY: 3.2
7775 :DRILL_EASE: 2.554
7776 :DRILL_LAST_QUALITY: 4
7777 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 18:04>
7778 :END:
7779 org prev headline
7780 [
7781 #+begin_src emacs-lisp
7782 (define-key undo-tree-map "\C-_" nil)
7783 ;; disabled just because i don't want to accidentally hit it
7784 (define-key global-map "\C-_" nil)
7785 (global-set-key (kbd "<C-_>") 'beginning-of-defun)
7786
7787 (add-hook 'org-mode-hook
7788 (lambda ()
7789 (define-key org-mode-map (kbd "\C-_") 'outline-previous-visible-heading)))
7790
7791 #+end_src
7792
7793
7794 ]
7795 *** M-up-arrow
7796 :PROPERTIES:
7797 :CUSTOM_ID: 30f87801-2c2d-4722-9348-fb38ea6c09b0
7798 :END:
7799 *** C-M-up-arrow
7800 *** C-S-up-arrow :drill:
7801 winner undo
7802 [
7803 #+begin_src emacs-lisp
7804 (global-set-key (kbd "<C-S-_>") 'winner-undo)
7805 #+end_src
7806 ]
7807 *** [C-down-arrow] :drill:
7808 SCHEDULED: <2014-03-13 Thu>
7809 :PROPERTIES:
7810 forward dfun/headline
7811 :CUSTOM_ID: 27435136-b3d7-4f25-aa85-2a7363a7f366
7812 :ID: da405d83-b0af-4778-9703-a3f109a1233d
7813 :DRILL_LAST_INTERVAL: 10.7692
7814 :DRILL_REPEATS_SINCE_FAIL: 3
7815 :DRILL_TOTAL_REPEATS: 6
7816 :DRILL_FAILURE_COUNT: 1
7817 :DRILL_AVERAGE_QUALITY: 3.167
7818 :DRILL_EASE: 2.537
7819 :DRILL_LAST_QUALITY: 4
7820 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:09>
7821 :END:
7822 org next headline
7823 [
7824 #+begin_src emacs-lisp
7825 (global-set-key (kbd "<C-kp-enter>") 'end-of-defun)
7826
7827 (add-hook 'org-mode-hook
7828 (lambda ()
7829 (define-key org-mode-map (kbd "<C-kp-enter>") 'outline-next-visible-heading)))
7830
7831 #+end_src
7832
7833
7834 ]
7835 *** M-down-arrow
7836 *** [C-M-down-arrow] :drill:
7837 SCHEDULED: <2014-03-20 Thu>
7838 :PROPERTIES:
7839 toggle-mark-activation
7840 :ID: c57f3bab-8ea1-423d-b759-e1ec2586753c
7841 :CUSTOM_ID: 3bcb35fd-6d54-4213-b94f-2739c0bc0041
7842 :DRILL_LAST_INTERVAL: 17.6506
7843 :DRILL_REPEATS_SINCE_FAIL: 4
7844 :DRILL_TOTAL_REPEATS: 7
7845 :DRILL_FAILURE_COUNT: 4
7846 :DRILL_AVERAGE_QUALITY: 3.661
7847 :DRILL_EASE: 2.851
7848 :DRILL_LAST_QUALITY: 5
7849 :DRILL_LAST_REVIEWED: <2014-03-02 Sun 21:10>
7850 :END:
7851 toggle-mark-activation
7852 [
7853 #+begin_src emacs-lisp
7854 (defun toggle-mark-activation ()
7855 (interactive)
7856 (if mark-active
7857 (deactivate-mark t)
7858 (activate-mark)))
7859
7860 (global-set-key (kbd "<C-M-kp-enter>") 'toggle-mark-activation)
7861 #+end_src
7862 ]
7863 winner redo
7864 [
7865 #+begin_src emacs-lisp
7866 (global-set-key (kbd "<C-S-kp-enter>") 'winner-redo)
7867 #+end_src
7868 ]
7869
7870 *** [C-S-down-arrow] :drill:
7871 SCHEDULED: <2014-03-19 Wed>
7872 :PROPERTIES:
7873 smex-major-mode-commands
7874 :CUSTOM_ID: 1434bdd0-c5a8-4c96-9b92-9474e88fd1c5
7875 :ID: 1e992e46-ec69-416c-b7d7-7c87da109b43
7876 :DRILL_LAST_INTERVAL: 24.3844
7877 :DRILL_REPEATS_SINCE_FAIL: 5
7878 :DRILL_TOTAL_REPEATS: 5
7879 :DRILL_FAILURE_COUNT: 2
7880 :DRILL_AVERAGE_QUALITY: 3.0
7881 :DRILL_EASE: 2.456
7882 :DRILL_LAST_QUALITY: 3
7883 :DRILL_LAST_REVIEWED: <2014-02-23 Sun 02:28>
7884 :END:
7885 m-x for major mode
7886 [
7887 #+begin_src emacs-lisp
7888 (global-set-key (kbd "<C-S-kp-enter>") 'smex-major-mode-commands)
7889 #+end_src
7890 ]
7891 *** C-lbracket
7892 :PROPERTIES:
7893 :CUSTOM_ID: 9d9916dd-3280-47dd-aab1-cd28d5ebfe15
7894 :END:
7895 ----
7896 *** M-lbracket
7897 *** [C-M-lbracket] :drill:
7898 SCHEDULED: <2014-03-15 Sat>
7899 :PROPERTIES:
7900 scroll-right
7901 :CUSTOM_ID: 7411b1a5-c8fa-4bcc-8788-798e5635dd62
7902 :ID: 0bf13532-1df9-4eb3-953c-10901f2a5da5
7903 :DRILL_LAST_INTERVAL: 23.5247
7904 :DRILL_REPEATS_SINCE_FAIL: 4
7905 :DRILL_TOTAL_REPEATS: 4
7906 :DRILL_FAILURE_COUNT: 0
7907 :DRILL_AVERAGE_QUALITY: 3.5
7908 :DRILL_EASE: 2.73
7909 :DRILL_LAST_QUALITY: 3
7910 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:25>
7911 :END:
7912 scroll-right
7913 [
7914 #+begin_src emacs-lisp
7915 (global-set-key (kbd "C-M-[") 'scroll-right)
7916 #+end_src
7917 ]
7918 *** C-S-lbracket
7919 *** [C-rbracket]
7920 :PROPERTIES:
7921 :CUSTOM_ID: 21b38c6b-3a46-4a08-8eca-d44abb148287
7922 :END:
7923 fill-paragraph
7924 #+begin_src emacs-lisp
7925 (global-set-key (kbd "C-]") 'fill-paragraph)
7926 #+end_src
7927 *** M-rbracket
7928 *** [C-M-rbracket] :drill:
7929 SCHEDULED: <2014-03-15 Sat>
7930 :PROPERTIES:
7931 scroll-left
7932 :CUSTOM_ID: c9c18f48-d0ca-4a1b-a751-7165f40118a3
7933 :ID: ff008422-b6f5-4770-9e53-e6acdac90b45
7934 :DRILL_LAST_INTERVAL: 24.4352
7935 :DRILL_REPEATS_SINCE_FAIL: 4
7936 :DRILL_TOTAL_REPEATS: 4
7937 :DRILL_FAILURE_COUNT: 0
7938 :DRILL_AVERAGE_QUALITY: 3.75
7939 :DRILL_EASE: 2.929
7940 :DRILL_LAST_QUALITY: 4
7941 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:44>
7942 :END:
7943 scroll-left
7944 [
7945 #+begin_src emacs-lisp
7946 (global-set-key (kbd "C-M-]") 'scroll-left)
7947 #+end_src
7948 ]
7949 *** C-S-rbracket
7950 :PROPERTIES:
7951 :CUSTOM_ID: d42245ca-3246-477b-bda9-8776cd668cd1
7952 :END:
7953 *** [C-return] :drill:
7954 SCHEDULED: <2014-03-12 Wed>
7955 :PROPERTIES:
7956 newline next line
7957 :ID: 20e450f0-6467-40f2-bd1b-b4038693e73f
7958 :CUSTOM_ID: baf7ea5a-d16d-4fee-a6ce-542cc11beb97
7959 :DRILL_LAST_INTERVAL: 20.7344
7960 :DRILL_REPEATS_SINCE_FAIL: 4
7961 :DRILL_TOTAL_REPEATS: 4
7962 :DRILL_FAILURE_COUNT: 0
7963 :DRILL_AVERAGE_QUALITY: 3.75
7964 :DRILL_EASE: 2.928
7965 :DRILL_LAST_QUALITY: 5
7966 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 16:29>
7967 :END:
7968 newline-anywhere
7969 [
7970 #+begin_src emacs-lisp
7971 (defun newline-anywhere ()
7972 "Add a newline from anywhere in the line."
7973 (interactive)
7974 (end-of-line)
7975 (newline-and-indent))
7976 (global-set-key (kbd "<C-return>") 'newline-anywhere)
7977
7978 #+end_src
7979 ]
7980 *** [M-return] :drill:
7981 SCHEDULED: <2014-03-11 Tue>
7982 :PROPERTIES:
7983 non-indented newline
7984 :ID: 4fc4d372-765e-4e2e-87f4-0a0e1fd93f34
7985 :CUSTOM_ID: e6895ad3-a2c8-46c8-abbc-1bba94a88596
7986 :DRILL_LAST_INTERVAL: 19.9622
7987 :DRILL_REPEATS_SINCE_FAIL: 4
7988 :DRILL_TOTAL_REPEATS: 4
7989 :DRILL_FAILURE_COUNT: 0
7990 :DRILL_AVERAGE_QUALITY: 3.5
7991 :DRILL_EASE: 2.73
7992 :DRILL_LAST_QUALITY: 4
7993 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 16:30>
7994 :END:
7995 plain newline
7996 [
7997 #+begin_src emacs-lisp
7998 (defun plain-newline ()
7999 (interactive)
8000 (insert "\n"))
8001 (global-set-key (kbd "<M-return>") 'plain-newline)
8002 #+end_src
8003 ]
8004
8005 *** C-M-return
8006 :PROPERTIES:
8007 open newline on previous line
8008 :CUSTOM_ID: 2a8fc6ea-a550-4437-9e35-3b3f2776788a
8009 :END:
8010 [
8011 #+begin_src emacs-lisp
8012 (defun newline-anywhere-previous ()
8013 "Add a newline from anywhere in the line."
8014 (interactive)
8015 (forward-line -1)
8016 (end-of-line)
8017 (newline-and-indent))
8018 (global-set-key (kbd "<C-M-return>") 'newline-anywhere-previous)
8019 #+end_src
8020 ]
8021 *** C-S-return
8022 :PROPERTIES:
8023 :CUSTOM_ID: 787cc59e-ce0f-4291-a9d5-fd4e14b0b83b
8024 :END:
8025 *** [C-space] :drill:
8026 SCHEDULED: <2014-03-18 Tue>
8027 :PROPERTIES:
8028 org-edit-special
8029 :CUSTOM_ID: 132daa1a-8e5f-47f1-a28d-35bee873aeac
8030 :ID: 3204f2ca-10b2-469b-8b70-fb660e35478a
8031 :DRILL_LAST_INTERVAL: 41.7787
8032 :DRILL_REPEATS_SINCE_FAIL: 3
8033 :DRILL_TOTAL_REPEATS: 3
8034 :DRILL_FAILURE_COUNT: 0
8035 :DRILL_AVERAGE_QUALITY: 4.667
8036 :DRILL_EASE: 4.583
8037 :DRILL_LAST_QUALITY: 4
8038 :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:44>
8039 :END:
8040 org-edit-special
8041 [
8042 #+begin_src emacs-lisp
8043 ;; (kbd "<C-space>") does not work, (kbd "C-SPC") should work
8044 (add-hook 'org-mode-hook
8045 (lambda ()
8046 (define-key org-mode-map (kbd "C-SPC") 'org-edit-special)
8047 (define-key org-src-mode-map (kbd "C-SPC") 'org-edit-src-exit)))
8048 #+end_src
8049 ]
8050 *** M-space
8051 :PROPERTIES:
8052 :CUSTOM_ID: bbffb12e-03f2-4a26-a9e4-fd263ad6b518
8053 :END:
8054 *** C-M-space
8055 :PROPERTIES:
8056 spell check word
8057 :CUSTOM_ID: 02359b66-bf6e-4f41-9f03-e83fcbe3e68c
8058 :END:
8059 [
8060 before or under cursor
8061 #+begin_src emacs-lisp
8062 (global-set-key (kbd "C-M-SPC") 'ispell-word)
8063 #+end_src
8064 ]
8065 *** C-S-space
8066 :PROPERTIES:
8067 :CUSTOM_ID: a28e904f-f2bd-48d3-9718-af3f541e611e
8068 :END:
8069 ** left secondary
8070 *** C-=
8071 :PROPERTIES:
8072 :CUSTOM_ID: 6b01dcdd-d1c1-4e3f-9e28-9c3574682f95
8073 :END:
8074 *** M-=
8075 :PROPERTIES:
8076 :CUSTOM_ID: 6a63486f-ea5b-4ece-a535-5277022e0cde
8077 :END:
8078 *** C-M-=
8079 :PROPERTIES:
8080 :CUSTOM_ID: 1e245ef6-5bdb-4f99-b8e2-f5d45a7c0847
8081 :END:
8082 *** C-S-=
8083 :PROPERTIES:
8084 :CUSTOM_ID: 0f9aa2b8-83c7-433c-80e0-f90ee802365f
8085 :END:
8086 *** C-1
8087 :PROPERTIES:
8088 :CUSTOM_ID: 06374c1c-025b-47c2-90b2-82f37031093b
8089 :END:
8090 *** M-1
8091 :PROPERTIES:
8092 :CUSTOM_ID: 51810ebd-52f3-4e68-9434-e2347a834787
8093 :END:
8094 *** C-M-1
8095 :PROPERTIES:
8096 :CUSTOM_ID: 9207526f-a925-4ecc-bd30-98cbd580d67a
8097 :END:
8098 *** C-S-1
8099 :PROPERTIES:
8100 :CUSTOM_ID: 58a7a929-50b5-4393-9b08-59ad2039b263
8101 :END:
8102 *** C-4
8103 :PROPERTIES:
8104 :CUSTOM_ID: 24a0c3c4-bce7-4a94-8a31-e5259387c573
8105 :END:
8106 *** M-4
8107 :PROPERTIES:
8108 :CUSTOM_ID: 2d4fa927-2140-424b-9990-e8f2c3424e57
8109 :END:
8110 *** C-M-4 :drill:
8111 widen
8112 [
8113 :PROPERTIES:
8114 :CUSTOM_ID: 3ff50f5f-f286-4a73-962b-58dbcf3b09b1
8115 :ID: addc832b-5547-4d45-a1f5-3e9283920612
8116 :END:
8117 #+begin_src emacs-lisp
8118 (global-set-key (kbd "C-M-4") 'widen)
8119 #+end_src
8120 ]
8121 *** C-S-4
8122 :PROPERTIES:
8123 :CUSTOM_ID: ba9ed568-7ba1-4283-b4c7-57fcb9a5a477
8124 :END:
8125 *** C-5
8126 :PROPERTIES:
8127 :CUSTOM_ID: 83bc2d8a-a225-4b6f-ab98-f47aa6d1e73f
8128 :END:
8129 *** M-5
8130 :PROPERTIES:
8131 :CUSTOM_ID: 1b8f04c3-91b5-43cd-8a1a-94c8105eff24
8132 :END:
8133 *** C-M-5
8134 :PROPERTIES:
8135 :CUSTOM_ID: fab28de6-7fe4-45d7-a856-5d29a9085f5d
8136 :END:
8137 *** C-S-5
8138 :PROPERTIES:
8139 :CUSTOM_ID: b22cdf04-bc77-493b-a65c-5992befc1a62
8140 :END:
8141 *** [C-tab-key] :drill:
8142 SCHEDULED: <2014-03-12 Wed>
8143 :PROPERTIES:
8144 query-replace
8145 :CUSTOM_ID: 68313551-90cd-47a6-8170-1745348add17
8146 :ID: 5b315ca6-c623-4b23-bef3-31b325591d01
8147 :DRILL_LAST_INTERVAL: 20.9905
8148 :DRILL_REPEATS_SINCE_FAIL: 4
8149 :DRILL_TOTAL_REPEATS: 4
8150 :DRILL_FAILURE_COUNT: 2
8151 :DRILL_AVERAGE_QUALITY: 3.5
8152 :DRILL_EASE: 2.73
8153 :DRILL_LAST_QUALITY: 3
8154 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 16:32>
8155 :END:
8156 query-replace
8157 [
8158 #+begin_src emacs-lisp
8159
8160 (global-set-key (kbd "<C-kp-add>") 'query-replace)
8161 #+end_src
8162 ]
8163 *** M-tab-key
8164 *** C-M-tab-key
8165 *** C-S-tab-key
8166 *** [C-t] :drill:
8167 SCHEDULED: <2014-03-24 Mon>
8168 :PROPERTIES:
8169 org change todo state
8170 :ID: b9a6ec32-9b64-403f-be09-73769f778d1f
8171 :CUSTOM_ID: aaac3048-9125-4fd5-b8f2-21bafcc1ff1c
8172 :DRILL_LAST_INTERVAL: 32.7466
8173 :DRILL_REPEATS_SINCE_FAIL: 4
8174 :DRILL_TOTAL_REPEATS: 4
8175 :DRILL_FAILURE_COUNT: 0
8176 :DRILL_AVERAGE_QUALITY: 4.0
8177 :DRILL_EASE: 3.204
8178 :DRILL_LAST_QUALITY: 4
8179 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:53>
8180 :END:
8181 org cycle todo / toggle comint motion
8182 [
8183 #+begin_src emacs-lisp
8184 (add-hook 'org-mode-hook
8185 (lambda ()
8186 (define-key org-mode-map (kbd "C-t") 'org-todo)))
8187
8188 (defun my-comint-previous-input (arg)
8189 (interactive "*p")
8190 (if (comint-after-pmark-p)
8191 (comint-previous-input arg)
8192 (forward-line -1)))
8193
8194 (defun my-comint-next-input (arg)
8195 (interactive "*p")
8196 (if (comint-after-pmark-p)
8197 (comint-next-input arg)
8198 (forward-line)))
8199
8200 (add-hook 'comint-mode-hook
8201 (lambda ()
8202 (define-key comint-mode-map (kbd "C-t") 'comint-toggle-arrow-keys)
8203 (define-key comint-mode-map (kbd "<up>") 'my-comint-previous-input)
8204 (define-key comint-mode-map (kbd "<down>") 'my-comint-next-input)))
8205
8206
8207 (defun comint-toggle-arrow-keys ()
8208 (interactive)
8209 (toggle-arrow-keys comint-mode-map))
8210
8211 (setq-default comint-arrow-movement nil)
8212 (defun toggle-arrow-keys (map)
8213 (cond ((lookup-key map (kbd "<up>"))
8214 (setq-local comint-arrow-movement t)
8215 (define-key map (kbd "<up>") nil)
8216 (define-key map (kbd "<down>") nil))
8217 (t
8218 (setq-local comint-arrow-movement nil)
8219 (define-key map (kbd "<up>") 'my-comint-previous-input)
8220 (define-key map (kbd "<down>") 'my-comint-next-input)
8221 (goto-char (point-max)))))
8222
8223 (defun ian-sign-email ()
8224 (interactive)
8225 (insert "Ian Kelling
8226 https://iankelling.org"))
8227
8228 (eval-after-load "message"
8229 '(define-key message-mode-map (kbd "C-t") 'ian-sign-email))
8230 #+end_src
8231 Thanks for the update. I will be enjoying it.
8232
8233 #+RESULTS:
8234 : comint-toggle-arrow-keys
8235 ]
8236 *** M-t
8237 :PROPERTIES:
8238 :CUSTOM_ID: 4542dc3a-d876-4726-8c8e-61c7c9cecd64
8239 :END:
8240 *** [C-M-t] :drill:
8241 SCHEDULED: <2014-03-15 Sat>
8242 :PROPERTIES:
8243 org insert timestamp
8244 :ID: ed43d561-cf73-4123-8cf2-12e184f99e0f
8245 :CUSTOM_ID: 5bc609b1-9428-4b82-a55d-811fefe65331
8246 :DRILL_LAST_INTERVAL: 23.5247
8247 :DRILL_REPEATS_SINCE_FAIL: 4
8248 :DRILL_TOTAL_REPEATS: 4
8249 :DRILL_FAILURE_COUNT: 0
8250 :DRILL_AVERAGE_QUALITY: 3.5
8251 :DRILL_EASE: 2.73
8252 :DRILL_LAST_QUALITY: 3
8253 :DRILL_LAST_REVIEWED: <2014-02-19 Wed 17:41>
8254 :END:
8255 org timestamp
8256 [
8257 #+begin_src emacs-lisp
8258 (global-set-key (kbd "C-M-t") 'org-time-stamp-with-time)
8259 #+end_src
8260 ]
8261 *** C-S-t
8262 :PROPERTIES:
8263 :CUSTOM_ID: 6a6fcd06-5822-4a3d-8e2e-1fc0f64357b2
8264 :END:
8265 *** C-home
8266 :PROPERTIES:
8267 :CUSTOM_ID: 1919659a-b466-4519-9276-8bf06a916066
8268 :END:
8269 start of buffer
8270 *** M-home
8271 :PROPERTIES:
8272 :CUSTOM_ID: 29a3b536-201d-4499-b131-afe58e6f45b4
8273 :END:
8274 *** C-M-home
8275 :PROPERTIES:
8276 :CUSTOM_ID: d9df9b43-357a-43e1-bb1c-47d61f095738
8277 :END:
8278 *** C-S-home
8279 :PROPERTIES:
8280 :CUSTOM_ID: a91ee772-a59c-4083-a65c-6f9b294b517c
8281 :END:
8282 *** C-end
8283 :PROPERTIES:
8284 :CUSTOM_ID: 0a7bd629-cbcc-4761-8fe2-cc9370b985a4
8285 :END:
8286 end of buffer
8287 *** M-end
8288 :PROPERTIES:
8289 :CUSTOM_ID: 1c215db5-a50c-4718-868a-871d69acf117
8290 :END:
8291 *** C-M-end
8292 :PROPERTIES:
8293 :CUSTOM_ID: cf2df317-a0b1-41e6-9919-67e77bb796f8
8294 :END:
8295 *** C-S-end
8296 :PROPERTIES:
8297 :CUSTOM_ID: a4721bb0-9cbc-4f3c-b292-645d5121c839
8298 :END:
8299 *** C-f9
8300 :PROPERTIES:
8301 :CUSTOM_ID: 014536d9-68e3-46f5-9594-e74fe64f4d9e
8302 :END:
8303 *** M-f9
8304 :PROPERTIES:
8305 :CUSTOM_ID: 6dee0f1b-3680-4a72-8a80-e31b9c7c219d
8306 :END:
8307 *** C-M-f9
8308 :PROPERTIES:
8309 :CUSTOM_ID: f5e835dd-e2b8-42eb-b7f1-9ec76c7dfcb8
8310 :END:
8311 *** C-S-f9
8312 :PROPERTIES:
8313 :CUSTOM_ID: c3aba493-9e85-40b7-989d-7e17ba2b55a7
8314 :END:
8315 ** right secondary
8316 *** C-6
8317 :PROPERTIES:
8318 :CUSTOM_ID: e44e584b-d925-4036-9ad5-a90d02e74bef
8319 :END:
8320 save-buffers-kill-emacs
8321 [
8322 #+begin_src emacs-lisp
8323 (global-set-key (kbd "C-6") 'save-buffers-kill-emacs)
8324 #+end_src
8325 ]
8326 *** M-6
8327 *** [C-M-6] :drill:
8328 :PROPERTIES:
8329 :CUSTOM_ID: da73de75-0914-4f48-81d5-9b408433b14b
8330 :ID: bcf78e2e-810e-4a6d-9056-bd488aaa373b
8331 :END:
8332 insert-small-copyright
8333 [
8334 #+begin_src emacs-lisp
8335 (defun insert-small-copyright ()
8336 (interactive)
8337 (beginning-of-line)
8338 (let ((beg (point)))
8339 (insert "Copyright (C) 2016 Ian Kelling\nThis program is under GPL v. 3 or later, see <http://www.gnu.org/licenses/>")
8340 (comment-region beg (point))))
8341
8342 (global-set-key (kbd "C-M-6") 'insert-small-copyright)
8343 #+end_src
8344 ]
8345 *** C-S-6
8346 *** C-7
8347 *** M-7
8348 *** [C-M-7] :drill:
8349 :PROPERTIES:
8350 :CUSTOM_ID: a68c6b8e-9911-475e-ab35-e239771fe881
8351 :ID: ae9704b8-1492-4dc0-806a-dd3407526733
8352 :END:
8353 insert-full-copyright
8354 [
8355 #+begin_src emacs-lisp
8356 (defun insert-full-copyright ()
8357 (interactive)
8358 (beginning-of-line)
8359 (let ((beg (point)))
8360 (insert "Copyright (C) 2016 Ian Kelling\n")
8361 (insert "\n")
8362 (insert "This program is free software: you can redistribute it and/or modify\n")
8363 (insert "it under the terms of the GNU General Public License as published by\n")
8364 (insert "the Free Software Foundation, either version 3 of the License, or\n")
8365 (insert "(at your option) any later version.\n")
8366 (insert "\n")
8367 (insert "This program is distributed in the hope that it will be useful,\n")
8368 (insert "but WITHOUT ANY WARRANTY; without even the implied warranty of\n")
8369 (insert "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n")
8370 (insert "GNU General Public License for more details.\n")
8371 (insert "\n")
8372 (insert "You should have received a copy of the GNU General Public License\n")
8373 (insert "along with this program. If not, see <http://www.gnu.org/licenses/>.\n")
8374 (comment-region beg (point))))
8375
8376 (global-set-key (kbd "C-M-7") 'insert-full-copyright)
8377
8378 #+end_src
8379 ]
8380 *** C-S-7
8381 :PROPERTIES:
8382 :CUSTOM_ID: 05f5737b-a320-403c-a8f1-fa0a02f679e1
8383 :END:
8384 *** C-0
8385 :PROPERTIES:
8386 :CUSTOM_ID: 96ae2fcc-3a0c-40c4-aef8-06aff3fd42be
8387 :END:
8388 text-scale-reset
8389 [
8390 #+begin_src emacs-lisp
8391 (defun text-scale-reset ()
8392 (interactive)
8393 (text-scale-set 0))
8394 (global-set-key (kbd "C-0") 'text-scale-reset)
8395 #+end_src
8396 ]
8397 *** M-0
8398 :PROPERTIES:
8399 :CUSTOM_ID: c5735fdf-d0d9-468c-917c-3936e409a2bc
8400 :END:
8401 *** C-M-0
8402 :PROPERTIES:
8403 :CUSTOM_ID: 0e7f83a5-600e-4016-af98-95904300c016
8404 :END:
8405 insert-apache
8406 [
8407 #+begin_src emacs-lisp
8408 (defun insert-apache ()
8409 (interactive)
8410 (beginning-of-line)
8411 (let ((beg (point)))
8412 (insert "Copyright (C) 2016 Ian Kelling\n")
8413 (insert "\n")
8414 (insert "Licensed under the Apache License, Version 2.0 (the \"License\");\n")
8415 (insert "you may not use this file except in compliance with the License.\n")
8416 (insert "You may obtain a copy of the License at\n")
8417 (insert "\n")
8418 (insert " http://www.apache.org/licenses/LICENSE-2.0\n")
8419 (insert "\n")
8420 (insert "Unless required by applicable law or agreed to in writing, software\n")
8421 (insert "distributed under the License is distributed on an \"AS IS\" BASIS,\n")
8422 (insert "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n")
8423 (insert "See the License for the specific language governing permissions and\n")
8424 (insert "limitations under the License.\n")
8425 (comment-region beg (point))))
8426 (global-set-key (kbd "C-M-0") 'insert-apache)
8427 #+end_src
8428 ]
8429
8430 *** C-S-0
8431 :PROPERTIES:
8432 :CUSTOM_ID: d1706bc7-7cf0-4b49-87d0-15bf76eaca5f
8433 :END:
8434 *** C--
8435 :PROPERTIES:
8436 :CUSTOM_ID: 3713b701-b31a-4612-b663-f232005b4122
8437 :END:
8438 *** M--
8439 :PROPERTIES:
8440 :CUSTOM_ID: ca833b78-b279-4d1f-b1c9-6c70fdf20f57
8441 :END:
8442 *** C-M--
8443 :PROPERTIES:
8444 :CUSTOM_ID: 6febc7ea-9cc7-488c-af34-538b8e69633b
8445 :END:
8446 *** C-S--
8447 :PROPERTIES:
8448 :CUSTOM_ID: c73af1d7-61f2-4c1b-935e-43f077d8d915
8449 :END:
8450 *** [C-y] :drill:
8451 SCHEDULED: <2014-03-27 Thu>
8452 :PROPERTIES:
8453 :ID: 4c0f74f8-04ed-40d8-8ec3-6e2bed03c2b9
8454 :CUSTOM_ID: 97aee7f1-3647-4602-a65a-45e8a3aa3a7c
8455 :DRILL_LAST_INTERVAL: 50.6823
8456 :DRILL_REPEATS_SINCE_FAIL: 3
8457 :DRILL_TOTAL_REPEATS: 3
8458 :DRILL_FAILURE_COUNT: 0
8459 :DRILL_AVERAGE_QUALITY: 5.0
8460 :DRILL_EASE: 5.815
8461 :DRILL_LAST_QUALITY: 5
8462 :DRILL_LAST_REVIEWED: <2014-02-04 Tue 11:45>
8463 :END:
8464 undo-tree-redo
8465 [
8466 #+begin_src emacs-lisp
8467 (global-set-key (kbd "C-y") 'undo-tree-redo)
8468 #+end_src
8469
8470 ]
8471 *** M-y
8472 :PROPERTIES:
8473 :CUSTOM_ID: 35072ca8-7fd6-4a64-bc7a-2636de575bd1
8474 :END:
8475 *** C-M-y
8476 *** C-S-y
8477 :PROPERTIES:
8478 :CUSTOM_ID: 964fa784-37e3-48c6-af4b-c7e91f67a93a
8479 :END:
8480 *** C-\
8481 :PROPERTIES:
8482 sr-speedbar-toggle
8483 :CUSTOM_ID: b8ad3ee9-7bf6-4069-a300-49cd298008a7
8484 :END:
8485 [
8486 #+begin_src emacs-lisp
8487 (global-set-key (kbd "C-\\") 'sr-speedbar-toggle)
8488 #+end_src
8489 ]
8490 *** M-\
8491 :PROPERTIES:
8492 :CUSTOM_ID: c1d53d84-b8a9-49cb-bfd6-4420931c8873
8493 :END:
8494 *** [C-M-\] :drill:
8495 SCHEDULED: <2014-03-21 Fri>
8496 :PROPERTIES:
8497 mark-defun
8498 :ID: d45bce17-45bc-41f0-8994-aa7bc3b2fa92
8499 :CUSTOM_ID: 6a583354-48f8-4503-bf87-b8ba56411435
8500 :DRILL_LAST_INTERVAL: 11.7003
8501 :DRILL_REPEATS_SINCE_FAIL: 4
8502 :DRILL_TOTAL_REPEATS: 9
8503 :DRILL_FAILURE_COUNT: 6
8504 :DRILL_AVERAGE_QUALITY: 2.815
8505 :DRILL_EASE: 2.369
8506 :DRILL_LAST_QUALITY: 3
8507 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:36>
8508 :END:
8509 mark-defun
8510 [
8511 #+begin_src emacs-lisp
8512 (global-set-key (kbd "C-M-\\") 'mark-defun)
8513 #+end_src
8514 ]
8515 *** C-S-\
8516 :PROPERTIES:
8517 :CUSTOM_ID: 30edfb48-852f-4f2c-ba38-2635927d4950
8518 :END:
8519 *** C-h
8520 :PROPERTIES:
8521 :CUSTOM_ID: 3c5f241f-fc62-459d-ab85-6b7c1fb04801
8522 :END:
8523 help-prefix
8524
8525 *** M-h
8526 :PROPERTIES:
8527 :CUSTOM_ID: 6df13b90-490b-4cca-a49d-4f2e3ce5bea3
8528 :END:
8529 *** C-M-h
8530 :PROPERTIES:
8531 :CUSTOM_ID: 47f0d1f3-78ea-49d7-a6d7-06627ca745bd
8532 :END:
8533 *** C-S-h
8534 :PROPERTIES:
8535 :CUSTOM_ID: 3be3db5c-9905-474b-b773-1aee515625f5
8536 :END:
8537 *** C-'
8538 :PROPERTIES:
8539 :CUSTOM_ID: 9f252721-a2d5-46c6-b268-8ed597256229
8540 :END:
8541 eval-expression
8542 [
8543 #+begin_src emacs-lisp
8544 (global-set-key (kbd "C-'") 'eval-expression)
8545 #+end_src
8546 ]
8547 *** M-'
8548 :PROPERTIES:
8549 :CUSTOM_ID: f00b9c88-68bb-4831-872f-afb5ff82c104
8550 :END:
8551 *** C-M-'
8552 :PROPERTIES:
8553 :CUSTOM_ID: 0d39d36c-115a-4570-b4b1-818718409a49
8554 :END:
8555 *** C-S-'
8556 :PROPERTIES:
8557 :CUSTOM_ID: 230f50ef-48fd-4f13-aa62-e4a492c4515d
8558 :END:
8559 *** [C-n] :drill:
8560 SCHEDULED: <2014-04-07 Mon>
8561 :PROPERTIES:
8562 unpop-to-mark-command
8563 :CUSTOM_ID: 52ebb720-589b-485c-89dc-0dfb78e6dad4
8564 :ID: 32f1c87d-ee1f-4117-8059-32fd8facbeff
8565 :DRILL_LAST_INTERVAL: 42.8284
8566 :DRILL_REPEATS_SINCE_FAIL: 4
8567 :DRILL_TOTAL_REPEATS: 4
8568 :DRILL_FAILURE_COUNT: 0
8569 :DRILL_AVERAGE_QUALITY: 4.5
8570 :DRILL_EASE: 4.122
8571 :DRILL_LAST_QUALITY: 5
8572 :DRILL_LAST_REVIEWED: <2014-02-23 Sun 01:51>
8573 :END:
8574 unpop to mark
8575 [
8576 #+begin_src emacs-lisp
8577 (defun unpop-to-mark-command ()
8578 "Unpop off mark ring. Does nothing if mark ring is empty."
8579 (interactive)
8580 (when mark-ring
8581 (let ((pos (marker-position (car (last mark-ring)))))
8582 (if (not (= (point) pos))
8583 (goto-char pos)
8584 (setq mark-ring (cons (copy-marker (mark-marker)) mark-ring))
8585 (set-marker (mark-marker) pos)
8586 (setq mark-ring (nbutlast mark-ring))
8587 (goto-char (marker-position (car (last mark-ring))))))))
8588
8589 (global-set-key (kbd "C-n") 'unpop-to-mark-command)
8590 #+end_src
8591 ]
8592 *** M-n
8593 :PROPERTIES:
8594 :CUSTOM_ID: 00c2ab64-696d-4492-8236-f7ebc12e4a93
8595 :END:
8596 *** [C-M-n] :drill:
8597 SCHEDULED: <2014-03-17 Mon>
8598 :PROPERTIES:
8599 narrow-to-region
8600 :ID: 59e48dcc-434b-4c96-bdb3-c083c41ae8b3
8601 :CUSTOM_ID: 43997316-8d3f-4750-873b-ade09628fdd5
8602 :DRILL_LAST_INTERVAL: 7.6409
8603 :DRILL_REPEATS_SINCE_FAIL: 3
8604 :DRILL_TOTAL_REPEATS: 8
8605 :DRILL_FAILURE_COUNT: 4
8606 :DRILL_AVERAGE_QUALITY: 2.59
8607 :DRILL_EASE: 2.261
8608 :DRILL_LAST_QUALITY: 3
8609 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:34>
8610 :END:
8611 narrow-to-region
8612 [
8613 #+begin_src emacs-lisp
8614 (global-set-key (kbd "C-M-n") 'narrow-to-region)
8615 #+end_src
8616 ]
8617 *** C-S-n
8618 :PROPERTIES:
8619 :CUSTOM_ID: f01c2c61-f606-49ea-885a-63a831eaae3d
8620 :END:
8621 *** C-rshift
8622 *** M-rshift
8623 *** C-M-rshift
8624 *** C-S-rshift
8625 *** [C-escape] :drill:
8626 SCHEDULED: <2014-04-05 Sat>
8627 :PROPERTIES:
8628 find-tag
8629 :ID: a6dd7e4c-1831-4493-bbfd-557dc2f9c856
8630 :CUSTOM_ID: 6901fa1b-c827-4525-b24b-bdb8fe5f638b
8631 :DRILL_LAST_INTERVAL: 27.3693
8632 :DRILL_REPEATS_SINCE_FAIL: 5
8633 :DRILL_TOTAL_REPEATS: 6
8634 :DRILL_FAILURE_COUNT: 2
8635 :DRILL_AVERAGE_QUALITY: 3.417
8636 :DRILL_EASE: 2.676
8637 :DRILL_LAST_QUALITY: 4
8638 :DRILL_LAST_REVIEWED: <2014-03-09 Sun 18:37>
8639 :END:
8640 find-tag
8641 [
8642 #+begin_src emacs-lisp
8643 (global-set-key (kbd "<C-escape>") 'find-tag)
8644 #+end_src
8645 ]
8646 *** M-escape
8647 :PROPERTIES:
8648 :ID: 7224837b-addc-4c82-8313-467c6dcb7a52
8649 :CUSTOM_ID: f505f1b9-82f6-4139-9e3e-78df548175ec
8650 :END:
8651 *** C-M-escape
8652 :PROPERTIES:
8653 :CUSTOM_ID: d77136c5-4aec-4f02-8b4b-e417249fbac1
8654 :END:
8655 *** C-S-escape
8656 :PROPERTIES:
8657 :CUSTOM_ID: d61ae40a-3f2d-4ef6-a515-8864a7d7c8ea
8658 :END:
8659 * keybind table src
8660 :PROPERTIES:
8661 :CUSTOM_ID: ff8f3092-187a-4b2c-940f-01743f7a51b6
8662 :END:
8663 not necessary to have at the end, but its convenient to have it next
8664 to its output.
8665 #+NAME: keybind-table-generator
8666 #+BEGIN_SRC emacs-lisp :results silent
8667 (defun org-custom-id-get (&optional pom create prefix)
8668 "Get the CUSTOM_ID property of the entry at point-or-marker POM.
8669 If POM is nil, refer to the entry at point.
8670 If the entry does not have a CUSTOM_ID, the function returns nil.
8671 However, when CREATE is non nil, create an ID if none is present already.
8672 PREFIX will be passed through to `org-id-new'.
8673 In any case, the CUSTOM_ID of the entry is returned."
8674 (org-with-point-at pom
8675 (let ((id (org-entry-get nil "CUSTOM_ID")))
8676 (cond
8677 ((and id (stringp id) (string-match "\\S-" id))
8678 id)
8679 (create
8680 (setq id (org-id-new prefix))
8681 (org-entry-put pom "CUSTOM_ID" id)
8682 (org-id-add-location id (buffer-file-name (buffer-base-buffer)))
8683 id)))))
8684
8685 (defun get-title()
8686 (interactive)
8687 (let ((title (plist-get (cadr (org-element-at-point)) ':title)))
8688 ;; remove brackets from [title]
8689 (string-match "[^[ ][^]]*" title)
8690 (setq title (match-string 0 title))
8691 (print title)
8692 title))
8693
8694
8695 (defun org-dblock-write:keybind-dblock (arg)
8696 (let (output)
8697 (save-excursion
8698 (goto-char (org-find-entry-with-id "beginning-of-keybind-table-data"))
8699 (let* ((table-level (org-current-level))
8700 (keybind-level (1+ table-level))
8701 (prefixes (list "C-M-S-" "C-M-" "C-S-" "M-S-" "M-" "C-" "S-"))
8702 table-title
8703 previous-prefixes
8704 )
8705 (while (>= (org-current-level) table-level)
8706 (setq table-title (get-title))
8707 (outline-next-heading)
8708 (let (found-prefixes
8709 found-all-prefixes)
8710 ;; go through the first few elements of the table to find out what column headings aka prefixes it should have
8711 (save-excursion
8712 (while (not found-all-prefixes)
8713 (let ((prefixes-copy prefixes)
8714 current-prefix
8715 found-prefix)
8716 (while (and prefixes-copy (not found-prefix))
8717 (setq current-prefix (car prefixes-copy))
8718 (when (and (> (length (get-title)) (length current-prefix))
8719 (string= (substring (get-title) 0 (length current-prefix)) current-prefix))
8720 (setq found-prefix t))
8721 (setq prefixes-copy (cdr prefixes-copy)))
8722 (unless found-prefix
8723 (setq current-prefix ""))
8724 (if (and found-prefixes (string= (car (last found-prefixes)) current-prefix))
8725 (setq found-all-prefixes t)
8726 (push current-prefix found-prefixes)))
8727 (outline-next-heading)))
8728 (setq found-prefixes (reverse found-prefixes))
8729
8730 ;; start a new table or repeat the prefixes in the current table
8731
8732 (if (or (not previous-prefixes) (equal previous-prefixes found-prefixes))
8733 (setq output (concat output "|-|\n| "))
8734 (setq output (concat output "|-|\n\n|-|\n| ")))
8735 (setq output (concat output table-title " | "))
8736 (setq previous-prefixes found-prefixes)
8737
8738 ;; add the prefixes
8739 (dolist (prefix found-prefixes)
8740 (setq output (concat output prefix "|")))
8741 (setq output (concat output "\n|-|\n"))
8742
8743
8744 (let (subtree-end)
8745 (while (>= (org-current-level) keybind-level)
8746 (dotimes (i (length found-prefixes))
8747 ;; add keybind name
8748 (when (= i 0)
8749 (setq output (concat output "| " (substring (get-title) (length (car found-prefixes))) " | ")))
8750 ;; add keybinds by searching for regex [keybind] to the start of the next heading
8751 (save-excursion
8752 (outline-next-heading)
8753 (setq subtree-end (point)))
8754 ;; skip over scheduled line
8755 (re-search-forward "^SCHEDULED:" subtree-end t)
8756
8757 ;; see comment after source block to understand this regex
8758 (re-search-forward "^\\s-*\\([^*: ].*?$\\)" subtree-end t)
8759 (let ((m (match-string 1)))
8760 (when m
8761 (setq output (concat output "[[#" (org-custom-id-get (point) 'create) "][" m "]]")))
8762 (setq output (concat output " | ")))
8763 ;; advance to next keybind
8764 (outline-next-heading))
8765 (setq output (concat output "\n"))
8766 ))))))
8767 (setq output (concat output "|-|"))
8768 (insert output))
8769 (org-table-map-tables 'org-table-align 'quietly))
8770
8771
8772 #+END_SRC
8773 after source block due to bad parsing of comments in non emacs lisp mode
8774 some easily forgotten regex elements. whitespace: \\s-
8775 non-greedy star: *?
8776 subexpression for close bracket char or nothing: \\(\\]\\|\\)
8777
8778 * keybind tables
8779 dunno why but it takes doing ctrl-c twice to update this
8780 #+BEGIN: keybind-dblock
8781 |---------------------+------------------------|
8782 | single/special keys | |
8783 |---------------------+------------------------|
8784 | tab key | [[#6c10a716-1d8e-4ce4-8e26-64468f19c17a][isearch]] |
8785 | tab | [[#51ece189-1840-41a1-8ca0-19f9a0481895][isearch-forward]] |
8786 | end | [[#00d589b7-2b8e-494c-b761-3afefebe6ec6][move-end-of-line]] |
8787 | home | [[#7800e455-c3f6-4a8f-8907-b2292449ab67][back-to-indentation]] |
8788 | s-tab | [[#3072901e-5cf3-4d6e-9ac8-3ef64a5f6ad2][indent-buffer]] |
8789 | s-delete | [[#e53728b6-054d-4443-a03e-6cf02d13724d][send-shell]] |
8790 | s-left arrow | [[#d8c473ac-5507-4a6b-9e5a-46558c17b09f][shell]] |
8791 | s-right arrow | [[#2365f5a7-b89a-4a97-b272-ac8ae9c2cc66][previous-buffer]] |
8792 | esc | |
8793 | return | [[#fab6adea-ed20-45ab-a0a3-776c68d5c3a5][new line]] |
8794 | s-return | [[#819cfb55-3a2f-4f20-8591-f819d1a6869a][auto-correct-prev-word]] |
8795 | down arrow | [[#7a868484-9c63-4a73-abda-7751cb2c02be][mark]] |
8796 | s-down arrow | [[#097b97e0-8ad8-40f7-8388-c4ace1706b38][extended command]] |
8797 | s-up arrow | |
8798 |---------------------+------------------------|
8799
8800 |-------------------+----------------------------+---------------------------------+--------------------+---------------+-------------------+-------------|
8801 | mouse | | C- | M- | S- | C-M- | C-S- |
8802 |-------------------+----------------------------+---------------------------------+--------------------+---------------+-------------------+-------------|
8803 | mouse-2 mode line | [[#69aaa631-6fb5-4beb-b2d8-c0f3d92c0a98][mouse-delete-other-windows]] | [[#501479ab-e1e2-497e-bd86-071f8afa3378][mouse-split-window-horizontally]] | | | | |
8804 | mouse-3 mode line | [[#917a1844-8c38-4f31-8616-50fc81334f2c][mouse-delete-window]] | | | | | |
8805 | mouse-1 | [[#4e60e2e4-8c2f-4450-8060-2d793ede530c][set cursor/mark]] | [[#b661f84f-57df-4095-9dc1-d1a876a53ee5][buffer list context menu]] | | | | |
8806 | mouse-2 | [[#086b0b50-054f-462d-92fa-b27852f887b0][paste]] | | | | | |
8807 | mouse-3 | [[#0481632e-9c50-4328-9365-c4b5bf967b66][set-mark]] | [[#9623c78f-7705-4cbe-a990-c24eb1067377][global menu]] | | | | |
8808 | mouse-9 | [[#efaec161-b279-4129-86fd-b410430926e4][move-mouse-to-point]] | | | | | |
8809 | mouse-8 | | | | | | |
8810 | 1/kp-end | | | | | | |
8811 | 2/kp-down | | | | | | |
8812 | 3/kp-next | | | | | | |
8813 | 4/kp-left | [[#c44d0f65-9502-4cc6-9642-96d907f6b093][indent-region]] | | | | | |
8814 | 5/kp-begin | [[#2458c6bc-7113-4d4b-bbdf-206e1cb842a7][mark-defun]] | | | | | |
8815 | 6/kp-right | [[#3b79bc58-6067-43bd-9471-9d592744a25a][ibuffer]] | | | | | |
8816 | 7/kp-home | | | | | | |
8817 | 8/kp-up | | | | | | |
8818 | 9/kp-prior | [[#a3b51adb-4405-4d9f-9b88-a8faa479fbe7][delete-horizontal-space]] | | | | | |
8819 | 10/kp-insert | | | | | | |
8820 | 11/kp-subtract | | | | | | |
8821 | 12/kp-add | | | | | | |
8822 | 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]] |
8823 | 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]] |
8824 |-------------------+----------------------------+---------------------------------+--------------------+---------------+-------------------+-------------|
8825
8826 |-----------------+--------------------------------+---------------------------------+-------------------------------+--------------------------|
8827 | left primary | C- | M- | C-M- | C-S- |
8828 |-----------------+--------------------------------+---------------------------------+-------------------------------+--------------------------|
8829 | 2 | [[#4f29b011-3844-4a4a-b75d-cdf8f49e9adb][narrow-to-defun/subtree]] | | [[#33c4996d-92bc-4df0-b005-11553677be13][---]] | |
8830 | 3 | [[#7851a05e-7177-4a8f-af5a-3325a8f116fe][dot-mode-execute]] | | [[#9a00e17f-a1c9-48fc-b03b-c6a1a3cbda1c][recenter-top-bottom]] | |
8831 | 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]] | |
8832 | w | [[#20005b6d-9a9d-4b58-882c-7ce860c7a395][goto-t.org]] | [[#331da6e5-7936-4663-8f58-9d8601b5915c][org-clock-in]] | | |
8833 | e | [[#24e34f4b-d1e8-4380-933f-ab1f78ebc782][copy-line]] | [[#0a771449-0cd5-4dc9-82ca-bcac5f7abd17][org-clock-in-last]] | | |
8834 | r | [[#5c55f461-f43f-493d-81eb-1ca747175ef1][isearch-backward]] | [[#dd9575bd-e471-418e-9519-4fc2b874ddcd][org-clock-out]] | | |
8835 | 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]] | |
8836 | s | [[#01da04da-cdba-493f-892b-c4c064cf937e][C-x prefix]] | | [[#4b33022d-27f0-4d21-9931-2e2e692790e8][split-window-vertically]] | |
8837 | d | [[#b699614a-9994-4fe7-b2c6-f0fe81b7ad2b][C-c prefix]] | [[#06bcc5e2-f3a7-41c6-a793-ac6c9813fb6e][whitespace-cleanup]] | [[#8cf6053d-792b-4abd-a3a6-66efd7fbee68][swap buffer]] | |
8838 | f | [[#2695ed8a-e0d3-4e84-8688-98e3c50723b0][kill-whole-line]] | | [[#e7e4dd0b-418f-48ee-b366-9e733e3bec61][kill rest of line]] | |
8839 | g | [[#4af40595-7010-4be6-8cfe-a43797ca6e33][other-window / cancel]] | [[#fb0b343f-fdff-463a-94f4-3152191e17c4][abort-recursive-edit]] | [[#327e18af-30b7-47e5-aa53-5f678788b4c1][gnus]] | |
8840 | z | [[#707c4938-a790-4da9-8230-61855ea57d09][undo-tree-undo]] | | | |
8841 | x | [[#ec1403d3-528e-41b1-a195-5563bc93e124][kill-region]] | [[#bb7c95d5-dd97-439d-bf1f-cdac98d11543][append-next-kill]] | [[#c988370e-602c-431c-80a9-608459583f8b][append-next-kill]] | |
8842 | c | [[#400f06e1-8e45-443c-8d7b-3d1bb1176aab][copy]] | [[#f4c3317a-a317-4d04-8cb7-e46d0716bf1d][org-capture]] | [[#0a151d99-47ae-4e8f-8407-82e77d24a3e7][copy-to-register]] | |
8843 | v | [[#16411f68-7fe0-49e8-9a73-212471594f9e][yank]] | [[#d67f6371-a13f-4a75-8d8c-e4013ff4e131][insert-register]] | [[#25f86658-9999-40f7-b3a4-615981751b93][yank pop]] | |
8844 | 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]] | |
8845 | tab | [[#edc45592-c69f-4439-8305-48f2c65696c3][yas-insert-snippet]] | [[#71264957-45fd-455a-a6d1-b08823c02d25][indent line]] | | |
8846 | delete | [[#2688b61d-9fdd-44af-b9bd-b126f0da00bd][kill-symbol]] | | [[#21876759-a8e6-4896-8a08-eda40d0eaff3][kill-sexp]] | |
8847 | left-arrow | [[#b15da91f-0786-49d1-b0b9-331b3b94f6ae][compile]] | | [[#13faf5d4-34be-4363-948d-4ff04a9f570b][org-shiftup]] | |
8848 | right-arrow | [[#3f3cac16-097d-451a-a14a-da7717d06730][paste selection]] | | [[#34e66314-1d97-4eeb-b704-fe0733849ae4][org-shiftdown]] | |
8849 | backspace | [[#85bb4701-42e6-4617-8de8-dfb1f03b0358][backward-kill-symbol]] | | [[#606b0991-7431-4a8a-a909-b872e104cc88][backward-kill-sexp]] | |
8850 | f7 | | | | |
8851 |-----------------+--------------------------------+---------------------------------+-------------------------------+--------------------------|
8852 | right primary | C- | M- | C-M- | C-S- |
8853 |-----------------+--------------------------------+---------------------------------+-------------------------------+--------------------------|
8854 | * | [[#f745b337-8b65-44cc-849a-5e0953c9ebd9][split-window-horizontally]] | | [[#5dbe3437-7364-4802-b558-00b2d5faacf6][calc-dispatch]] | |
8855 | 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]] | |
8856 | u | [[#327992c0-6eba-4935-aec1-49871c2a8619][universal-argument]] | | [[#62735d64-b89a-46b7-b32e-2453b651039d][search-keybind]] | |
8857 | i | [[#3124e200-1d6e-4ad2-9a36-0d03e1e7dc38][-----]] | | [[#a3260b61-7c51-4d97-9a91-3ed702c5ae29][query-replace-regexp]] | |
8858 | o | [[#82215193-63b3-4d63-8f70-d11a328fe72d][occur]] | | [[#05d1ef50-43ee-46d7-b1ad-dd952543ab45][ido-goto-symbol]] | |
8859 | p | [[#9c2e2ba9-f34e-48fe-b4ff-b9826882c1cc][move-mouse-to-point]] | | [[#d55616d3-a3f6-4e83-8807-748578a7b726][delete-horizontal-space]] | |
8860 | j | [[#ebcf7c71-3c93-431b-af6b-7c5df7f2945e][register prefix]] | [[#474a3e12-95ac-4f43-b83a-36716f3e6f76][previous-error]] | | |
8861 | k | [[#25a7ba1c-ddf3-47f1-9516-914a552e7a36][jump to register]] | [[#a96691bb-9e4c-414b-a093-d9961d453e21][next-error]] | [[#f61ea4ea-4597-422e-b7e3-d3cfad82603d][man]] | |
8862 | l | [[#8a7572bd-4b5e-4464-b937-3d35adb1783f][ido-switch-buffer]] | | [[#24b660d4-3ec4-4416-8a6a-b8224ed1ee8b][move cursor top bottom mid]] | |
8863 | ; | [[#7e3710eb-5460-4460-8bf0-488302e4ce35][comment-dwim]] | | [[#28680a96-5223-4632-80b9-b1facdd541e7][comment-current-line-dwim]] | |
8864 | m | [[#deee53ba-dfa2-4910-894c-55ae98d11aa4][pop-to-mark]] | | [[#f283f705-cba0-45db-b80f-5d20415b2eee][recursive grep]] | |
8865 | , | [[#6cbf3a85-f260-453a-920b-850ff5e986b1][ido-find-file]] | | [[#bfdf6111-029d-462b-bcca-50a3ed2162d5][find-file-in-project]] | |
8866 | . | [[#0675c171-8677-44a8-882c-e7ed42715e31][recentf-ido-find-file]] | | [[#824d422c-67b6-4d68-af11-6a2135e528f5][-]] | |
8867 | / | [[#941a7fa8-84b9-434d-89a0-1487385ec479][join lines]] | | [[#37f67593-4f60-4d3b-9aad-6c9bc4882443][copy-variable]] | |
8868 | 8 | [[#251c4a1a-a683-4804-a706-d0d3752e42fa][calc-embedded-word]] | | | |
8869 | up-arrow | [[#f47d312a-063d-42ed-a352-176298a2cb0c][back defun/headline]] | | | |
8870 | 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]] |
8871 | lbracket | [[#9d9916dd-3280-47dd-aab1-cd28d5ebfe15][----]] | | [[#7411b1a5-c8fa-4bcc-8788-798e5635dd62][scroll-right]] | |
8872 | rbracket | [[#21b38c6b-3a46-4a08-8eca-d44abb148287][fill-paragraph]] | | [[#c9c18f48-d0ca-4a1b-a751-7165f40118a3][scroll-left]] | |
8873 | 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]] | |
8874 | space | [[#132daa1a-8e5f-47f1-a28d-35bee873aeac][org-edit-special]] | | [[#02359b66-bf6e-4f41-9f03-e83fcbe3e68c][spell check word]] | |
8875 |-----------------+--------------------------------+---------------------------------+-------------------------------+--------------------------|
8876 | left secondary | C- | M- | C-M- | C-S- |
8877 |-----------------+--------------------------------+---------------------------------+-------------------------------+--------------------------|
8878 | = | | | | |
8879 | 1 | | | | |
8880 | 4 | | | [[#3ff50f5f-f286-4a73-962b-58dbcf3b09b1][widen]] | |
8881 | 5 | | | | |
8882 | tab-key | [[#68313551-90cd-47a6-8170-1745348add17][query-replace]] | | | |
8883 | t | [[#aaac3048-9125-4fd5-b8f2-21bafcc1ff1c][org change todo state]] | | [[#5bc609b1-9428-4b82-a55d-811fefe65331][org insert timestamp]] | |
8884 | home | [[#1919659a-b466-4519-9276-8bf06a916066][start of buffer]] | | | |
8885 | end | [[#0a7bd629-cbcc-4761-8fe2-cc9370b985a4][end of buffer]] | | | |
8886 | f9 | | | | |
8887 |-----------------+--------------------------------+---------------------------------+-------------------------------+--------------------------|
8888 | right secondary | C- | M- | C-M- | C-S- |
8889 |-----------------+--------------------------------+---------------------------------+-------------------------------+--------------------------|
8890 | 6 | [[#e44e584b-d925-4036-9ad5-a90d02e74bef][save-buffers-kill-emacs]] | | [[#da73de75-0914-4f48-81d5-9b408433b14b][insert-small-copyright]] | |
8891 | 7 | | | [[#a68c6b8e-9911-475e-ab35-e239771fe881][insert-full-copyright]] | |
8892 | 0 | | | | |
8893 | - | | | | |
8894 | y | [[#97aee7f1-3647-4602-a65a-45e8a3aa3a7c][undo-tree-redo]] | | | |
8895 | \ | [[#b8ad3ee9-7bf6-4069-a300-49cd298008a7][sr-speedbar-toggle]] | | [[#6a583354-48f8-4503-bf87-b8ba56411435][mark-defun]] | |
8896 | h | [[#3c5f241f-fc62-459d-ab85-6b7c1fb04801][help-prefix]] | | | |
8897 | ' | [[#9f252721-a2d5-46c6-b268-8ed597256229][eval-expression]] | | | |
8898 | n | [[#52ebb720-589b-485c-89dc-0dfb78e6dad4][unpop-to-mark-command]] | | [[#43997316-8d3f-4750-873b-ade09628fdd5][narrow-to-region]] | |
8899 | rshift | | | | |
8900 | escape | [[#6901fa1b-c827-4525-b24b-bdb8fe5f638b][find-tag]] | | | |
8901 |-----------------+--------------------------------+---------------------------------+-------------------------------+--------------------------|
8902 #+END:
8903
8904 * persistent registers
8905 This needs to be at the end, because I visit a file, thus setting a
8906 mode, and the mode hook needs to be setup before that.
8907
8908 I'm using persistent registers instead of bookmarks. I dun use them
8909 much, so the added hassle of having to set it within this file is
8910 worth the benefit of only having one concept in my mind.
8911 #+begin_src emacs-lisp
8912 (dolist
8913 (r `((?i (file . ,"~/.emacs.d/my-init.org"))
8914 ))
8915 (set-register (car r) (cadr r)))
8916 #+end_src
8917
8918 * keybind notes
8919 common keys, which would be better off doing swaps than rebinds:
8920 c-x prefix -> c-s
8921 c-c prefix -> c-d
8922 yank c-y -> c-c
8923 search c-s -> kp-add
8924 kill line c-k -> c-f
8925 undo c-_ -> c-z
8926 set-mark-command c-@ -> kp-enter
8927 quoted-insert c-q -> c-m-q
8928 recenter-top-bottom c-l -> c-m-3
8929 kill-region c-w -> c-x
8930
8931 commands to make less accessible
8932 narrow-to-defun/subtree -> M-2 maybe
8933 occur
8934
8935 command to make more accessible, ...
8936
8937
8938 * misc useful functions I'd rather have in a list than burried
8939 #+begin_src emacs-lisp :tangle no
8940 ;; these are usefull with (goto-char)
8941 ;; find named entity, other than headline
8942 (org-find-entry-with-id "string-number-or-symbol")
8943
8944 (org-find-exact-headline-in-buffer "heading" nil t)
8945
8946 (byte-recompile-file (expand-file-name "~/.emacs.d/my-init.el") t 0)
8947 (byte-recompile-directory (expand-file-name "~/.emacs.d") 0)
8948 (byte-recompile-directory (expand-file-name "~/.emacs.d/src/haskell-mode") 0)
8949
8950 ;; remove any indent level which is throughout the buffer
8951 (org-do-remove-indentation)
8952
8953 #+end_src
8954
8955 * TESTING / DEVELOPMENT AREA
8956
8957 :PROPERTIES:
8958 :tangle: no
8959 :END:
8960 ** new
8961 #+begin_src emacs-lisp
8962
8963
8964 #+end_src
8965
8966 ** key logging
8967 this article convinced me that trying to experiment with modal editing is a waste.
8968 http://chrisdone.com/posts/speculations-on-exclusive-editing
8969 I want to record my emacs commands simply to find optimiaztions, like if I often do some M-x command and should bind it
8970 to a key.
8971
8972
8973 #+begin_src emacs-lisp :tangle no
8974
8975 (setq keylog-list nil)
8976 (setq keylog-mode nil)
8977
8978 (defun keylog-save ()
8979
8980 ;; Check that the lock file does not exist
8981 (when (keyfreq-file-is-unlocked)
8982 ;; Lock the file
8983 (keyfreq-file-claim-lock)
8984
8985 ;; Check that we have the lock
8986 (if (eq (keyfreq-file-owner) (emacs-pid))
8987 (unwind-protect
8988 (progn
8989 ;; Load values and merge them with the current keyfreq-table
8990 (keyfreq-table-load table)
8991
8992 ;; Write the new frequencies
8993 (with-temp-file keyfreq-file
8994 (prin1 (cdr (keyfreq-list table 'no-sort)) (current-buffer))))
8995
8996 ;; Release the lock and reset the hash table.
8997 (keyfreq-file-release-lock)
8998 (clrhash table))
8999 )))
9000
9001 (defun my-keylogger-function ()
9002 (setq keylog-list (cons (list (current-time) current-prefix-arg this-command) keylog-list)))
9003 (add-hook 'pre-command-hook 'my-keylogger-function)
9004
9005 #+end_src
9006
9007 in a lisp expression, ; \\[ throws off forward-sexp
9008 when not in emacs lisp mode,
9009 even with (with-syntax-table emacs-lisp-mode-syntax-table
9010 forward-sexp)
9011 which is found in preceding-sexp
9012 potentially a bug, either in with-syntax-table, or
9013 in scan-lists, which is implemented in C
9014
9015
9016
9017
9018 why did it go to the init file?
9019 change EDITOR to emacsclient
9020 xserver-xorg-core=2:1.14.3-3ubuntu2
9021 (setq-default header-line-format nil) ; Copy mode-line
9022 (setq-default mode-line-format nil) ;
9023
9024
9025 #+RESULTS:
9026 : set-food-completions
9027
9028
9029
9030 useless gnus group keys:
9031 a
9032 c
9033
9034
9035 (add-to-list 'load-path "~/.emacs.d/emacs/site-lisp/org")
9036
9037 #+begin_src emacs-lisp
9038 (add-hook 'org-mode-hook
9039 (lambda () (define-key org-mode-map (kbd "C-y") nil)))
9040
9041 #+end_src
9042
9043
9044
9045
9046 (defun comint-send-string (process string)
9047 "Like `process-send-string', but also does extra bookkeeping for Comint mode."
9048 (if process
9049 (with-current-buffer (if (processp process)
9050 (process-buffer process)
9051 (get-buffer process))
9052 (comint-snapshot-last-prompt))
9053 (comint-snapshot-last-prompt))
9054 (process-send-string process string))
9055
9056
9057 * python
9058 todo: get smart-operator to work
9059 todo, checkout https://github.com/python-rope/ropemacs refactoring python,
9060 todo, try py-autopep8, autoformatter
9061 todo, check out some python linting stuff. pychecker is one, others are in *packages*
9062 todo, finish reading through python-mode.el functions
9063 ;; todo, figure out multi-line input in shell mode
9064
9065
9066 usefull m-x commands:
9067 m-x py-describe-mode: doc for mode which is extensive
9068 m-x py-sort-imports
9069 m-x py-guess-indent-offset: setup indent for code i didn't write
9070
9071 possibly usefull commands:
9072 found via looking through python-mode.el, quit like 1/4 through, cuz its tedious, last spot was at:
9073 (defun py-comment-region (beg end &optional arg)
9074 after finding py-describe-mode, it seemed to do a good job of documenting all the most important stuff
9075
9076 py-switch-to-python
9077 python-shell-completion-complete-or-indent may be usefull to get completion working in the shell
9078 py-insert-default-shebang
9079 py-electric-*
9080 py-indent-line-outmost
9081 py-newline-and-close-block
9082 py-indent-and-forward (indent line, move to next)
9083 py-fill-*
9084 py-which-function (for showing in the modeline)
9085 py-help-at-point
9086 py-execute-import-or-reload
9087 py-execute-def-or-class
9088 various pdb functions
9089
9090
9091 installing jedi
9092 #+begin_src sh :tangle no
9093 pi python-pip
9094 s pip install jedi virtualenv
9095 #+end_src
9096 then do m-x jedi:install-server
9097
9098
9099
9100 disabled because it takes 152 ms to load,
9101 and I don't know how to do it conditioally
9102 #+begin_src emacs-lisp :tangle no
9103
9104 ;; change from default python3 to be compatibile with Pywikibot
9105 (setq py-shell-name "/usr/bin/python")
9106 (require 'python-mode)
9107
9108 (setq py-autopep8-options '("--max-line-length=110"))
9109
9110 (defun py-execute-block-or-clause-create-shell ()
9111 (interactive)
9112 (cond ((get-buffer "*Python*")
9113 (py--execute-prepare "block-or-clause")
9114 (py-execute-block-or-clause)
9115 (call-interactively 'next-line))
9116 (t
9117 (py-shell)
9118 ;; py-shell starts the shell but not display the buffer on the first run
9119 ;; subsequent runs, it does. I grabbed this command from inside to
9120 ;; do just the relevant part from the second run, as a hack.
9121 ;; todo: report a bug on this
9122 (py--shell-manage-windows py-buffer-name))))
9123 (setq py-tab-shifts-region-p t)
9124 (setq py-tab-indents-region-p t)
9125
9126 (defun py-run ()
9127 "default action to run the current buffer"
9128 (basic-save-buffer)
9129 (py-execute-buffer))
9130
9131
9132 (add-hook 'python-mode-hook
9133 (lambda ()
9134 (setq run-fun 'py-run)
9135 (define-key python-mode-map (kbd "C-M-a") nil)
9136 (define-key python-mode-map (kbd "C-M-d") nil)
9137 (define-key python-mode-map (kbd "C-M-e") nil)
9138 (define-key python-mode-map (kbd "C-M-h") nil)
9139 (define-key python-mode-map (kbd "C-M-i") nil)
9140 (define-key python-mode-map (kbd "C-M-u") nil)
9141 (define-key python-mode-map (kbd "C-M-x") nil)
9142 (define-key python-mode-map (kbd "<tab>") 'indent-for-tab-command)
9143 (define-key python-mode-map (kbd "C-j") nil)
9144 (define-key python-mode-map (kbd "<C-backspace>") nil)
9145 ;;(define-key python-mode-map (kbd "C-(") (lambda () (interactive) (basic-save-buffer) (py-execute-buffer)))
9146 ;; fix default return bindings
9147 (define-key python-mode-map (kbd "C-j") nil)
9148 (define-key python-mode-map (kbd "RET") nil)
9149 (define-key python-mode-map (kbd "<return>") 'py-newline-and-indent)
9150 (define-key python-mode-map (kbd "<M-tab>") 'py-indent-line)
9151 (define-key python-mode-map (kbd "C-M-(") 'py-shift-left)
9152 (define-key python-mode-map (kbd "C-M-)") 'py-shift-right)
9153 (define-key python-mode-map (kbd "<home>") 'py-beginning-of-line)
9154 (define-key python-mode-map (kbd "<end>") 'py-end-of-line)
9155 (define-key python-mode-map (kbd "C-t") 'py-execute-block-or-clause-create-shell)
9156 (define-key python-mode-map (kbd "<S-delete>") 'py-ian-execute-line-or-region)
9157 ;; python mode adds these to this list, which is normally empty.
9158 ;; it makes my send-python function not reuse an existing python shell window
9159 ;; there are other ways to override this, but I don't know of any other value of
9160 ;; having this set.
9161 (setq same-window-buffer-names (delete "*Python*" same-window-buffer-names))
9162 (setq same-window-buffer-names (delete "*IPython*" same-window-buffer-names))))
9163
9164 ;; i dunno, why, but this didn't work:
9165 ;; and we can't eval-after-load cuz it is part of the greater python mode file
9166 (add-hook 'py-shell-hook
9167 (lambda ()
9168 (define-key py-shell-map "\r" nil)
9169 (define-key py-shell-map (kbd "<return>") 'comint-send-input)
9170 (define-key py-shell-map (kbd "C-t") 'py-shell-toggle-arrow-keys)
9171 (define-key py-shell-map "\C-d" nil)
9172 (define-key py-shell-map (kbd "<up>") 'my-comint-previous-input)
9173 (define-key py-shell-map (kbd "<down>") 'my-comint-next-input)))
9174
9175
9176 (defun py-ian-execute-line-or-region ()
9177 (interactive)
9178 (cond ((get-buffer "*Python*")
9179 (if mark-active
9180 (py-execute-region)
9181 (py-execute-statement))
9182 (call-interactively 'next-line))
9183 (t (py-shell))))
9184
9185 ;; http://tkf.github.io/emacs-jedi/latest/
9186 (add-hook 'python-mode-hook 'jedi:setup)
9187 (setq jedi:complete-on-dot t)
9188
9189 (defun py-shell-toggle-arrow-keys ()
9190 (interactive)
9191 (toggle-arrow-keys py-shell-map))
9192
9193 #+end_src
9194
9195
9196 ;; py-shell window stuff
9197 ;; it splits the window if the shell is in a different frame
9198 ;; which seems to be a bug, but it can be fixed with this option
9199 ;; (setq py-keep-windows-configuration 'force)
9200 ;; however, with py-execute-block-or-clause, if the shell is in a different frame,
9201 ;; you get errors "buffer is read only", when the point is near the beginning of a command
9202 ;; todo: test with emacs -Q and file a bug
9203 ;; if you execute py-execute-... without a python shell open,
9204 ;; it starts one, doesn't display it, and subsequent py-execute commands
9205 ;; give error "buffer is read only"
9206 ;; these functions fix / improve these problems
9207
9208
9209 ** initial python-mode setup
9210
9211 python-mode seems to be the most canonical package, based on
9212 https://docs.python.org/devguide/emacs.html
9213 much more feature rich than the emacs built in one.
9214
9215 getting it, it wants you to setup an account on launchpad by default,
9216 there is some way to get anonymous bzr access, but google didn't answer it right away,
9217 so fuck it, ill go the happy path.
9218
9219 based on error messages,
9220 add public ssh key to https://launchpad.net/people/+me
9221 bzr launchpad-login iank
9222 cd ~/.emacs.d/src/
9223 bzr branch lp:python-mode
9224
9225 add lines from INSTALL to init
9226
9227
9228 ** background on packages
9229 jedi appears most popular based on github stats
9230 pysmell appears dead
9231 ac-python appears dead
9232 https://github.com/proofit404/anaconda-mode seems to be kicking along
9233
9234
9235 ** misc notes:
9236
9237 python-mode has a TON of functions that are just aliases or verbatim wrappers of other functions.
9238 also has undocumented/unused vars all around. it is quite annoying.
9239
9240 the dedicated argument to py-shell does nothing,
9241 and py-dedicated-shell just sets that, so it is a waste
9242
9243
9244 ** background on sending to python shell
9245
9246 using the builtin python execute shell functions, sending one line doesn't really work well.
9247 The bulit in functions don't wait for further input if a block is not closed.
9248 And doing a copy/paste thing gets messed up because of indents.
9249 With some hacking, I could probably do copy/paste and remove indents, only to a
9250 certain level if we have entered a block and are waiting to finish it.
9251 But just doing the builtin execute block is a decent work around.
9252
9253
9254 Here is the scrapped function for single line built in sending to shell.
9255
9256
9257 (setq w32-enable-num-lock nil)
9258 (global-set-key (kbd "<num_lock>") 'left-char)
9259
9260
9261 (defun sqlup-find-correct-keywords ()
9262 "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."
9263 (mapcar 'car (sql-add-product-keywords sql-product '())))
9264
9265
9266 largest subarray sum, array of pos and neg ints.