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.
411 lines
18 KiB
411 lines
18 KiB
(require 'package)
|
|
(add-to-list 'package-archives
|
|
'("melpa" . "https://melpa.org/packages/"))
|
|
(package-initialize)
|
|
(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.
|
|
'(LaTeX-command "xelatex")
|
|
'(LaTeX-command-style
|
|
(quote
|
|
(("" "%(latex) %(file-line-error) %(extraopts) %S%(PDFout)"))))
|
|
'(TeX-engine (quote xetex))
|
|
'(custom-safe-themes
|
|
(quote
|
|
("a24c5b3c12d147da6cef80938dca1223b7c7f70f2f382b26308eba014dc4833a" "4aee8551b53a43a883cb0b7f3255d6859d766b6c5e14bcb01bed572fcbef4328" default)))
|
|
'(package-selected-packages
|
|
(quote
|
|
(helm-make helm-hoogle company-shell company company-dcd company-ghci company-ghc d-mode pyimpsort py-import-check yasnippet company-auctex auctex haskell-mode ruby-dev ruby-electric ruby-end ruby-tools tldr w3 yafolding xwidgete color-theme-sanityinc-solarized xkcd yalinum helm pdf-tools tablist projectile helm-projectile ac-helm mediawiki wiki-summary fcitx wc-mode spaceline color-theme-modern nyan-mode fancy-battery use-package vigenere flymd markdown-preview-mode markdown-mode+ markdown-mode material-theme gh-md sed-mode helm-rubygems-org zossima enh-ruby-mode emms-bilibili company-inf-ruby cmake-mode cmake-font-lock git-commit magit jedi company-jedi jedi-direx py-autopep8 px pulseaudio-control py-smart-operator pyimport py-isort eshell-prompt-extras csv-mode helm-systemd systemd ack))))
|
|
(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.
|
|
)
|
|
|
|
(fset 'yes-or-no-p 'y-or-n-p)
|
|
(setq confirm-nonexistent-file-or-buffer nil)
|
|
(setq inhibit-startup-screen t)
|
|
(setq next-line-add-newlines t)
|
|
|
|
(load-theme 'material t t)
|
|
(enable-theme 'material)
|
|
|
|
(require 'yalinum)
|
|
(global-yalinum-mode t)
|
|
|
|
(global-set-key (kbd "C-x C-b") 'ibuffer)
|
|
|
|
; (setq ido-enable-flex-matching t)
|
|
; (setq ido-everywhere t)
|
|
; (ido-mode 1)
|
|
|
|
(require 'helm-config)
|
|
(helm-mode 1)
|
|
(global-set-key (kbd "M-x") 'helm-M-x)
|
|
(global-set-key (kbd "<menu>") 'helm-M-x)
|
|
(global-set-key (kbd "M-y") 'helm-show-kill-ring)
|
|
(global-set-key (kbd "C-x C-f") 'helm-find-files)
|
|
(setq helm-M-x-fuzzy-match t)
|
|
(global-set-key (kbd "C-c h") 'helm-command-prefix)
|
|
(global-unset-key (kbd "C-x c"))
|
|
|
|
(require 'ac-helm)
|
|
(global-set-key (kbd "C-:") 'ac-complete-with-helm)
|
|
(define-key ac-complete-mode-map (kbd "C-:") 'ac-complete-with-helm)
|
|
|
|
;;(pdf-tools-install)
|
|
;;(setq pdf-info-epdfinfo-program "/usr/bin/epdfinfo2")
|
|
|
|
(require 'yafolding)
|
|
(defvar yafolding-mode-map
|
|
(let ((map (make-sparse-keymap)))
|
|
(define-key map (kbd "<C-S-return>") 'yafolding-hide-parent-element)
|
|
(define-key map (kbd "<C-M-return>") 'yafolding-toggle-all)
|
|
(define-key map (kbd "<C-return>") 'yafolding-toggle-element)
|
|
map))
|
|
(add-hook 'prog-mode-hook
|
|
(lambda () (yafolding-mode)))
|
|
|
|
;; (require 'auto-complete)
|
|
;; (add-hook 'prog-mode-hook
|
|
;; (lambda () (auto-complete-mode)))
|
|
|
|
(require 'wc-mode)
|
|
(add-hook 'text-mode-hook
|
|
(lambda () (wc-mode)))
|
|
|
|
(require 'company)
|
|
;; (add-hook 'prog-mode-hook
|
|
;; (lambda () (company-mode)))
|
|
(global-company-mode)
|
|
|
|
(require 'helm-company)
|
|
(eval-after-load 'company
|
|
'(progn
|
|
(define-key company-mode-map (kbd "C-:") 'helm-company)
|
|
(define-key company-active-map (kbd "C-:") 'helm-company)))
|
|
|
|
(require 'tide)
|
|
(defun setup-tide-mode ()
|
|
(interactive)
|
|
(tide-setup)
|
|
(flycheck-mode +1)
|
|
(setq flycheck-check-syntax-automatically '(save mode-enabled))
|
|
(eldoc-mode +1)
|
|
(tide-hl-identifier-mode +1))
|
|
|
|
(setq company-tooltip-align-annotations t)
|
|
|
|
(add-hook 'before-save-hook 'tide-format-before-save)
|
|
|
|
(add-hook 'typescript-mode-hook #'setup-tide-mode)
|
|
|
|
(when window-system
|
|
(set-frame-font "Fira Code Medium-11"))
|
|
|
|
(add-hook 'after-make-frame-functions (lambda (frame) (set-fontset-font t '(#Xe100 . #Xe16f) "Fira Code Symbol")))
|
|
(set-fontset-font t '(#Xe100 . #Xe16f) "Fira Code Symbol")
|
|
|
|
(defun my-correct-symbol-bounds (pretty-alist)
|
|
"Prepend a TAB character to each symbol in this alist,
|
|
this way compose-region called by prettify-symbols-mode
|
|
will use the correct width of the symbols
|
|
instead of the width measured by char-width."
|
|
(mapcar (lambda (el)
|
|
(setcdr el (string ?\t (cdr el)))
|
|
el)
|
|
pretty-alist))
|
|
|
|
(defun my-ligature-list (ligatures codepoint-start)
|
|
"Create an alist of strings to replace with
|
|
codepoints starting from codepoint-start."
|
|
(let ((codepoints (-iterate '1+ codepoint-start (length ligatures))))
|
|
(-zip-pair ligatures codepoints)))
|
|
|
|
;; list can be found at https://github.com/i-tu/Hasklig/blob/master/GlyphOrderAndAliasDB#L1588
|
|
(setq my-fira-code-ligatures
|
|
(let* ((ligs '("www" "**" "***" "**/" "*>" "*/" "\\\\" "\\\\\\"
|
|
"{-" "[]" "::" ":::" ":=" "!!" "!=" "!==" "-}"
|
|
"--" "---" "-->" "->" "->>" "-<" "-<<" "-~"
|
|
"#{" "#[" "##" "###" "####" "#(" "#?" "#_" "#_("
|
|
".-" ".=" ".." "..<" "..." "?=" "??" ";;" "/*"
|
|
"/**" "/=" "/==" "/>" "//" "///" "&&" "||" "||="
|
|
"|=" "|>" "^=" "$>" "++" "+++" "+>" "=:=" "=="
|
|
"===" "==>" "=>" "=>>" "<=" "=<<" "=/=" ">-" ">="
|
|
">=>" ">>" ">>-" ">>=" ">>>" "<*" "<*>" "<|" "<|>"
|
|
"<$" "<$>" "<!--" "<-" "<--" "<->" "<+" "<+>" "<="
|
|
"<==" "<=>" "<=<" "<>" "<<" "<<-" "<<=" "<<<" "<~"
|
|
"<~~" "</" "</>" "~@" "~-" "~=" "~>" "~~" "~~>" "%%"
|
|
"x" ":" "+" "+" "*")))
|
|
(my-correct-symbol-bounds (my-ligature-list ligs #Xe100))))
|
|
|
|
;; nice glyphs with fira code
|
|
(defun my-set-fira-code-ligatures ()
|
|
"Add fira code ligatures for use with prettify-symbols-mode."
|
|
(setq prettify-symbols-alist
|
|
(append my-fira-code-ligatures prettify-symbols-alist))
|
|
(prettify-symbols-mode))
|
|
|
|
(when (window-system)
|
|
(add-hook 'prog-mode-hook 'my-set-fira-code-ligatures)
|
|
(add-hook 'tex-mode-hook 'my-set-fira-code-ligatures))
|
|
|
|
|
|
;;(when (window-system)
|
|
;; (set-frame-font "Fira Code"))
|
|
;; (let ((alist '((33 . ".\\(?:\\(?:==\\|!!\\)\\|[!=]\\)")
|
|
;; (35 . ".\\(?:###\\|##\\|_(\\|[#(?[_{]\\)")
|
|
;; (36 . ".\\(?:>\\)")
|
|
;; (37 . ".\\(?:\\(?:%%\\)\\|%\\)")
|
|
;; (38 . ".\\(?:\\(?:&&\\)\\|&\\)")
|
|
;; (42 . ".\\(?:\\(?:\\*\\*/\\)\\|\\(?:\\*[*/]\\)\\|[*/>]\\)")
|
|
;; (43 . ".\\(?:\\(?:\\+\\+\\)\\|[+>]\\)")
|
|
;; (45 . ".\\(?:\\(?:-[>-]\\|<<\\|>>\\)\\|[<>}~-]\\)")
|
|
;; (46 . ".\\(?:\\(?:\\.[.<]\\)\\|[.=-]\\)")
|
|
;; (47 . ".\\(?:\\(?:\\*\\*\\|//\\|==\\)\\|[*/=>]\\)")
|
|
;; (48 . ".\\(?:x[a-zA-Z]\\)")
|
|
;; (58 . ".\\(?:::\\|[:=]\\)")
|
|
;; (59 . ".\\(?:;;\\|;\\)")
|
|
;; (60 . ".\\(?:\\(?:!--\\)\\|\\(?:~~\\|->\\|\\$>\\|\\*>\\|\\+>\\|--\\|<[<=-]\\|=[<=>]\\||>\\)\\|[*$+~/<=>|-]\\)")
|
|
;; (61 . ".\\(?:\\(?:/=\\|:=\\|<<\\|=[=>]\\|>>\\)\\|[<=>~]\\)")
|
|
;; (62 . ".\\(?:\\(?:=>\\|>[=>-]\\)\\|[=>-]\\)")
|
|
;; (63 . ".\\(?:\\(\\?\\?\\)\\|[:=?]\\)")
|
|
;; (91 . ".\\(?:]\\)")
|
|
;; (92 . ".\\(?:\\(?:\\\\\\\\\\)\\|\\\\\\)")
|
|
;; (94 . ".\\(?:=\\)")
|
|
;; (119 . ".\\(?:ww\\)")
|
|
;; (123 . ".\\(?:-\\)")
|
|
;; (124 . ".\\(?:\\(?:|[=|]\\)\\|[=>|]\\)")
|
|
;; (126 . ".\\(?:~>\\|~~\\|[>=@~-]\\)")
|
|
;; )
|
|
;; ))
|
|
;; (dolist (char-regexp alist)
|
|
;; (set-char-table-range composition-function-table (car char-regexp)
|
|
;; `([,(cdr char-regexp) 0 font-shape-gstring]))))
|
|
|
|
;; ;;; Fira code
|
|
;; ;; This works when using emacs --daemon + emacsclient
|
|
;; (add-hook 'after-make-frame-functions (lambda (frame) (set-fontset-font t '(#Xe100 . #Xe16f) "Fira Code Symbol")))
|
|
;; ;; This works when using emacs without server/client
|
|
;; (set-fontset-font t '(#Xe100 . #Xe16f) "Fira Code Symbol")
|
|
;; ;; I haven't found one statement that makes both of the above situations work, so I use both for now
|
|
|
|
;; (defconst fira-code-font-lock-keywords-alist
|
|
;; (mapcar (lambda (regex-char-pair)
|
|
;; `(,(car regex-char-pair)
|
|
;; (0 (prog1 ()
|
|
;; (compose-region (match-beginning 1)
|
|
;; (match-end 1)
|
|
;; ;; The first argument to concat is a string containing a literal tab
|
|
;; ,(concat " " (list (decode-char 'ucs (cadr regex-char-pair)))))))))
|
|
;; '(("\\(www\\)" #Xe100)
|
|
;; ("[^/]\\(\\*\\*\\)[^/]" #Xe101)
|
|
;; ("\\(\\*\\*\\*\\)" #Xe102)
|
|
;; ("\\(\\*\\*/\\)" #Xe103)
|
|
;; ("\\(\\*>\\)" #Xe104)
|
|
;; ("[^*]\\(\\*/\\)" #Xe105)
|
|
;; ("\\(\\\\\\\\\\)" #Xe106)
|
|
;; ("\\(\\\\\\\\\\\\\\)" #Xe107)
|
|
;; ("\\({-\\)" #Xe108)
|
|
;; ("\\(\\[\\]\\)" #Xe109)
|
|
;; ("\\(::\\)" #Xe10a)
|
|
;; ("\\(:::\\)" #Xe10b)
|
|
;; ("[^=]\\(:=\\)" #Xe10c)
|
|
;; ("\\(!!\\)" #Xe10d)
|
|
;; ("\\(!=\\)" #Xe10e)
|
|
;; ("\\(!==\\)" #Xe10f)
|
|
;; ("\\(-}\\)" #Xe110)
|
|
;; ("\\(--\\)" #Xe111)
|
|
;; ("\\(---\\)" #Xe112)
|
|
;; ("\\(-->\\)" #Xe113)
|
|
;; ("[^-]\\(->\\)" #Xe114)
|
|
;; ("\\(->>\\)" #Xe115)
|
|
;; ("\\(-<\\)" #Xe116)
|
|
;; ("\\(-<<\\)" #Xe117)
|
|
;; ("\\(-~\\)" #Xe118)
|
|
;; ("\\(#{\\)" #Xe119)
|
|
;; ("\\(#\\[\\)" #Xe11a)
|
|
;; ("\\(##\\)" #Xe11b)
|
|
;; ("\\(###\\)" #Xe11c)
|
|
;; ("\\(####\\)" #Xe11d)
|
|
;; ("\\(#(\\)" #Xe11e)
|
|
;; ("\\(#\\?\\)" #Xe11f)
|
|
;; ("\\(#_\\)" #Xe120)
|
|
;; ("\\(#_(\\)" #Xe121)
|
|
;; ("\\(\\.-\\)" #Xe122)
|
|
;; ("\\(\\.=\\)" #Xe123)
|
|
;; ("\\(\\.\\.\\)" #Xe124)
|
|
;; ("\\(\\.\\.<\\)" #Xe125)
|
|
;; ("\\(\\.\\.\\.\\)" #Xe126)
|
|
;; ("\\(\\?=\\)" #Xe127)
|
|
;; ("\\(\\?\\?\\)" #Xe128)
|
|
;; ("\\(;;\\)" #Xe129)
|
|
;; ("\\(/\\*\\)" #Xe12a)
|
|
;; ("\\(/\\*\\*\\)" #Xe12b)
|
|
;; ("\\(/=\\)" #Xe12c)
|
|
;; ("\\(/==\\)" #Xe12d)
|
|
;; ("\\(/>\\)" #Xe12e)
|
|
;; ("\\(//\\)" #Xe12f)
|
|
;; ("\\(///\\)" #Xe130)
|
|
;; ("\\(&&\\)" #Xe131)
|
|
;; ("\\(||\\)" #Xe132)
|
|
;; ("\\(||=\\)" #Xe133)
|
|
;; ("[^|]\\(|=\\)" #Xe134)
|
|
;; ("\\(|>\\)" #Xe135)
|
|
;; ("\\(\\^=\\)" #Xe136)
|
|
;; ("\\(\\$>\\)" #Xe137)
|
|
;; ("\\(\\+\\+\\)" #Xe138)
|
|
;; ("\\(\\+\\+\\+\\)" #Xe139)
|
|
;; ("\\(\\+>\\)" #Xe13a)
|
|
;; ("\\(=:=\\)" #Xe13b)
|
|
;; ("[^!/]\\(==\\)[^>]" #Xe13c)
|
|
;; ("\\(===\\)" #Xe13d)
|
|
;; ("\\(==>\\)" #Xe13e)
|
|
;; ("[^=]\\(=>\\)" #Xe13f)
|
|
;; ("\\(=>>\\)" #Xe140)
|
|
;; ("\\(<=\\)" #Xe141)
|
|
;; ("\\(=<<\\)" #Xe142)
|
|
;; ("\\(=/=\\)" #Xe143)
|
|
;; ("\\(>-\\)" #Xe144)
|
|
;; ("\\(>=\\)" #Xe145)
|
|
;; ("\\(>=>\\)" #Xe146)
|
|
;; ("[^-=]\\(>>\\)" #Xe147)
|
|
;; ("\\(>>-\\)" #Xe148)
|
|
;; ("\\(>>=\\)" #Xe149)
|
|
;; ("\\(>>>\\)" #Xe14a)
|
|
;; ("\\(<\\*\\)" #Xe14b)
|
|
;; ("\\(<\\*>\\)" #Xe14c)
|
|
;; ("\\(<|\\)" #Xe14d)
|
|
;; ("\\(<|>\\)" #Xe14e)
|
|
;; ("\\(<\\$\\)" #Xe14f)
|
|
;; ("\\(<\\$>\\)" #Xe150)
|
|
;; ("\\(<!--\\)" #Xe151)
|
|
;; ("\\(<-\\)" #Xe152)
|
|
;; ("\\(<--\\)" #Xe153)
|
|
;; ("\\(<->\\)" #Xe154)
|
|
;; ("\\(<\\+\\)" #Xe155)
|
|
;; ("\\(<\\+>\\)" #Xe156)
|
|
;; ("\\(<=\\)" #Xe157)
|
|
;; ("\\(<==\\)" #Xe158)
|
|
;; ("\\(<=>\\)" #Xe159)
|
|
;; ("\\(<=<\\)" #Xe15a)
|
|
;; ("\\(<>\\)" #Xe15b)
|
|
;; ("[^-=]\\(<<\\)" #Xe15c)
|
|
;; ("\\(<<-\\)" #Xe15d)
|
|
;; ("\\(<<=\\)" #Xe15e)
|
|
;; ("\\(<<<\\)" #Xe15f)
|
|
;; ("\\(<~\\)" #Xe160)
|
|
;; ("\\(<~~\\)" #Xe161)
|
|
;; ("\\(</\\)" #Xe162)
|
|
;; ("\\(</>\\)" #Xe163)
|
|
;; ("\\(~@\\)" #Xe164)
|
|
;; ("\\(~-\\)" #Xe165)
|
|
;; ("\\(~=\\)" #Xe166)
|
|
;; ("\\(~>\\)" #Xe167)
|
|
;; ("[^<]\\(~~\\)" #Xe168)
|
|
;; ("\\(~~>\\)" #Xe169)
|
|
;; ("\\(%%\\)" #Xe16a)
|
|
;; ;; ("\\(x\\)" #Xe16b) This ended up being hard to do properly so i'm leaving it out.
|
|
;; ("[^:=]\\(:\\)[^:=]" #Xe16c)
|
|
;; ("[^\\+<>]\\(\\+\\)[^\\+<>]" #Xe16d)
|
|
;; ("[^\\*/<>]\\(\\*\\)[^\\*/<>]" #Xe16f))))
|
|
|
|
;; (defun add-fira-code-symbol-keywords ()
|
|
;; (font-lock-add-keywords nil fira-code-font-lock-keywords-alist))
|
|
|
|
;; (add-hook 'prog-mode-hook
|
|
;; #'add-fira-code-symbol-keywords)
|
|
|
|
(nyan-mode)
|
|
|
|
(use-package spaceline
|
|
:init
|
|
(progn
|
|
(require 'spaceline-config)
|
|
(setq powerline-default-separator 'slant)
|
|
(setq spaceline-window-numbers-unicode t)
|
|
(setq spaceline-workspace-numbers-unicode t)
|
|
(setq spaceline-separator-dir-left '(left . left))
|
|
(setq spaceline-separator-dir-right '(right . right))
|
|
(setq powerline-height 27)
|
|
(spaceline-toggle-battery-on)
|
|
(spaceline-toggle-buffer-encoding-abbrev-on)
|
|
(spaceline-toggle-buffer-modified-on)
|
|
(spaceline-toggle-major-mode-on)
|
|
(spaceline-toggle-minor-modes-on)
|
|
(spaceline-toggle-hud-on)
|
|
(spaceline-toggle-projectile-root-on)
|
|
(spaceline-toggle-line-column-on)
|
|
(spaceline-toggle-input-method-on)
|
|
(spaceline-toggle-nyan-cat-on)
|
|
(spaceline-emacs-theme)))
|
|
|
|
(add-hook 'text-mode-hook #'wc-mode)
|
|
(add-hook 'text-mode-hook #'ispell-minor-mode)
|
|
|
|
(add-hook 'after-init-hook #'fancy-battery-mode)
|
|
|
|
(setq read-quoted-char-radix 16)
|
|
|
|
(setq default-input-method "chinese-py-punct")
|
|
|
|
(setq company-minimum-prefix-length 1)
|
|
|
|
(global-set-key (kbd "<mouse-8>") 'describe-function)
|
|
(global-set-key (kbd "<mouse-9>") 'company-ispell)
|
|
|
|
;; make these keys behave like normal browser
|
|
;; (define-key xwidget-webkit-mode-map [mouse-4] 'xwidget-webkit-scroll-down)
|
|
;; (define-key xwidget-webkit-mode-map [mouse-5] 'xwidget-webkit-scroll-up)
|
|
;; (define-key xwidget-webkit-mode-map (kbd "<up>") 'xwidget-webkit-scroll-down)
|
|
;; (define-key xwidget-webkit-mode-map (kbd "<down>") 'xwidget-webkit-scroll-up)
|
|
;; (define-key xwidget-webkit-mode-map (kbd "M-w") 'xwidget-webkit-copy-selection-as-kill)
|
|
;; (define-key xwidget-webkit-mode-map (kbd "C-c") 'xwidget-webkit-copy-selection-as-kill)
|
|
|
|
;; adapt webkit according to window configuration chagne automatically
|
|
;; without this hook, every time you change your window configuration,
|
|
;; you must press 'a' to adapt webkit content to new window size
|
|
(add-hook 'window-configuration-change-hook (lambda ()
|
|
(when (equal major-mode 'xwidget-webkit-mode)
|
|
(xwidget-webkit-adjust-size-dispatch))))
|
|
|
|
;; by default, xwidget reuses previous xwidget window,
|
|
;; thus overriding your current website, unless a prefix argument
|
|
;; is supplied
|
|
;;
|
|
;; This function always opens a new website in a new window
|
|
(defun xwidget-browse-url-no-reuse (url &optional session)
|
|
(interactive (progn
|
|
(require 'browse-url)
|
|
(browse-url-interactive-arg "xwidget-webkit URL: "
|
|
)))
|
|
(xwidget-webkit-browse-url url t))
|
|
|
|
;; make xwidget default browser
|
|
(setq browse-url-browser-function (lambda (url session)
|
|
(other-window 1)
|
|
(xwidget-browse-url-no-reuse url)))
|
|
|
|
(setq LaTeX-using-Biber t)
|
|
|
|
(eval-after-load "ruby-mode"
|
|
'(add-hook 'ruby-mode-hook 'ruby-electric-mode))
|
|
|
|
(add-to-list 'company-backends 'company-jedi)
|
|
|
|
(pulseaudio-control-default-keybindings)
|
|
|
|
(add-hook 'python-mode-hook 'py-smart-operator-mode)
|
|
(add-hook 'python-mode-hook 'py-autopep8-enable-on-save)
|
|
(add-hook 'python-mode-hook 'jedi:setup)
|
|
|
|
(add-hook 'before-save-hook 'py-isort-before-save)
|
|
|
|
(with-eval-after-load "esh-opt"
|
|
(autoload 'epe-theme-lambda "eshell-prompt-extras")
|
|
(setq eshell-highlight-prompt nil
|
|
eshell-prompt-function 'epe-theme-lambda))
|