Emacs personal configuration
No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

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