dotfiles/emacs/.emacs.d/config.org

8.4 KiB

Emacs configure

Packages

A list of installed packages and details about them.

Package Archives

Adding the melpa package repository to Emacs.

(require 'package)
(add-to-list 'package-archives 
    '("melpa" . "http://melpa.org/packages/"))
(package-initialize)

Installed packages:

A require for all my installed packages, so that they are automatically installed in case I want to setup my emacs on another pc he same way as always

(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) is a dep
(use-package anaconda-mode)
(use-package auctex
:defer t
:ensure t)
(use-package auto-complete)
(use-package auto-complete-auctex
:defer t
:ensure t)
(use-package counsel)
(use-package eclim)
(use-package flycheck)
(use-package google-this)
(use-package ledger-mode)
(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) is a dep
(custom-set-variables
 '(package-selected-packages
   (quote
    (powerline ledger-mode smartparens rainbow-mode rainbow-delimiters ox-twbs material-theme google-this flycheck eclim counsel auto-complete-auctex auto-complete auctex anaconda-mode use-package)))
 '(truncate-lines t))

Themes

Using the Material-Theme.

(load-theme 'material t)

Changes the Emacs background to the terminals defaults. (Generally)

(add-hook 'window-setup-hook 
      '(lambda () 
         (set-face-background 'default "unspecified-bg")))

Emacs behavior

Save auto-save files in ~/.emacs-save

(f-mkdir "~/.emacs-saves")
(setq auto-save-file-name-transforms
  '((".*" "~/.emacs-saves/" t)))

Functions

All the functions I use.

Cut/Copy and Paste by Boruch Baum

A nice way to copy and paste contents comfortably inside and out of emacs.

Copy

Copy the marked area to the clipboard.

(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))))

Cut

Cut the marked area to the clipboard.

(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))))

Paste

Paste from the clipboard.

(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))))))

Personal functions

Go back to indentation, if you are at the indentation, go to beginning of the line instead.

  (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)))

Sets the background of Emacs in terminal-mode to the terminals. Doesn't change it in window mode though. Function is not currently used since I still have to figure out how to make it work with emacs in daemon mode

(defun transparent-terminal ()
  (unless (display-graphic-p (selected-frame))
    (set-face-background 'default "unspecified-bg" (selected-frame))))

Copy word

(defun copy-word (&optinal arg)
"Copy words at point into kill-ring"
(interactive "P")
(copy-thing 'backward-word 'forward-word arg)
)

Modes

Window Modes

(menu-bar-mode -1)

Autocomplete

(ac-config-default)

Python

Using Anaconda-mode as default python development mode

(add-hook 'python-mode-hook 'anaconda-mode)
(add-hook 'python-mode-hook 'anaconda-eldoc-mode)

LaTeX

Some default settings for LaTeX-Mode. AucTeX is needed.

(setq TeX-auto-save t)
(setq TeX-parse-self t)
(setq-default TeX-master nil)

Org

Enable a Twitter Bootstrap mode as an export mode for Org-mode.

;; (require 'ox-twbs)

Use Evince as default pdf viewer.

(add-hook 'org-mode-hook
      '(lambda ()
         (delete '("\\.pdf\\'" . default) org-file-apps)
         (add-to-list 'org-file-apps '("\\.pdf\\'" . "evince %s"))))

Enable syntax highlighting in Org-mode.

(add-hook 'org-mode-hook 
      '(lambda () 
         (setq org-src-fontify-natively t)))

Enable Enable automatic translation of special characters

(add-hook 'org-mode-hook 
      '(lambda ()
         (setq org-pretty-entities t)))

Add rainbow-delimiters in org-mode

(add-hook 'org-mode-hook 'rainbow-delimiters-mode)

Handy shortcuts

(define-key global-map "\C-ca" 'org-agenda)
(define-key global-map "\C-cl" 'org-store-link)
(setq org-log-done t)

Enabled languages:

(org-babel-do-load-languages
'org-babel-load-languages
'( (python . t)
   (sh . t)
   (emacs-lisp . t)
   (C . t)
 ))

Ivy/Counsel/Swiper

(counsel-mode 1)
(global-set-key "\C-s" 'swiper)

Parenthesis

;; (require 'paren)
(setq show-paren-style 'parenthesis)
(show-paren-mode 1)

Highlight line

Globaly highlight the current line in a slightly darker shade of grey.

(global-hl-line-mode 1)
(set-face-background 'hl-line "#141b1e")
(set-face-foreground 'highlight nil)

Yasnippet

;; (require 'yasnippet)
(setq yas-snippet-dirs
  '("~/.emacs.d/snippets/"))
(yas-global-mode 1)

Ledger

(custom-set-variables
'(ledger-reports
(quote
 (("balance" "%(binary) -f %(ledger-file) bal Brieftasche Girokonto")
  ("bal" "%(binary) -f %(ledger-file) bal")
  ("reg" "%(binary) -f %(ledger-file) reg")
  ("payee" "%(binary) -f %(ledger-file) reg @%(payee)")
  ("account" "%(binary) -f %(ledger-file) reg %(account)"))))
)

Personal

(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)
    (define-key map (kbd "C-c w") 'copy-word)
    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)

Conf

(add-hook 'conf-mode 'rainbow-mode)