Emacs personal configuration
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

308 Zeilen
10.0KB

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