diff --git a/core/core.el b/core/core.el index bade4778f..6e75827bd 100644 --- a/core/core.el +++ b/core/core.el @@ -29,7 +29,7 @@ (auto-compression-mode t) ; Transparently open compressed files (global-font-lock-mode t) ; Enable syntax highlighting for older emacs (global-auto-revert-mode 1) ; revert buffers for changed files - (electric-indent-mode -1) ; In case of emacs 24.4 + (electric-indent-mode -1) ; In case of emacs >24.4 ;;; window layout undo/redo (winner-mode 1) @@ -145,7 +145,7 @@ ;;;; Editor behavior ;;;;;;;;;;;;;;;; ;; spaces instead of tabs (setq-default indent-tabs-mode nil) ; spaces instead of tabs - (setq-default tab-always-indent nil) + (setq-default tab-always-indent t) (setq-default tab-width 4) (setq require-final-newline t) diff --git a/core/defuns-ui.el b/core/defuns-ui.el index 6d20c64b9..a49294d4e 100644 --- a/core/defuns-ui.el +++ b/core/defuns-ui.el @@ -6,24 +6,13 @@ ;;;###autoload (defun load-dark-theme() (interactive) - ;; (sml/apply-theme 'respectful) (load-theme *dark-theme t)) ;;;###autoload (defun load-light-theme() (interactive) - ;; (sml/apply-theme 'light) (load-theme *light-theme t)) -;;;###autoload -(defun load-font (font size) - (interactive) - (when window-system - (let ((font-str (concat font "-" (number-to-string size)))) - (if (member font (font-family-list)) - (set-frame-font font-str t t) - (error "Font %s not installed" font))))) - ;;;###autoload (defun toggle-transparency () (interactive) @@ -49,16 +38,4 @@ (if (>= my/cycle-font-i (1- (length *fonts))) (setq my/cycle-font-i 0) (cl-incf my/cycle-font-i))) - (let* ((font (nth my/cycle-font-i *fonts)) - (font-name (nth 0 font)) - (font-size (nth 1 font)) - (font-aa (nth 2 font)) - (font-line (nth 3 font))) - (unless (member font-name (font-family-list)) - (error "Font %s isn't installed" font-name)) - (let ((font-str (concat font-name "-" (number-to-string font-size)))) - (add-to-list 'default-frame-alist `(font . ,font-str)) - (add-to-list 'initial-frame-alist `(font . ,font-str))) - (load-font font-name font-size) - (setq ns-antialias-text font-aa) - (setq-default line-spacing font-line))) + (set-frame-font (nth my/cycle-font-i *fonts))) diff --git a/init.el b/init.el index 1f375384d..5bc392d78 100644 --- a/init.el +++ b/init.el @@ -18,11 +18,6 @@ ;;; Code: (defconst DEBUG-MODE nil) -(require 'cask) -(cask-initialize) - -(eval-when-compile (require 'use-package)) - (defconst my-dir user-emacs-directory) (defconst my-core-dir (concat my-dir "core/")) (defconst my-modules-dir (concat my-dir "init/")) @@ -34,9 +29,9 @@ (defconst *dark-theme 'v0) (defconst *light-theme 'github) ; wtb better light theme... -(defconst *fonts `(("Terminus (TTF)" 12 nil 0.1) - ("Ubuntu Mono" 16 t 0) - ("Inconsolata" 22 t 0))) +(defconst *fonts `(,(font-spec :family "Terminus (TTF)" :size 12 :antialias nil) + ,(font-spec :family "Ubuntu Mono" :size 16 :antialias t) + ,(font-spec :family "Inconsolata" :size 22 :antialias t))) (add-to-list 'load-path my-core-dir) (add-to-list 'load-path my-modules-dir) @@ -47,7 +42,11 @@ (normal-top-level-add-subdirs-to-load-path)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Just the... bear necessities... + +(require 'cask) +(cask-initialize) + +(eval-when-compile (require 'use-package)) (mapc 'require ;; ls init/{init,my}* | xargs basename | sed -e 's/\..*$//' '(core @@ -55,27 +54,28 @@ ;; init-auto-complete init-auto-insert ; for the lazy typis init-company ; see above + init-dev ; general dev tools/settings + ;; init-floobits ; when I'm feeling lonely + init-fly ; fly(check|spell) + init-git ; git-gutter + modes + init-helm ; a search engine for your life + init-ido ; a search engine for your car keys + init-project ; project tools - dired, perspective, neotree + init-projectile ; when you forget where you put your house + init-cc ; C/C++/Obj-C madness ;; init-d ; D - It's C, but better! ;; init-cscope init-csharp - init-dev ; general dev tools/settings init-lisp ; all things lisp; elisp, clojure ;; init-erlang ;; init-eshell - ;; init-floobits ; when I'm feeling lonely - init-fly ; fly(check|spell) - init-git ; git-gutter + modes ;; init-go - init-helm ; a search engine for your life - init-ido ; a search engine for your car keys init-java ; the poster child for carpal tunnel syndome init-js ; alert("not java, javascript!") init-lua ; zero-based indices? Zero-based indices. init-org ; for fearless leader (who is organized) init-php ; making php less painful to work with - init-project ; project tools - dired, perspective, neotree - init-projectile ; when you forget where you put your house init-python ; beautiful is better than ugly init-regex ; /^[^\s](meaning)[^\n]*/ init-ruby ; <3 @@ -93,6 +93,7 @@ my-bindings my-settings + my-defuns )) ;; I've created a monster! diff --git a/init/init-auto-insert.el b/init/init-auto-insert.el index 3d6d7bde1..eacd8627b 100644 --- a/init/init-auto-insert.el +++ b/init/init-auto-insert.el @@ -19,68 +19,68 @@ (yas--get-template-by-uuid mode uuid)) (point-min) (point-max)) (evil-insert-state))) - (template "/\\.gitignore$" "%%" 'gitignore-mode) + (template "/\\.gitignore$" "%%" 'gitignore-mode) ;; C/C++ - (template "/Makefile$" "%%" 'makefile-gmake-mode) - (template "/main\\.\\(cc\\|cpp\\)$" "%main.cpp%" 'c++-mode) - (template "/win32_\\.\\(cc\\|cpp\\)$" "%winmain.cpp%" 'c++-mode) - (template "\\.\\([Hh]\\|hpp\\)$" "%.h%" 'c++-mode) - (template "\\.\\([Cc]\\|cc\\|cpp\\)$" "%.cpp%" 'c++-mode) + (template "/Makefile$" "%%" 'makefile-gmake-mode) + (template "/main\\.\\(cc\\|cpp\\)$" "%main.cpp%" 'c++-mode) + (template "/win32_\\.\\(cc\\|cpp\\)$" "%winmain.cpp%" 'c++-mode) + (template "\\.\\([Hh]\\|hpp\\)$" "%.h%" 'c++-mode) + (template "\\.\\([Cc]\\|cc\\|cpp\\)$" "%.cpp%" 'c++-mode) ;; Shell scripts - (template "\\.z?sh$" "%%" 'sh-mode) + (template "\\.z?sh$" "%%" 'sh-mode) - ;; ;; ;; Ruby - (template "/spec_helper\\.rb$" "%helper%" 'rspec-mode t) - (template "_spec\\.rb$" "%%" 'rspec-mode t) - (template "/\\.rspec$" "%.rspec%" 'rspec-mode) - (template "/Rakefile$" "%Rakefile%" 'ruby-mode t) - (template "/Gemfile$" "%Gemfile%" 'ruby-mode t) - ;; (template "\\.gemspec$" "%.gemspec%" 'ruby-mode t) - (template "/lib/.+\\.rb$" "%module%" 'ruby-mode t) - (template "\\.rb$" "%%" 'ruby-mode) + ;; Ruby + (template "/spec_helper\\.rb$" "%helper%" 'rspec-mode t) + (template "_spec\\.rb$" "%%" 'rspec-mode t) + (template "/\\.rspec$" "%.rspec%" 'rspec-mode) + (template "/Rakefile$" "%Rakefile%" 'ruby-mode t) + (template "/Gemfile$" "%Gemfile%" 'ruby-mode t) + ;; (template "\\.gemspec$" "%.gemspec%" 'ruby-mode t) + (template "/lib/.+\\.rb$" "%module%" 'ruby-mode t) + (template "\\.rb$" "%%" 'ruby-mode) - ;; ;; ;; Python - ;; ;; (template "tests?/test_.+\\.py$" "%%" 'nose-mode) - ;; ;; (template "/setup\\.py$" "%setup%" 'python-mode) + ;; ;; Python + ;; (template "tests?/test_.+\\.py$" "%%" 'nose-mode) + ;; (template "/setup\\.py$" "%setup%" 'python-mode) (template "\\.py$" "%%" 'python-mode) - ;; ;; ;; PHP - ;; ;; (template "\\.class\\.php$" "%class%" 'php-mode) - ;; ;; (template "\\.php$" "%%" 'php-mode) + ;; ;; PHP + ;; (template "\\.class\\.php$" "%class%" 'php-mode) + ;; (template "\\.php$" "%%" 'php-mode) - ;; ;; ;; Markdown - (template "/README\\.md$" "%README.md%" 'markdown-mode) - ;; ;; (template "/_posts/.+\\.md$" "%jekyll-post" 'markdown-mode) - ;; ;; (template "/_layouts/.+\\.html$" "%jekyll-layout%" 'web-mode) + ;; ;; Markdown + (template "/README\\.md$" "%README.md%" 'markdown-mode) + ;; (template "/_posts/.+\\.md$" "%jekyll-post" 'markdown-mode) + ;; (template "/_layouts/.+\\.html$" "%jekyll-layout%" 'web-mode) - ;; ;; ;; Javascript - ;; ;; (template "\\.lbaction/Contents/Info.plist$" "%lb6%" 'nxml-mode) - ;; ;; (template "\\.lbaction/.+/\\(default\\|suggestions\\)\\.js$" "%lb6%" 'js-mode) - ;; ;; (template "/package\\.json$" "%package.json%" 'json-mode) - ;; ;; (template "\\.\\(json\\|jshintrc\\)$" "%%" 'json-mode) + ;; ;; Javascript + ;; (template "\\.lbaction/Contents/Info.plist$" "%lb6%" 'nxml-mode) + ;; (template "\\.lbaction/.+/\\(default\\|suggestions\\)\\.js$" "%lb6%" 'js-mode) + ;; (template "/package\\.json$" "%package.json%" 'json-mode) + ;; (template "\\.\\(json\\|jshintrc\\)$" "%%" 'json-mode) - ;; ;; ;; SCSS - ;; ;; (template "/master\\.scss$" "%master%" 'scss-mode) - ;; ;; (template "/normalize\\.scss$" "%normalize%" 'scss-mode) - ;; ;; (template "\\.scss$" "%%" 'scss-mode) + ;; ;; SCSS + ;; (template "/master\\.scss$" "%master%" 'scss-mode) + ;; (template "/normalize\\.scss$" "%normalize%" 'scss-mode) + ;; (template "\\.scss$" "%%" 'scss-mode) - ;; ;; ;; HTML - ;; ;; (template "\\.html$" "%%" 'web-mode) + ;; ;; HTML + ;; (template "\\.html$" "%%" 'web-mode) - ;; ;; ;; Lua - ;; ;; (template "\\.love/main\\.lua$" "%love.main%" 'lua-mode) - ;; ;; (template "\\.love/conf\\.lua$" "%love.conf%" 'lua-mode) - ;; ;; (template "\\.lua$" "%%" 'lua-mode) + ;; Lua + ;; (template "\\.love/main\\.lua$" "%love.main%" 'lua-mode) + ;; (template "\\.love/conf\\.lua$" "%love.conf%" 'lua-mode) + ;; (template "\\.lua$" "%%" 'lua-mode) - ;; ;; ;; Java - ;; ;; (template "/src/.+/.+\\.java$ "%%" 'java-mode) - ;; ;; (template "\\.gradle$" "%%" 'groovy-mode) + ;; ;; Java + ;; (template "/src/.+/.+\\.java$ "%%" 'java-mode) + ;; (template "\\.gradle$" "%%" 'groovy-mode) - ;; ;; ;; Elisp - (template "\\.emacs\\.d/.+\\.el$" "%initfile%" 'emacs-lisp-mode) - (template "\\.emacs\\.d/snippets/.+$" "%%" 'snippet-mode)) + ;; ;; Elisp + (template "\\.emacs\\.d/.+\\.el$" "%initfile%" 'emacs-lisp-mode) + (template "\\.emacs\\.d/snippets/.+$" "%%" 'snippet-mode)) (provide 'init-auto-insert) diff --git a/init/init-cc.el b/init/init-cc.el index f9f5fb299..57667273d 100644 --- a/init/init-cc.el +++ b/init/init-cc.el @@ -1,5 +1,4 @@ (use-package cmake-mode - :disabled t :mode "CMakeLists\\.txt$" :config (progn @@ -59,26 +58,6 @@ . objc-mode)) (after "flycheck" (add-hook! 'objc-mode-hook (use-package flycheck-objc)))) - ;; (use-package ycmd - ;; :init (add-hook 'c++-mode-hook 'ycmd-mode) - ;; :config - ;; (progn - ;; (setq ycmd-global-config (f-full "~/.ycm_extra_conf.py")) - ;; (setq ycmd-server-command `("/usr/local/bin/python" ,(f-full "~/.emacs.d/ext/YouCompleteMe/third_party/ycmd/ycmd/"))) - ;; (use-package company-ycmd - ;; :init (company--backend-on 'c++-mode-hook 'company-ycmd)))) - - ;; (after "auto-complete" - ;; (when is-mac (setq ac-clang-flags (my--clang-includes-flags))) - ;; (add-hook! 'c-mode-common-hook - ;; (use-package auto-complete-clang) - ;; (use-package auto-complete-c-headers) - ;; (setq ac-sources - ;; '(ac-source-clang - ;; ac-source-c-headers - ;; ac-source-yasnippet - ;; ac-source-words-in-same-mode-buffers)))) - (after "company" ;; TODO Clang is *really* slow in larger projects, maybe replace it with irony-mode or ycmd? (company--backend-on 'c-mode-hook 'company-c-headers 'company-clang) @@ -93,6 +72,8 @@ (c-set-offset 'block-open '+) (c-set-offset 'brace-list-open '+) ; all "opens" should be indented by the c-indent-level (c-set-offset 'case-label '+) ; indent case labels by c-indent-level, too + (c-set-offset 'access-label '-) + (c-set-offset 'inclass '++) ;; DEL mapping interferes with smartparens and my.deflate-maybe (bind c-mode-map (kbd "DEL") nil)) @@ -148,8 +129,7 @@ ;; user-defined types (rather project-specific) ("\\<[A-Za-z_]+[A-Za-z_0-9]*_\\(type\\|ptr\\)\\>" . font-lock-type-face) ("\\<\\(xstring\\|xchar\\)\\>" . font-lock-type-face) - )) - t) + )) t) ;; Fix enum and C++11 lambda indentation (defadvice c-lineup-arglist (around c-lineup-arglist-indent-fix activate) diff --git a/init/init-csharp.el b/init/init-csharp.el index 1e4a1889d..5cde76add 100644 --- a/init/init-csharp.el +++ b/init/init-csharp.el @@ -2,7 +2,8 @@ :defer t :config (progn - (setq omnisharp-server-executable-path "~/Dropbox/projects/lib/Omnisharp/server/OmniSharp/bin/Debug/OmniSharp.exe") + (setq omnisharp-server-executable-path + "~/Dropbox/projects/lib/Omnisharp/server/OmniSharp/bin/Debug/OmniSharp.exe") (bind 'normal omnisharp-mode-map "gd" 'omnisharp-go-to-definition) @@ -11,19 +12,12 @@ (company--backend-on 'csharp-mode-hook 'company-omnisharp) (add-hook 'csharp-mode-hook 'turn-on-eldoc-mode)))) -(use-package csharp-mode :mode "\\.cs$") -;; (use-package csharp-mode -;; :mode "\\.cs$" -;; :config -;; (bind 'insert csharp-mode-map (kbd "C-SPC") 'omnisharp-auto-complete)) -;; :init -;; (add-hook! 'csharp-mode-hook (omnisharp-mode t) (flycheck-mode t))) +(use-package csharp-mode :mode "\\.cs$" + :config + (after "flycheck" (add-hook 'csharp-mode-hook 'flycheck-mode))) ;; unity shaders (use-package shaderlab-mode :mode "\\.shader$") -;; TODO Make more Unity-friendly - - (provide 'init-csharp) ;;; init-csharp.el ends here diff --git a/init/init-fly.el b/init/init-fly.el index 25f20ec58..b965464e2 100644 --- a/init/init-fly.el +++ b/init/init-fly.el @@ -5,10 +5,15 @@ (setq-default flycheck-indication-mode 'right-fringe ;; Removed checks on idle/change for snappiness flycheck-check-syntax-automatically '(save mode-enabled) - flycheck-disabled-checkers '(emacs-lisp-checkdoc emacs-lisp make)) + flycheck-disabled-checkers '(emacs-lisp-checkdoc make)) (dolist (hook '(ruby-mode-hook python-mode-hook + php-mode-hook + lua-mode-hook shell-mode-hook + scss-mode-hook + c++-mode-hook + c-mode-hook )) (add-hook hook 'flycheck-mode))) :config diff --git a/init/init-js.el b/init/init-js.el index 79b6d41c7..b6cf2f18a 100644 --- a/init/init-js.el +++ b/init/init-js.el @@ -51,9 +51,11 @@ (use-package unityjs-mode :mode "/Assets/*.js$" :config - (add-hook! 'unityjs-mode-hook - (enable-tab-width-2) - (setq js-indent-level 2))) + (progn + (add-hook 'unityjs-mode-hook 'flycheck-mode) + (add-hook! 'unityjs-mode-hook + (enable-tab-width-2) + (setq js-indent-level 2)))) (provide 'init-js) diff --git a/init/init-org.el b/init/init-org.el index 314708c12..5cef63102 100644 --- a/init/init-org.el +++ b/init/init-org.el @@ -193,23 +193,23 @@ "C-k" nil) (bind '(normal insert) evil-org-mode-map - "M-l" 'org-metaright - "M-h" 'org-metaleft - "M-k" 'org-metaup - "M-j" 'org-metadown - "M-L" 'org-shiftmetaright - "M-H" 'org-shiftmetaleft - "M-K" 'org-shiftmetaup - "M-J" 'org-shiftmetadown) + "¬" 'org-metaright ; M-j + "˙" 'org-metaleft ; M-h + "˚" 'org-metaup ; M-k + "Δ" 'org-metadown ; M-j + "Ò" 'org-shiftmetaright ; M-L + "Ó" 'org-shiftmetaleft ; M-H + "" 'org-shiftmetaup ; M-K + "Ô" 'org-shiftmetadown) ; M-J (bind 'insert evil-org-mode-map "C-e" 'org-end-of-line "C-a" 'org-beginning-of-line) (bind '(insert normal) evil-org-mode-map - "" 'org-beginning-of-line - "" 'org-end-of-line - "" 'org-up-element - "" 'org-down-element) + "" 'org-beginning-of-line + "" 'org-end-of-line + "" 'org-up-element + "" 'org-down-element) ;; Formatting shortcuts (defun my/org-surround (delim) @@ -217,19 +217,19 @@ (bind 'insert evil-org-mode-map ;; Add new header line before this line - (kbd "") 'my--org-insert-item-before + (kbd "") 'my--org-insert-item-before ;; Add new header line after this line - (kbd "") 'my--org-insert-item-after + (kbd "") 'my--org-insert-item-after - (kbd "s-b") (λ (my/org-surround "*")) ; bold - (kbd "s-u") (λ (my/org-surround "_")) ; underline - (kbd "s-i") (λ (my/org-surround "/")) ; italics - (kbd "s-`") (λ (my/org-surround "+"))) ; strikethrough + (kbd "M-b") (λ (my/org-surround "*")) ; bold + (kbd "M-u") (λ (my/org-surround "_")) ; underline + (kbd "M-i") (λ (my/org-surround "/")) ; italics + (kbd "M-`") (λ (my/org-surround "+"))) ; strikethrough (bind 'visual evil-org-mode-map - (kbd "s-b") "S*" - (kbd "s-u") "S_" - (kbd "s-i") "S/" - (kbd "s-`") "S+") + (kbd "M-b") "S*" + (kbd "M-u") "S_" + (kbd "M-i") "S/" + (kbd "M-`") "S+") (bind '(normal visual) evil-org-mode-map ", l" 'org-insert-link) @@ -267,8 +267,8 @@ "-" 'org-cycle-list-bullet ", SPC" 'my--toggle-checkbox ", " 'org-archive-subtree - "" 'my--org-insert-item-before - "" 'my--org-insert-item-after + "" 'my--org-insert-item-before + "" 'my--org-insert-item-after "RET" (λ (cond ((org-at-item-checkbox-p) (org-toggle-checkbox)) ((org-entry-is-todo-p) diff --git a/init/init-web.el b/init/init-web.el index 460a28101..2ca512772 100644 --- a/init/init-web.el +++ b/init/init-web.el @@ -52,6 +52,7 @@ :defer t :init (progn + (add-hook 'css-mode-hook 'emmet-mode) (add-hook 'scss-mode-hook 'emmet-mode) (add-hook 'web-mode-hook 'emmet-mode) (add-hook 'html-mode-hook 'emmet-mode) diff --git a/init/init-yasnippet.el b/init/init-yasnippet.el index 4a321f43d..0816a941c 100644 --- a/init/init-yasnippet.el +++ b/init/init-yasnippet.el @@ -115,7 +115,15 @@ (goto-char position)))) ;; Prevents Yas from stepping on my toes when I use backspace - (defun my/yas-clear-field (&optional field) + (defun my/yas-backspace (&optional field) + (interactive) + (let ((field (or field (and yas--active-field-overlay + (overlay-buffer yas--active-field-overlay) + (overlay-get yas--active-field-overlay 'yas--field))))) + (cond ((eq (point) (marker-position (yas--field-start field))) nil) + (t (delete-char -1))))) + + (defun my/yas-delete (&optional field) (interactive) (let ((field (or field (and yas--active-field-overlay (overlay-buffer yas--active-field-overlay) @@ -125,15 +133,28 @@ (eq (point) (marker-position (yas--field-start field)))) (yas--skip-and-clear field) (yas-next-field 1)) - (t (delete-char -1))))) + ((eq (point) (marker-position (yas--field-end field))) nil) + (t (delete-char 1))))) + + (defun my/yas-clear-to-sof (&optional field) + (interactive) + (let* ((field (or field (and yas--active-field-overlay + (overlay-buffer yas--active-field-overlay) + (overlay-get yas--active-field-overlay 'yas--field)))) + (sof (marker-position (yas--field-start field)))) + (when (and field (> (point) sof)) + (delete-region sof (point))))) ;; keybinds (bind yas-keymap "C-e" 'my/yas-goto-end-of-field "C-a" 'my/yas-goto-start-of-field - "" 'my/yas-goto-end-of-field - "" 'my/yas-goto-start-of-field - [backspace] 'my/yas-clear-field))) + "" 'my/yas-goto-end-of-field + "" 'my/yas-goto-start-of-field + "" 'my/yas-clear-to-sof + + [backspace] 'my/yas-backspace + "" 'my/yas-delete))) (provide 'init-yasnippet) diff --git a/init/my-bindings.el b/init/my-bindings.el index a2121384b..5e86ffbe5 100644 --- a/init/my-bindings.el +++ b/init/my-bindings.el @@ -2,28 +2,25 @@ ;; Global keymaps ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(bind (kbd "M-x") 'smex - (kbd "M-X") 'smex-major-mode-commands +(bind (kbd "≈") 'smex + (kbd "˛") 'smex-major-mode-commands (kbd "C-;") 'eval-expression (kbd "C-`") 'popwin:toggle-popup-window - (kbd "s-=") 'text-scale-increase - (kbd "s--") 'text-scale-decrease - (kbd "s-w") 'evil-window-delete - (kbd "s-/") 'evilnc-comment-or-uncomment-lines) + (kbd "M-=") 'text-scale-increase + (kbd "M--") 'text-scale-decrease + (kbd "M-w") 'evil-window-delete + (kbd "M-/") 'evilnc-comment-or-uncomment-lines + (kbd "M-s") 'save-buffer) ;; Faster scrolling (bind 'motion my-mode-map - (kbd "s-j") "6j" - (kbd "s-k") "6k") + (kbd "M-j") "6j" + (kbd "M-k") "6k") (bind 'normal my-mode-map - (kbd "s-o") 'ido-find-file - (kbd "s-d") 'dash-at-point) - -(bind 'visual my-mode-map - (kbd "s-r") 'my-run-code-region - (kbd "s-R") 'my-send-region-to-repl) + (kbd "M-o") 'ido-find-file + (kbd "M-d") 'dash-at-point) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -119,17 +116,17 @@ (bind 'emacs [escape] 'evil-normal-state) (bind 'insert my-mode-map - "" (λ (evil-forward-word) (evil-delete-backward-word)) + "" 'evil-delete-backward-word + "" (λ (evil-forward-word) (evil-delete-backward-word)) ;; Newline magic "" 'backward-delete-char-untabify - "" 'backward-delete-char + "" 'my.backward-kill-to-bol-and-indent "" 'evil-ret-and-indent - "" (kbd " DEL") ; newline and dedent ;; Textmate-esque indent shift left/right - "s-[" (kbd "C-o m l C-o I DEL C-o ` l") - "s-]" (λ (evil-shift-right (point-at-bol) (point-at-eol))) + "M-[" (kbd "C-o m l C-o I DEL C-o ` l") + "M-]" (λ (evil-shift-right (point-at-bol) (point-at-eol))) "" (kbd "s-[")) ;; Enable TAB to do matchit @@ -165,5 +162,58 @@ (evil-make-overriding-map my-mode-map nil) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Keymap fixes ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; This section is dedicated to keymaps that "fix" certain keys so +;; that they behave more like vim (or how I like it). + +;; Restores "dumb" indentation to the tab key. This rustles a lot of +;; peoples' jimmies, apparently, but it's how I like it. +(bind 'insert "" 'my.dumb-indent) +(bind 'insert "" 'indent-for-tab-command) + +;; Except for lisp +(bind 'insert lisp-mode-map [remap my.dumb-indent] 'indent-for-tab-command) +(bind 'insert emacs-lisp-mode-map [remap my.dumb-indent] 'indent-for-tab-command) + +;; Highjacks space/backspace to: +;; a) delete spaces on either side of the cursor, if present ( | ) -> (|) +;; b) allow backspace to delete space-indented blocks intelligently +;; c) and not do any of this magic when inside a string +(bind 'insert + "SPC" 'my.inflate-space-maybe + [remap backward-delete-char-untabify] 'my.deflate-space-maybe + [remap newline] 'my.newline-and-indent + + ;; Smarter move-to-beginning-of-line + [remap move-beginning-of-line] 'my.move-to-bol + + ;; Restore bash-esque keymaps in insert mode; C-w and C-a already exist + "\C-e" 'my.move-to-eol + "\C-u" 'my.backward-kill-to-bol-and-indent + + ;; Fixes delete + (kbd "") 'delete-char) + +(bind '(insert normal) + ;; Textmate-esque insert-line before/after + (kbd "") 'evil-open-below + (kbd "") 'evil-open-above) + +;; Fix osx keymappings and then some +(use-package smart-forward + :config + (bind 'insert + (kbd "") 'smart-backward + (kbd "") 'smart-forward + ;; (kbd "") 'beginning-of-buffer + (kbd "") 'smart-up + (kbd "") 'smart-down + (kbd "") 'my.backward-kill-to-bol-and-indent)) + + + (provide 'my-bindings) ;;; my-bindings.el ends here diff --git a/init/my-defuns.el b/init/my-defuns.el new file mode 100644 index 000000000..110d651cb --- /dev/null +++ b/init/my-defuns.el @@ -0,0 +1,33 @@ + +(defmacro -defreplace (name search replace) + `(evil-define-operator ,(make-symbol (concat "replace:" (symbol-name name))) (beg end) + :type inclusive + :repeat nil + (interactive "") + (replace-regexp ,search ,replace t beg end))) + +;;;; HTML ;;;; +;; Replace smart quotes and other MS Word verbiage into plain text +(defun replace:plain-textify (beg end) + (interactive "r") + (replace-regexp "…" "..." nil beg end) + (replace-regexp "[‘’]" "'" nil beg end) + (replace-regexp "[“”]" "\"" nil beg end)) + +;; Email address with mailto link +(defun replace:email2mailto (beg end) + (interactive "r") + (replace-regexp "\\b\\([a-zA-Z0-9._+-%]+@[a-zA-Z0-9-.]+\\.[a-zA-Z]+\\)\\b" + "\\1" + nil beg end)) + +;; Link with anchor +(defun replace:url2anchor (beg end) + (interactive "r") + (replace-regexp "\\bhttps?://.+?\\b" + "\\1" + nil beg end)) + + +(provide 'my-defuns) +;;; my-defuns.el ends here diff --git a/init/my-settings.el b/init/my-settings.el index fde10176e..00570fbca 100644 --- a/init/my-settings.el +++ b/init/my-settings.el @@ -36,47 +36,7 @@ ;;;; Keymap Fixes ;;;;;;;;;;;;;;;;;;;;;; -;; This section is dedicated to keymaps that "fix" certain keys so -;; that they behave more like vim (or how I like it). - -;; Restores "dumb" indentation to the tab key. This rustles a lot of -;; peoples' jimmies, apparently, but it's how I like it. -(bind 'insert (kbd "TAB") 'my.dumb-indent) -;; Except for lisp -(bind 'insert lisp-mode-map [remap my.dumb-indent] 'indent-for-tab-command) -(bind 'insert emacs-lisp-mode-map [remap my.dumb-indent] 'indent-for-tab-command) - -;; Highjacks backspace to: -;; a) deletes spaces on either side of the cursor, if present ( | ) -> (|) -;; b) allow backspace to delete space-indented blocks intelligently -;; c) and not do any of this magic when inside a string -(bind 'insert - [remap backward-delete-char-untabify] 'my.deflate-space-maybe - [remap newline] 'my.newline-and-indent - - ;; Smarter move-to-beginning-of-line - [remap move-beginning-of-line] 'my.move-to-bol - - ;; Restore bash-esque keymaps in insert mode; C-w and C-a already exist - "\C-e" 'my.move-to-eol - "\C-u" 'my.backward-kill-to-bol-and-indent - - ;; Fixes delete - (kbd "") 'delete-char) - -(bind '(insert normal) - ;; Textmate-esque insert-line before/after - (kbd "") 'evil-open-below - (kbd "") 'evil-open-above) - -;; Fix osx keymappings and then some -(bind 'insert - (kbd "") 'my.move-to-bol - (kbd "") 'my.move-to-eol - (kbd "") 'beginning-of-buffer - (kbd "") 'end-of-buffer - (kbd "") 'my.backward-kill-to-bol-and-indent) - +;; Implements some helpful keymappings for emacs sub-modes (add-hook! 'ido-setup-hook (bind ido-completion-map (kbd "") 'ido-delete-backward-updir @@ -91,7 +51,6 @@ minibuffer-local-isearch-map) [escape] 'my--minibuffer-quit) (bind 'emacs [escape] 'my--minibuffer-quit) -(bind 'god [escape] 'evil-god-state-bail) (bind 'normal evil-command-window-mode-map [escape] 'kill-buffer-and-window) ;; (bind evil-ex-map [escape] 'my--minibuffer-quit) @@ -121,7 +80,7 @@ (interactive) (message "Gee, I dunno Brain...")) -(if is-mac (global-set-key (kbd "s-q") 'my-emacs-is-not-kill)) +(if is-mac (global-set-key (kbd "M-q") 'my-emacs-is-not-kill)) (provide 'my-settings)