Personal emacs config
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

229 lines
7.2 KiB

  1. * Global
  2. ** Add features/modes
  3. *** undo-tree
  4. #+begin_src emacs-lisp
  5. (require 'undo-tree)
  6. (global-undo-tree-mode)
  7. #+end_src
  8. *** ssh-config-mode
  9. #+begin_src emacs-lisp
  10. (require 'ssh-config-mode)
  11. (add-to-list 'auto-mode-alist '("~/.ssh/config\\'" . ssh-config-mode))
  12. #+end_src
  13. *** yaml-mode
  14. #+begin_src emacs-lisp
  15. (require 'yaml-mode)
  16. (add-to-list 'auto-mode-alist '("\\.yml\\'" . yaml-mode))
  17. #+end_src
  18. *** elpy move line up and down globally
  19. #+begin_src emacs-lisp
  20. (require 'elpy)
  21. (global-set-key (kbd "M-<up>") 'elpy-nav-move-line-or-region-up)
  22. (global-set-key (kbd "M-<down>") 'elpy-nav-move-line-or-region-down)
  23. (global-set-key (kbd "C-c <left>") 'windmove-left)
  24. (global-set-key (kbd "C-c <right>") 'windmove-right)
  25. (global-set-key (kbd "C-c <up>") 'windmove-up)
  26. (global-set-key (kbd "C-c <down>") 'windmove-down)
  27. #+end_src
  28. *** iedit-mode
  29. #+begin_src emacs-lisp
  30. (global-set-key (kbd "C-;") 'iedit-mode)
  31. #+end_src
  32. *** spellcheck entire buffer
  33. #+begin_src emacs-lisp
  34. (global-set-key (kbd "C-!") 'ispell-buffer)
  35. #+end_src
  36. *** find/replace
  37. #+begin_src emacs-lisp
  38. (require 'visual-regexp-steroids)
  39. (define-key global-map (kbd "C-c r") 'vr/replace)
  40. (define-key global-map (kbd "C-c q") 'vr/query-replace)
  41. #+end_src
  42. *** duplicate line function
  43. #+begin_src emacs-lisp
  44. (defun duplicate-line()
  45. (interactive)
  46. (move-beginning-of-line 1)
  47. (kill-line)
  48. (yank)
  49. (open-line 1)
  50. (next-line 1)
  51. (yank))
  52. (global-set-key (kbd "C-c d") 'duplicate-line)
  53. #+end_src
  54. *** magit
  55. #+begin_src emacs-lisp
  56. (global-set-key (kbd "C-x g") 'magit-status)
  57. #+end_src
  58. #+begin_src emacs-lisp
  59. (add-hook 'git-commit-setup-hook 'git-commit-turn-on-flyspell)
  60. #+end_src
  61. *** filename completion
  62. #+BEGIN_SRC emacs-lisp
  63. (global-set-key (kbd "C->") 'comint-dynamic-complete-filename)
  64. #+END_SRC
  65. *** hippie expand
  66. #+BEGIN_SRC emacs-lisp
  67. (global-set-key (kbd "M-/") 'hippie-expand)
  68. (setq hippie-expand-try-functions-list '(try-expand-dabbrev try-expand-dabbrev-all-buffers try-expand-dabbrev-from-kill
  69. try-complete-file-name-partially try-complete-file-name
  70. try-expand-all-abbrevs try-expand-list try-expand-line
  71. try-complete-lisp-symbol-partially try-complete-lisp-symbol))
  72. #+END_SRC
  73. *** window numbering mode
  74. #+BEGIN_SRC emacs-lisp
  75. (window-numbering-mode)
  76. #+END_SRC
  77. ** options
  78. *** global
  79. **** recent files
  80. #+begin_src emacs-lisp
  81. (require 'recentf)
  82. (recentf-mode 1)
  83. #+end_src
  84. **** backup
  85. #+begin_src emacs-lisp
  86. (let ((backup-dir (concat user-emacs-directory "backup"))
  87. (auto-save-dir (concat user-emacs-directory "autosave"))
  88. )
  89. (if (not (file-directory-p backup-dir))
  90. (make-directory backup-dir))
  91. (if (not(file-directory-p auto-save-dir))
  92. (make-directory auto-save-dir)
  93. )
  94. (setq backup-directory-alist
  95. `((".*" . , backup-dir)))
  96. (setq auto-save-file-name-transforms
  97. `((".*" , (concat auto-save-dir "/") t))))
  98. #+end_src
  99. **** kill buffer option
  100. #+begin_src emacs-lisp
  101. (global-set-key (kbd "C-x k") 'kill-this-buffer)
  102. #+end_src
  103. **** inhibit start screen
  104. #+begin_src emacs-lisp
  105. (setq inhibit-startup-screen t)
  106. #+end_src
  107. **** save options
  108. #+begin_src emacs-lisp
  109. (add-hook 'before-save-hook 'delete-trailing-whitespace)
  110. #+end_src
  111. **** theming
  112. #+begin_src emacs-lisp
  113. (load-theme 'dracula t)
  114. #+end_src
  115. **** bell
  116. #+BEGIN_SRC emacs-lisp
  117. (mode-line-bell-mode)
  118. #+END_SRC
  119. **** ivy
  120. #+BEGIN_SRC emacs-lisp
  121. (ivy-mode)
  122. (global-set-key (kbd "C-s") 'swiper)
  123. #+END_SRC
  124. **** kill-emacs key
  125. #+BEGIN_SRC emacs-lisp
  126. (global-set-key (kbd "C-x C-k C-x C-k") 'kill-emacs)
  127. #+END_SRC
  128. **** linum
  129. #+BEGIN_SRC emacs-lisp
  130. (global-display-line-numbers-mode)
  131. #+END_SRC
  132. *** dired
  133. #+begin_src emacs-lisp
  134. (setq ls-lisp-use-insert-directory-program t)
  135. #+end_src
  136. #+begin_src emacs-lisp
  137. (setq dired-listing-switches "-alh")
  138. #+end_src
  139. * Tramp configuration
  140. #+begin_src emacs-lisp
  141. (add-to-list 'tramp-remote-path 'tramp-own-remote-path)
  142. (add-to-list 'tramp-remote-path "/system/xbin")
  143. (add-to-list 'tramp-remote-path "/data/data/com.termux/file/usr/bin")
  144. #+end_src
  145. * Web things
  146. ** javascript stuff
  147. #+begin_src emacs-lisp
  148. (require 'js2-mode)
  149. (add-to-list 'auto-mode-alist '("\\.js\\'" . js2-mode))
  150. (add-hook 'js2-mode-hook #'js2-imenu-extras-mode)
  151. (require 'js2-refactor)
  152. (require 'xref-js2)
  153. (add-hook 'js2-mode-hook #'js2-refactor-mode)
  154. (js2r-add-keybindings-with-prefix "C-c C-r")
  155. (define-key js2-mode-map (kbd "C-k") #'js2r-kill)
  156. (define-key js-mode-map (kbd "M-.") nil)
  157. (add-hook 'js2-mode-hook (lambda ()
  158. (add-hook 'xref-backend-functions #'xref-js2-xref-backend nil t)))
  159. (define-key js2-mode-map (kbd "C-k") #'js2r-kill)
  160. #+end_src
  161. ** web mode
  162. #+begin_src emacs-lisp
  163. (require 'web-mode)
  164. (add-to-list 'auto-mode-alist '("\\.phtml\\'" . web-mode))
  165. (add-to-list 'auto-mode-alist '("\\.tpl\\.php\\'" . web-mode))
  166. (add-to-list 'auto-mode-alist '("\\.[agj]sp\\'" . web-mode))
  167. (add-to-list 'auto-mode-alist '("\\.as[cp]x\\'" . web-mode))
  168. (add-to-list 'auto-mode-alist '("\\.erb\\'" . web-mode))
  169. (add-to-list 'auto-mode-alist '("\\.mustache\\'" . web-mode))
  170. (add-to-list 'auto-mode-alist '("\\.djhtml\\'" . web-mode))
  171. (add-to-list 'auto-mode-alist '("\\.html?\\'" . web-mode))
  172. #+end_src
  173. * Platform Specific
  174. #+begin_src emacs-lisp
  175. (cond
  176. #+end_src
  177. ** Windows
  178. #+begin_src emacs-lisp
  179. ((string-equal system-type "windows-nt")
  180. (progn
  181. (defun quote-exe (path)
  182. (w32-short-file-name path))
  183. (defun start-external-shell ()
  184. (interactive)
  185. (start-process-shell-command (format "cmd(%s)" default-directory) nil "start default.bat"))
  186. (global-set-key (kbd "C-S-C") 'start-external-shell)
  187. (setq insert-directory-program "C:/Program Files/git/usr/bin/ls.exe")
  188. (setq find-program (quote-exe "C:/Program Files/git/usr/bin/find.exe"))
  189. (setq grep-program (quote-exe "C:/Program Files/git/usr/bin/grep.exe"))
  190. (setq python-shell-interpreter (quote-exe (executable-find "python")))
  191. (setq python-check-command (quote-exe (executable-find "flake8")))
  192. (setq delete-by-moving-to-trash t)
  193. (defun python-shell-interpreter-refresh ()
  194. (interactive)
  195. (setq python-shell-interpreter (quote-exe (executable-find "python"))))
  196. (add-hook 'python-django-project-root-hook 'python-shell-interpreter-refresh)
  197. ))
  198. #+end_src
  199. ** Linux
  200. #+begin_src emacs-lisp
  201. ((string-equal system-type "gnu/linux")
  202. (progn
  203. (setq python-shell-interpreter "python3")
  204. (setq elpy-rpc-python-command python-shell-interpreter)
  205. (defun get-elpa-package-install-directory (pkg)
  206. "Return the install directory of elpa PKG. Return nil if it is not found."
  207. (let ((elpa-dir package-user-dir))
  208. (when (file-exists-p elpa-dir)
  209. (let* ((pkg-match (concat "\\`" (symbol-name pkg) "-[0-9]+"))
  210. (dir (car (directory-files elpa-dir 'full pkg-match))))
  211. (when dir (file-name-as-directory dir))))))
  212. (setq vr/command-python
  213. (format "python3 %s" (expand-file-name "regexp.py" (get-elpa-package-install-directory 'visual-regexp-steroids))))
  214. )))
  215. #+end_src
  216. * Python
  217. #+begin_src emacs-lisp
  218. (elpy-enable)
  219. (when (require 'flycheck nil t)
  220. (setq elpy-modules (delq 'elpy-module-flymake elpy-modules))
  221. (add-hook 'elpy-mode-hook 'flycheck-mode))
  222. (require 'blacken)
  223. (defun python-mode-keys ()
  224. "Modify python-mode local key map"
  225. (local-set-key (kbd "C-=") 'elpy-goto-assignment))
  226. (add-hook 'python-mode-hook 'python-mode-keys)
  227. (add-hook 'elpy-mode-hook 'blacken-mode)
  228. (setq elpy-syntax-check-command python-check-command)
  229. #+end_src