Emacs: Define and use define-keys and local-set-keys

master
Pierre Neidhardt 2017-06-16 20:33:53 +01:00
parent dbb3517a15
commit 2d9f77c920
12 changed files with 143 additions and 116 deletions

View File

@ -48,6 +48,14 @@ If you want to operate on buffer, use `how-many' instead."
(setq matches (1+ matches))) (setq matches (1+ matches)))
matches)) matches))
(defun define-keys (map key def &rest bindings)
"Like `define-key' but allow for defining several bindings at once.
`KEY' must be acceptable for `kbd'."
(while key
(define-key map (kbd key) def)
(setq key (pop bindings)
def (pop bindings))))
(defun duplicate (arg) (defun duplicate (arg)
"Duplicate the current line or region ARG times. "Duplicate the current line or region ARG times.
If there's no region, the current line will be duplicated. However, if If there's no region, the current line will be duplicated. However, if
@ -168,6 +176,14 @@ it appears in the minibuffer prompt."
(t (t
(insert filename)))) (insert filename))))
(defun local-set-keys (key def &rest bindings)
"Like `local-set-key' but allow for defining several bindings at once.
`KEY' must be acceptable for `kbd'."
(while key
(local-set-key (kbd key) def)
(setq key (pop bindings)
def (pop bindings))))
(defun mark-word-from-beginning (&optional arg allow-extend) (defun mark-word-from-beginning (&optional arg allow-extend)
"Set the point at the beginning of the word and call `mark-word'. "Set the point at the beginning of the word and call `mark-word'.
ARG and ALLOW-EXTEND are the same." ARG and ALLOW-EXTEND are the same."

View File

@ -1,5 +1,7 @@
;;; Main options ;;; Main options
(require 'functions)
;;; Minimal UI. Run early to hide it as soon as possible. ;;; Minimal UI. Run early to hide it as soon as possible.
(setq inhibit-startup-screen t) (setq inhibit-startup-screen t)
(menu-bar-mode -1) (menu-bar-mode -1)
@ -61,8 +63,9 @@
(setq scroll-error-top-bottom t) (setq scroll-error-top-bottom t)
;;; Narrow page navigation. ;;; Narrow page navigation.
(define-key mickey-minor-mode-map (kbd "C-x M-n") (lambda () (interactive) (narrow-to-page 1))) (define-keys mickey-minor-mode-map
(define-key mickey-minor-mode-map (kbd "C-x M-p") (lambda () (interactive) (narrow-to-page -1))) "C-x M-n" (lambda () (interactive) (narrow-to-page 1))
"C-x M-p" (lambda () (interactive) (narrow-to-page -1)))
;;; Line numbers ;;; Line numbers
;;; Adding to `find-file-hook' ensures it will work for every file, regardless of ;;; Adding to `find-file-hook' ensures it will work for every file, regardless of
@ -132,10 +135,11 @@
;; stick to the home-row, but to avoid shadowing other binding I exceptionaly use ;; stick to the home-row, but to avoid shadowing other binding I exceptionaly use
;; 'super' (normally reserved to the WM). ;; 'super' (normally reserved to the WM).
(when (fboundp 'windmove-default-keybindings) (when (fboundp 'windmove-default-keybindings)
(define-key mickey-minor-mode-map (kbd "M-s-h") 'windmove-left) (define-keys mickey-minor-mode-map
(define-key mickey-minor-mode-map (kbd "M-s-j") 'windmove-down) "M-s-h" 'windmove-left
(define-key mickey-minor-mode-map (kbd "M-s-k") 'windmove-up) "M-s-j" 'windmove-down
(define-key mickey-minor-mode-map (kbd "M-s-l") 'windmove-right)) "M-s-k" 'windmove-up
"M-s-l" 'windmove-right))
;;; Make Emacs use environment browser, or w3m if BROWSER is not set. ;;; Make Emacs use environment browser, or w3m if BROWSER is not set.
(setq browse-url-generic-program (setq browse-url-generic-program
@ -229,12 +233,12 @@
(setq uniquify-buffer-name-style 'forward) (setq uniquify-buffer-name-style 'forward)
;;; Skeleton settings ;;; Skeleton settings
(require 'functions)
;;; Do not expand abbrevs in skeletons. ;;; Do not expand abbrevs in skeletons.
(setq-default skeleton-further-elements '((abbrev-mode nil))) (setq-default skeleton-further-elements '((abbrev-mode nil)))
(turn-on-skeleton-markers) (turn-on-skeleton-markers)
(define-key mickey-minor-mode-map (kbd "C->") 'skeleton-next-position) (define-keys mickey-minor-mode-map
(define-key mickey-minor-mode-map (kbd "C-<") (lambda () (interactive) (skeleton-next-position t))) "C->" 'skeleton-next-position
"C-<" (lambda () (interactive) (skeleton-next-position t)))
;;; Disable prompt (but leave warning) on git symlink. ;;; Disable prompt (but leave warning) on git symlink.
(setq vc-follow-symlinks t) (setq vc-follow-symlinks t)
@ -259,10 +263,11 @@
;; (define-key mickey-minor-mode-map (kbd "M-<f10>") 'toggle-frame-fullscreen) ;; (define-key mickey-minor-mode-map (kbd "M-<f10>") 'toggle-frame-fullscreen)
;;; Scroll zooming. ;;; Scroll zooming.
(define-key mickey-minor-mode-map (kbd "C-<wheel-down>") 'text-scale-decrease) (define-keys mickey-minor-mode-map
(define-key mickey-minor-mode-map (kbd "C-<mouse-5>") 'text-scale-decrease) "C-<wheel-down>" 'text-scale-decrease
(define-key mickey-minor-mode-map (kbd "C-<wheel-up>") 'text-scale-increase) "C-<mouse-5>" 'text-scale-decrease
(define-key mickey-minor-mode-map (kbd "C-<mouse-4>") 'text-scale-increase) "C-<wheel-up>" 'text-scale-increase
"C-<mouse-4>" 'text-scale-increase)
(setq text-scale-mode-step 1.1) (setq text-scale-mode-step 1.1)
;;; Sort ;;; Sort

View File

@ -3,14 +3,14 @@
;; Should we split this into mode-c and mode-c++? ;; Should we split this into mode-c and mode-c++?
(dolist (map (list c-mode-map c++-mode-map)) (dolist (map (list c-mode-map c++-mode-map))
(define-key map (kbd "C-c m") 'cc-main) (define-keys map "C-c m" 'cc-main
(define-key map (kbd "<f9>") 'cc-clean) "<f9>" 'cc-clean
(define-key map (kbd "M-.") 'semantic-ia-fast-jump) "M-." 'semantic-ia-fast-jump
(define-key map (kbd "C-c C-d") 'semantic-ia-show-summary) "C-c C-d" 'semantic-ia-show-summary
;; (define-key map (kbd "C-c o") 'ff-find-other-file) "M-TAB" 'semantic-complete-analyze-inline))
(define-key map (kbd "M-TAB") 'semantic-complete-analyze-inline)) ;; (define-key map (kbd "C-c o") 'ff-find-other-file)
;;; C additional keywords. ;;; C additional faces.
;;; Useless in quasi-monochrome. ;;; Useless in quasi-monochrome.
;; (dolist (mode '(c-mode c++-mode)) ;; (dolist (mode '(c-mode c++-mode))
;; (font-lock-add-keywords ;; (font-lock-add-keywords

View File

@ -2,13 +2,13 @@
;;; Warning: This file is loaded unconditionally on startup. ;;; Warning: This file is loaded unconditionally on startup.
;;; We cannot assume that current buffer is in dired-mode. ;;; We cannot assume that current buffer is in dired-mode.
(let ((map dired-mode-map)) (define-keys dired-mode-map
(define-key map (kbd "C-c h") 'dired-toggle-humansize) "C-c h" 'dired-toggle-humansize
(define-key map (kbd "<left>") 'dired-up-directory) "<left>" 'dired-up-directory
(define-key map (kbd "<right>") 'dired-find-file) "<right>" 'dired-find-file
(define-key map (kbd "SPC") 'dired-mark) "SPC" 'dired-mark
(define-key map (kbd "<backspace>") 'dired-up-directory) "<backspace>" 'dired-up-directory
(define-key map (kbd "b") 'dired-up-directory)) "b" 'dired-up-directory)
(when (require 'dired+ nil t) (when (require 'dired+ nil t)
(toggle-diredp-find-file-reuse-dir 1)) (toggle-diredp-find-file-reuse-dir 1))

View File

@ -4,14 +4,15 @@
;; https://github.com/dominikh/go-mode.el/issues/191 ;; https://github.com/dominikh/go-mode.el/issues/191
(use-local-map go-mode-map) (use-local-map go-mode-map)
(local-set-key (kbd "C-c m") 'go-main) (local-set-keys
(local-set-key (kbd "C-c D") 'godoc) "C-c m" 'go-main
"C-c D" 'godoc
"C-c d" 'godoc-at-point
"M-." #'godef-jump
"<f9>" 'go-metalinter
"C-<f9>" (lambda () (interactive) (go-metalinter t)))
(when (require 'helm-go-package nil t) (when (require 'helm-go-package nil t)
(local-set-key (kbd "C-c D") 'helm-go-package)) (local-set-key (kbd "C-c D") 'helm-go-package))
(local-set-key (kbd "C-c d") 'godoc-at-point)
(local-set-key (kbd "M-.") #'godef-jump)
(local-set-key (kbd "<f9>") 'go-metalinter)
(local-set-key (kbd "C-<f9>") (lambda () (interactive) (go-metalinter t)))
(when (require 'company-go nil t) (when (require 'company-go nil t)
(add-hook 'go-mode-hook 'company-mode) (add-hook 'go-mode-hook 'company-mode)

View File

@ -5,17 +5,18 @@
(require 'mode-tex) (require 'mode-tex)
;;; Since current buffer is a LaTeX one, we can use `local-set-key'. ;;; Since current buffer is a LaTeX one, we can use `local-set-key'.
(local-set-key (kbd "C-c m") 'latex-article) (local-set-keys
(local-set-key (kbd "C-c C-a") 'latex-insert-table) "C-c m" 'latex-article
(local-set-key (kbd "C-c C-c") 'latex-smallcaps) "C-c C-a" 'latex-insert-table
(local-set-key (kbd "C-c C-e") 'latex-emph) "C-c C-c" 'latex-smallcaps
(local-set-key (kbd "C-c C-l") 'latex-slanted) "C-c C-e" 'latex-emph
(local-set-key (kbd "C-c C-s") 'latex-insert-section) "C-c C-l" 'latex-slanted
(local-set-key (kbd "C-c C-u") 'latex-superscript) "C-c C-s" 'latex-insert-section
(local-set-key (kbd "C-c l") 'latex-lstinline) "C-c C-u" 'latex-superscript
(local-set-key (kbd "C-c o") 'latex-orgtbl) "C-c l" 'latex-lstinline
(local-set-key (kbd "C-c u") 'latex-package) "C-c o" 'latex-orgtbl
(local-set-key (kbd "M-RET") 'latex-itemize) "C-c u" 'latex-package
"M-RET" 'latex-itemize)
;; Needs dvipng. ;; Needs dvipng.
;; With TeXlive, the following packages are needed: psnfss, symbol, zapfding ;; With TeXlive, the following packages are needed: psnfss, symbol, zapfding

View File

@ -1,10 +1,10 @@
;; Makefile ;; Makefile
(let ((map makefile-mode-map)) (define-keys makefile-mode-map
(define-key map (kbd "C-c c") 'makefile-config) "C-c c" 'makefile-config
(define-key map (kbd "C-c d") 'makefile-doc) "C-c d" 'makefile-doc
(define-key map (kbd "C-c m") 'makefile-main) "C-c m" 'makefile-main
(define-key map (kbd "C-c s") 'makefile-c)) "C-c s" 'makefile-c)
(define-skeleton makefile-main (define-skeleton makefile-main
"Insert root Makefile." nil "Insert root Makefile." nil
@ -19,25 +19,25 @@ all: app doc
.PHONY: app .PHONY: app
app: app:
${MAKE} -C ${srcdir} ${MAKE} -C ${srcdir}
.PHONY: doc .PHONY: doc
doc: doc:
${MAKE} -C ${docsrcdir} ${MAKE} -C ${docsrcdir}
.PHONY: debug .PHONY: debug
debug: debug:
CFLAGS+=\"-g3 -O0 -DDEBUG=9\" ${MAKE} CFLAGS+=\"-g3 -O0 -DDEBUG=9\" ${MAKE}
.PHONY: test .PHONY: test
test: test:
${MAKE} -C ${testdir} ${MAKE} -C ${testdir}
.PHONY: clean .PHONY: clean
clean: clean:
${MAKE} -C ${srcdir} clean ${MAKE} -C ${srcdir} clean
${MAKE} -C ${docsrcdir} clean ${MAKE} -C ${docsrcdir} clean
${MAKE} -C ${testdir} clean ${MAKE} -C ${testdir} clean
################################################################################ ################################################################################
## Install / Uninstall. ## Install / Uninstall.
@ -68,22 +68,22 @@ sysconfdir ?= ${perfix}/etc
.PHONY: install .PHONY: install
install: install:
${MAKE} ${MAKE}
${INSTALL_DIR} ${DESTDIR}${bindir} ${INSTALL_DIR} ${DESTDIR}${bindir}
${INSTALL} ${srcdir}/${cmdname} ${DESTDIR}${bindir}/${cmdname} ${INSTALL} ${srcdir}/${cmdname} ${DESTDIR}${bindir}/${cmdname}
${INSTALL_DIR} ${DESTDIR}${mandir}/man1 ${INSTALL_DIR} ${DESTDIR}${mandir}/man1
${INSTALL_DATA} ${docsrcdir}/${cmdname}.1 ${DESTDIR}${mandir}/man1/${cmdname}.1 ${INSTALL_DATA} ${docsrcdir}/${cmdname}.1 ${DESTDIR}${mandir}/man1/${cmdname}.1
${INSTALL_DIR} ${DESTDIR}${licensedir}/${cmdname} ${INSTALL_DIR} ${DESTDIR}${licensedir}/${cmdname}
${INSTALL_DATA} LICENSE ${DESTDIR}${licensedir}/${cmdname}/LICENSE ${INSTALL_DATA} LICENSE ${DESTDIR}${licensedir}/${cmdname}/LICENSE
.PHONY: uninstall .PHONY: uninstall
uninstall: uninstall:
-rm -f ${DESTDIR}${bindir}/${cmdname} -rm -f ${DESTDIR}${bindir}/${cmdname}
-rmdir -p ${DESTDIR}${bindir} -rmdir -p ${DESTDIR}${bindir}
-rm -f ${DESTDIR}${mandir}/${cmdname}.${mansection}.gz -rm -f ${DESTDIR}${mandir}/${cmdname}.${mansection}.gz
-rmdir -p ${DESTDIR}${mandir} -rmdir -p ${DESTDIR}${mandir}
-rm -f ${DESTDIR}${licensedir}/${cmdname}/LICENSE -rm -f ${DESTDIR}${licensedir}/${cmdname}/LICENSE
-rmdir -p ${DESTDIR}${licensedir}/${cmdname} -rmdir -p ${DESTDIR}${licensedir}/${cmdname}
" > \n) " > \n)
(define-skeleton makefile-doc (define-skeleton makefile-doc
@ -98,11 +98,11 @@ manpages = ${cmdname}.1
all: ${manpages} all: ${manpages}
.in: .in:
awk -v date=`date '+%Y-%m-%d'` 'BEGIN {section=\"$@\"; sub (/.*\\./, \"\", section); manname=toupper(\"$@\"); sub(/\\.[^.]+$$/, \"\", manname); print \".ds appname ${appname}\\n.ds authors ${authors}\\n.ds cmdname ${cmdname}\\n.ds date \" date \"\\n.ds manname \" manname \"\\n.ds section \" section \"\\n.ds version ${version}\\n.ds year ${year}\\n.\"}' > $@ awk -v date=`date '+%Y-%m-%d'` 'BEGIN {section=\"$@\"; sub (/.*\\./, \"\", section); manname=toupper(\"$@\"); sub(/\\.[^.]+$$/, \"\", manname); print \".ds appname ${appname}\\n.ds authors ${authors}\\n.ds cmdname ${cmdname}\\n.ds date \" date \"\\n.ds manname \" manname \"\\n.ds section \" section \"\\n.ds version ${version}\\n.ds year ${year}\\n.\"}' > $@
cat $< >> $@ cat $< >> $@
clean: clean:
rm -f ${manpages} rm -f ${manpages}
" > \n) " > \n)
(define-skeleton makefile-c (define-skeleton makefile-c
@ -119,18 +119,18 @@ ${cmdname}: ${cmdname}.o
.PHONY: debug .PHONY: debug
debug: debug:
CFLAGS+=\"-g3 -O0 -DDEBUG=9\" ${MAKE} CFLAGS+=\"-g3 -O0 -DDEBUG=9\" ${MAKE}
.PHONY: clean .PHONY: clean
clean: clean:
rm -f ${cmdname} *.d *.o rm -f ${cmdname} *.d *.o
## Generate prerequisites automatically. GNU Make only. ## Generate prerequisites automatically. GNU Make only.
## The 'awk' part is used to add the .d file itself to the target, so that it ## The 'awk' part is used to add the .d file itself to the target, so that it
## gets updated on changes. The -MQ option is to add full path to object files ## gets updated on changes. The -MQ option is to add full path to object files
## in subfolders. (-MM strips parent directories.) ## in subfolders. (-MM strips parent directories.)
%.d: %.c %.d: %.c
${CC} -MM -MQ ${<:.c=.o} ${CPPFLAGS} $< | awk -v stem=$* -v target=$@ '{gsub (stem \".o[ :]*\", stem \".o \" target \" : \")} 1' > $@ ${CC} -MM -MQ ${<:.c=.o} ${CPPFLAGS} $< | awk -v stem=$* -v target=$@ '{gsub (stem \".o[ :]*\", stem \".o \" target \" : \")} 1' > $@
sources = $(wildcard *.c) sources = $(wildcard *.c)
deps = ${sources:.c=.d} deps = ${sources:.c=.d}

View File

@ -5,11 +5,11 @@
;; Besides you can try extending `url-cookie-save-interval'. ;; Besides you can try extending `url-cookie-save-interval'.
;; Nonetheless is mode is helpfull for syntax awareness. ;; Nonetheless is mode is helpfull for syntax awareness.
(let ((map mediawiki-mode-map)) (define-keys mediawiki-mode-map
(define-key map (kbd "C-c o") 'mediawiki-browse) "C-c o" 'mediawiki-browse
(define-key map (kbd "M-g") nil) ; This shadows M-g M-g. "M-g" nil ; This shadows M-g M-g.
(define-key map (kbd "C-x C-s") 'save-buffer) "C-x C-s" 'save-buffer
(define-key map (kbd "C-c M-s") 'mediawiki-save)) "C-c M-s" 'mediawiki-save)
(setq (setq
mediawiki-site-alist mediawiki-site-alist

View File

@ -1,8 +1,8 @@
;; Nroff ;; Nroff
(let ((map nroff-mode-map)) (define-keys nroff-mode-map
(define-key map (kbd "C-c C-b") 'nroff-bold) "C-c C-b" 'nroff-bold
(define-key map (kbd "C-c C-i") 'nroff-italic)) "C-c C-i" 'nroff-italic)
;; Skeletons ;; Skeletons
(define-skeleton nroff-bold "Bold text." nil "\\fB" @ _ "\\fR" @) (define-skeleton nroff-bold "Bold text." nil "\\fB" @ _ "\\fR" @)

View File

@ -18,11 +18,11 @@
;; Note that -shell-escape can also be toggled with universal ;; Note that -shell-escape can also be toggled with universal
;; argument. ;; argument.
(let ((map tex-mode-map)) (define-keys tex-mode-map
(dolist (key '("\C-c\C-f" "\C-c\C-b")) "C-c C-f" nil
(define-key map key nil)) "C-c C-b" nil
(define-key map (kbd "<f9>") 'tex-pdf-view) "<f9>" 'tex-pdf-view
(define-key map (kbd "<f10>") 'tex-compile)) "<f10>" 'tex-compile)
(defvar-local tex-masterfile nil (defvar-local tex-masterfile nil
"The file that should be compiled. Useful for modular documents.") "The file that should be compiled. Useful for modular documents.")

View File

@ -81,23 +81,25 @@ See `eshell' for the numeric prefix arg."
;; Should we stick to M-based bindings or use C-based? ;; Should we stick to M-based bindings or use C-based?
;; Magit uses C-jk, helm uses C-space. Evil has C-w, C-o, C-p, C-r. Emacs has C-xC-q, C-xC-o. ;; Magit uses C-jk, helm uses C-space. Evil has C-w, C-o, C-p, C-r. Emacs has C-xC-q, C-xC-o.
(define-key helm-map (kbd "M-\\") 'helm-toggle-resplit-and-swap-windows) ; Or use M-t (helm standard binding is C-t). (define-keys helm-map
(define-key helm-map (kbd "C-f") 'helm-next-page) "M-\\" 'helm-toggle-resplit-and-swap-windows ; Or use M-t (helm standard binding is C-t).
(define-key helm-map (kbd "C-b") 'helm-previous-page) "C-f" 'helm-next-page
(define-key helm-map (kbd "M-j") 'helm-next-line) "C-b" 'helm-previous-page
(define-key helm-map (kbd "M-k") 'helm-previous-line) "M-j" 'helm-next-line
(define-key helm-map (kbd "M-h") 'helm-next-source) "M-k" 'helm-previous-line
(define-key helm-map (kbd "M-H") 'describe-key) "M-h" 'helm-next-source
(define-key helm-map (kbd "M-l") (kbd "RET")) "M-H" 'describe-key
(define-key helm-map [escape] 'helm-keyboard-quit) "M-l" (kbd "RET")
"<escape>" 'helm-keyboard-quit)
(dolist (keymap (list helm-buffer-map)) (dolist (keymap (list helm-buffer-map))
(define-key keymap (kbd "M-o") 'helm-buffer-switch-other-window)) (define-key keymap (kbd "M-o") 'helm-buffer-switch-other-window))
(dolist (keymap (list helm-find-files-map helm-read-file-map)) (dolist (keymap (list helm-find-files-map helm-read-file-map))
(define-key keymap (kbd "M-o") 'helm-ff-run-switch-other-window) (define-keys keymap
(define-key keymap (kbd "M-.") 'helm-ff-run-find-sh-command) "M-o" 'helm-ff-run-switch-other-window
(define-key keymap (kbd "M-l") 'helm-execute-persistent-action) "M-." 'helm-ff-run-find-sh-command
(define-key keymap (kbd "M-h") 'helm-find-files-up-one-level) "M-l" 'helm-execute-persistent-action
(define-key keymap (kbd "M-H") 'describe-key))) "M-h" 'helm-find-files-up-one-level
"M-H" 'describe-key)))
;; Add support for magit. ;; Add support for magit.
(require 'evil-magit nil t) (require 'evil-magit nil t)
@ -145,8 +147,9 @@ See `eshell' for the numeric prefix arg."
;; TODO: evil-ex history binding in normal mode do not work. ;; TODO: evil-ex history binding in normal mode do not work.
(evil-define-key 'normal evil-ex-completion-map "\M-p" 'previous-history-element) (evil-define-key 'normal evil-ex-completion-map "\M-p" 'previous-history-element)
(evil-define-key 'normal evil-ex-completion-map "\M-n" 'next-history-element) (evil-define-key 'normal evil-ex-completion-map "\M-n" 'next-history-element)
(define-key evil-ex-completion-map "\M-p" 'previous-history-element) (define-keys evil-ex-completion-map
(define-key evil-ex-completion-map "\M-n" 'next-history-element) "M-p" 'previous-history-element
"M-n" 'next-history-element)
;; Remap org-mode meta keys for convenience ;; Remap org-mode meta keys for convenience
;; - org-evil: Not as polished as of May 2017. ;; - org-evil: Not as polished as of May 2017.

View File

@ -91,18 +91,19 @@ Requires `call-process-to-string' from `functions'."
(rectangle-exchange-point-and-mark) (rectangle-exchange-point-and-mark)
(helm-all-mark-rings))) (helm-all-mark-rings)))
(define-key mickey-minor-mode-map (kbd "M-x") 'helm-M-x) (define-keys mickey-minor-mode-map
(define-key mickey-minor-mode-map (kbd "C-x C-f") 'helm-find-files) "M-x" 'helm-M-x
(define-key mickey-minor-mode-map (kbd "C-x c C-/") 'helm-find) "C-x C-f" 'helm-find-files
(define-key mickey-minor-mode-map (kbd "C-x C-b") 'helm-mini) "C-x c C-/" 'helm-find
(define-key mickey-minor-mode-map (kbd "M-y") 'helm-show-kill-ring) "C-x C-b" 'helm-mini
(define-key mickey-minor-mode-map (kbd "C-x C-x") 'helm-mark-or-exchange-rect) "M-y" 'helm-show-kill-ring
(define-key mickey-minor-mode-map (kbd "M-s o") 'helm-occur) "C-x C-x" 'helm-mark-or-exchange-rect
(define-key mickey-minor-mode-map (kbd "C-h a") 'helm-apropos) "M-s o" 'helm-occur
(define-key mickey-minor-mode-map (kbd "C-M-%") 'helm-regexp) "C-h a" 'helm-apropos
(define-key mickey-minor-mode-map (kbd "C-x M-g") 'helm-grep-git-or-ag) "C-M-%" 'helm-regexp
(define-key mickey-minor-mode-map (kbd "C-x M-G") 'helm-do-grep-ag) "C-x M-g" 'helm-grep-git-or-ag
(define-key mickey-minor-mode-map (kbd "C-x M-b") 'helm-resume) ; Convenient for god-mode. "C-x M-G" 'helm-do-grep-ag
"C-x M-b" 'helm-resume) ; Convenient for god-mode.
(define-key helm-find-files-map (kbd "C-c C-/") 'helm-ff-run-find-sh-command) ; Convenient for god-mode. (define-key helm-find-files-map (kbd "C-c C-/") 'helm-ff-run-find-sh-command) ; Convenient for god-mode.
;;; We use the M-s prefix just like `occur'. ;;; We use the M-s prefix just like `occur'.