diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..f8db735 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "extra/sunrise-commander"] + path = extra/sunrise-commander + url = https://github.com/escherdragon/sunrise-commander diff --git a/README.md b/README.md deleted file mode 100644 index 89897d5..0000000 --- a/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# emacs -My personal emacs configuration - -It is mostly based on tuhdo's emacs ide demo: https://github.com/tuhdo/emacs-c-ide-demo - -This configuration requires the installation of : - - the GNU global package (for gtags) - - clang (for ivory) - - cmake (for ivory) - - llvm-libs (for cmake, somehow not a dependency on Manjaro when installing cmake) - - Use python-pip to install jedi, flake8, importmagic and autopep8 (for elpy) - - ditaa (for ascii to image generation in org-mode) - -When first checking out this config, run irony-install-server to make and install the irony-server. diff --git a/README.org b/README.org new file mode 120000 index 0000000..f13833e --- /dev/null +++ b/README.org @@ -0,0 +1 @@ +config.org \ No newline at end of file diff --git a/config.org b/config.org new file mode 100644 index 0000000..9f19416 --- /dev/null +++ b/config.org @@ -0,0 +1,949 @@ +#+STARTUP: overview +#+TITLE: My Emacs +#+CREATOR: Laurens Miers +#+LANGUAGE: en +[[./img/dash_logo.png]] + +* Installation + +My personal emacs configuration + +(Heavily) Inspired by the following configs: + - https://github.com/tuhdo/emacs-c-ide-demo + - https://github.com/daedreth/UncleDavesEmacs + +This configuration requires the installation of : + + - the GNU =global= package (for gtags) + - =clang= (for ivory) + - =cmake= (for ivory) + - =llvm-libs= (for cmake, somehow not a dependency on Manjaro when installing cmake) + - Use python-pip to install requirements for elpy: + =pip install jedi flake8 importmagic autopep8 yapf= + - =ditaa= (for ascii to image generation in org-mode) + +When first checking out this config, run =irony-install-server= to make and install the irony-server. + +* General stuff +** Unsorted + +Collection of stuff that needs to be sorted...someday....maybe... +#+BEGIN_SRC emacs-lisp +(global-set-key (kbd "M-p") 'fill-paragraph) +#+END_SRC +** Macro's + +Rebind the macro keys to Fx keys to give them a decent purpose. + +#+BEGIN_SRC emacs-lisp +(global-set-key [f9] 'start-kbd-macro) +(global-set-key [f10] 'end-kbd-macro) +(global-set-key [f11] 'call-last-kbd-macro) +#+END_SRC + +** Goto-line + +Starting with Emacs 23.2, =M-g g= is bound to goto-line. +However, I find this too long. So rebind it: + +#+BEGIN_SRC emacs-lisp +(global-set-key (kbd "M-g") 'goto-line) +#+END_SRC + +** Rectangle + +Most rectangle functions are by default mapped to something like =C-x r (other-char)=. +I use =string-insert-rectangle= and =query-replace-regexp= quite a lot, +so rebind it to something easy to remember. + +#+BEGIN_SRC emacs-lisp +(global-set-key (kbd "C-x r i") 'string-insert-rectangle) +(global-set-key (kbd "C-x r r") 'query-replace-regexp) +#+END_SRC + +** Garbage collection (gc) + +I used to have the following enabled in my init to increase the gc threshold to speed-up emacs startup: +(stolen from [[http://bling.github.io/blog/2016/01/18/why-are-you-changing-gc-cons-threshold/]]) + +#+BEGIN_SRC emacs-lisp +(setq gc-cons-threshold 100000000) +#+END_SRC + +But according to this: [[https://lists.gnu.org/archive/html/help-gnu-emacs/2007-06/msg00243.html ]], +it is no longer necessary. But I found that I still have to do this to speed up emacs. + +** Yes-or-no questions + +Because I'm lazy, important yes-or-no questions can be answered with y-or-n: + +#+BEGIN_SRC emacs-lisp +(defalias 'yes-or-no-p 'y-or-n-p) +#+END_SRC + +** Emacs fullscreen at startup + +#+BEGIN_SRC emacs-lisp +(add-to-list 'default-frame-alist '(fullscreen . maximized)) +#+END_SRC + +** Enable disabled commands + +Some commands are disabled to protect the user. +Narrow-region/page is a really handy feature, enable it: + +#+BEGIN_SRC emacs-lisp +(put 'narrow-to-page 'disabled nil) +(put 'narrow-to-region 'disabled nil) +#+END_SRC + +** Buffers + +Why is this not built-in? + +#+BEGIN_SRC emacs-lisp +(defun kill-all-buffers () + "Kill all buffers without regard for their origin." + (interactive) + (mapc 'kill-buffer (buffer-list))) +#+END_SRC + +** Helping vim-users + +#+BEGIN_SRC emacs-lisp +(defconst wq "This is not vi! Use C-x C-c instead.") +(defconst w "This is not vi! Use C-x C-s instead.") +(defconst q! "This is EMACS not vi! Use C-x C-c instead.") +(defconst wq! "This is EMACS not vi! Use C-x C-c instead.") +#+END_SRC + +** Backup files + +Disable the generation of backup-files, I don't use them. + +#+BEGIN_SRC emacs-lisp +(setq make-backup-files nil) +#+END_SRC + +* Theme + +#+BEGIN_SRC emacs-lisp +(use-package monokai-theme + :ensure t + :init + (load-theme 'monokai t) + +) +#+END_SRC + +** Highlight line + +Highlight line will highlight the current line we are on. +Enable highlight-line globally and replace its background colour. + +#+BEGIN_SRC emacs-lisp +(global-hl-line-mode 1) +(set-face-background hl-line-face "dark slate grey") +#+END_SRC + +* Dashboard + +I use the dashboard as start screen. +Since I like it to give me a list of recent files, we need to enable =recentf-mode=. + +#+BEGIN_SRC emacs-lisp +(use-package dashboard + :ensure t + :init + (recentf-mode 1) + :config + (dashboard-setup-startup-hook) + (setq dashboard-startup-banner "~/.emacs.d/img/dash_logo.png") + (setq dashboard-items '((recents . 10) + (bookmarks . 5) + )) + (setq dashboard-banner-logo-title "") +) +#+END_SRC + +* Zygospore + +Revert =C-x 1= by pressing =C-x 1= again: +[[https://github.com/louiskottmann/zygospore.el]] + +FYI: At one point, used this together with sr-speedbar. They did not play well together... + +#+BEGIN_SRC emacs-lisp +(use-package zygospore + :ensure t + :config + (global-set-key (kbd "C-x 1") 'zygospore-toggle-delete-other-windows) +) +#+END_SRC + +* Mode-line + +[[https://github.com/Malabarba/smart-mode-line]] + +#+BEGIN_SRC emacs-lisp +(use-package smart-mode-line + :ensure t + :config + (setq sml/no-confirm-load-theme t) + (setq sml/theme 'respectful) + (sml/setup) +) +#+END_SRC + +* Editing settings + +** Kill-ring customization + +Setting =kill-whole-line= to non-nil means when we execute =C-k= at the beginning of a line +will the entire line including the following newline will be deleted. + +#+BEGIN_SRC emacs-lisp +(setq kill-ring-max 5000) ; increase kill-ring capacity +(setq kill-whole-line t) +#+END_SRC + +** Newline at end-of-file + +#+BEGIN_SRC emacs-lisp +(setq mode-require-final-newline t) ; add a newline to end of file +#+END_SRC + +** Enable column numbers + +#+BEGIN_SRC emacs-lisp +(setq column-number-mode 1) +#+END_SRC + +** Look-and-feel modifications + +Remove scroll-, tool- and menu-bar. I don't use them so free some space. + +#+BEGIN_SRC emacs-lisp +(scroll-bar-mode -1) +(tool-bar-mode -1) +(menu-bar-mode -1) +#+END_SRC + +** Tab-width + +Set the default tab width. +#+BEGIN_SRC emacs-lisp +(setq-default tab-width 4) +#+END_SRC + +** Automatic indent + +Automatically indent when pressing =RET=. +#+BEGIN_SRC emacs-lisp +(global-set-key (kbd "RET") 'newline-and-indent) +#+END_SRC + +** Delete trailing whitespace + +Automatically delete trailing whitespace when saving a file. + +#+BEGIN_SRC emacs-lisp +(add-hook 'before-save-hook 'delete-trailing-whitespace) +#+END_SRC + +** Angry faces + +#+BEGIN_SRC emacs-lisp +;; make angry face to get my attention +(setq prog-modes '(c++-mode python-mode erlang-mode java-mode c-mode emacs-lisp-mode scheme-mode prog-mode)) +(make-face 'font-lock-angry-face) +(modify-face 'font-lock-angry-face "Red" "Yellow" nil t nil t nil nil) + +;; Add keywords to recognize to angry face +(mapc (lambda (mode) + (font-lock-add-keywords + mode + '(("\\<\\(FIXME\\)" 1 'font-lock-angry-face t))) + ) + prog-modes) +(mapc (lambda (mode) + (font-lock-add-keywords + mode + '(("\\<\\(TODO\\)" 1 'font-lock-angry-face t))) + ) + prog-modes) +#+END_SRC + +** C Coding settings + +Some basic C-coding settings (style, indentation offset, ...). + +#+BEGIN_SRC emacs-lisp +;; default coding style +(setq c-default-style "linux") + +;; sane indentation offset +(setq c-basic-offset 4) +#+END_SRC + +** Tabs vs spaces + +Tabs are evil. + +#+BEGIN_SRC emacs-lisp +(setq-default indent-tabs-mode nil) +#+END_SRC + +* Undo-tree + +Undo with =C-/=. +#+BEGIN_SRC emacs-lisp +(use-package undo-tree + :ensure t + :config + (global-undo-tree-mode) +) +#+END_SRC + +* Volatile highlights + +Show/highlight changes when doing undo/yanks/kills/... + +https://github.com/k-talo/volatile-highlights.el + +#+BEGIN_SRC emacs-lisp +(use-package volatile-highlights + :ensure t + :config + (volatile-highlights-mode t) +) +#+END_SRC + +* iedit + +Highlight occurences of symbol and replace them simultanously. +Shortkey: =C-;= + +https://github.com/victorhge/iedit + +#+BEGIN_SRC emacs-lisp +(use-package iedit + :ensure t +) +#+END_SRC + +* Smartparens + +Smart minor-mode to deal with pairs. +Extra options: + - =show-smartparens-global-mode= : highlight corresponding bracket/pair/... + - =smartparens-global-mode= : enable smartparens + +https://github.com/Fuco1/smartparens + +#+BEGIN_SRC emacs-lisp +(use-package smartparens + :ensure t + :config + (require 'smartparens-config) + (show-smartparens-global-mode t) + (smartparens-global-mode t) +) + +;; old config stuff +;; (setq sp-base-key-bindings 'paredit) +;; (setq sp-autoskip-closing-pair 'always) +;; (setq sp-hybrid-kill-entire-symbol nil) +;; (sp-use-paredit-bindings) +;; +;; (show-smartparens-global-mode +1) +;; (smartparens-global-mode 1) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; keybinding management smartparens ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; cl-package contains the loop macro +;; (require 'cl) +;; +;; (defmacro def-pairs (pairs) +;; `(progn +;; ,@(loop for (key . val) in pairs +;; collect +;; `(defun ,(read (concat +;; "wrap-with-" +;; (prin1-to-string key) +;; "s")) +;; (&optional arg) +;; (interactive "p") +;; (sp-wrap-with-pair ,val))))) +;; +;; (def-pairs ((paren . "(") +;; (bracket . "[") +;; (brace . "{") +;; (single-quote . "'") +;; (double-quote . "\"") +;; (underscore . "_") +;; (back-quote . "`"))) +;; +;; (define-key smartparens-mode-map (kbd "C-c (") 'wrap-with-parens) +;; (define-key smartparens-mode-map (kbd "C-c [") 'wrap-with-brackets) +;; (define-key smartparens-mode-map (kbd "C-c {") 'wrap-with-braces) +;; (define-key smartparens-mode-map (kbd "C-c '") 'wrap-with-single-quotes) +;; (define-key smartparens-mode-map (kbd "C-c \"") 'wrap-with-double-quotes) +;; (define-key smartparens-mode-map (kbd "C-c _") 'wrap-with-underscores) +;; (define-key smartparens-mode-map (kbd "C-c `") 'wrap-with-back-quotes) +;; +;; (define-key smartparens-mode-map (kbd "C-c s r") 'sp-rewrap-sexp) +;; (define-key smartparens-mode-map (kbd "C-c s u") 'sp-unwrap-sexp) +;; +;; (define-key smartparens-mode-map (kbd "C-M-f") 'sp-forward-sexp) +;; (define-key smartparens-mode-map (kbd "C-M-b") 'sp-backward-sexp) +;; +;; ;; TODO: in manjaro this selects keyboard-layout or something +;; ;;(define-key smartparens-mode-map (kbd "C-M-k") 'sp-kill-sexp) +;; (define-key smartparens-mode-map (kbd "C-M-w") 'sp-copy-sexp) +;; +;; (define-key smartparens-mode-map (kbd "C-M-n") 'sp-next-sexp) +;; (define-key smartparens-mode-map (kbd "C-M-p") 'sp-previous-sexp) +;; +;; ;; TODO: for some reason this does not work +;; (define-key smartparens-mode-map (kbd "C-M-a") 'sp-beginning-of-sexp) +;; (define-key smartparens-mode-map (kbd "C-M-e") 'sp-end-of-sexp) +;; +;; (define-key smartparens-mode-map (kbd "C-M-h") 'mark-defun) +;; +;; (smartparens-global-mode t) + +#+END_SRC + +* Comment-dwim-2 + +Replacement for built-in =comment-dwim=, more comment features. + +https://github.com/remyferre/comment-dwim-2 + +#+BEGIN_SRC emacs-lisp +(use-package comment-dwim-2 + :ensure t + :config + (global-set-key (kbd "M-;") 'comment-dwim-2) +) +#+END_SRC + +* Expand-region + +Expand region increases the selected region by semantic units. +I also enable =pending-delete-mode=, this means when we mark a region and start typing, +the text within the mark is deleted with the new typed text and the mark disappears. + +https://github.com/magnars/expand-region.el + +#+BEGIN_SRC emacs-lisp +(use-package expand-region + :ensure t + :init + (pending-delete-mode t) + :config + (global-set-key (kbd "C-=") 'er/expand-region) +) +#+END_SRC + +* Windooze + +When we use windows as our bootloader, we have to setup some things first: + +#+BEGIN_SRC emacs-lisp +;; Windows performance tweaks +;; +(when (boundp 'w32-pipe-read-delay) + (setq w32-pipe-read-delay 0)) +;; Set the buffer size to 64K on Windows (from the original 4K) +(when (boundp 'w32-pipe-buffer-size) + (setq irony-server-w32-pipe-buffer-size (* 64 1024))) + +;; Set pipe delay to 0 to reduce latency of irony +(setq w32-pipe-read-delay 0) + +;; From "setting up irony mode on Windows" : +;; Make sure the path to clang.dll is in emacs' exec_path and shell PATH. +(setenv "PATH" + (concat + "C:\\msys64\\usr\\bin" ";" + "C:\\msys64\\mingw64\\bin" ";" + (getenv "PATH") + ) +) +(setq exec-path (append '("c:/msys64/usr/bin" "c:/alt/msys64/mingw64/bin") + exec-path)) +#+END_SRC + +To be fair, I didn't test this in a while... + +* Helm + +** General config + +#+BEGIN_SRC emacs-lisp +(use-package helm + :ensure t + :bind + ("M-x" . helm-M-x) + ("M-y" . helm-show-kill-ring) + ("C-x b" . helm-mini) + ("C-x C-b" . helm-mini) + ("C-x C-f" . helm-find-files) + :init + (helm-mode 1) + :config + (setq helm-M-x-fuzzy-match t + helm-buffers-fuzzy-matching t + helm-recentf-fuzzy-match t + helm-semantic-fuzzy-match t + helm-imenu-fuzzy-match t + helm-split-window-inside-p t ;; open helm buffer inside current window + helm-scroll-amount 8 ;; scroll 8 lines other window using M-/M- +;; helm-move-to-line-cycle-in-source nil ;; move to end or beginning of source when reaching to por bottom of source +;; helm-ff-search-library-in-sexp t ;; search for library in 'require' and 'declare-function' sexp +;; helm-echo-input-in-header-line t + ) + ;; rebind tab to do persistent action + ;; we use helm-execute-persistent-action more than helm-select-action (default for ) + (define-key helm-map (kbd "") 'helm-execute-persistent-action) + (helm-autoresize-mode 1) ;; Awesome feature together with helm-split-window-inside-p != nil +) + +(use-package helm-swoop + :ensure t + :bind + ("C-s" . helm-swoop) + :config + ;; "C-s" + "C-s" results in mult-swoop + (define-key helm-swoop-map (kbd "C-s") 'helm-multi-swoop-all-from-helm-swoop) + ;; split window inside the current window when multiple windows open + (setq helm-swoop-split-with-multiple-windows t) +) + +;; (require 'helm-config) +;; ;; (define-key helm-find-files-map (kbd "C-b") 'helm-find-files-up-one-level) +;; ;; (define-key helm-find-files-map (kbd "C-f") 'helm-execute-persistent-action) +;; +;; make TAB work in terminal/minibuffer +(define-key helm-map (kbd "C-i") 'helm-execute-persistent-action) +;; remap helm-select-action: lists actions +(define-key helm-map (kbd "C-z") 'helm-select-action) + +;; remap calculator +;; (global-set-key (kbd "C-c C-c") 'helm-calcul-expression) + +;; TODO: experiment with mark ring (breadcrumbs something?) +;; TODO: experiment with helm-regexp (build and test regexes) +;; TODO: remember helm-top (helm interface for top program) + +#+END_SRC + +** Helm-gtags + +#+BEGIN_SRC emacs-lisp +(use-package helm-gtags + :ensure t + :bind + ( "M-." . helm-gtags-find-tag-from-here) + ( "M-," . helm-gtags-pop-stack) + ( "C-c f" . helm-gtags-find-files) + ( "C-c p" . helm-gtags-parse-file) + :config + (add-hook 'c-mode-hook 'helm-gtags-mode) + (add-hook 'c++-mode-hook 'helm-gtags-mode) + (add-hook 'python-mode-hook 'helm-gtags-mode) + (add-hook 'java-mode-hook 'helm-gtags-mode) + (add-hook 'asm-mode-hook 'helm-gtags-mode) + + (custom-set-variables '(helm-gtags-auto-update t)) +) +#+END_SRC + +* Mutliple cursors + +https://github.com/magnars/multiple-cursors.el + +#+BEGIN_SRC emacs-lisp +(use-package multiple-cursors + :ensure t + :bind + ("C-x r a" . mc/edit-lines) + ("C-x r e" . mc/edit-ends-of-lines) + ("C->" . mc/mark-next-like-this) + ("C-<" . mc/mark-previous-like-this) + ("C-c C->" . mc/mark-all-like-this) +) +#+END_SRC + +* GDB + +TODO: need to document this + +#+BEGIN_SRC emacs-lisp +(setq gdb-many-windows 1) + +;; Select a register number which is unlikely to get used elsewere +(defconst egdbe-windows-config-register 313465989 + "Internal used") + +(defvar egdbe-windows-config nil) + +(defun set-egdbe-windows-config () + (interactive) + (setq egdbe-windows-config (window-configuration-to-register egdbe-windows-config-register))) + +(defun egdbe-restore-windows-config () + (interactive) + (jump-to-register egdbe-windows-config-register)) + +(defun egdbe-start-gdb (&optional gdb-args) + "" + (interactive) + (set-egdbe-windows-config) + (call-interactively 'gdb)) + +(defun egdbe-quit () + "finish." + (interactive) + (gud-basic-call "quit") + (egdbe-restore-windows-config)) + +(defun egdbe-gud-mode-hook () + "" + (local-unset-key (kbd "q")) + (local-set-key (kbd "q") 'egdbe-quit)) + +(add-hook 'gud-mode-hook 'egdbe-gud-mode-hook) +#+END_SRC + +* Magit + +#+BEGIN_SRC emacs-lisp +(use-package magit + :ensure t + :bind + ("C-c m" . magit-status) +) +#+END_SRC + +* Programming + +** Yasnippet + +Template system for Emacs. + +https://github.com/joaotavora/yasnippet + +#+BEGIN_SRC emacs-lisp +(use-package yasnippet + :ensure t + :init + (add-to-list 'load-path + "~/.emacs.d/plugins/yasnippet") + :config + (add-hook 'prog-mode-hook 'yas-minor-mode) +) +#+END_SRC + +** Flycheck + +On-the-fly syntax checking. + +#+BEGIN_SRC emacs-lisp +(use-package flycheck + :ensure t + :config + (add-hook 'prog-mode-hook 'flycheck-mode) +) +#+END_SRC + +** Company mode + +#+BEGIN_SRC emacs-lisp +(use-package company + :ensure t + :config + (setq company-idle-delay 0) + (setq company-minimum-prefix-length 2)) + (add-hook 'prog-mode-hook 'company-mode) +#+END_SRC + +** (Relative) Line numbers + +#+BEGIN_SRC emacs-lisp +(use-package linum-relative + :ensure t + :config + (setq linum-relative-current-symbol "") + (add-hook 'prog-mode-hook 'linum-relative-mode)) +#+END_SRC + +** C/C++ mode + +*** Flycheck + +Clang static analyzer with flycheck + +https://github.com/alexmurray/flycheck-clang-analyzer +https://github.com/Sarcasm/flycheck-irony + +#+BEGIN_SRC emacs-lisp +(use-package flycheck-clang-analyzer + :ensure t + :config + (with-eval-after-load 'flycheck + (require 'flycheck-clang-analyzer) + (flycheck-clang-analyzer-setup))) + +(use-package flycheck-irony + :ensure t + :config + (eval-after-load 'flycheck + '(add-hook 'flycheck-mode-hook #'flycheck-irony-setup)) +) +#+END_SRC + +*** Company + +https://github.com/ikirill/irony-eldoc + +#+BEGIN_SRC emacs-lisp +(use-package company-c-headers + :ensure t) + +(use-package company-irony + :ensure t + :config + (setq company-backends '((company-c-headers +;; company-dabbrev-code ;; not sure what this is + company-irony)))) + +(use-package irony + :ensure t + :config + (add-hook 'irony-mode-hook 'irony-cdb-autosetup-compile-options) + (add-hook 'c++-mode-hook 'irony-mode) + (add-hook 'c-mode-hook 'irony-mode) + (add-hook 'objc-mode-hook 'irony-mode) +) + +(use-package irony-eldoc + :ensure t + :config + (add-hook 'irony-mode-hook 'irony-eldoc) +) +#+END_SRC + +** Python mode + +Use =elpy=: +https://github.com/jorgenschaefer/elpy + +It is a full dev env and sometimes feels like a bit too much but overal good experience. + +#+BEGIN_SRC emacs-lisp +(use-package elpy + :ensure t + :config + (elpy-enable) +) +#+END_SRC + +* Windows + +** Splitting + +After you split a window, your focus remains in the previous one. +Credit goes to https://github.com/daedreth/UncleDavesEmacs + +#+BEGIN_SRC emacs-lisp +(defun split-and-follow-horizontally () + (interactive) + (split-window-below) + (balance-windows) + (other-window 1)) +(global-set-key (kbd "C-x 2") 'split-and-follow-horizontally) + +(defun split-and-follow-vertically () + (interactive) + (split-window-right) + (balance-windows) + (other-window 1)) +(global-set-key (kbd "C-x 3") 'split-and-follow-vertically) +#+END_SRC + +** Switching + +https://github.com/dimitri/switch-window + +#+BEGIN_SRC emacs-lisp +(use-package switch-window + :ensure t + :config + (setq switch-window-input-style 'minibuffer) + (setq switch-window-increase 6) + (setq switch-window-threshold 2) + (setq switch-window-shortcut-style 'qwerty) + (setq switch-window-qwerty-shortcuts + '("a" "s" "d" "f" "j" "k" "l" "i" "o")) +;; (setq switch-window-multiple-frames t) ;; TODO: doesn't work properly.. + :bind + ("C-x o" . switch-window)) +#+END_SRC + +When using exwm, have a look at this: https://github.com/dimitri/switch-window/pull/62 + + +** Multi-frame rebindings (obsolete with switch-window) + +Sometimes I have multiple emacs-frames open. +In the past, I preferred that the normal =C-x o= can deal with this but this is used by switch-window now. + +#+BEGIN_SRC emacs-lisp +;; Use C-x o to switch to other frame when using multi-monitor +;; (global-set-key (kbd "C-x o") 'next-multiframe-window) +#+END_SRC + +Now that =next-multiframe-window= is bound to =C-x o=, +Bind =C-x p= to =previous-multiframe-window=. + +#+BEGIN_SRC emacs-lisp +;; (global-set-key (kbd "\C-x p") 'previous-multiframe-window) +#+END_SRC + +* Avy + +https://github.com/abo-abo/avy + +#+BEGIN_SRC emacs-lisp +(use-package avy + :ensure t + :bind + ("M-s" . avy-goto-char)) +#+END_SRC + +* Convenience stuff + +** Visiting the configuration + +#+BEGIN_SRC emacs-lisp +(defun config-visit () + (interactive) + (find-file "~/.emacs.d/config.org")) +(global-set-key (kbd "C-c e") 'config-visit) +#+END_SRC + +** Reload the configuration + +#+BEGIN_SRC emacs-lisp +(defun config-reload () + "Reloads ~/.emacs.d/config.org at runtime" + (interactive) + (org-babel-load-file (expand-file-name "~/.emacs.d/config.org"))) +(global-set-key (kbd "C-c r") 'config-reload) +#+END_SRC + +** Subword + +#+BEGIN_SRC emacs-lisp +(global-subword-mode 1) +#+END_SRC + +** Bell + +The audible bell is annoying AF. + +#+BEGIN_SRC emacs-lisp +(setq visible-bell 1) +#+END_SRC + +* Server + +Emacs as a server. +Emacsclient will then use this emacs as its server. + +#+BEGIN_SRC emacs-lisp +(server-start) +#+END_SRC + +* Beacon + +https://github.com/Malabarba/beacon + +#+BEGIN_SRC emacs-lisp +(use-package beacon + :ensure t + :config + (beacon-mode 1) + (setq beacon-color "#FFFFCC") ;; yelowish +) +#+END_SRC + +* Sunrise commander + +https://github.com/escherdragon/sunrise-commander + +** Install + +#+BEGIN_SRC emacs-lisp +(add-to-list 'load-path "~/.emacs.d/extra/sunrise-commander") + +(require 'sunrise-commander) +(require 'sunrise-x-buttons) +(require 'sunrise-x-modeline) + +(add-to-list 'auto-mode-alist '("\\.srvm\\'" . sr-virtual-mode)) +#+END_SRC + +* Old stuff, maybe usefull for lookup later + +** Diff mode stuff + +#+BEGIN_SRC emacs-lisp +;; show whitespace in diff-mode +;; (add-hook 'diff-mode-hook (lambda () +;; (setq-local whitespace-style +;; '(face +;; tabs +;; tab-mark +;; spaces +;; space-mark +;; trailing +;; indentation::space +;; indentation::tab +;; newline +;; newline-mark)) +;; (whitespace-mode 1))) +#+END_SRC + +** Speedbar + +#+BEGIN_SRC emacs-lisp +;; Package: sr-speedbar +;;(require 'sr-speedbar) +;; (add-hook 'emacs-startup-hook (lambda () ; Open sr speedbar on startup +;; (sr-speedbar-open) +;; )) +;; (setq speedbar-show-unknown-files t) ; Enable speedbar to show all files +;; (setq speedbar-use-images nil) ; use text for buttons +;; (setq sr-speedbar-right-side nil) ; put on left side +;; (setq sr-speedbar-width 40) +;; +;; (provide 'setup-speedbar) +#+END_SRC + +* TODO + +stuff i need to look into: +- ibuffer +- switch-window +- split-and-follow-vertically/horizontally +- which-key +- symon +- spaceline +- async +- exwm +- helm-hide-minibuffer diff --git a/custom/setup-autocompletion.el b/custom/setup-autocompletion.el index e784b93..fbfbaca 100644 --- a/custom/setup-autocompletion.el +++ b/custom/setup-autocompletion.el @@ -1,21 +1,7 @@ -(add-hook 'after-init-hook 'global-company-mode) - -;; Add irony as company-backend -(eval-after-load 'company - '(add-to-list 'company-backends 'company-irony)) - ;; Add irony as flycheck hook (eval-after-load 'flycheck '(add-hook 'flycheck-mode-hook 'flycheck-irony-setup)) -(add-hook 'irony-mode-hook 'irony-cdb-autosetup-compile-options) -(add-hook 'irony-mode-hook 'irony-eldoc) - -;; Add irony-, flycheck-, company-mode to c-mode -(add-hook 'c-mode-hook 'irony-mode) -(add-hook 'c-mode-hook 'flycheck-mode) -(add-hook 'c-mode-hook 'company-mode) - ;; Set tab to autocomplete or indent depending on context (global-set-key (kbd "") 'company-indent-or-complete-common) diff --git a/custom/setup-coding.el b/custom/setup-coding.el index def1407..d915503 100644 --- a/custom/setup-coding.el +++ b/custom/setup-coding.el @@ -1,35 +1,3 @@ -;; make angry face to get my attention -(setq prog-modes '(c++-mode python-mode erlang-mode java-mode c-mode emacs-lisp-mode scheme-mode prog-mode)) -(make-face 'font-lock-angry-face) -(modify-face 'font-lock-angry-face "Red" "Yellow" nil t nil t nil nil) - -;; Add keywords to recognize to angry face -(mapc (lambda (mode) - (font-lock-add-keywords - mode - '(("\\<\\(FIXME\\)" 1 'font-lock-angry-face t))) - ) - prog-modes) -(mapc (lambda (mode) - (font-lock-add-keywords - mode - '(("\\<\\(TODO\\)" 1 'font-lock-angry-face t))) - ) - prog-modes) - -;; default coding style -(setq c-default-style "linux") - -;; sane indentation offset -(setq c-basic-offset 4) - -;; Tab-space strategy -;; we use spaces, deal with it -(setq-default indent-tabs-mode nil) - -;; Enable subword mode for handling CamelCase format -(global-subword-mode t) - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Python ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -40,9 +8,4 @@ (add-hook 'elpy-mode-hook 'flycheck-mode) (add-hook 'elpy-mode-hook 'py-autopep8-enable-on-save) -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Magit (git) ;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(global-set-key (kbd "C-c m") 'magit-status) - (provide 'setup-coding) diff --git a/custom/setup-cursors.el b/custom/setup-cursors.el deleted file mode 100644 index d5a1aca..0000000 --- a/custom/setup-cursors.el +++ /dev/null @@ -1,10 +0,0 @@ -(require 'multiple-cursors) - -(global-set-key (kbd "C-x r a") 'mc/edit-lines) -(global-set-key (kbd "C-x r e") 'mc/edit-ends-of-lines) - -(global-set-key (kbd "C->") 'mc/mark-next-like-this) -(global-set-key (kbd "C-<") 'mc/mark-previous-like-this) -(global-set-key (kbd "C-c C->") 'mc/mark-all-like-this) - -(provide 'setup-cursors) diff --git a/custom/setup-dashboard.el b/custom/setup-dashboard.el deleted file mode 100644 index 6d1490a..0000000 --- a/custom/setup-dashboard.el +++ /dev/null @@ -1,17 +0,0 @@ -(require 'dashboard) - -(dashboard-setup-startup-hook) - -;; Set the startup message -(setq dashboard-banner-logo-title "") - -;; Set the banner -(setq dashboard-startup-banner 'logo) -(setq dashboard-items '((recents . 10) - (bookmarks . 5) - )) - -;; Enable recent files -(recentf-mode 1) - -(provide 'setup-dashboard) diff --git a/custom/setup-editing.el b/custom/setup-editing.el deleted file mode 100644 index fbddaab..0000000 --- a/custom/setup-editing.el +++ /dev/null @@ -1,134 +0,0 @@ -(setq global-mark-ring-max 5000 ; increase mark ring to contains 5000 entries - mark-ring-max 5000 ; increase kill ring to contains 5000 entries - mode-require-final-newline t ; add a newline to end of file - ) - -(setq kill-ring-max 5000 ; increase kill-ring capacity - kill-whole-line t ; if NIL, kill whole line and move the next line up - ) - -;; show column numbers -(setq column-number-mode 1) - -;; Remove scroll-bar, tool-bar and menu-bar -(scroll-bar-mode -1) -(tool-bar-mode -1) -(menu-bar-mode -1) - -;; set appearance of a tab that is represented by 4 spaces -(setq-default tab-width 4) - -;; automatically indent when press RET -(global-set-key (kbd "RET") 'newline-and-indent) - -;; Map query-replace-regexp to an easier key -(global-set-key (kbd "C-x r r") 'query-replace-regexp) - -;; Map query-replace-regexp to an easier key -(global-set-key (kbd "M-p") 'fill-paragraph) - -;; Delete trailing whitespace when saving file -(add-hook 'before-save-hook 'delete-trailing-whitespace) - -;; show whitespace in diff-mode -(add-hook 'diff-mode-hook (lambda () - (setq-local whitespace-style - '(face - tabs - tab-mark - spaces - space-mark - trailing - indentation::space - indentation::tab - newline - newline-mark)) - (whitespace-mode 1))) - -;; Package: undo-tree -- saner, imo, undo with C-/ -(require 'undo-tree) -(global-undo-tree-mode) - -;; Package: volatile-highlights --- show changes by "undo/yanks/..." -(require 'volatile-highlights) -(volatile-highlights-mode t) - -;;; Package: iedit --- Replace occurences of symbol and highlight them -(require 'iedit) - -;; Package: smartparens --- smart way to handle (), {}, ... -(require 'smartparens-config) -(setq sp-base-key-bindings 'paredit) -(setq sp-autoskip-closing-pair 'always) -(setq sp-hybrid-kill-entire-symbol nil) -(sp-use-paredit-bindings) - -(show-smartparens-global-mode +1) -(smartparens-global-mode 1) - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; keybinding management smartparens ;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; cl-package contains the loop macro -(require 'cl) - -(defmacro def-pairs (pairs) - `(progn - ,@(loop for (key . val) in pairs - collect - `(defun ,(read (concat - "wrap-with-" - (prin1-to-string key) - "s")) - (&optional arg) - (interactive "p") - (sp-wrap-with-pair ,val))))) - -(def-pairs ((paren . "(") - (bracket . "[") - (brace . "{") - (single-quote . "'") - (double-quote . "\"") - (underscore . "_") - (back-quote . "`"))) - -(define-key smartparens-mode-map (kbd "C-c (") 'wrap-with-parens) -(define-key smartparens-mode-map (kbd "C-c [") 'wrap-with-brackets) -(define-key smartparens-mode-map (kbd "C-c {") 'wrap-with-braces) -(define-key smartparens-mode-map (kbd "C-c '") 'wrap-with-single-quotes) -(define-key smartparens-mode-map (kbd "C-c \"") 'wrap-with-double-quotes) -(define-key smartparens-mode-map (kbd "C-c _") 'wrap-with-underscores) -(define-key smartparens-mode-map (kbd "C-c `") 'wrap-with-back-quotes) - -(define-key smartparens-mode-map (kbd "C-c s r") 'sp-rewrap-sexp) -(define-key smartparens-mode-map (kbd "C-c s u") 'sp-unwrap-sexp) - -(define-key smartparens-mode-map (kbd "C-M-f") 'sp-forward-sexp) -(define-key smartparens-mode-map (kbd "C-M-b") 'sp-backward-sexp) - -;; TODO: in manjaro this selects keyboard-layout or something -;;(define-key smartparens-mode-map (kbd "C-M-k") 'sp-kill-sexp) -(define-key smartparens-mode-map (kbd "C-M-w") 'sp-copy-sexp) - -(define-key smartparens-mode-map (kbd "C-M-n") 'sp-next-sexp) -(define-key smartparens-mode-map (kbd "C-M-p") 'sp-previous-sexp) - -;; TODO: for some reason this does not work -(define-key smartparens-mode-map (kbd "C-M-a") 'sp-beginning-of-sexp) -(define-key smartparens-mode-map (kbd "C-M-e") 'sp-end-of-sexp) - -(define-key smartparens-mode-map (kbd "C-M-h") 'mark-defun) - -(smartparens-global-mode t) - - -;; Package: comment-dwim-2 --- replacement for built-in comment-dwim, more comment features -(require 'comment-dwim-2) -(global-set-key (kbd "M-;") 'comment-dwim-2) - - -;; Package: yasnippet --- code template system -(require 'yasnippet) -(yas-global-mode 1) - -(provide 'setup-editing) diff --git a/custom/setup-expand-region.el b/custom/setup-expand-region.el deleted file mode 100644 index 1734ac0..0000000 --- a/custom/setup-expand-region.el +++ /dev/null @@ -1,7 +0,0 @@ -(require 'expand-region) - -(pending-delete-mode t) - -(global-set-key (kbd "C-=") 'er/expand-region) - -(provide 'setup-expand-region) diff --git a/custom/setup-gdb.el b/custom/setup-gdb.el deleted file mode 100644 index 4d40663..0000000 --- a/custom/setup-gdb.el +++ /dev/null @@ -1,36 +0,0 @@ -(setq gdb-many-windows 1) - -;; Select a register number which is unlikely to get used elsewere -(defconst egdbe-windows-config-register 313465989 - "Internal used") - -(defvar egdbe-windows-config nil) - -(defun set-egdbe-windows-config () - (interactive) - (setq egdbe-windows-config (window-configuration-to-register egdbe-windows-config-register))) - -(defun egdbe-restore-windows-config () - (interactive) - (jump-to-register egdbe-windows-config-register)) - -(defun egdbe-start-gdb (&optional gdb-args) - "" - (interactive) - (set-egdbe-windows-config) - (call-interactively 'gdb)) - -(defun egdbe-quit () - "finish." - (interactive) - (gud-basic-call "quit") - (egdbe-restore-windows-config)) - -(defun egdbe-gud-mode-hook () - "" - (local-unset-key (kbd "q")) - (local-set-key (kbd "q") 'egdbe-quit)) - -(add-hook 'gud-mode-hook 'egdbe-gud-mode-hook) - -(provide 'setup-gdb) diff --git a/custom/setup-general.el b/custom/setup-general.el deleted file mode 100644 index 221252c..0000000 --- a/custom/setup-general.el +++ /dev/null @@ -1,62 +0,0 @@ -(global-set-key [f9] 'start-kbd-macro) -(global-set-key [f10] 'end-kbd-macro) -(global-set-key [f11] 'call-last-kbd-macro) - -;; Package zygospore --- revert C-x 1 by pressing C-x 1 again -;; TODO: Doesn't work with sr-speedbar -(global-set-key (kbd "C-x 1") 'zygospore-toggle-delete-other-windows) - -;; Set 'M-g' to 'goto-line', it's faster and what we usually want -(global-set-key (kbd "M-g") 'goto-line) - -;; Set 'C-x r i' to 'string-insert-rectangle' -;; Easier than using 'M-x' and searching for it. -(global-set-key (kbd "C-x r i") 'string-insert-rectangle) - -;; set garbage collection to higher value -;; see http://bling.github.io/blog/2016/01/18/why-are-you-changing-gc-cons-threshold/ -(setq gc-cons-threshold 100000000) - -;; important yes-or-no questions can be answered with y-or-n -(defalias 'yes-or-no-p 'y-or-n-p) - -;; maximize Emacs at startup -(add-to-list 'default-frame-alist '(fullscreen . maximized)) - -;; Move one window back command -(global-set-key (kbd "\C-x p") 'previous-multiframe-window) - -;; Use C-x o to switch to other frame when using multi-monitor -(global-set-key (kbd "C-x o") 'next-multiframe-window) - -;; set my theme -(load-theme 'wombat) - -;; highlight line (hl-line) -(global-hl-line-mode 1) -(set-face-background hl-line-face "dark slate grey") - -;; smart mode line -(setq sml/no-confirm-load-theme t) -(setq sml/theme 'powerline) -(sml/setup) - -;; enable disabled commands -(put 'narrow-to-page 'disabled nil) -(put 'narrow-to-region 'disabled nil) - -;; quick function to kill all other buffers -(defun kill-other-buffers () - "Kill all other buffers." - (interactive) - (mapc 'kill-buffer - (delq (current-buffer) - (remove-if-not 'buffer-file-name (buffer-list))))) - -;; screw with vi(m)-users -(defconst wq "This is not vi! Use C-x C-c instead.") -(defconst w "This is not vi! Use C-x C-s instead.") -(defconst q! "This is EMACS not vi! Use C-x C-c instead.") -(defconst wq! "This is EMACS not vi! Use C-x C-c instead.") - -(provide 'setup-general) diff --git a/custom/setup-helm-gtags.el b/custom/setup-helm-gtags.el deleted file mode 100644 index 09b7e09..0000000 --- a/custom/setup-helm-gtags.el +++ /dev/null @@ -1,19 +0,0 @@ -(require 'helm-gtags) - -;; Enable helm-gtags-mode in languages that GNU Global supports -(add-hook 'c-mode-hook 'helm-gtags-mode) -(add-hook 'c++-mode-hook 'helm-gtags-mode) -(add-hook 'python-mode-hook 'helm-gtags-mode) -(add-hook 'java-mode-hook 'helm-gtags-mode) -(add-hook 'asm-mode-hook 'helm-gtags-mode) - -;; customize behaviour -(custom-set-variables - '(helm-gtags-auto-update t)) - -(global-set-key (kbd "M-.") 'helm-gtags-find-tag-from-here) -(global-set-key (kbd "M-,") 'helm-gtags-pop-stack) -(global-set-key (kbd "C-c C-f") 'helm-gtags-find-files) -(global-set-key (kbd "C-c g f") 'helm-gtags-parse-file) - -(provide 'setup-helm-gtags) diff --git a/custom/setup-helm.el b/custom/setup-helm.el deleted file mode 100644 index 1ed7612..0000000 --- a/custom/setup-helm.el +++ /dev/null @@ -1,50 +0,0 @@ -(require 'helm) -(require 'helm-config) - -;; replace vanilla commands with helm commands -(global-set-key (kbd "M-x") 'helm-M-x) -(global-set-key (kbd "M-y") 'helm-show-kill-ring) -(global-set-key (kbd "C-x b") 'helm-mini) -;; In vanilla, this is mapped to show-buffers, but I don't use that so map it to helm-mini as well -(global-set-key (kbd "C-x C-b") 'helm-mini) -(global-set-key (kbd "C-x C-f") 'helm-find-files) - -;; rebind tab to do persistent action -;; we use helm-execute-persistent-action more than helm-select-action (default for ) -(define-key helm-map (kbd "") 'helm-execute-persistent-action) -;; make TAB work in terminal -(define-key helm-map (kbd "C-i") 'helm-execute-persistent-action) -;; remap helm-select-action: lists actions -(define-key helm-map (kbd "C-z") 'helm-select-action) - -;; remap calculator -(global-set-key (kbd "C-c C-c") 'helm-calcul-expression) - -;; TODO: experiment with mark ring (breadcrumbs something?) -;; TODO: experiment with helm-regexp (build and test regexes) -;; TODO: remember helm-top (helm interface for top program) - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; PACKAGE: helm-swoop ;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Locate the helm-swoop folder to your path -(require 'helm-swoop) - -;; replace vanilla I-search with helm-swoop -(global-set-key (kbd "C-s") 'helm-swoop) - -;; From helm-swoop to helm-multi-swoop-all -;;(define-key helm-swoop-map (kbd "M-s") 'helm-multi-swoop-all-from-helm-swoop) -(define-key helm-swoop-map (kbd "C-s") 'helm-multi-swoop-all-from-helm-swoop) -;; TODO: find out how to switch from multi-swoop to swoop back again - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Next 2 lines make sure when using helm-swoop only the current window/buffer is affected ;; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; If this value is t, split window inside the current window -(setq helm-swoop-split-with-multiple-windows t) - -;; Split direcion. 'split-window-vertically or 'split-window-horizontally -(setq helm-swoop-split-direction 'split-window-vertically) - -(provide 'setup-helm) diff --git a/custom/setup-speedbar.el b/custom/setup-speedbar.el deleted file mode 100644 index e38ac8d..0000000 --- a/custom/setup-speedbar.el +++ /dev/null @@ -1,11 +0,0 @@ -;; Package: sr-speedbar -(require 'sr-speedbar) -;; (add-hook 'emacs-startup-hook (lambda () ; Open sr speedbar on startup -;; (sr-speedbar-open) -;; )) -(setq speedbar-show-unknown-files t) ; Enable speedbar to show all files -(setq speedbar-use-images nil) ; use text for buttons -(setq sr-speedbar-right-side nil) ; put on left side -(setq sr-speedbar-width 40) - -(provide 'setup-speedbar) diff --git a/custom/setup-windows.el b/custom/setup-windows.el deleted file mode 100644 index 695b1de..0000000 --- a/custom/setup-windows.el +++ /dev/null @@ -1,25 +0,0 @@ -;; Windows performance tweaks -;; -(when (boundp 'w32-pipe-read-delay) - (setq w32-pipe-read-delay 0)) -;; Set the buffer size to 64K on Windows (from the original 4K) -(when (boundp 'w32-pipe-buffer-size) - (setq irony-server-w32-pipe-buffer-size (* 64 1024))) - -;; Set pipe delay to 0 to reduce latency of irony -(setq w32-pipe-read-delay 0) - -;; From "setting up irony mode on Windows" : -;; Make sure the path to clang.dll is in emacs' exec_path and shell PATH. -(setenv "PATH" - (concat - "C:\\msys64\\usr\\bin" ";" - "C:\\msys64\\mingw64\\bin" ";" - (getenv "PATH") - ) -) -(setq exec-path (append '("c:/msys64/usr/bin" "c:/alt/msys64/mingw64/bin") - exec-path)) - - -(provide 'setup-windows) diff --git a/extra/sunrise-commander b/extra/sunrise-commander new file mode 160000 index 0000000..cf8305a --- /dev/null +++ b/extra/sunrise-commander @@ -0,0 +1 @@ +Subproject commit cf8305a149a321d028858057e7a7c92f0038a06a diff --git a/img/dash_logo.png b/img/dash_logo.png new file mode 100644 index 0000000..bd8c88b Binary files /dev/null and b/img/dash_logo.png differ diff --git a/init.el b/init.el index 876843e..dbbf211 100644 --- a/init.el +++ b/init.el @@ -1,152 +1,39 @@ - -;; add the custom dir to our load path -(add-to-list 'load-path "~/.emacs.d/custom") - -;; add melpa-stable to package-archives ;; IMPORTANT: add (require 'package), else package-archives is not declared (void-variable) (require 'package) + +(setq package-enable-at-startup nil) + +;; add melpa-stable to package-archives (add-to-list 'package-archives '("melpa-stable" . "https://stable.melpa.org/packages/") t) - (add-to-list 'package-archives - '("melpa" . "http://melpa.milkbox.net/packages/") t) + '("melpa" . "http://melpa.milkbox.net/packages/") t) ;; MUST be called after package-archives is updated -;; Else the automated installation logic is not able to install missing packages (package-initialize) -;; my required packages -(defconst my-packages - '( - undo-tree - volatile-highlights - smartparens - iedit - zygospore - comment-dwim-2 - yasnippet - yasnippet-snippets - sr-speedbar - company - irony - irony-eldoc - company-irony - flycheck-irony - elpy - py-autopep8 - magit - org - smart-mode-line - smart-mode-line-powerline-theme - helm - helm-gtags - helm-swoop - helm-company - dashboard - multiple-cursors - expand-region - )) +;;; Bootstrapping use-package +(unless (package-installed-p 'use-package) + (package-refresh-contents) + (package-install 'use-package)) -;; function to install new packages -(defun install-packages () - "Install all required packages." - (interactive) - (unless package-archive-contents - (package-refresh-contents)) - (dolist (package my-packages) - (unless (package-installed-p package) - (package-install package)))) - -;; install packages if not yet installed -(install-packages) - -;; setup general -(require 'setup-general) - -;; setup general editing settings -(require 'setup-editing) - -;; setup org -(require 'setup-org) - -;; setup coding -(require 'setup-coding) - -;; setup helm -(require 'setup-helm) -(require 'setup-helm-gtags) - -;; setup speedbar -(require 'setup-speedbar) - -;; setup autocompletion -(require 'setup-autocompletion) - -;; setup Windows if our bootloader is Windows -(if (eq system-type 'windows-nt) - (require 'setup-windows) -) - -;; setup dashboard -(require 'setup-dashboard) - -;; setup gdb -(require 'setup-gdb) - -;; setup multiple cursors -(require 'setup-cursors) - -;; setup expand-region -(require 'setup-expand-region) - -;; start emacs server -(server-start) +;;; This is the actual config file. It is omitted if it doesn't exist so emacs won't refuse to launch. +(when (file-readable-p "~/.emacs.d/config.org") +(org-babel-load-file (expand-file-name "~/.emacs.d/config.org"))) +(provide 'init) (custom-set-variables ;; custom-set-variables was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. - '(ansi-color-faces-vector - [default default default italic underline success warning error]) - '(ansi-color-names-vector - ["#757575" "#CD5542" "#4A8F30" "#7D7C21" "#4170B3" "#9B55C3" "#68A5E9" "gray43"]) - '(custom-safe-themes - (quote - ("84d2f9eeb3f82d619ca4bfffe5f157282f4779732f48a5ac1484d94d5ff5b279" "c74e83f8aa4c78a121b52146eadb792c9facc5b1f02c917e3dbb454fca931223" "3c83b3676d796422704082049fc38b6966bcad960f896669dfc21a7a37a748fa" "938d8c186c4cb9ec4a8d8bc159285e0d0f07bad46edf20aa469a89d0d2a586ea" "6de7c03d614033c0403657409313d5f01202361e35490a3404e33e46663c2596" "ed317c0a3387be628a48c4bbdb316b4fa645a414838149069210b66dd521733f" "1db337246ebc9c083be0d728f8d20913a0f46edc0a00277746ba411c149d7fe5" default))) - '(fci-rule-color "#2e2e2e") - '(global-company-mode t) + '(helm-gtags-auto-update t) '(package-selected-packages (quote - (ample-zen-theme ample-theme magit irony-eldoc elpy irony helm-swoop helm))) - '(vc-annotate-background "#3b3b3b") - '(vc-annotate-color-map - (quote - ((20 . "#dd5542") - (40 . "#CC5542") - (60 . "#fb8512") - (80 . "#baba36") - (100 . "#bdbc61") - (120 . "#7d7c61") - (140 . "#6abd50") - (160 . "#6aaf50") - (180 . "#6aa350") - (200 . "#6a9550") - (220 . "#6a8550") - (240 . "#6a7550") - (260 . "#9b55c3") - (280 . "#6CA0A3") - (300 . "#528fd1") - (320 . "#5180b3") - (340 . "#6380b3") - (360 . "#DC8CC3")))) - '(vc-annotate-very-old-color "#DC8CC3")) + (elpy linum-relative avy flycheck-irony irony-eldoc company-irony company-c-headers flycheck magit py-autopep8 multiple-cursors helm-gtags helm-swoop zygospore yasnippet volatile-highlights use-package undo-tree smartparens smart-mode-line monokai-theme iedit helm expand-region dashboard comment-dwim-2)))) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. ) - -(provide 'init) -;;; init.el ends here diff --git a/snippets/c-mode/fori b/plugins/yasnippet/c-mode/fori similarity index 61% rename from snippets/c-mode/fori rename to plugins/yasnippet/c-mode/fori index acb5879..63e65b0 100644 --- a/snippets/c-mode/fori +++ b/plugins/yasnippet/c-mode/fori @@ -2,8 +2,7 @@ # name: for with loop variable # key: fori # -- -int i = 0; -for (${1:i = 0}; ${2:i < N}; ${3:++i}) { +for (${1:int i = 0}; ${2:i < N}; ${3:++i}) { $0 } diff --git a/snippets/c-mode/oncekl b/plugins/yasnippet/c-mode/oncekl similarity index 100% rename from snippets/c-mode/oncekl rename to plugins/yasnippet/c-mode/oncekl