#+TITLE: Emacs configure #+AUTHOR: Tuan-Dat Tran #+DATE: <2018-01-11 Do> #+EMAIL: tran.tuan-dat@mailbox.org #+OPTIONS: ':nil *:t -:t ::t <:t H:3 \n:nil ^:t arch:headline #+OPTIONS: author:t c:nil creator:comment d:(not "LOGBOOK") date:t #+OPTIONS: e:t email:nil f:t inline:t num:t p:nil pri:nil stat:t #+OPTIONS: tags:t tasks:t tex:t timestamp:t toc:t todo:t |:t #+KEYWORDS: #+LANGUAGE: en #+SELECT_TAGS: export * Packages ** Package Archives Adding the melpa package repository to Emacs. #+BEGIN_SRC emacs-lisp (require 'package) (add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/")) (package-initialize) #+END_SRC ** Installed packages: - aggressive-indent - Minor mode to aggressively keep your code always indented - anaconda-mode - Code navigation, documentation lookup and completion for Python - auctex - Integrated environment for *TeX* - counsel - Various completion functions using Ivy - eclim - An interface to the Eclipse IDE. - flycheck - On-the-fly syntax checking - forest-blue-theme - Emacs theme with a dark background. - google-this - A set of functions and bindings to google under point. - ivy - Incremental Vertical completYon - material-theme - A Theme based on the colors of the Google Material Design - ox-twbs - Bootstrap compatible HTML Back-End for Org - rainbow-delimiters - Highlight brackets according to their depth - rainbow-mode - Colorize color names in buffers - smartparens - Automatic insertion, wrapping and paredit-like navigation with user defined pairs. - swiper - Isearch with an overview. Oh, man! - yasnippet - Yet another snippet extension for Emacs. #+BEGIN_SRC emacs-lisp (unless (package-installed-p 'use-package) (package-refresh-contents) (package-install 'use-package)) (require 'use-package) (setq use-package-always-ensure t) (use-package aggressive-indent) (use-package anaconda-mode) ;; (use-package auctex) throws error with use-package (use-package counsel) (use-package eclim) (use-package flycheck) (use-package google-this) (use-package ivy) (use-package material-theme) (use-package ox-twbs) (use-package rainbow-delimiters) (use-package rainbow-mode) (use-package smartparens) (use-package swiper) (use-package yasnippet) #+END_SRC * Themes Using the [[https://github.com/cpaulik/emacs-material-theme][Material]]-Theme. #+BEGIN_SRC emacs-lisp (load-theme 'material t) #+END_SRC Changes the Emacs background to the terminals defaults. (Generally) #+BEGIN_SRC emacs-lisp (add-hook 'window-setup-hook '(lambda () (set-face-background 'default "unspecified-bg"))) #+END_SRC * Functions ** Cut/Copy and Paste by Boruch Baum *** Copy Copy the marked area to the clipboard. #+BEGIN_SRC emacs-lisp (defun copy-to-xclipboard(arg) (interactive "P") (cond ((not (use-region-p)) (message "Nothing to yank to X-clipboard")) ((and (not (display-graphic-p)) (/= 0 (shell-command-on-region (region-beginning) (region-end) "xsel -i -b"))) (error "Is program `xsel' installed?")) (t (when (display-graphic-p) (call-interactively 'clipboard-kill-ring-save)) (message "Yanked region to X-clipboard") (deactivate-mark)))) #+END_SRC *** Cut Cut the marked area to the clipboard. #+BEGIN_SRC emacs-lisp (defun cut-to-xclipboard(arg) (interactive "P") (cond ((not (use-region-p)) (message "Nothing to yank to X-clipboard")) ((and (not (display-graphic-p)) (/= 0 (shell-command-on-region (region-beginning) (region-end) "xsel -i -b"))) (error "Is program `xsel' installed?")) (t (when (display-graphic-p) (call-interactively 'clipboard-kill-ring-save)) (message "Yanked region to X-clipboard") (kill-region (region-beginning) (region-end)) (deactivate-mark)))) #+END_SRC *** Paste Paste from the clipboard. #+BEGIN_SRC emacs-lisp (defun paste-from-xclipboard() "Uses shell command `xsel -o' to paste from x-clipboard. With one prefix arg, pastes from X-PRIMARY, and with two prefix args, pastes from X-SECONDARY." (interactive) (if (display-graphic-p) (clipboard-yank) (let* ((opt (prefix-numeric-value current-prefix-arg)) (opt (cond ((= 1 opt) "b") ((= 4 opt) "p") ((= 16 opt) "s")))) (insert (shell-command-to-string (concat "xsel -o -" opt)))))) #+END_SRC ** Personal functions Go back to indentation, if you are at the indentation, go to beginning of the line instead. #+BEGIN_SRC emacs-lisp (defun back-to-indentation-or-beginning () "Go back to indentation, if at indentation go to beginning of line" (interactive) (if (= (point) (progn (back-to-indentation) (point))) (beginning-of-line))) #+END_SRC Sets the background of Emacs in terminal-mode to the terminals. Doesn't change it in window mode tho. #+BEGIN_SRC emacs-lisp (defun transparent-terminal () (unless (display-graphic-p (selected-frame)) (set-face-background 'default "unspecified-bg" (selected-frame)))) #+END_SRC * Modes ** Window Modes #+BEGIN_SRC emacs-lisp (menu-bar-mode -1) #+END_SRC ** Python Using Anaconda-mode as default python development mode #+BEGIN_SRC emacs-lisp (add-hook 'python-mode-hook 'anaconda-mode) (add-hook 'python-mode-hook 'anaconda-eldoc-mode) #+END_SRC ** LaTeX Some default settings for LaTeX-Mode. AucTeX is needed. #+BEGIN_SRC emacs-lisp (require 'tex) (setq TeX-auto-save t) (setq TeX-parse-self t) (setq-default TeX-master nil) #+END_SRC ** Org Enable a Twitter Bootstrap mode as an export mode for Org-mode. #+BEGIN_SRC emacs-lisp (require 'ox-twbs) #+END_SRC Use Evince as default pdf viewer. #+BEGIN_SRC emacs-lisp (add-hook 'org-mode-hook '(lambda () (delete '("\\.pdf\\'" . default) org-file-apps) (add-to-list 'org-file-apps '("\\.pdf\\'" . "evince %s")))) #+END_SRC Activate Syntax Highlighting in Org-mode. #+BEGIN_SRC emacs-lisp (add-hook 'org-mode-hook '(lambda () (setq org-src-fontify-natively t))) #+END_SRC Add rainbow-delimiters in org-mode #+BEGIN_SRC emacs-lisp (add-hook 'org-mode-hook 'rainbow-delimiters-mode) #+END_SRC ** Ivy/Counsel/Swiper #+BEGIN_SRC emacs-lisp (counsel-mode 1) #+END_SRC ** Parenthesis #+BEGIN_SRC emacs-lisp (require 'paren) (setq show-paren-style 'parenthesis) (show-paren-mode +1) #+END_SRC ** Highlight line Globaly highlight the current line in a slightly darker shade of grey. #+BEGIN_SRC emacs-lisp (global-hl-line-mode 1) (set-face-background 'hl-line "#141b1e") (set-face-foreground 'highlight nil) #+END_SRC ** Yasnippet #+BEGIN_SRC emacs-lisp (require 'yasnippet) (setq yas-snippet-dirs '("~/.emacs.d/snippets/")) (yas-global-mode 1) #+END_SRC ** Personal mode #+BEGIN_SRC emacs-lisp (defvar my-keys-minor-mode-map (let ((map (make-sparse-keymap))) (define-key map (kbd "C-a") 'back-to-indentation-or-beginning) (define-key map (kbd "C-c M-w") 'copy-to-xclipboard) (define-key map (kbd "C-c C-w") 'cut-to-xclipboard) (define-key map (kbd "C-c M-y") 'paste-from-xclipboard) map) "my-keys-minor-mode keymap.") (define-minor-mode my-keys-minor-mode "A minor mode so that my key settings override annoying major modes." :init-value t :lighter " my-keys") (my-keys-minor-mode 1) #+END_SRC