Emacs personal configuration
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

302 lines
9.9KB

  1. ;; GROUP: Editing -> Editing Basics
  2. (setq global-mark-ring-max 5000 ; increase mark ring to contains 5000 entries
  3. mark-ring-max 5000 ; increase kill ring to contains 5000 entries
  4. mode-require-final-newline t ; add a newline to end of file
  5. tab-width 4 ; default to 4 visible spaces to display a tab
  6. )
  7. (add-hook 'sh-mode-hook (lambda ()
  8. (setq tab-width 4)))
  9. (set-terminal-coding-system 'utf-8)
  10. (set-keyboard-coding-system 'utf-8)
  11. (set-language-environment "UTF-8")
  12. (prefer-coding-system 'utf-8)
  13. (setq-default indent-tabs-mode nil)
  14. (delete-selection-mode)
  15. (global-set-key (kbd "RET") 'newline-and-indent)
  16. ;; GROUP: Editing -> Killing
  17. (setq kill-ring-max 5000 ; increase kill-ring capacity
  18. kill-whole-line t ; if NIL, kill whole line and move the next line up
  19. )
  20. ;; show whitespace in diff-mode
  21. (add-hook 'diff-mode-hook (lambda ()
  22. (setq-local whitespace-style
  23. '(face
  24. tabs
  25. tab-mark
  26. spaces
  27. space-mark
  28. trailing
  29. indentation::space
  30. indentation::tab
  31. newline
  32. newline-mark))
  33. (whitespace-mode 1)))
  34. ;; Package: volatile-highlights
  35. ;; GROUP: Editing -> Volatile Highlights
  36. (require-package 'volatile-highlights)
  37. (require 'volatile-highlights)
  38. (volatile-highlights-mode t)
  39. ;; Package: clean-aindent-mode
  40. ;; GROUP: Editing -> Indent -> Clean Aindent
  41. (require-package 'clean-aindent-mode)
  42. (require 'clean-aindent-mode)
  43. (add-hook 'prog-mode-hook 'clean-aindent-mode)
  44. ;; PACKAGE: dtrt-indent
  45. (require-package 'dtrt-indent)
  46. (require 'dtrt-indent)
  47. (dtrt-indent-mode 1)
  48. (setq dtrt-indent-verbosity 0)
  49. ;; PACKAGE: ws-butler
  50. (require-package 'ws-butler)
  51. (require 'ws-butler)
  52. (add-hook 'c-mode-common-hook 'ws-butler-mode)
  53. (add-hook 'text-mode 'ws-butler-mode)
  54. (add-hook 'fundamental-mode 'ws-butler-mode)
  55. ;; Package: undo-tree
  56. ;; GROUP: Editing -> Undo -> Undo Tree
  57. (require-package 'undo-tree)
  58. (require 'undo-tree)
  59. (global-undo-tree-mode)
  60. ;; Package: yasnippet
  61. ;; GROUP: Editing -> Yasnippet
  62. (require-package 'yasnippet)
  63. (require 'yasnippet)
  64. (yas-global-mode 1)
  65. (require-package 'yasnippet-snippets)
  66. (show-smartparens-global-mode +1)
  67. (smartparens-global-mode 1)
  68. ;; PACKAGE: comment-dwim-2
  69. (global-set-key (kbd "M-;") 'comment-dwim-2)
  70. ;; Jump to end of snippet definition
  71. (define-key yas-keymap (kbd "<return>") 'yas/exit-all-snippets)
  72. ;; Inter-field navigation
  73. (defun yas/goto-end-of-active-field ()
  74. (interactive)
  75. (let* ((snippet (car (yas--snippets-at-point)))
  76. (position (yas--field-end (yas--snippet-active-field snippet))))
  77. (if (= (point) position)
  78. (move-end-of-line 1)
  79. (goto-char position))))
  80. (defun yas/goto-start-of-active-field ()
  81. (interactive)
  82. (let* ((snippet (car (yas--snippets-at-point)))
  83. (position (yas--field-start (yas--snippet-active-field snippet))))
  84. (if (= (point) position)
  85. (move-beginning-of-line 1)
  86. (goto-char position))))
  87. (define-key yas-keymap (kbd "C-e") 'yas/goto-end-of-active-field)
  88. (define-key yas-keymap (kbd "C-a") 'yas/goto-start-of-active-field)
  89. ;; (define-key yas-minor-mode-map [(tab)] nil)
  90. ;; (define-key yas-minor-mode-map (kbd "TAB") nil)
  91. ;; (define-key yas-minor-mode-map (kbd "C-<tab>") 'yas-expand)
  92. ;; No dropdowns please, yas
  93. (setq yas-prompt-functions '(yas/ido-prompt yas/completing-prompt))
  94. ;; No need to be so verbose
  95. (setq yas-verbosity 1)
  96. ;; Wrap around region
  97. (setq yas-wrap-around-region t)
  98. (add-hook 'term-mode-hook (lambda() (setq yas-dont-activate t)))
  99. ;; PACKAGE: anzu
  100. ;; GROUP: Editing -> Matching -> Isearch -> Anzu
  101. (require-package 'anzu)
  102. (require 'anzu)
  103. (global-anzu-mode)
  104. (global-set-key (kbd "M-%") 'anzu-query-replace)
  105. (global-set-key (kbd "C-M-%") 'anzu-query-replace-regexp)
  106. ;; PACKAGE: iedit
  107. (setq iedit-toggle-key-default nil)
  108. (require-package 'iedit)
  109. (require 'iedit)
  110. (global-set-key (kbd "C-;") 'iedit-mode)
  111. ;; PACKAGE: duplicate-thing
  112. (require-package 'duplicate-thing)
  113. (require 'duplicate-thing)
  114. (global-set-key (kbd "M-c") 'duplicate-thing)
  115. ;; Customized functions
  116. (defun prelude-move-beginning-of-line (arg)
  117. "Move point back to indentation of beginning of line.
  118. Move point to the first non-whitespace character on this line.
  119. If point is already there, move to the beginning of the line.
  120. Effectively toggle between the first non-whitespace character and
  121. the beginning of the line.
  122. If ARG is not nil or 1, move forward ARG - 1 lines first. If
  123. point reaches the beginning or end of the buffer, stop there."
  124. (interactive "^p")
  125. (setq arg (or arg 1))
  126. ;; Move lines first
  127. (when (/= arg 1)
  128. (let ((line-move-visual nil))
  129. (forward-line (1- arg))))
  130. (let ((orig-point (point)))
  131. (back-to-indentation)
  132. (when (= orig-point (point))
  133. (move-beginning-of-line 1))))
  134. ;(global-set-key (kbd "C-a") 'prelude-move-beginning-of-line)
  135. (defadvice kill-ring-save (before slick-copy activate compile)
  136. "When called interactively with no active region, copy a single
  137. line instead."
  138. (interactive
  139. (if mark-active (list (region-beginning) (region-end))
  140. (message "Copied line")
  141. (list (line-beginning-position)
  142. (line-beginning-position 2)))))
  143. (defadvice kill-region (before slick-cut activate compile)
  144. "When called interactively with no active region, kill a single
  145. line instead."
  146. (interactive
  147. (if mark-active (list (region-beginning) (region-end))
  148. (list (line-beginning-position)
  149. (line-beginning-position 2)))))
  150. ;; kill a line, including whitespace characters until next non-whiepsace character
  151. ;; of next line
  152. (defadvice kill-line (before check-position activate)
  153. (if (member major-mode
  154. '(emacs-lisp-mode scheme-mode lisp-mode
  155. c-mode c++-mode objc-mode
  156. latex-mode plain-tex-mode))
  157. (if (and (eolp) (not (bolp)))
  158. (progn (forward-char 1)
  159. (just-one-space 0)
  160. (backward-char 1)))))
  161. ;; taken from prelude-editor.el
  162. ;; automatically indenting yanked text if in programming-modes
  163. (defvar yank-indent-modes
  164. '(LaTeX-mode TeX-mode)
  165. "Modes in which to indent regions that are yanked (or yank-popped).
  166. Only modes that don't derive from `prog-mode' should be listed here.")
  167. (defvar yank-indent-blacklisted-modes
  168. '(python-mode slim-mode haml-mode)
  169. "Modes for which auto-indenting is suppressed.")
  170. (defvar yank-advised-indent-threshold 1000
  171. "Threshold (# chars) over which indentation does not automatically occur.")
  172. (defun yank-advised-indent-function (beg end)
  173. "Do indentation, as long as the region isn't too large."
  174. (if (<= (- end beg) yank-advised-indent-threshold)
  175. (indent-region beg end nil)))
  176. (defadvice yank (after yank-indent activate)
  177. "If current mode is one of 'yank-indent-modes,
  178. indent yanked text (with prefix arg don't indent)."
  179. (if (and (not (ad-get-arg 0))
  180. (not (member major-mode yank-indent-blacklisted-modes))
  181. (or (derived-mode-p 'prog-mode)
  182. (member major-mode yank-indent-modes)))
  183. (let ((transient-mark-mode nil))
  184. (yank-advised-indent-function (region-beginning) (region-end)))))
  185. (defadvice yank-pop (after yank-pop-indent activate)
  186. "If current mode is one of `yank-indent-modes',
  187. indent yanked text (with prefix arg don't indent)."
  188. (when (and (not (ad-get-arg 0))
  189. (not (member major-mode yank-indent-blacklisted-modes))
  190. (or (derived-mode-p 'prog-mode)
  191. (member major-mode yank-indent-modes)))
  192. (let ((transient-mark-mode nil))
  193. (yank-advised-indent-function (region-beginning) (region-end)))))
  194. ;; prelude-core.el
  195. (defun indent-buffer ()
  196. "Indent the currently visited buffer."
  197. (interactive)
  198. (indent-region (point-min) (point-max)))
  199. ;; prelude-editing.el
  200. (defcustom prelude-indent-sensitive-modes
  201. '(coffee-mode python-mode slim-mode haml-mode yaml-mode)
  202. "Modes for which auto-indenting is suppressed."
  203. :type 'list)
  204. (defun indent-region-or-buffer ()
  205. "Indent a region if selected, otherwise the whole buffer."
  206. (interactive)
  207. (unless (member major-mode prelude-indent-sensitive-modes)
  208. (save-excursion
  209. (if (region-active-p)
  210. (progn
  211. (indent-region (region-beginning) (region-end))
  212. (message "Indented selected region."))
  213. (progn
  214. (indent-buffer)
  215. (message "Indented buffer.")))
  216. (whitespace-cleanup))))
  217. (global-set-key (kbd "C-c i") 'indent-region-or-buffer)
  218. ;; add duplicate line function from Prelude
  219. ;; taken from prelude-core.el
  220. (defun prelude-get-positions-of-line-or-region ()
  221. "Return positions (beg . end) of the current line
  222. or region."
  223. (let (beg end)
  224. (if (and mark-active (> (point) (mark)))
  225. (exchange-point-and-mark))
  226. (setq beg (line-beginning-position))
  227. (if mark-active
  228. (exchange-point-and-mark))
  229. (setq end (line-end-position))
  230. (cons beg end)))
  231. ;; smart openline
  232. (defun prelude-smart-open-line (arg)
  233. "Insert an empty line after the current line.
  234. Position the cursor at its beginning, according to the current mode.
  235. With a prefix ARG open line above the current line."
  236. (interactive "P")
  237. (if arg
  238. (prelude-smart-open-line-above)
  239. (progn
  240. (move-end-of-line nil)
  241. (newline-and-indent))))
  242. (defun prelude-smart-open-line-above ()
  243. "Insert an empty line above the current line.
  244. Position the cursor at it's beginning, according to the current mode."
  245. (interactive)
  246. (move-beginning-of-line nil)
  247. (newline-and-indent)
  248. (forward-line -1)
  249. (indent-according-to-mode))
  250. (global-set-key (kbd "M-o") 'prelude-smart-open-line)
  251. (global-set-key (kbd "M-o") 'open-line)
  252. (provide 'setup-editing)