Emacs personal configuration
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

309 lines
10KB

  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. ;; PACKAGE: smartparens
  66. (require-package 'smartparens)
  67. (require 'smartparens-config)
  68. (setq sp-base-key-bindings 'paredit)
  69. (setq sp-autoskip-closing-pair 'always)
  70. (setq sp-hybrid-kill-entire-symbol nil)
  71. (sp-use-paredit-bindings)
  72. (show-smartparens-global-mode +1)
  73. (smartparens-global-mode 1)
  74. ;; PACKAGE: comment-dwim-2
  75. (global-set-key (kbd "M-;") 'comment-dwim-2)
  76. ;; Jump to end of snippet definition
  77. (define-key yas-keymap (kbd "<return>") 'yas/exit-all-snippets)
  78. ;; Inter-field navigation
  79. (defun yas/goto-end-of-active-field ()
  80. (interactive)
  81. (let* ((snippet (car (yas--snippets-at-point)))
  82. (position (yas--field-end (yas--snippet-active-field snippet))))
  83. (if (= (point) position)
  84. (move-end-of-line 1)
  85. (goto-char position))))
  86. (defun yas/goto-start-of-active-field ()
  87. (interactive)
  88. (let* ((snippet (car (yas--snippets-at-point)))
  89. (position (yas--field-start (yas--snippet-active-field snippet))))
  90. (if (= (point) position)
  91. (move-beginning-of-line 1)
  92. (goto-char position))))
  93. (define-key yas-keymap (kbd "C-e") 'yas/goto-end-of-active-field)
  94. (define-key yas-keymap (kbd "C-a") 'yas/goto-start-of-active-field)
  95. ;; (define-key yas-minor-mode-map [(tab)] nil)
  96. ;; (define-key yas-minor-mode-map (kbd "TAB") nil)
  97. ;; (define-key yas-minor-mode-map (kbd "C-<tab>") 'yas-expand)
  98. ;; No dropdowns please, yas
  99. (setq yas-prompt-functions '(yas/ido-prompt yas/completing-prompt))
  100. ;; No need to be so verbose
  101. (setq yas-verbosity 1)
  102. ;; Wrap around region
  103. (setq yas-wrap-around-region t)
  104. (add-hook 'term-mode-hook (lambda() (setq yas-dont-activate t)))
  105. ;; PACKAGE: anzu
  106. ;; GROUP: Editing -> Matching -> Isearch -> Anzu
  107. (require-package 'anzu)
  108. (require 'anzu)
  109. (global-anzu-mode)
  110. (global-set-key (kbd "M-%") 'anzu-query-replace)
  111. (global-set-key (kbd "C-M-%") 'anzu-query-replace-regexp)
  112. ;; PACKAGE: iedit
  113. (setq iedit-toggle-key-default nil)
  114. (require-package 'iedit)
  115. (require 'iedit)
  116. (global-set-key (kbd "C-;") 'iedit-mode)
  117. ;; PACKAGE: duplicate-thing
  118. (require-package 'duplicate-thing)
  119. (require 'duplicate-thing)
  120. (global-set-key (kbd "M-c") 'duplicate-thing)
  121. ;; Customized functions
  122. (defun prelude-move-beginning-of-line (arg)
  123. "Move point back to indentation of beginning of line.
  124. Move point to the first non-whitespace character on this line.
  125. If point is already there, move to the beginning of the line.
  126. Effectively toggle between the first non-whitespace character and
  127. the beginning of the line.
  128. If ARG is not nil or 1, move forward ARG - 1 lines first. If
  129. point reaches the beginning or end of the buffer, stop there."
  130. (interactive "^p")
  131. (setq arg (or arg 1))
  132. ;; Move lines first
  133. (when (/= arg 1)
  134. (let ((line-move-visual nil))
  135. (forward-line (1- arg))))
  136. (let ((orig-point (point)))
  137. (back-to-indentation)
  138. (when (= orig-point (point))
  139. (move-beginning-of-line 1))))
  140. (global-set-key (kbd "C-a") 'prelude-move-beginning-of-line)
  141. (defadvice kill-ring-save (before slick-copy activate compile)
  142. "When called interactively with no active region, copy a single
  143. line instead."
  144. (interactive
  145. (if mark-active (list (region-beginning) (region-end))
  146. (message "Copied line")
  147. (list (line-beginning-position)
  148. (line-beginning-position 2)))))
  149. (defadvice kill-region (before slick-cut activate compile)
  150. "When called interactively with no active region, kill a single
  151. line instead."
  152. (interactive
  153. (if mark-active (list (region-beginning) (region-end))
  154. (list (line-beginning-position)
  155. (line-beginning-position 2)))))
  156. ;; kill a line, including whitespace characters until next non-whiepsace character
  157. ;; of next line
  158. (defadvice kill-line (before check-position activate)
  159. (if (member major-mode
  160. '(emacs-lisp-mode scheme-mode lisp-mode
  161. c-mode c++-mode objc-mode
  162. latex-mode plain-tex-mode))
  163. (if (and (eolp) (not (bolp)))
  164. (progn (forward-char 1)
  165. (just-one-space 0)
  166. (backward-char 1)))))
  167. ;; taken from prelude-editor.el
  168. ;; automatically indenting yanked text if in programming-modes
  169. (defvar yank-indent-modes
  170. '(LaTeX-mode TeX-mode)
  171. "Modes in which to indent regions that are yanked (or yank-popped).
  172. Only modes that don't derive from `prog-mode' should be listed here.")
  173. (defvar yank-indent-blacklisted-modes
  174. '(python-mode slim-mode haml-mode)
  175. "Modes for which auto-indenting is suppressed.")
  176. (defvar yank-advised-indent-threshold 1000
  177. "Threshold (# chars) over which indentation does not automatically occur.")
  178. (defun yank-advised-indent-function (beg end)
  179. "Do indentation, as long as the region isn't too large."
  180. (if (<= (- end beg) yank-advised-indent-threshold)
  181. (indent-region beg end nil)))
  182. (defadvice yank (after yank-indent activate)
  183. "If current mode is one of 'yank-indent-modes,
  184. indent yanked text (with prefix arg don't indent)."
  185. (if (and (not (ad-get-arg 0))
  186. (not (member major-mode yank-indent-blacklisted-modes))
  187. (or (derived-mode-p 'prog-mode)
  188. (member major-mode yank-indent-modes)))
  189. (let ((transient-mark-mode nil))
  190. (yank-advised-indent-function (region-beginning) (region-end)))))
  191. (defadvice yank-pop (after yank-pop-indent activate)
  192. "If current mode is one of `yank-indent-modes',
  193. indent yanked text (with prefix arg don't indent)."
  194. (when (and (not (ad-get-arg 0))
  195. (not (member major-mode yank-indent-blacklisted-modes))
  196. (or (derived-mode-p 'prog-mode)
  197. (member major-mode yank-indent-modes)))
  198. (let ((transient-mark-mode nil))
  199. (yank-advised-indent-function (region-beginning) (region-end)))))
  200. ;; prelude-core.el
  201. (defun indent-buffer ()
  202. "Indent the currently visited buffer."
  203. (interactive)
  204. (indent-region (point-min) (point-max)))
  205. ;; prelude-editing.el
  206. (defcustom prelude-indent-sensitive-modes
  207. '(coffee-mode python-mode slim-mode haml-mode yaml-mode)
  208. "Modes for which auto-indenting is suppressed."
  209. :type 'list)
  210. (defun indent-region-or-buffer ()
  211. "Indent a region if selected, otherwise the whole buffer."
  212. (interactive)
  213. (unless (member major-mode prelude-indent-sensitive-modes)
  214. (save-excursion
  215. (if (region-active-p)
  216. (progn
  217. (indent-region (region-beginning) (region-end))
  218. (message "Indented selected region."))
  219. (progn
  220. (indent-buffer)
  221. (message "Indented buffer.")))
  222. (whitespace-cleanup))))
  223. (global-set-key (kbd "C-c i") 'indent-region-or-buffer)
  224. ;; add duplicate line function from Prelude
  225. ;; taken from prelude-core.el
  226. (defun prelude-get-positions-of-line-or-region ()
  227. "Return positions (beg . end) of the current line
  228. or region."
  229. (let (beg end)
  230. (if (and mark-active (> (point) (mark)))
  231. (exchange-point-and-mark))
  232. (setq beg (line-beginning-position))
  233. (if mark-active
  234. (exchange-point-and-mark))
  235. (setq end (line-end-position))
  236. (cons beg end)))
  237. ;; smart openline
  238. (defun prelude-smart-open-line (arg)
  239. "Insert an empty line after the current line.
  240. Position the cursor at its beginning, according to the current mode.
  241. With a prefix ARG open line above the current line."
  242. (interactive "P")
  243. (if arg
  244. (prelude-smart-open-line-above)
  245. (progn
  246. (move-end-of-line nil)
  247. (newline-and-indent))))
  248. (defun prelude-smart-open-line-above ()
  249. "Insert an empty line above the current line.
  250. Position the cursor at it's beginning, according to the current mode."
  251. (interactive)
  252. (move-beginning-of-line nil)
  253. (newline-and-indent)
  254. (forward-line -1)
  255. (indent-according-to-mode))
  256. (global-set-key (kbd "M-o") 'prelude-smart-open-line)
  257. (global-set-key (kbd "M-o") 'open-line)
  258. (provide 'setup-editing)