Merge remote-tracking branch 'origin/config_as_org'
This commit is contained in:
commit
3122905578
21 changed files with 970 additions and 566 deletions
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
[submodule "extra/sunrise-commander"]
|
||||
path = extra/sunrise-commander
|
||||
url = https://github.com/escherdragon/sunrise-commander
|
||||
14
README.md
14
README.md
|
|
@ -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.
|
||||
1
README.org
Symbolic link
1
README.org
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
config.org
|
||||
949
config.org
Normal file
949
config.org
Normal file
|
|
@ -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-<next>/M-<prior>
|
||||
;; 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 <tab>)
|
||||
(define-key helm-map (kbd "<tab>") '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
|
||||
|
|
@ -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 "<tab>") 'company-indent-or-complete-common)
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
@ -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)
|
||||
|
|
@ -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)
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
(require 'expand-region)
|
||||
|
||||
(pending-delete-mode t)
|
||||
|
||||
(global-set-key (kbd "C-=") 'er/expand-region)
|
||||
|
||||
(provide 'setup-expand-region)
|
||||
|
|
@ -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)
|
||||
|
|
@ -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)
|
||||
|
|
@ -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)
|
||||
|
|
@ -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 <tab>)
|
||||
(define-key helm-map (kbd "<tab>") '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)
|
||||
|
|
@ -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)
|
||||
|
|
@ -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)
|
||||
1
extra/sunrise-commander
Submodule
1
extra/sunrise-commander
Submodule
|
|
@ -0,0 +1 @@
|
|||
Subproject commit cf8305a149a321d028858057e7a7c92f0038a06a
|
||||
BIN
img/dash_logo.png
Normal file
BIN
img/dash_logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 64 KiB |
143
init.el
143
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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue