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.
192 lines
6.4 KiB
192 lines
6.4 KiB
;; init.el --- Emacs configuration
|
|
|
|
;; INSTALL PACKAGES
|
|
;; --------------------------------------
|
|
|
|
(require 'package)
|
|
|
|
|
|
(add-to-list 'package-archives
|
|
'("melpa" . "https://melpa.org/packages/") t)
|
|
|
|
(package-initialize)
|
|
(when (not package-archive-contents)
|
|
(package-refresh-contents))
|
|
|
|
(defvar myPackages
|
|
'(better-defaults
|
|
ein
|
|
iedit
|
|
elpy
|
|
flycheck
|
|
magit
|
|
ssh-config-mode
|
|
web-mode
|
|
dracula-theme
|
|
yaml-mode
|
|
py-autopep8
|
|
apache-mode
|
|
js2-mode
|
|
js2-refactor
|
|
xref-js2
|
|
visual-regexp-steroids))
|
|
|
|
(mapc #'(lambda (package)
|
|
(unless (package-installed-p package)
|
|
(package-install package)))
|
|
myPackages)
|
|
;; BASIC
|
|
(require 'ssh-config-mode)
|
|
(add-to-list 'auto-mode-alist '("~/.ssh/config\\'" . ssh-config-mode))
|
|
(require 'yaml-mode)
|
|
(add-to-list 'auto-mode-alist '("\\.yml\\'" . yaml-mode))
|
|
(require 'elpy)
|
|
(global-set-key (kbd "M-<up>") 'elpy-nav-move-line-or-region-up)
|
|
(global-set-key (kbd "M-<down>") 'elpy-nav-move-line-or-region-down)
|
|
;; Window movement
|
|
(global-set-key (kbd "C-c <left>") 'windmove-left)
|
|
(global-set-key (kbd "C-c <right>") 'windmove-right)
|
|
(global-set-key (kbd "C-c <up>") 'windmove-up)
|
|
(global-set-key (kbd "C-c <down>") 'windmove-down)
|
|
|
|
(global-set-key (kbd "C-;") 'iedit-mode)
|
|
;; JavaScript
|
|
(require 'js2-mode)
|
|
(add-to-list 'auto-mode-alist '("\\.js\\'" . js2-mode))
|
|
|
|
;; Better imenu
|
|
(add-hook 'js2-mode-hook #'js2-imenu-extras-mode)
|
|
(require 'js2-refactor)
|
|
(require 'xref-js2)
|
|
|
|
(add-hook 'js2-mode-hook #'js2-refactor-mode)
|
|
(js2r-add-keybindings-with-prefix "C-c C-r")
|
|
(define-key js2-mode-map (kbd "C-k") #'js2r-kill)
|
|
|
|
;; js-mode (which js2 is based on) binds "M-." which conflicts with xref, so
|
|
;; unbind it.
|
|
(define-key js-mode-map (kbd "M-.") nil)
|
|
|
|
(add-hook 'js2-mode-hook (lambda ()
|
|
(add-hook 'xref-backend-functions #'xref-js2-xref-backend nil t)))
|
|
(define-key js2-mode-map (kbd "C-k") #'js2r-kill)
|
|
|
|
;; Web-mode
|
|
(require 'web-mode)
|
|
(add-to-list 'auto-mode-alist '("\\.phtml\\'" . web-mode))
|
|
(add-to-list 'auto-mode-alist '("\\.tpl\\.php\\'" . web-mode))
|
|
(add-to-list 'auto-mode-alist '("\\.[agj]sp\\'" . web-mode))
|
|
(add-to-list 'auto-mode-alist '("\\.as[cp]x\\'" . web-mode))
|
|
(add-to-list 'auto-mode-alist '("\\.erb\\'" . web-mode))
|
|
(add-to-list 'auto-mode-alist '("\\.mustache\\'" . web-mode))
|
|
(add-to-list 'auto-mode-alist '("\\.djhtml\\'" . web-mode))
|
|
(add-to-list 'auto-mode-alist '("\\.html?\\'" . web-mode))
|
|
;; Custom
|
|
(setq dired-listing-switches "-alh")
|
|
(defun duplicate-line()
|
|
(interactive)
|
|
(move-beginning-of-line 1)
|
|
(kill-line)
|
|
(yank)
|
|
(open-line 1)
|
|
(next-line 1)
|
|
(yank))
|
|
(global-set-key (kbd "C-c C-d") 'duplicate-line)
|
|
(require 'recentf)
|
|
(recentf-mode 1)
|
|
(global-set-key (kbd "C-<tab>") 'recentf-open-files)
|
|
(global-set-key (kbd "C-x g") 'magit-status)
|
|
(setq inhibit-startup-screen t)
|
|
;; (setq vc-handled-backends nil)
|
|
;; use external ls
|
|
(setq ls-lisp-use-insert-directory-program t)
|
|
(cond
|
|
;; Windows fixes
|
|
((string-equal system-type "windows-nt")
|
|
(progn
|
|
(defun quote-exe (path)
|
|
(w32-short-file-name path))
|
|
(defun start-external-shell ()
|
|
(interactive)
|
|
(start-process-shell-command (format "cmd(%s)" default-directory) nil "start default.bat"))
|
|
(global-set-key (kbd "C-S-C") 'start-external-shell)
|
|
(setq insert-directory-program "C:/Program Files/git/usr/bin/ls.exe")
|
|
(setq find-program (quote-exe "C:/Program Files/git/usr/bin/find.exe"))
|
|
(setq grep-program (quote-exe "C:/Program Files/git/usr/bin/grep.exe"))
|
|
(setq python-shell-interpreter (quote-exe (executable-find "python")))
|
|
(setq python-check-command (quote-exe (executable-find "flake8")))
|
|
(setq backup-directory-alist
|
|
`((".*" . ,temporary-file-directory)))
|
|
(setq auto-save-file-name-transforms
|
|
`((".*" ,temporary-file-directory t)))
|
|
(setq delete-by-moving-to-trash t)
|
|
))
|
|
|
|
;; Linux-specific
|
|
((string-equal system-type "gnu/linux")
|
|
(progn
|
|
(setq python-shell-interpreter "python3")
|
|
(setq elpy-rpc-python-command python-shell-interpreter)
|
|
)))
|
|
|
|
(add-hook 'git-commit-setup-hook 'git-commit-turn-on-flyspell)
|
|
(add-hook 'before-save-hook 'delete-trailing-whitespace)
|
|
|
|
;; --------------------------------------
|
|
|
|
;; (setq inhibit-startup-message t) ;; hide the startup message
|
|
;; (load-theme 'material t) ;; load material theme
|
|
(load-theme 'dracula t)
|
|
(global-linum-mode t) ;; enable line numbers globally
|
|
|
|
;; PYTHON CONFIGURATION
|
|
;; --------------------------------------
|
|
(elpy-enable)
|
|
;;(debug-on-variable-change 'python-check-command)
|
|
;; (elpy-use-ipython)
|
|
|
|
;; use flycheck not flymake with elpy
|
|
(when (require 'flycheck nil t)
|
|
(setq elpy-modules (delq 'elpy-module-flymake elpy-modules))
|
|
(add-hook 'elpy-mode-hook 'flycheck-mode))
|
|
|
|
;; enable py-autopep8 formatting on save
|
|
(require 'py-autopep8)
|
|
(defun python-mode-keys ()
|
|
"Modify python-mode local key map"
|
|
(local-set-key (kbd "C-c C-p") 'py-autopep8))
|
|
(add-hook 'python-mode-hook 'python-mode-keys)
|
|
(add-hook 'elpy-mode-hook 'py-autopep8-enable-on-save)
|
|
;;(setq python-flymake-command "\"c:/Program Files/Python37/Scripts/flake8.exe\"")
|
|
|
|
;;(setq python-check-command "\"c:/Program Files/Python37/Scripts/flake8.exe\"")
|
|
;; (setq elpy-rpc-python-command "\"c:/Program Files/Python37/pythonw.exe\" ")
|
|
(setq elpy-syntax-check-command python-check-command)
|
|
;; init.el ends here
|
|
(custom-set-variables
|
|
;; custom-set-variables was added by Custom.
|
|
;; If you edit it by hand, you could mess it up, so be careful.
|
|
;; Your init file should contain only one such instance.
|
|
;; If there is more than one, they won't work right.
|
|
'(custom-safe-themes
|
|
(quote
|
|
("274fa62b00d732d093fc3f120aca1b31a6bb484492f31081c1814a858e25c72e" default)))
|
|
'(package-selected-packages
|
|
(quote
|
|
(js2-mode js2-refactor xref-js2 python-django django-mode visual-regexp-steroids pcre2el vimrc-mode iedit transient magit dracula-theme py-autopep8 flycheck elpy ein better-defaults ssh-config-mode yaml-mode apache-mode web-mode))))
|
|
(custom-set-faces
|
|
;; custom-set-faces was added by Custom.
|
|
;; If you edit it by hand, you could mess it up, so be careful.
|
|
;; Your init file should contain only one such instance.
|
|
;; If there is more than one, they won't work right.
|
|
'(default ((t (:family "Roboto Mono" :foundry "outline" :slant normal :weight normal :height 113 :width normal)))))
|
|
;; Monkey patch
|
|
;;(defun quote-exe (path)
|
|
;; (if (string-match-p (regexp-quote " ") path)
|
|
;; (shell-quote-argument path)
|
|
;; path))
|
|
;;(defun quote-exe (path)
|
|
;; (replace-regexp-in-string " " "\\ " path)
|
|
|
|
;;
|
|
;;(advice-add 'executable-find :filter-return #'quote-exe)
|