STUDY
Emacs Configuration File 본문
Emacs 를 설치하면서 해야 할 일들
* Emacs 를 C 드라이브에 설치하지 말고, D 드라이브나 USB 등의 저장 매체에 설치할 것. 그래야 C 드라이브를 포맷하고 복원할 때 다시 Emacs 를 설치하고 설정 파일을 조정하는 지겨운 작업을 피할 수 있다. 그게 아니면 Docker image 로 Docker Hub 에 올려놓거나, Dockerfile 을 만들어 클라우드에 저장시켜 놓는 방법도 있다.
* 어느 PC 에서도 간단한 경로 설정만으로 똑같은 Emacs 가 되도록 configuration 파일 만들어 놓을 것. Reproducible 하다고 표현되는 개념. (Linux 라면 그래도 어느 정도 편하게 설치를 반복할 수는 있지만, Windows 운영 체제에서는 이렇게 제대로 된 설정 파일("~/.emacs" 혹은 "~/init.el")을 만들어 놓으면 대단히 편하다.
* 특히 Org-mode 설정에 신경쓸 것. Org-mode 는 새로운 버전이 있으면 package list 에서 다운로드하여 설치해놓을 것. 그리고 좋아하는 프로그램 언어 중에 Emacs 가 IDE 여야만 하는 것들은 설정 파일에 추가해놓을 것.
* 다른 사람들의 설정은 어떤지 주기적으로 살펴볼 것. 대표적인 Emacs 덕후는 필리핀의 Sacha Chua. 이 여성의 사이트는 놀라울 정도.
D:/util/emacs/.emacs 파일 내용
;; ============================================================================
;; Automatically created settings
;; ============================================================================
(custom-set-variables)
;; This is default - automatically generated by Eamcs
;; (custom-set-faces
;; '(default ((nil (:family "Ubuntu mono"
;; :foundry "outline"
;; :slant normal
;; :weight normal
;; :height 140
;; :width normal)))))
(set-face-attribute 'default nil :family "Ubuntu mono" :height 140)
(set-fontset-font nil 'hangul (font-spec :family "Malgun Gothic" :pixelsize 10))
;; ============================================================================
;; Performance
;; ============================================================================
;; The default is 800 kilobytes. Measured in bytes.
(setq gc-cons-threshold (* 50 1000 1000))
;; Profile emacs startup
(add-hook 'emacs-startup-hook
(lambda ()
(message "*** Emacs loaded in %s with %d garbage collections."
(format "%.2f seconds"
(float-time
(time-subtract after-init-time before-init-time)))
gcs-done)))
;; ============================================================================
;; Package Sources
;; ============================================================================
;; package source
(require 'package)
(setq package-archives '(("melpa" . "https://melpa.org/packages/")
("melpa-stable" . "https://stable.melpa.org/packages/")
("org" . "https://orgmode.org/elpa/")
("elpa" . "https://elpa.gnu.org/packages/")))
(package-initialize)
;; ============================================================================
;; Updating Packages
;; ============================================================================
;; ------------------------
;; use-package - more convenient package manager
;; ------------------------
(when (not (package-installed-p 'use-package))
(package-refresh-contents)
(package-install 'use-package))
(use-package use-package-hydra
:ensure t)
;; ------------------------
;; install package automatically if not already present on your system
;; ------------------------
(require 'use-package-ensure)
(setq use-package-always-ensure t)
;; ------------------------
;; keep your packages updated automatically
;; ------------------------
;; commented to maintain org 9.4 version
(use-package auto-package-update
:ensure t
:config
(setq auto-package-update-delete-old-versions t
auto-package-update-interval 4)
(auto-package-update-maybe))
;; ============================================================================
;; my custom settings
;; ============================================================================
;; ------------------------
;; emacs frames
;; ------------------------
(menu-bar-mode -1) ;; hide menu bar
(tool-bar-mode -1) ;; hide tool bar
(scroll-bar-mode -1) ;; hide scroll bar
(setq inhibit-startup-screen t) ;; skibp welcome screen
;; (add-hook 'emacs-startup-hook 'toggle-frame-maximized)
;; (when window-system (set-frame-position (selected-frame) 960 0))
;; (add-to-list 'default-frame-alist '(height . 50))
;; (add-to-list 'default-frame-alist '(width . 100))
(setq frame-resize-pixelwise t)
(set-frame-position (selected-frame) 960 0)
(set-frame-size (selected-frame) 930 1000 t)
;; ------------------------
;; disable CJK coding/encoding (Chinese/Japanese/Korean characters)
;; ------------------------
(setq utf-translate-cjk-mode nil)
(set-language-environment 'utf-8)
(setq locale-coding-system 'utf-8)
;; set the default encoding system
(prefer-coding-system 'utf-8)
(setq default-file-name-coding-system 'utf-8)
(set-default-coding-systems 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
;; Treat clipboard input as UTF-8 string first; compound text next, etc.
(setq x-select-request-type '(UTF8_STRING COMPOUND_TEXT TEXT STRING))
(setenv "LC_CTYPE" "UTF-8")
;; ------------------------
;; indentation, line number
;; ------------------------
(setq tab-width 2 indent-tabs-mode nil) ;; disable tab indentation
(global-linum-mode 1) ;; line number
(setq-default column-number-mode t) ;; column number
(electric-indent-mode -1) ;; indent
;; ------------------------
;; Cursor
;; ------------------------
(set-default 'cursor-type '(bar . 5))
(blink-cursor-mode 1)
(set-cursor-color "#fdff00")
;; ------------------------
;; disable backup, auto-save, auto-custom
;; ------------------------
(setq make-backup-files nil) ;; disable auto-backup
(setq auto-save-default nil) ;; disable autosave
(setq custom-file (make-temp-file "emacs-custom"))
;; ------------------------
;; parenthesis paring, line height
;; ------------------------
(show-paren-mode t) ;; parenthesis
(setq show-paren-delay 0)
(setq-default line-spacing 0.2) ;; line space
;; ------------------------
;; display time, locale
;; ------------------------
(display-time) ;; display time
(setq system-time-locale "C") ;; time format English
;; ------------------------
;; Yes-or-No, move focus between windows
;; ------------------------
(defalias 'yes-or-no-p 'y-or-n-p) ;; yes-or-no -> y-or-n
(windmove-default-keybindings) ;; Let me switch windows with shift-arrows instead of "C-x o" all the time
;; ------------------------
;; syntax highlighting
;; ------------------------
(global-font-lock-mode 1) ;; syntax highlighting
(tooltip-mode 1) ;; tool tip mode on
;; key setting
(global-set-key [f12] 'shell)
(global-set-key (kbd "<escape>") 'keyboard-escape-quit)
(global-set-key (kbd "C-z") 'undo) ;Emacs default is bound to hide Emacs.
;; ============================================================================
;; PKG: Programming
;; ============================================================================
;; ┌───────────────────────────────────────────┐
;; | Haskell Programming |
;; └───────────────────────────────────────────┘
;; ------------------------
;; haskell-mode
;; ------------------------
(use-package haskell-mode
:ensure t
:mode
(("\\.hs\\'" . haskell-mode)
("\\.cabal\\'" . haskell-cabal-mode)
("\\.hcr\\'" . haskell-core-mode))
:hook
(haskell-mode . lsp)
(haskell-mode . structured-haskell-mode)
(haskell-mode . interactive-haskell-mode)
:custom
(haskell-process-type 'stack-ghci)
:config
(setq tab-width 2))
;; ------------------------
;; lsp-haskell
;; ------------------------
(use-package lsp-haskell
:hook
((haskell-mode . lsp))
:custom
(lsp-haskell-process-path-hie "ghcide")
(lsp-haskell-process-args-hie '())
(lsp-log-io t))
;; ------------------------
;; company mode
;; ------------------------
(use-package company
:ensure t
:init
(add-hook 'after-init-hook 'global-company-mode)
:config
(setq company-idle-delay 0)
(setq company-show-numbers "on"))
;; ------------------------
;; company-ghci mode
;; ------------------------
(use-package company-ghci
:ensure t
:after (pos-tip)
:config
(defun show-hoogle-info-in-popup ()
(pos-tip-show (company-ghci/hoogle-info (symbol-at-point)) nil nil nil -1))
(defun company-ghci-setup ()
(push 'company-ghci company-backends)
(define-key evil-normal-state-map (kbd "C-;") (lambda () (interactive) (show-hoogle-info-in-popup))))
:hook
(haskell-interactive-mode . company-mode)
(haskell-mode . company-ghci-setup))
;; ┌───────────────────────────────────────────┐
;; | Emacs Lisp |
;; └───────────────────────────────────────────┘
;; ┌───────────────────────────────────────────┐
;; | Common Lisp |
;; └───────────────────────────────────────────┘
(use-package slime
:ensure t
:defer t
:init
(setq inferior-lisp-program "clisp")
:config
(slime-setup '(slime-fancy slime-company))
:hook
(slime-mode . slime-company)
(slime-mode . (lambda ()
(load (expand-file-name "C:/Users/k/quicklisp/slime-helper.el"))
(add-to-list 'slime-contribs 'slime-fancy)
(add-to-list 'slime-contribs 'inferior-slime))))
(use-package slime-company
:after slime
:bind-keymap
("C-n" . company-select-next)
("C-p" . company-select-previous)
("C-d" . company-show-doc-buffer)
("M-." . company-show-location)
:config (setq slime-company-completion 'fuzzy
slime-company-after-completion 'slime-company-just-one-space))
;; ┌───────────────────────────────────────────┐
;; | Python |
;; └───────────────────────────────────────────┘
(use-package elpy
:ensure t
:mode ("\\.py\\'" . python-mode)
:init
(elpy-enable))
;; ============================================================================
;; PKG - Prettifying Emacs
;; ============================================================================
;; ------------------------
;; Dashboard
;; ------------------------
(use-package dashboard
:ensure t
:config
(setq dashboard-items '((recents . 5)
(bookmarks . 5)
(projects . 5)
(agenda . 5)
(registers . 5)))
(dashboard-setup-startup-hook)
(setq dashboard-set-navigator t)
(setq dashboard-center-content t))
;; ------------------------
;; smart-mode-line
;; ------------------------
(use-package smart-mode-line
:config
(setq sml/no-confirm-load-theme t
sml/theme 'dark)
(sml/setup))
;; ------------------------
;; hl-line
;; ------------------------
(use-package hl-line
;; visible current line
:disabled
:ensure t
:diminish global-hl-line-mode
:config (global-hl-line-mode))
;; ------------------------
;; highlight-parentheses
;; ------------------------
(use-package highlight-parentheses
:ensure t
:diminish highlight-parentheses-mode
:commands highlight-parentheses-mode)
;; ------------------------
;; highlight multiple occurences
;; ------------------------
(use-package highlight-symbol
:ensure t
:config
(set-face-attribute 'highlight-symbol-face nil
:background "default"
:foreground "#33FF5D")
(setq highlight-symbol-idle-delay 0)
(setq highlight-symbol-on-navigation-p t)
:hook
(prog-mode . highlight-symbol-mode)
(prog-mode . highlight-symbol-nav-mode))
;; ------------------------
;; Highlight-Indentation-for-Emacs
;; ------------------------
(use-package highlight-indentation
:ensure t)
;; ------------------------
;; color scheme - gruvbox theme
;; ------------------------
(use-package gruvbox-theme
:ensure t
:config
(load-theme 'gruvbox-dark-hard t))
;; ------------------------
;; nyan cat mode
;; ------------------------
(use-package nyan-mode
:config
(nyan-mode 1))
;; ------------------------
;; htmlize - syntax highlight for HTML export
;; ------------------------
(use-package htmlize
:ensure t)
;; ------------------------
;; powerline
;; ------------------------
(use-package powerline
:ensure t
:config
(powerline-default-theme))
;; ------------------------
;; rainbow-delimiters
;; ------------------------
(use-package rainbow-delimiters
:ensure t)
;; ------------------------
;; rainbow-blocks
;; ------------------------
(use-package rainbow-blocks
:ensure t)
;; ------------------------
;; hl-todo
;; ------------------------
(use-package hl-todo
:ensure t
:config
(setq hl-todo-keyword-faces
'(("TODO" . "#FF0000")
("FIXME" . "#FF0000")
("DEBUG" . "#A020F0")
("GOTCHA" . "#FF4500")
("STUB" . "#1E90FF"))))
;; ============================================================================
;; PKG: Project Management
;; ============================================================================
;; ------------------------
;; projectile
;; ------------------------
(use-package projectile
:diminish projectile-mode
:ensure t
:config (projectile-mode)
:bind-keymap
("C-c p" . projectile-command-map)
:init
(when (file-directory-p "C:/Users/k/Documents/emacs_practice")
(setq projectile-project-search-path '("C:/Users/k/Documents/emacs_practice")))
(setq projectile-switch-project-action #'projectile-dired))
(use-package helm-projectile
:ensure t
:bind ("M-t" . helm-projectile-find-file)
:config
(helm-projectile-on))
(defun sr-open-file ()
"Open file using projectile+Helm or ido"
(interactive)
(if (projectile-project-p)
(helm-projectile)
(ido-find-file)))
(global-set-key (kbd "M-o") 'sr-open-file)
;; ------------------------
;; org-projectile
;; ------------------------
(use-package org-projectile
:disabled
:bind (("C-c n p" . org-projectile-project-todo-completing-read)
("C-c c" . org-capture))
:config
(progn
(setq org-directory "C:/Users/k/Documents/emacs_practice/")
;; (setq org-agenda-files (list org-directory))
(setq org-projectile-projects-file
"C:/Users/k/Documents/emacs_practice/projects.org")
(setq org-agenda-files (append org-agenda-files (org-projectile-todo-files)))
(push (org-projectile-project-todo-entry) org-capture-templates))
:ensure t)
;; ============================================================================
;; PKG: File Navigation, Mini-buffer Command, Help
;; ============================================================================
;; ------------------------
;; ibuffer
;; ------------------------
(use-package ibuffer
:after hydra
:bind
;; global key map
("C-x C-b" . ibuffer)
;; ibuffer-mode key-map
(:map ibuffer-mode-map ("." . hydra-ibuffer-main/body))
:hydra
(hydra-ibuffer-main (:color pink :hint nil)
"
^Navigation^ ^Mark^ ^Actions^ ^View^
--------------------------------------------------------------------
_k_ : move up _m_: mark _D_: delete _g_: refresh
_RET_: visit _u_: unmark _S_: save _s_: sort
_j_ : move down _*_: specific _a_: all actions _/_: filter
--------------------------------------------------------------------
"
("j" ibuffer-forward-line)
("RET" ibuffer-visit-buffer :color blue)
("k" ibuffer-backward-line)
("m" ibuffer-mark-forward)
("u" ibuffer-unmark-forward)
("*" hydra-ibuffer-mark/body :color blue)
("D" ibuffer-do-delete)
("S" ibuffer-do-save)
("a" hydra-ibuffer-action/body :color blue)
("g" ibuffer-update)
("s" hydra-ibuffer-sort/body :color blue)
("/" hydra-ibuffer-filter/body :color blue)
("o" ibuffer-visit-buffer-other-window "other window" :color blue)
("q" quit-window "quit ibuffer" :color blue)
("." nil "toggle hydra" :color blue))
(hydra-ibuffer-mark (:color teal :columns 5
:after-exit (hydra-ibuffer-main/body))
"Mark"
("*" ibuffer-unmark-all "unmark all")
("M" ibuffer-mark-by-mode "mode")
("m" ibuffer-mark-modified-buffers "modified")
("u" ibuffer-mark-unsaved-buffers "unsaved")
("s" ibuffer-mark-special-buffers "special")
("r" ibuffer-mark-read-only-buffers "read-only")
("/" ibuffer-mark-dired-buffers "dired")
("e" ibuffer-mark-dissociated-buffers "dissociated")
("h" ibuffer-mark-help-buffers "help")
("z" ibuffer-mark-compressed-file-buffers "compressed")
("b" hydra-ibuffer-main/body "back" :color blue))
(hydra-ibuffer-action (:color teal :columns 4
:after-exit
(if (eq major-mode 'ibuffer-mode)
(hydra-ibuffer-main/body)))
"Action"
("A" ibuffer-do-view "view")
("E" ibuffer-do-eval "eval")
("F" ibuffer-do-shell-command-file "shell-command-file")
("I" ibuffer-do-query-replace-regexp "query-replace-regexp")
("H" ibuffer-do-view-other-frame "view-other-frame")
("N" ibuffer-do-shell-command-pipe-replace "shell-cmd-pipe-replace")
("M" ibuffer-do-toggle-modified "toggle-modified")
("O" ibuffer-do-occur "occur")
("P" ibuffer-do-print "print")
("Q" ibuffer-do-query-replace "query-replace")
("R" ibuffer-do-rename-uniquely "rename-uniquely")
("T" ibuffer-do-toggle-read-only "toggle-read-only")
("U" ibuffer-do-replace-regexp "replace-regexp")
("V" ibuffer-do-revert "revert")
("W" ibuffer-do-view-and-eval "view-and-eval")
("X" ibuffer-do-shell-command-pipe "shell-command-pipe")
("b" nil "back"))
(hydra-ibuffer-sort (:color amaranth :columns 3)
"Sort"
("i" ibuffer-invert-sorting "invert")
("a" ibuffer-do-sort-by-alphabetic "alphabetic")
("v" ibuffer-do-sort-by-recency "recently used")
("s" ibuffer-do-sort-by-size "size")
("f" ibuffer-do-sort-by-filename/process "filename")
("m" ibuffer-do-sort-by-major-mode "mode")
("b" hydra-ibuffer-main/body "back" :color blue))
(hydra-ibuffer-filter (:color amaranth :columns 4)
"Filter"
("m" ibuffer-filter-by-used-mode "mode")
("M" ibuffer-filter-by-derived-mode "derived mode")
("n" ibuffer-filter-by-name "name")
("c" ibuffer-filter-by-content "content")
("e" ibuffer-filter-by-predicate "predicate")
("f" ibuffer-filter-by-filename "filename")
(">" ibuffer-filter-by-size-gt "size")
("<" ibuffer-filter-by-size-lt "size")
("/" ibuffer-filter-disable "disable")
("b" hydra-ibuffer-main/body "back" :color blue))
)
;; ------------------------
;; buffler
;; ------------------------
;; ------------------------
;; restart-emacs
;; ------------------------
(use-package restart-emacs
:ensure t)
;; ------------------------
;; ido
;; ------------------------
(use-package ido-vertical-mode
:init (ido-vertical-mode 1)
:config
;; make buffer switch command do suggestions, also for find-file command
(require 'ido)
(ido-mode 1)
(ido-everywhere 1)
;; show choices vertically
(if (version< emacs-version "25")
(progn
(make-local-variable 'ido-separator)
(setq ido-separator "\n"))
(progn
(make-local-variable 'ido-decorations)
(setf (nth 2 ido-decorations) "\n")))
;; ido everywhere
(setq ido-everywhere t)
;; show any name that has the chars you typed
(setq ido-enable-flex-matching t)
;; use current pane for newly opened file
(setq ido-default-file-method 'selected-window)
;; use current pane for newly switched buffer
(setq ido-default-buffer-method 'selected-window)
;; stop ido from suggesting when naming new file
(define-key (cdr ido-minor-mode-map-entry) [remap write-file] nil))
;; ------------------------
;; company-quickhelp
;; ------------------------
(use-package company-quickhelp ; Documentation popups for Company
:ensure t
:defer t
:init (add-hook 'global-company-mode-hook #'company-quickhelp-mode))
;; ------------------------
;; helpful
;; ------------------------
(use-package helpful
:ensure t
:bind
(("C-h f" . helpful-callable)
("C-h v" . helpful-variable)
("C-h k" . helpful-key)))
;; ------------------------
;; ivy - counsel - swiper
;; ------------------------
;; ------------------------
;; smex
;; ------------------------
(use-package smex
:ensure t
:config
:bind
(("M-x" . smex)
("M-X" . smex-major-mode-commands)
("C-c C-c M-x" . execute-extended-command)))
;; ------------------------
;; treemacs
;; ------------------------
(use-package treemacs
:disabled
:ensure t
:defer t
:init
(with-eval-after-load 'winum
(define-key winum-keymap (kbd "M-0") #'treemacs-select-window))
:config
(progn
(setq treemacs-collapse-dirs (if treemacs-python-executable 3 0)
treemacs-deferred-git-apply-delay 0.5
treemacs-directory-name-transformer #'identity
treemacs-display-in-side-window t
treemacs-eldoc-display t
treemacs-file-event-delay 5000
treemacs-file-extension-regex treemacs-last-period-regex-value
treemacs-file-follow-delay 0.2
treemacs-file-name-transformer #'identity
treemacs-follow-after-init t
treemacs-git-command-pipe ""
treemacs-goto-tag-strategy 'refetch-index
treemacs-indentation 2
treemacs-indentation-string " "
treemacs-is-never-other-window nil
treemacs-max-git-entries 5000
treemacs-missing-project-action 'ask
treemacs-move-forward-on-expand nil
treemacs-no-png-images nil
treemacs-no-delete-other-windows t
treemacs-project-follow-cleanup nil
treemacs-persist-file (expand-file-name ".cache/treemacs-persist" user-emacs-directory)
treemacs-position 'left
treemacs-recenter-distance 0.1
treemacs-recenter-after-file-follow nil
treemacs-recenter-after-tag-follow nil
treemacs-recenter-after-project-jump 'always
treemacs-recenter-after-project-expand 'on-distance
treemacs-show-cursor nil
treemacs-show-hidden-files t
treemacs-silent-filewatch nil
treemacs-silent-refresh nil
treemacs-sorting 'alphabetic-asc
treemacs-space-between-root-nodes t
treemacs-tag-follow-cleanup t
treemacs-tag-follow-delay 1.5
treemacs-user-mode-line-format nil
treemacs-user-header-line-format nil
treemacs-width 35
treemacs-workspace-switch-cleanup nil)
;; The default width and height of the icons is 22 pixels. If you are
;; using a Hi-DPI display, uncomment this to double the icon size.
;;(treemacs-resize-icons 22)
(treemacs-follow-mode t)
(treemacs-filewatch-mode t)
(treemacs-fringe-indicator-mode t)
(pcase (cons (not (null (executable-find "git")))
(not (null treemacs-python-executable)))
(`(t . t)
(treemacs-git-mode 'deferred))
(`(t . _)
(treemacs-git-mode 'simple))))
:bind
(:map global-map
("M-0" . treemacs-select-window)
("C-x t 1" . treemacs-delete-other-windows)
("C-x t t" . treemacs)
("C-x t B" . treemacs-bookmark)
("C-x t C-t" . treemacs-find-file)
("C-x t M-t" . treemacs-find-tag)))
(use-package lsp-treemacs
:after treemacs
:config
(lsp-treemacs-sync-mode 1))
;; ------------------------
;; hydra
;; ------------------------
(use-package hydra
:after ibuffer
:init
;; hydra for buffer menu
(defhydra hydra-buffer-menu (:color pink :hint nil)
"
^Mark^ ^Unmark^ ^Actions^ ^Search
^^^^^^^^-----------------------------------------------------------------
_m_: mark _u_: unmark _x_: execute _R_: re-isearch
_s_: save _U_: unmark up _b_: bury _I_: isearch
_d_: delete ^ ^ _g_: refresh _O_: multi-occur
_D_: delete up ^ ^ _T_: files only: % -28`Buffer-menu-files-only
_~_: modified
"
("m" Buffer-menu-mark)
("u" Buffer-menu-unmark)
("U" Buffer-menu-backup-unmark)
("d" Buffer-menu-delete)
("D" Buffer-menu-delete-backwards)
("s" Buffer-menu-save)
("~" Buffer-menu-not-modified)
("x" Buffer-menu-execute)
("b" Buffer-menu-bury)
("g" revert-buffer)
("T" Buffer-menu-toggle-files-only)
("O" Buffer-menu-multi-occur :color blue)
("I" Buffer-menu-isearch-buffers :color blue)
("R" Buffer-menu-isearch-buffers-regexp :color blue)
("c" nil "cancel")
("v" Buffer-menu-select "select" :color blue)
("o" Buffer-menu-other-window "other-window" :color blue)
("q" quit-window "quit" :color blue))
(define-key Buffer-menu-mode-map "." 'hydra-buffer-menu/body))
;; ============================================================================
;; PKG - Editting
;; ============================================================================
;; ------------------------
;; autocomplete
;; ------------------------
(use-package auto-complete
:disabled
:ensure t
:diminish auto-complete-mode
:config
(require 'auto-complete-config)
(ac-config-default))
;; ------------------------
;; multiple-cursors - Sublime Text like selection
;; ------------------------
(use-package multiple-cursors
:ensure t
:defer t
:bind (("C-S-c C-S-c" . mc/edit-lines)
("C->" . mc/mark-next-like-this)
("C-<" . mc/mark-previous-like-this)
("C-c C-<" . mc/mark-all-like-this)
("C-c o" . mc/mark-all-like-this)))
;; ------------------------
;; mark-multiple
;; ------------------------
(use-package mark-multiple
:disabled
:ensure t
:bind
("C-x r t" . inline-string-rectangle)
("C-<" . mark-previous-like-this)
("C->" . mark-next-like-this)
("C-*" . mark-all-like-this)
:hook
(sgml-mode-hook . (lambda ()
(require 'rename-sgml-tag)
(define-key sgml-mode-map (kbd "C-c C-r") 'rename-sgml-tag))))
;; ------------------------
;; keypression: display pressed
;; ------------------------
(use-package keypression
:disabled
:ensure t)
;; ------------------------
;; keypression: display pressed
;; ------------------------
(use-package paredit
:ensure t
:diminish paredit-mode
:init
(use-package paredit-everywhere
:ensure t))
;; ============================================================================
;; Org-mode
;; ============================================================================
;; ------------------------
;; org-mode config
;; ------------------------
(use-package org
;; ------------------------------
:mode (("\\.org$" . org-mode))
;; ------------------------------
:bind
("C-c a" . org-agenda)
("C-c c" . org-capture)
("C-c l" . org-store-link)
("C-c b" . org-iswitchb)
;; ------------------------------
:hook
(org-mode . (lambda () (org-bullets-mode 1))) ;; bullet mode on
(org-src-mode . display-line-numbers-mode) ;; show line numbers in current buffer
(org-mode . visual-line-mode) ;; word wrap
(org-mode . (lambda () (electric-indent-local-mode -1)))
;; ------------------------------
:custom-face
(org-document-title ((t (:inherit outline-1 :weight bold :height 2.0))))
(org-level-1 ((t (:inherit outline-1 :weight bold :height 1.2))))
(org-level-2 ((t (:inherit outline-2 :weight bold :height 1.1))))
(org-level-3 ((t (:inherit outline-3 :weight bold :height 1.0))))
(org-level-4 ((t (:inherit outline-4 :weight bold :height 1.0))))
(org-level-5 ((t (:inherit outline-5 :weight bold :height 1.0))))
;; ------------------------------
:custom
;; variable settings: src blocks, headings, etc.
(electric-indent-mode -1)
(org-cycle-separator-lines -1)
(org-hide-emphasis-markers t)
(org-hide-leading-stars t)
(org-src-fontify-natively t)
(org-src-tab-acts-natively t)
(org-edit-src-content-indentation 0)
(org-hide-block-startup nil)
(org-src-preserve-indentation nil)
(org-startup-indented t)
;; (org-startup-folded 'overview)
;; (org-cycle-separator-lines 2)
;; LOGBOOK always into drawer
(org-log-state-notes-into-drawer t)
(org-log-into-drawer t)
;; ------------------------------
:config
;; code block background
(require 'color)
(set-face-attribute 'org-block nil :background
(color-darken-name
(face-attribute 'default :background) 3))
;; language specific settings
;; (setq org-src-block-faces '(("emacs-lisp" (:background "#000000"))
;; ("haskell" (:background "#000000"))))
;; org-agenda-files
(setq org-directory "D:/backup/emacs_practice")
(setq org-agenda-files (list org-directory))
;; Show full heading paths for refiling
(setq org-refile-use-outline-path t)
;; org-refile variables
(setq org-refile-targets (quote ((org-agenda-files :level . 1))))
;; varible settings: org-capture
;; (setq org-default-notes-file "/notes.org")
;; org-babel
(require 'org-tempo)
(add-to-list 'org-structure-template-alist '("sh" . "src sh"))
(add-to-list 'org-structure-template-alist '("el" . "src emacs-lisp"))
(add-to-list 'org-structure-template-alist '("sc" . "src scheme"))
(add-to-list 'org-structure-template-alist '("ts" . "src typescript"))
(add-to-list 'org-structure-template-alist '("py" . "src python"))
(add-to-list 'org-structure-template-alist '("yaml" . "src yaml"))
(add-to-list 'org-structure-template-alist '("json" . "src json"))
(setq org-babel-load-languages
'((awk . t)
(C . t)
(calc . t)
(css . t)
(ditaa . t)
(emacs-lisp . t)
(gnuplot . t)
(haskell . t)
(js . t)
(lisp . t)
(org . t)
(plantuml . t)
(python . t)
(scheme . t)
(shell . t)
(sql . t)))
;; Activate Babel languages
(org-babel-do-load-languages
'org-babel-load-languages
org-babel-load-languages))
;; ------------------------
;; org autocomplete
;; ------------------------
(use-package org-ac
:config (org-ac/config-default))
;; ------------------------
;; org-bullets - prettify org bullets
;; ------------------------
(use-package org-bullets
:hook
(org-mode . (lambda () (org-bullets-mode 1))))
;; ------------------------
;; Org-roam
;; ------------------------
(use-package org-roam
:disabled ;; if you need this pkg, comment this line
:ensure t
:custom
;; org-roam-directory
(org-roam-directory "C:/Users/k/Documents/emacs_practice")
;; path to org-graph
(org-roam-graph-executable "~/Graphviz/bin/dot.exe")
(org-roam-graph-viewer "C:/Program Files (x86)/Google/Chrome/Application/chrome")
;; (org-roam-graph-viewer nil)
;; (org-roam-graph-viewer #'eww-open-file) ;; display SVG source code
:config
;; Generate a graph and then save it to a location
(defun org-roam-graph-save ()
(setq org-roam-graph-viewer nil)
(interactive)
(call-interactively 'org-roam-graph)
(rename-file (nth 0 (file-expand-wildcards "C:/Users/k/AppData/Local/Temp/graph.*.dot")) "C:/Users/k/Documents/emacs_practice/graph.dot" t)
(rename-file (nth 0 (file-expand-wildcards "C:/Users/k/AppData/Local/Temp/graph.*.svg")) "C:/Users/k/Documents/emacs_practice/graph.svg" t))
:bind
(:map org-roam-mode-map
(("C-c n l" . org-roam)
("C-c n f" . org-roam-find-file)
("C-c n g" . org-roam-graph)
("C-c n s" . org-roam-graph-save))
:map org-mode-map
(("C-c n i" . org-roam-insert))
(("C-c n I" . org-roam-insert-immediate)))
:hook
(after-init . org-roam-mode))
(use-package company-org-roam
:disabled
:ensure t
:config
(push 'company-org-roam company-backends))
;; ------------------------
;; Org-roam-server
;; ------------------------
;; display web-based node graph
;; using "emacs server" and "org-roam-protocol" ???
(use-package org-roam-server
:disabled ;; if you need this pkg, comment this line
:after org-roam
:custom
(org-roam-server-host "127.0.0.1")
(org-roam-server-port 8080)
(org-roam-server-authenticate nil)
(org-roam-server-export-inline-images t)
(org-roam-server-serve-files nil)
(org-roam-server-served-file-extensions '("pdf" "mp4" "ogv"))
(org-roam-server-network-poll t)
(org-roam-server-network-arrows nil)
(org-roam-server-network-label-truncate t)
(org-roam-server-network-label-truncate-length 60)
(org-roam-server-network-label-wrap-length 20))
'emacs' 카테고리의 다른 글
gVim Configuration (0) | 2020.06.04 |
---|---|
Useful key bindings (0) | 2019.02.06 |
Changing the location of Emacs' config. file (0) | 2019.01.24 |
Vim - Select Multiple Cursors (0) | 2019.01.13 |
Comments