You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

13 KiB

macros

definteractive

Wrappers around functions and lambdas so I don't have to type (interactive) all the damn time

  (defmacro definteractive (name &rest body)
    `(defun ,name ,(car body)
       (interactive)
       ,@(cdr body)))

  (defmacro lambdainteractive (&rest body)
    `(lambda ,(car body) (interactive) ,@(cdr body)))

local-keybind

Hide unecessary lambda when calling (local-set-key) for org-mode functions

  (defmacro local-keybind (key value)
    `(lambda () (local-set-key (kbd ,key) (quote ,value))))

org

edit/reload config.org

Saves config.org if it's open then reloads the file.

  (definteractive manx/config-reload ()
    (when (get-buffer "config.org")
	 (with-current-buffer "config.org" (save-buffer)))
    (org-babel-load-file (expand-file-name "~/.emacs.d/config.org")))

  (global-set-key (kbd "C-c x r") 'manx/config-reload)
  (global-set-key (kbd "C-c x e") (lambdainteractive ()(find-file "~/.emacs.d/config.org")))

misc

  (setq org-src-window-setup 'current-window)

  ;; I read somewhere that Company breaks things?
  (add-hook 'org-mode-hook 'company-mode)

Snippets

  (setq org-structure-template-alist
	(append
	 '(("el" "#+BEGIN_SRC emacs-lisp\n?\n#+END_SRC")
	   ("js" "#+BEGIN_SRC javascript\n?\n#+END_SRC"))
	 org-structure-template-alist))

html export

  (setq org-html-doctype "html5")

  (definteractive manx/save-org-to-html()
    (when (equal major-mode 'org-mode)
      (save-buffer)
      (org-html-export-to-html)))

  (add-hook 'org-mode-hook
	    (local-keybind "C-c s h" manx/save-org-to-html))

Links

  (definteractive manx/delete-org-link ()
    (if (org-in-regexp org-bracket-link-regexp 1)
	(apply 'delete-region (list (match-beginning 0) (match-end 0)))))

  (add-hook 'org-mode-hook (local-keybind "C-c o l" manx/delete-org-link))

Inline Images

  (setq org-image-actual-width 150)

  (definteractive manx/org-insert-link ()
    (org-insert-link)
    (org-redisplay-inline-images))

  (add-hook 'org-mode-hook (local-keybind "C-c C-l" manx/org-insert-link))

emacs gui

  (tool-bar-mode -1)
  (menu-bar-mode -1)
  (scroll-bar-mode -1)
  (line-number-mode 1)
  (column-number-mode 1)
  (display-battery-mode 1)

  (global-unset-key (kbd "C-z"))

functions

text

kill whole word

  (definteractive manx/kill-whole-word ()
    (backward-word)
    (kill-word 1))

  (global-set-key (kbd "C-c k w") 'manx/kill-whole-word)

kill whole line

  (definteractive manx/kill-whole-line()
    (move-beginning-of-line nil)
    (kill-whole-line))

  (global-set-key (kbd "C-c k l") 'manx/kill-whole-line)

revert buffer

  (global-set-key (kbd "C-c r b") 'revert-buffer)

Format whole file

  (definteractive manx/format-whole-buffer()
    (save-excursion
      (indent-region (point-min) (point-max) nil)))

  (global-set-key (kbd "s-i") 'manx/format-whole-buffer)

colour under cursor

  (defun what-face (pos)
    (interactive "d")
    (let ((face (or (get-char-property (pos) 'read-face-name)
		    (get-char-property (pos) 'face))))
      (if face (message "Face: %s" face) (message "No face at %d" pos))))

buffers

  (global-set-key (kbd "C-x k") (lambdainteractive () (kill-buffer (current-buffer))))
  (global-set-key (kbd "C-M-s-k") (lambdainteractive () (mapc 'kill-buffer (buffer-list))))

frames

transpose-frame

  ;; This is only used here for now but we should still more it some
  ;; time
  (add-to-list 'load-path "~/.emacs.d/scripts/")

  (require 'transpose-frame)
  (global-set-key (kbd "C-c f t") 'transpose-frame)
  (global-set-key (kbd "C-c f i") 'flip-frame)
  (global-set-key (kbd "C-c f o") 'flop-frame)

split and follow

  (defmacro manx/split-and-follow (direction)
    `(progn
       ,direction
      (balance-windows)
      (other-window 1)))

  (global-set-key (kbd "C-x 3") (lambdainteractive () (manx/split-and-follow (split-window-below))))
  (global-set-key (kbd "C-x 2") (lambdainteractive () (manx/split-and-follow (split-window-horizontally))))

use-package

  (setq use-package-always-ensure t
	use-package-verbose t)

keychain-environment

  (use-package keychain-environment
    :bind ("C-c r e" . 'keychain-refresh-environment))

exwm

  (use-package exwm
    :bind ("s-k" . 'exwm-workspace-delete)
    :config
    (require 'exwm-config)
    (require 'exwm-systemtray)
    (exwm-systemtray-enable))

nginx

  (use-package nginx-mode
    :custom
    (nginx-indent-tabs-mode t)
    (nginx-indent-level 2)
    :config (add-to-list 'auto-mode-alist '("/nginx/sites-\\(?:available\\|enabled\\)/" . nginx-mode)))

diminish

  (use-package diminish)

company

  (use-package company
    :diminish 'company-mode
    :bind (:map company-mode-map
		("C-c /" . 'yas-expand))
    :custom
    (company-idle-delay 0)
    (company-minimum-prefix-length 3)
    :init (add-hook 'after-init-hook 'global-company-mode))

omnisharp

  ;; (use-package csharp-mode
  ;;   :defer t)

  ;; (use-package omnisharp
  ;;   :defer t
  ;;   :init (add-hook 'csharp-mode-hook 'omnisharp-mode))

  ;; (eval-after-load 'company
  ;;   '(add-to-list 'company-backends 'company-omnisharp))

  ;; (add-hook 'csharp-mode #'company-mode)

spaceline

  (use-package spaceline
    :init
    (require 'spaceline-config)
    (setq powerline-default-seperator (quote arrow))
    (spaceline-spacemacs-theme)
    :config (spaceline-toggle-buffer-size-off))

dashboard

  (use-package dashboard
    :diminish (dashboard-mode page-break-lines-mode)
    :custom
    (dashboard-center-content t)
    (dashboard-banner-logo-title "Komacs")
    (dashboard-set-init-info t)
    (dashboard-startup-banner "~/.emacs.d/Komacs.png")
    (dashboard-show-shortcuts nil)
    (dashboard-items '((recents . 5)))
    :config (dashboard-setup-startup-hook))

  (setq initial-buffer-choice (lambda () (get-buffer "*dashboard*")))

slime

  (use-package slime
    :defer t
    :custom
    (slime-lisp-implementations
     '((sbcl ("sbcl" "--core" "/usr/lib64/sbcl/sbcl.core")
	     :env ("SBCL_HOME=/usr/lib64/sbcl/"))))
    :diminish 'slime-mode
    :init
    (use-package slime-company)
    (add-hook 'lisp-mode-hook 'slime-mode)
    (slime-setup '(slime-fancy slime-company)))

switch window

  (use-package switch-window
    :custom
    (switch-window-input-style 'minibuffer)
    (switch-window-increase 4)
    (switch-window-threshold 2)
    :bind ([remap other-window] . switch-window))

elixir

  (use-package elixir-mode
    :defer t
    :config (use-package alchemist))

minor modes

hungry delete

  (use-package hungry-delete
    :diminish 'hungry-delete-mode
    :config (global-hungry-delete-mode 1))2

which key

  (use-package which-key
    :diminish 'which-key-mode
    :config (which-key-mode))

avy

  (use-package avy
    :bind ("M-s" . avy-goto-char))

beacon

  (use-package beacon
    :diminish 'beacon-mode
    :config (beacon-mode 1))

popup kill ring

  (use-package popup-kill-ring
    :bind ("M-y" . popup-kill-ring))

yasnippet

  (use-package yasnippet
    :diminish 'yas-minor-mode
:bind
    :init
    (use-package yasnippet-snippets)
    (yas-reload-all))
enable for major modes
  (add-hook 'html-mode-hook 'yas-minor-mode)
  (add-hook 'LaTeX-mode-hook 'yas-minor-mode)
  (add-hook 'emacs-lisp-mode 'yas-minor-mode)

ido

  (setq ido-enable-flex-matching t
	ido-create-new-buffer 'always
	ido-everywhere 1)

  (use-package ido-vertical-mode
    :bind ("C-l" . 'ido-reread-directory)
    :custom
    (ido-vertical-define-keys 'C-n-and-C-p-only)
    :config
    (ido-vertical-mode 1)
    (ido-mode 1))

misc

unix line endings

  (defun unix-line-ends ()
    (let ((coding-str (symbol-name buffer-file-coding-system)))
      (when (string-match "-\\(?:dos\\|mac\\)$" coding-str)
        (set-buffer-file-coding-system 'unix))))

  (add-hook 'find-file-hooks 'unix-line-ends)

UTF8

  (setq locale-coding-system 'utf-8)
  (set-terminal-coding-system 'utf-8)
  (set-keyboard-coding-system 'utf-8)
  (set-selection-coding-system 'utf-8)
  (prefer-coding-system 'utf-8)
  (setq x-select-request-type '(UTF8_STRING COMPOUND_TEXT TEXT STRING))

terminal

Make bash implicit terminal

  (defvar my-term-shell "/bin/bash")
  (defadvice ansi-term (before force-bash)
    (interactive (list my-term-shell)))
  (ad-activate 'ansi-term)

  (global-set-key (kbd "<s-return>") 'ansi-term)

minor things

  (show-paren-mode 1)
  (electric-pair-mode t)
  (global-hl-line-mode t)
  (global-prettify-symbols-mode t)

  (defalias 'yes-or-no-p 'y-or-n-p)

  (setq scroll-conservatively 100
	x-select-enable-clipboard t
	vc-follow-symlinks t)

  (setq backup-directory-alist
	`(("." . ,(concat user-emacs-directory "autosaves"))))

docView auto reload

  (add-hook 'doc-view-mode-hook 'auto-revert-mode)

Indentation

  (setq tab-width 2
	indent-tabs-mode t)

  (defvaralias 'js-indent-level 'tab-width)
  (defvaralias 'css-indent-offset 'tab-width)

auto-minor-mode

auto-mode-alist but for minor modes.

For example, used with sensitive-mode to not create backups (path/to/file~) when creating yasnippets

  (defvar auto-minor-mode-alist ()
    "Alist of filename patterns vs correpsonding minor mode functions, see `auto-mode-alist'
  All elements of this alist are checked, meaning you can enable multiple minor modes for the same regexp.")

  (defun enable-minor-mode-based-on-extension ()
    "Check file name against `auto-minor-mode-alist' to enable minor modes
  the checking happens for all pairs in auto-minor-mode-alist"
    (when buffer-file-name
      (let ((name (file-name-sans-versions buffer-file-name))
	    (remote-id (file-remote-p buffer-file-name))
	    (case-fold-search auto-mode-case-fold)
	    (alist auto-minor-mode-alist))
	;; Remove remote file name identification.
	(when (and (stringp remote-id)
		   (string-match-p (regexp-quote remote-id) name))
	  (setq name (substring name (match-end 0))))
	(while (and alist (caar alist) (cdar alist))
	  (if (string-match-p (caar alist) name)
	      (funcall (cdar alist) 1))
	  (setq alist (cdr alist))))))

  (add-hook 'find-file-hook #'enable-minor-mode-based-on-extension)

sensitive-minor-mode

  (define-minor-mode sensitive-minor-mode
    "For sensitive files like password lists.
  It disables backup creation and auto saving.

  With no argument, this command toggles the mode.
  Non-null prefix argument turns on the mode.
  Null prefix argument turns off the mode."
    ;; The initial value.
    nil
    ;; The indicator for the mode line.
    " Sensitive"
    ;; The minor mode bindings.
    nil
    (if (symbol-value sensitive-minor-mode)
	(progn
	  ;; disable backups
	  (set (make-local-variable 'backup-inhibited) t) 
	  ;; disable auto-save
	  (if auto-save-default
	      (auto-save-mode -1)))
					  ;resort to default value of backup-inhibited
      (kill-local-variable 'backup-inhibited)
					  ;resort to default auto save setting
      (if auto-save-default
	  (auto-save-mode 1))))

  ;; Regexps of sensitive files.
  (setq auto-minor-mode-alist
	(append
	 '(("stream/manifest/.*\\.json$" . sensitive-minor-mode)
	   (".emacs.d/snippets/\\*$" . sensitive-minor-mode)
	   ("nginx/sites-(enabled|available)/*" . sensitive-minor-mode))
	 auto-minor-mode-alist))

Prettify symbols

  (add-hook 'emacs-lisp-mode-hook
	    (lambda ()
	      (push
	       '("lambdainteractive" . ) prettify-symbols-alist)))

Email

  (load "~/.emacs.d/email.el")