From cbb881adcafcb1a48301b2f94e665f377a30b77c Mon Sep 17 00:00:00 2001 From: rekado Date: Mon, 1 Sep 2014 10:58:08 +0200 Subject: initial commit --- Cask | 33 +++++ eshell/alias | 4 + init.el | 398 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 435 insertions(+) create mode 100644 Cask create mode 100644 eshell/alias create mode 100644 init.el diff --git a/Cask b/Cask new file mode 100644 index 0000000..2daa85c --- /dev/null +++ b/Cask @@ -0,0 +1,33 @@ +(source melpa) +(source marmalade) +(source gnu) + +(depends-on "ac-inf-ruby") +(depends-on "ace-jump-mode") +(depends-on "auctex") +(depends-on "auto-complete") +(depends-on "better-defaults") +(depends-on "dired-details") +(depends-on "expand-region") +(depends-on "fullscreen-mode") +(depends-on "haskell-mode") +(depends-on "helm") +(depends-on "ido-ubiquitous") +(depends-on "ido-yes-or-no") +(depends-on "idomenu") +(depends-on "inf-ruby") +(depends-on "js2-mode") +(depends-on "magit") +(depends-on "markdown-mode") +(depends-on "multiple-cursors") +(depends-on "projectile") +(depends-on "ruby-block") +(depends-on "ruby-mode") +(depends-on "scss-mode") +(depends-on "shell-switcher") +(depends-on "smart-mode-line") +(depends-on "smex") +(depends-on "sublime-themes") +(depends-on "undo-tree") +(depends-on "yasnippet") + diff --git a/eshell/alias b/eshell/alias new file mode 100644 index 0000000..29d019b --- /dev/null +++ b/eshell/alias @@ -0,0 +1,4 @@ +alias b popd +alias cd pushd . > /dev/null; cd $* +alias ff find-file $1 +alias ll ls -la $* diff --git a/init.el b/init.el new file mode 100644 index 0000000..ce258e6 --- /dev/null +++ b/init.el @@ -0,0 +1,398 @@ +;; Turn off mouse interface early in startup to avoid momentary display +(if (fboundp 'menu-bar-mode) (menu-bar-mode -1)) +(if (fboundp 'tool-bar-mode) (tool-bar-mode -1)) +(if (fboundp 'scroll-bar-mode) (scroll-bar-mode -1)) + +;; No splash screen please ... +(setq inhibit-startup-message t) + +;; disable mouse scrolling +(mouse-wheel-mode -1) + +(add-to-list 'load-path user-emacs-directory) +(add-to-list 'load-path "/usr/share/emacs/site-lisp/") + +(require 'cask "~/.cask/cask.el") +(cask-initialize) + +(require 'better-defaults) + +;; Keep emacs Custom-settings in separate file +(setq custom-file (expand-file-name "custom.el" user-emacs-directory)) +(load custom-file) + +(require 'package) +(add-to-list 'package-archives + '("melpa" . "http://melpa.milkbox.net/packages/") + '("marmalade" . "http://marmalade-repo.org/packages/")) +(package-initialize) + +; sublime-themes must be installed +(load-theme 'spolsky t) +(set-cursor-color "White") +(setq evil-default-cursor '("white" box)) +(set-background-color "#181818") + +;; Swap C-t and C-x, so it's easier to type on Dvorak layout +(keyboard-translate ?\C-t ?\C-x) +(keyboard-translate ?\C-x ?\C-t) + +;; kill current buffer +(global-set-key (kbd "C-x C-k") (lambda () + (interactive) + (kill-buffer (current-buffer)))) +(global-set-key (kbd "C-c r") 'replace-regexp) + + +; smart mode line +(setq sml/theme 'respectful) +(sml/setup) + +(require 'smex) +(smex-initialize) +(global-set-key (kbd "M-x") 'smex) +(global-set-key (kbd "M-X") 'smex-major-mode-commands) +(global-set-key (kbd "") 'smex) +(global-set-key (kbd "S-") 'smex-major-mode-commands) + +;; expand region +(global-set-key (kbd "M-@") 'er/expand-region) + +; C-d on an empty line in the shell terminates the process. +(defun comint-delchar-or-eof-or-kill-buffer (arg) + (interactive "p") + (if (null (get-buffer-process (current-buffer))) + (kill-buffer) + (comint-delchar-or-maybe-eof arg))) + +(add-hook 'shell-mode-hook + (lambda () + (define-key shell-mode-map + (kbd "C-d") 'comint-delchar-or-eof-or-kill-buffer))) +;; TODO: this isn't working +(add-hook 'term-mode-hook + (lambda () + (define-key term-mode-map + (kbd "C-d") 'comint-delchar-or-eof-or-kill-buffer))) + +(add-hook 'haskell-mode-hook + (lambda () + (turn-on-haskell-indentation) + (turn-on-haskell-doc))) + +(require 'tramp) +(setq tramp-default-method "ssh") + +;; for root connections to remote hosts, log in via ssh with normal +;; user account first, then su/sudo to root +(add-to-list 'tramp-default-proxies-alist + '(".*" "\\`root\\'" "/ssh:%h:")) + +;; Backup (file~) disabled and auto-save (#file#) locally to prevent delays in editing remote files +(add-to-list 'backup-directory-alist + (cons tramp-file-name-regexp nil)) +(setq tramp-auto-save-directory temporary-file-directory) +(setq tramp-verbose 3) + +;; Write backup files to own directory +;; TODO: conflicts with previous manipulation of backup-directory-alist +(setq backup-directory-alist + `(("." . ,(expand-file-name + (concat user-emacs-directory "backups"))))) + +;; Make backups of files, even when they're in version control +(setq vc-make-backup-files t) + +(autoload 'markdown-mode "markdown-mode" + "Major mode for editing Markdown files" t) +(autoload 'js2-mode "js2-mode" nil t) +(add-to-list 'auto-mode-alist '("\\.markdown\\'" . markdown-mode)) +(add-to-list 'auto-mode-alist '("\\.md\\'" . markdown-mode)) +(add-to-list 'auto-mode-alist '("\\.js$" . js2-mode)) + +;; full screen magit-status +(require 'magit) +(defadvice magit-status (around magit-fullscreen activate) + (window-configuration-to-register :magit-fullscreen) + ad-do-it + (delete-other-windows)) + +(defun magit-quit-session () + "Restores the previous window configuration and kills the magit buffer" + (interactive) + (kill-buffer) + (jump-to-register :magit-fullscreen)) + +(defun magit-toggle-whitespace () + "Toggles git option -w" + (interactive) + (if (member "-w" magit-diff-options) + (magit-dont-ignore-whitespace) + (magit-ignore-whitespace))) + +(defun magit-ignore-whitespace () + "Adds git option -w" + (interactive) + (add-to-list 'magit-diff-options "-w") + (magit-refresh)) + +(defun magit-dont-ignore-whitespace () + "Removes git option -w" + (interactive) + (setq magit-diff-options (remove "-w" magit-diff-options)) + (magit-refresh)) + +(define-key magit-status-mode-map (kbd "q") 'magit-quit-session) +(define-key magit-status-mode-map (kbd "W") 'magit-toggle-whitespace) + + +;; ido mode +(require 'ido) +(ido-mode 1) +;; hit ~ to go straight to the home directory in ido mode +(add-hook 'ido-setup-hook + (lambda () + ;; Go straight home + (define-key ido-file-completion-map + (kbd "~") + (lambda () + (interactive) + (if (looking-back "/") + (insert "~/") + (call-interactively 'self-insert-command)))))) + +;; Use ido everywhere +(require 'ido-ubiquitous) +(ido-ubiquitous-mode 1) +;; use ido for yes/no questions +(ido-yes-or-no-mode 1) + +;; fullscreen mode with F11 +(fullscreen-mode 1) +(global-set-key (kbd "") 'fullscreen-mode-fullscreen-toggle) + +(setq scss-compile-at-save nil) + + +(global-whitespace-mode 1) +(set-face-attribute 'whitespace-space nil :background nil :foreground "gray20") +(set-face-attribute 'whitespace-newline nil :background nil :foreground "gray20") +(setq whitespace-style + '(face spaces tabs newline space-mark tab-mark newline-mark)) +(setq whitespace-display-mappings + ;; all numbers are Unicode codepoint in decimal. try + ;; (insert-char 182 ) to see it + '( + (space-mark 32 [183] [46]) ; 32 SPACE, 183 MIDDLE DOT 「·」, + ; 46 FULL STOP 「.」 + (newline-mark 10 [182 10]) ; 10 LINE FEED + (tab-mark 9 [9655 9] [92 9]) ; 9 TAB, 9655 WHITE + ; RIGHT-POINTING TRIANGLE 「▷」 + )) + +(desktop-save-mode t) + +;; use cat as the pager in shell mode, because shell-mode is not an ANSI terminal +(setenv "PAGER" "cat") + +;; ediff settings +(setq ediff-diff-options "-w") + +;; TODO: what does this do? +(put 'dired-find-alternate-file 'disabled nil) + +;; cause Emacs to fully redraw the display *before* it processes queued input events. +(setq redisplay-dont-pause t) + +;; fewer backslashes in regexp builder +(require 're-builder) +(setq reb-re-syntax 'string) + +;; remove prompt on killing process buffer +(setq kill-buffer-query-functions + (remq 'process-kill-buffer-query-function + kill-buffer-query-functions)) + +;; display tool tips in echo area only +(tooltip-mode -1) +(setq tooltip-use-echo-area t) + +;; enable narrow-to-region feature +(put 'narrow-to-region 'disabled nil) + + +;; http://blog.vivekhaldar.com/post/4809065853/dotemacs-extract-interactively-change-font-size +(defun zoom-in () + "Increase font size by 10 points" + (interactive) + (set-face-attribute 'default nil + :height + (+ (face-attribute 'default :height) + 10))) + +(defun zoom-out () + "Decrease font size by 10 points" + (interactive) + (set-face-attribute 'default nil + :height + (- (face-attribute 'default :height) + 10))) + +;; change font size, interactively +(global-set-key (kbd "C-.") 'zoom-in) +(global-set-key (kbd "C-,") 'zoom-out) + +(require 'shell-switcher) +(setq shell-switcher-mode t) +(add-hook 'eshell-mode-hook 'shell-switcher-manually-register-shell) + +(global-set-key (kbd "M-o") 'other-window) + +;; ---------------- rekado minor mode -------------------- +(defvar rekado-permanent-mode-q nil "indicates whether permanent keys are active") +(defvar rekado-mode-map (make-sparse-keymap) "keymap for rekado-mode") +(defun rekado-mode-define-keys (define-permanent-keys) + "Defines key bindings for rekado-mode. If the argument is t, +the edit mode keys will be bound as well." + (let* ((modal-keys + '( + ("a" . move-beginning-of-line) + ("e" . move-end-of-line) + + ;; define JKLI (HTNC in Dvorak) as arrow keys + ("c" . previous-line) + ("t" . next-line) + ("h" . backward-char) + ("n" . forward-char) + + ;; add meta key to move more quickly + ("M-c" . (lambda () (interactive) + (previous-line 5))) + ("M-t" . (lambda () (interactive) + (next-line 5))) + ("M-h" . (lambda () (interactive) + (backward-char 5))) + ("M-n" . (lambda () (interactive) + (forward-char 5))) + + ;; define u/o (g/r in Dvorak) as backward/forward-word + ("g" . backward-word) + ("r" . forward-word) + ;; define U/O (G/R in Dvorak) to kill word in direction + ("G" . backward-kill-word) + ("R" . kill-word) + + ;; TODO: add advice for C, T, H and N (upper case arrows in Dvorak) to mark and start selection + ;; jump to character + ("f" . ace-jump-char-mode) + ("i" . rekado-permanent-mode-exit) + ("k" . (lambda () + (interactive) + (move-beginning-of-line nil) + (kill-whole-line))) + ;; undo as in vim + ("u" . undo) + ;; repeat as in vim + ("." . repeat) + ;; paste as in vim + ("p" . (lambda () + (interactive) + (next-line) + (beginning-of-line) + (yank))) + ("P" . (lambda () + (interactive) + (beginning-of-line) + (yank))) + ;; copy as in vim + ("y" . kill-ring-save) + ("s" . isearch-forward-regexp) + ;; open line below/above as in vim + ("o" . (lambda () + (interactive) + (open-line-below) + (rekado-permanent-mode-exit))) + ("O" . (lambda () + (interactive) + (open-line-above) + (rekado-permanent-mode-exit))) + ;; join lines (like J in vim) + ("j" . (lambda () + (interactive) + (join-line -1))) + ;; change till the end of the line + ("C" . (lambda () + (interactive) + (kill-line) + (rekado-permanent-mode-exit))) + ))) + (progn + ;; toggle permanent mode + (define-key rekado-mode-map + (kbd "") + 'rekado-permanent-mode-toggle) + + ;; toggle permanent mode + (define-key rekado-mode-map + (kbd "") + 'rekado-permanent-mode-toggle) + + (if define-permanent-keys + ;; define permanent keys + (progn + (setq rekado-permanent-mode-q t) + (mapc (lambda (pair) + (define-key rekado-mode-map + (kbd (car pair)) + (cdr pair))) + modal-keys)) + ;; undefine permanent keys + (progn + (setq rekado-permanent-mode-q nil) + (mapc (lambda (pair) + (define-key rekado-mode-map + (kbd (car pair)) + nil)) + modal-keys))))) + rekado-mode-map) + +(defun open-line-below () + (interactive) + (end-of-line) + (newline) + (indent-for-tab-command)) + +(defun open-line-above () + (interactive) + (beginning-of-line) + (newline) + (forward-line -1) + (indent-for-tab-command)) + +(defun rekado-permanent-mode-exit () + (interactive) + (set-cursor-color "White") + (rekado-mode-define-keys nil)) + +(defun rekado-permanent-mode-toggle () + (interactive) + (if rekado-permanent-mode-q + (rekado-permanent-mode-exit) + (progn + (set-cursor-color "Red") + (rekado-mode-define-keys 1)))) + +;; disable permanent keys when in the minibuffer (also when running +;; commands such as isearch) +(add-hook 'post-command-hook (lambda () (if (minibufferp) (rekado-permanent-mode-exit)))) + +(define-minor-mode rekado-mode + "Cursor movement shortcuts while Alt is hold and editing +shortcuts when permanent mode is active." + :lighter " rekado" + :global t + :keymap rekado-mode-map + :after-hook (rekado-mode-define-keys nil)) + +(provide 'rekado-mode) +;;------------------------------------------------------------ -- cgit v1.2.3