view .elisp/settings/90.keybindings.el @ 477:8373f6924e50

emacs: kludge around a case of emacs being too clever for me
author Augie Fackler <raf@durin42.com>
date Thu, 21 Feb 2019 19:54:55 -0500
parents 6bc014966731
children 0731ceeb27dd
line wrap: on
line source

;; Key Bindings
; M-backspace kills the current buffer
(global-set-key [(meta backspace)] 'kill-this-buffer)
(global-set-key "\M-\d" 'kill-this-buffer)
; Save early and often, with only one keystroke
(global-set-key [(meta s)] 'save-buffer)
; Typing tab is for lesser editors, make hitting return do that
(global-set-key "\C-m" 'indent-new-comment-line)
; M-l makes more sense to me for jumping to a line
(global-set-key "\M-l" 'goto-line)
; Sometimes C-h is what Backspace sends in a terminal, and I never use C-h
(global-set-key "\C-h" 'backward-delete-char-untabify)
; M-t is what I want for the textmate file finding
(global-set-key [(meta t)] 'textmate-goto-file)
; M-p for bouncing to the matching paren
(global-set-key [(meta p)] 'bounce-to-other-paren)
(global-set-key [(meta control f)] 'textmate-find-in-project-type)
(global-set-key [(meta shift f)] 'textmate-find-in-project)
(global-set-key [(meta m)] 'iconify-or-deiconify-frame)
(global-set-key [(control backspace)] 'kill-word)

(global-set-key [f3] 'next-error)
(defun af-dwim-f4 () (interactive)
  (cond ((string-match "\\.t$" buffer-file-name)
         (textmate-start-compile-in-root
          ;; hack alert: the leading `echo` here prevents emacs from
          ;; being too smart and "fixing" our default-directory.
          (concat "echo && cd tests && python run-tests.py --local "
                  (file-name-nondirectory buffer-file-name))))
        ((string-match "\\.rs$" buffer-file-name)
         (textmate-start-compile-in-root "cargo test"))
        ))
(global-set-key [f2] 'other-window)
(global-set-key [f4] 'af-dwim-f4)
(global-set-key [f5] 'diff-apply-hunk)

;; M-j for jump to function definition
(global-set-key [(meta j)] 'textmate-goto-symbol)

;; commit emacs heresy?
(global-set-key [(meta r)] 'smex)
(global-set-key (kbd "M-R") 'smex-major-mode-commands)

(global-set-key (kbd "C-x C-b") 'ibuffer)

;; Mac-like keybindings for undo/cut/copy/paste
(global-set-key [(meta c)] 'kill-ring-save)
(global-set-key [(meta x)] 'kill-region)
(global-set-key [(meta z)] 'undo)
(global-set-key [(meta v)] 'yank)
(global-set-key [M-return] 'fullscreen)
(global-set-key [(control v)] 'yank-pop)

;; Fixup hooks for modes that like taking my keys back
(add-hook 'text-mode-hook '(lambda ()
                             (define-key text-mode-map "\M-s"
                               'save-buffer)))
(add-hook 'comint-mode-hook '(lambda ()
                               (local-set-key "\M-r"
                                              'execute-extended-command)))

(defun server-save-buffer-and-finish ()
  (interactive)
  (save-buffer)
  (if server-buffer-clients (server-edit)))
(add-hook 'server-switch-hook
          '(lambda ()(local-set-key "\M-s" 'server-save-buffer-and-finish )))