X-Git-Url: http://47.100.26.94:8080/?a=blobdiff_plain;f=emacs.d%2Fconfig.org;h=aa75064ba19b6b7836643e5bc8484b28fe6ec190;hb=ec3015036271d6b57b8f5f20b75643629a22e046;hp=df5100fbf144af8693014d77cc4a90f834c9debc;hpb=4a763115492084f343d03584ae774b75265d3315;p=dotfiles.git diff --git a/emacs.d/config.org b/emacs.d/config.org index df5100f..aa75064 100644 --- a/emacs.d/config.org +++ b/emacs.d/config.org @@ -60,6 +60,8 @@ Set system PATH and emacs exec path (when (display-graphic-p) (fringe-mode '(0 . 0))) + ;; (setq-default indicate-empty-lines t) + ;; (setq-default indicate-abuffer-boundaries 'right) #+END_SRC *** Custom file @@ -118,6 +120,11 @@ Make a temp directory for all cache/history files (setq large-file-warning-threshold nil) #+END_SRC +*** Xterm mode +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (unless (display-graphic-p) + (xterm-mouse-mode)) +#+END_SRC * Package Management Tools ** Use-package Using [[https://github.com/jwiegley/use-package][use-package]] to manage emacs packages @@ -180,7 +187,7 @@ Check out [[http://tapoueh.org/emacs/el-get.html][el-get]]. (if window-system (defvar sd/fixed-font-family (cond ((x-list-fonts "Hasklig") "Hasklig") - ((x-list-fonts "Source Code Pro") "Source Code Pro:weight") ;; weigth=light + ((x-list-fonts "Source Code Pro") "Source Code Pro:weight=light") ;; weigth=light ((x-list-fonts "Anonymous Pro") "Anonymous Pro") ((x-list-fonts "M+ 1mn") "M+ 1mn")) "The fixed width font based on what is installed, `nil' if not defined.")) @@ -601,9 +608,10 @@ set height in mode line #+BEGIN_SRC emacs-lisp :tangle yes :results silent (use-package ido :ensure t - :init (setq ido-enable-flex-matching nil + :init (setq ido-enable-flex-matching t ido-ignore-extensions t ido-use-virtual-buffers t + ido-use-faces nil ido-everywhere t) (setq ido-save-directory-list-file (concat sd-temp-directory "ido.last")) :config @@ -616,15 +624,6 @@ set height in mode line (define-key ido-file-completion-map (kbd "C-w") #'ido-delete-backward-word-updir) (define-key ido-file-dir-completion-map (kbd "C-w") #'ido-delete-backward-updir) ;; (define-key ido-file-dir-completion-map (kbd "C-i") #'ido-copy-current-word) - - ;; (dolist (map (list - ;; ido-buffer-completion-map - ;; ido-file-completion-map - ;; ido-file-dir-completion-map - ;; ido-common-completion-map)) - ;; (define-key map (kbd "C-w") #'ido-delete-backward-word-updir) - ;; ;; (define-key map (kbd "C-i") #'ido-copy-current-file-name) - ;; ) ) (icomplete-mode t) @@ -634,8 +633,6 @@ set height in mode line #+BEGIN_SRC emacs-lisp :tangle yes :results silent (use-package flx-ido :ensure t - :init (setq ido-enable-flex-matching nil - ido-use-faces nil) :config (flx-ido-mode nil)) #+END_SRC @@ -761,7 +758,7 @@ Always indents header, and hide header leading starts so that no need type =#+ST (setq org-ditaa-jar-path "/usr/local/Cellar/ditaa/0.9/libexec/ditaa0_9.jar") (unless (file-exists-p org-ditaa-jar-path) - (warn "seudut: ditaa.jar not found at %s " org-ditaa-jar-path)) + (message "seudut: ditaa.jar not found at %s " org-ditaa-jar-path)) (org-babel-do-load-languages 'org-babel-load-languages '((python . t) @@ -1168,35 +1165,63 @@ extend org-mode's easy templates, refer to [[http://coldnew.github.io/coldnew-em *** variable-pitch-mode and fixed-pitch-mode [[https://yoo2080.wordpress.com/2013/05/30/monospace-font-in-tables-and-source-code-blocks-in-org-mode-proportional-font-in-other-parts/][monospace font in tables and source code blocks in org-mode, proportional font in other parts]] #+BEGIN_SRC emacs-lisp :tangle yes :results silent - (unless (find-font (font-spec :name "Ubuntu Mono")) - (warn "Font not found Ubuntu Mono")) - (unless (find-font (font-spec :name "Source Code Pro")) - (warn "Font not found Source Code Pro")) - (unless (find-font (font-spec :name "Source Sans Pro")) - (warn "Font not found Source Sans Pro")) + (when (display-graphic-p) + (unless (find-font (font-spec :name "Ubuntu Mono")) + (warn "Font not found Ubuntu Mono")) + (unless (find-font (font-spec :name "Source Code Pro")) + (warn "Font not found Source Code Pro")) + (unless (find-font (font-spec :name "Source Sans Pro")) + (warn "Font not found Source Sans Pro"))) (set-face-attribute 'variable-pitch nil :font "Source Sans Pro" :height 160) (set-face-attribute 'fixed-pitch nil :font "Source Code Pro" :height (face-attribute 'default :height)) - ;; (add-hook 'text-mode-hook 'variable-pitch-mode) ;; Install Ubuntu Mono fonts and apply it in org-table to align Chinese fonts - (with-eval-after-load "org" - (mapc (lambda (face) - (set-face-attribute face nil :inherit 'fixed-pitch)) - (list 'org-code 'org-block 'org-block-background 'org-block-begin-line 'org-block-end-line)) - (set-face-attribute 'org-table nil :family "Ubuntu Mono" :height 140) - (set-face-attribute 'org-formula nil :family "Ubuntu Mono" :height 140) - ;; org-special-keyword inherited from font-lock-keywork originally; as org is changed to variable-pitch, it cause - ;; the font in special-keywords are not monospace - (set-face-attribute 'org-special-keyword nil :inherit '(font-lock-keyword-face fixed-pitch)) - ;; same as above - (set-face-attribute 'org-verbatim nil :inherit '(shadow fixed-pitch)) + ;; (with-eval-after-load "org" + ;; (mapc (lambda (face) + ;; (set-face-attribute face nil :inherit 'fixed-pitch)) + ;; (list + ;; 'org-code + ;; 'org-block + ;; 'org-block-background + ;; 'org-block-begin-line + ;; 'org-block-end-line)) + ;; (set-face-attribute 'org-table nil :family "Ubuntu Mono" :height 140) + ;; (set-face-attribute 'org-formula nil :family "Ubuntu Mono" :height 140) + ;; ;; org-special-keyword inherited from font-lock-keywork originally; as org is changed to variable-pitch, it cause + ;; ;; the font in special-keywords are not monospace + ;; (set-face-attribute 'org-special-keyword nil :inherit '(font-lock-keyword-face fixed-pitch)) + ;; ;; same as above + ;; (set-face-attribute 'org-verbatim nil :inherit '(shadow fixed-pitch)) + ;; (set-face-attribute 'org-block-begin-line nil :inherit 'shadow :slant 'italic :foreground nil) + ;; (set-face-attribute 'org-block-end-line nil :inherit 'shadow :slant 'italic :foreground nil) - ;; fix indent broken by variable-pitch-mode - ;; http://emacs.stackexchange.com/questions/26864/variable-pitch-face-breaking-indentation-in-org-mode - (require 'org-indent) - (set-face-attribute 'org-indent nil :inherit '(org-hide fixed-pitch))) + ;; ;; fix indent broken by variable-pitch-mode + ;; ;; http://emacs.stackexchange.com/questions/26864/variable-pitch-face-breaking-indentation-in-org-mode + ;; (require 'org-indent) + ;; (set-face-attribute 'org-indent nil :inherit '(org-hide fixed-pitch))) + + ;; (with-eval-after-load "org" + ;; (let ((default-font-size (- (face-attribute 'default :height) (if (display-graphic-p) 20 0)))) + ;; (set-face-attribute 'org-code nil :height default-font-size) + ;; (set-face-attribute 'org-block nil :height default-font-size) + ;; (set-face-attribute 'org-block-begin-line nil :background nil :foreground nil :inherit 'shadow :slant 'italic :height default-font-size) + ;; (set-face-attribute 'org-block-end-line nil :background nil :foreground nil :inherit 'shadow :slant 'italic :height default-font-size) + ;; (when (find-font (font-spec :name "Ubuntu Mono")) + ;; (set-face-attribute 'org-table nil :family "Ubutu Mono" :height default-font-size) + ;; (set-face-attribute 'org-formula nil :family "Ubutu Mono" :height default-font-size)))) + + (add-hook 'org-mode-hook + (lambda () + (let ((default-font-size (- (face-attribute 'default :height) (if (display-graphic-p) 20 0)))) + (set-face-attribute 'org-code nil :height default-font-size) + (set-face-attribute 'org-block nil :height default-font-size) + (set-face-attribute 'org-block-begin-line nil :background nil :foreground nil :inherit 'shadow :slant 'italic :height default-font-size) + (set-face-attribute 'org-block-end-line nil :background nil :foreground nil :inherit 'shadow :slant 'italic :height default-font-size) + (when (find-font (font-spec :name "Ubuntu Mono")) + (set-face-attribute 'org-table nil :family "Ubutu Mono" :height default-font-size) + (set-face-attribute 'org-formula nil :family "Ubutu Mono" :height default-font-size))))) #+END_SRC Also correct the face of =org-meta-line= in =org-table= @@ -1458,6 +1483,7 @@ I like [[https://github.com/coldnew/linum-relative][linum-relative]], just like ** Save File Position #+BEGIN_SRC emacs-lisp :tangle yes :results silent (require 'saveplace) + (setq save-place-file "~/.emacs.d/temp/saveplace") (setq-default save-place t) (setq save-place-forget-unreadable-files t) (setq save-place-skip-check-regexp "\\`/\\(?:cdrom\\|floppy\\|mnt\\|/[0-9]\\|\\(?:[^@/:]*@\\)?[^@/:]*[^@/:.]:\\)") @@ -1492,12 +1518,12 @@ Type =o= to go to the link ** Smart Parens #+BEGIN_SRC emacs-lisp :tangle yes :results silent - (use-package smartparens - :ensure t - :config - (progn - (require 'smartparens-config) - (add-hook 'prog-mode-hook 'smartparens-mode))) + ;; (use-package smartparens + ;; :ensure t + ;; :config + ;; (progn + ;; (require 'smartparens-config) + ;; (add-hook 'prog-mode-hook 'smartparens-mode))) #+END_SRC ** Ace-Windows @@ -1726,29 +1752,40 @@ as a http download client tool (car (last (split-string url "/" t)))))))))) #+END_SRC -** Elscreen -Fix one elscreen issue when startup emacs https://github.com/knu/elscreen/issues/6 +* Dired +** Dired basic #+BEGIN_SRC emacs-lisp :tangle yes :results silent - ;; (use-package elscreen - ;; :ensure t - ;; :init - ;; (setq elscreen-tab-display-control nil) - ;; :config - ;; ;; (elscreen-start) - ;; (set-face-attribute 'elscreen-tab-current-screen-face nil :foreground "black" :background "yellow") - ;; (set-face-attribute 'elscreen-tab-other-screen-face nil :foreground "black" :background "disabledControlTextColor" :underline nil) - ;; ;; (global-unset-key (kbd)); M-TAB switch screen - ;; ;; (global-set-key (kbd "s-`") '(lambda () (interactive) (elscreen-goto 0))) - ;; ;; (dotimes (i 8) - ;; ;; (global-set-key (kbd (concat "s-" (number-to-string (+ i 1)))) - ;; ;; `(lambda () (interactive) (elscreen-goto ,(+ i 1))))) - ;; ;; (global-set-key (kbd "s-t") 'elscreen-create) - ;; ;; (global-set-key (kbd "s-n") 'elscreen-next) - ;; ;; (global-set-key (kbd "s-p") 'elscreen-previous) - ;; ) + (setq dired-dwim-target t) + + (use-package dired-details + :ensure t + :config + (setq-default dired-details-hidden-string "--- ") + (dired-details-install)) +#+END_SRC + +** Dired functions +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (defun sd/dired-next-line (count) + "Move to next line, and always focus on the file name." + (interactive "p") + (dired-next-line count) + (dired-move-to-filename)) + + (defun sd/dired-previous-line (count) + "Move to previous line, and always focus on the file name." + (interactive "p") + (dired-previous-line count) + (dired-move-to-filename)) + + (defun sd/dired-up-directory () + "Go to up directory" + (interactive) + (let ((old (current-buffer))) + (dired-up-directory) + (kill-buffer old))) #+END_SRC -* Dired ** Dired bindings =C-o= is defined as a global key for window operation, here unset it in dired mode #+BEGIN_SRC emacs-lisp :tangle yes :results silent @@ -2125,18 +2162,38 @@ Refer, [[http://emacs.stackexchange.com/questions/7908/how-to-make-yasnippet-and #+END_SRC * Programming Language -** Emacs Lisp +** Color identiifiers mode #+BEGIN_SRC emacs-lisp :tangle yes :results silent (use-package color-identifiers-mode :ensure t :init - (add-hook 'emacs-lisp-mode-hook 'color-identifiers-mode) - + (dolist (mode '(emacs-lisp-mode-hook + c-mode-hook + c++-mode-hook)) + (add-hook mode #'color-identifiers-mode)) :diminish color-identifiers-mode) (global-prettify-symbols-mode t) #+END_SRC +** Font lock face + +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (set-face-attribute 'font-lock-keyword-face nil :foreground "#F92672" :weight 'bold) + (set-face-attribute 'font-lock-builtin-face nil :weight 'bold) + (set-face-attribute 'font-lock-function-name-face nil :foreground "#A6E22E" :weight 'normal :slant 'normal) + (set-face-attribute 'font-lock-variable-name-face nil :foreground "#00FF00") + + (font-lock-add-keywords 'c-mode + ;; highlight %s \n + '(("\\([%\\][a-zA-Z]\\)" (1 font-lock-keyword-face prepend)) + ("[^[:alpha:]]\\([[:digit:]]*\\)[^[:alpha:]]" (1 font-lock-constant-face append)) + ;; hex number + ("[^[:alpha:]]\\(0[x\\|X][0-9a-fA-F]*\\)[^[:alpha:]]" (1 font-lock-constant-face append)) + ;; hightlight the function call + ("\\s\"?\\(\\(\\sw\\|\\s_\\)+\\(<-\\)?\\)\\s\"?*\\s-*(" (1 font-lock-function-name-face))) t) +#+END_SRC +** Emacs Lisp In Lisp Mode, =M-o= is defined, but I use this for global hydra window. So here disable this key bindings in =lispy-mode-map= after loaded. see [[http://stackoverflow.com/questions/298048/how-to-handle-conflicting-keybindings][here]] #+BEGIN_SRC emacs-lisp :tangle yes :results silent @@ -2194,13 +2251,10 @@ Refer [[https://www.emacswiki.org/emacs/AutoInsertMode][AutoInsertMode]] Wiki (font-lock-add-keywords 'cperl-mode '(("\\(say\\)" . cperl-nonoverridable-face) ("\\([0-9.]\\)*" . font-lock-constant-face) - ("\".*\\(\\\n\\).*\"" . font-lock-constant-face) - ("\n" . font-lock-constant-face) + ("\".*\\(\\\n\\).*\"" 1 font-lock-constant-face prepend) + ("\n" 0 font-lock-constant-face prepend) + ;; ("[%\\][[:alpha:]]" . font-lock-constant-face) ("\\(^#!.*\\)$" . cperl-nonoverridable-face))) - - ;; (font-lock-add-keywords 'Man-mode - ;; '(("\\(NAME\\)" . font-lock-function-name-face))) - #+END_SRC ** C & C++ @@ -2210,8 +2264,8 @@ C/C++ ide tools 3. tags jump *** c/c++ style #+BEGIN_SRC emacs-lisp :tangle yes :results silent - (setq c-default-style "stroustrup" - c-basic-offset 4) + ;; (setq c-default-style "stroustrup" + ;; c-basic-offset 4) ;; "C-M-j" is my global binding for avy goto line below ;; disable it in c mode @@ -2225,6 +2279,31 @@ C/C++ ide tools (add-to-list 'auto-mode-alist '("\\.mm\\'" . objc-mode)) (setq c-hungry-delete-key t) + + + ;; Looks `c-hanging-braces-alist' doesn't work as expected when `electric-pair-mode' is enabled. + (electric-pair-mode 1) + + (defconst sd/c-style + '("stroustrup" + (c-tab-always-indent . t) + (c-basic-offset . 4) + (c-hanging-braces-alist . ((substatement-open before) + (statement-block-intro before))) + (c-hanging-colons-alist . ()) + (c-echo-syntactic-information-p . nil) + (c-hanging-semi&comma-criteria . ())) + "My C programming style") + + (c-add-style "sd-c-style" sd/c-style) + + (setq c-default-style "sd-c-style") + + (add-hook 'c-mode-hook '(lambda () + (c-toggle-auto-newline 1) + (c-set-style "sd-c-style"))) + + ;; (advice-add 'c-electric-brace :after (lambda (arg) "Add new line after insert {}" (newline-and-indent))) #+END_SRC *** irony @@ -2437,21 +2516,6 @@ Set the environments vairables in compilation mode (define-key compilation-mode-map (kbd "q") (lambda () (interactive) (quit-window t))) (define-key compilation-mode-map (kbd "r") #'recompile)) - - ;; (loop for (mode . program) in '( - ;; (lua-mode-hook . "lua") - ;; (perl-mode-hook . "perl") - ;; (python-mode-hook . "python") - ;; (shell-mode-hook . "sh")) - ;; do (add-hook mode `(lambda () - ;; (unless (or (file-exists-p "makefile") - ;; (file-exists-p "Makefile")) - ;; (set (make-local-variable 'compile-command) - ;; (concat ,program - ;; " " - ;; (if buffer-file-name - ;; (shell-quote-argument buffer-file-name)))))))) - ;; here note dynamic binding the value of vv, otherwise it will resport error when run the hook. ;; https://emacs.stackexchange.com/questions/10394/scope-in-lambda (dolist (vv '( @@ -2469,22 +2533,6 @@ Set the environments vairables in compilation mode (shell-quote-argument buffer-file-name)))))))) (global-set-key (kbd "s-r") 'compile) - - ;; Make compilaition window always below - (defun my-compilation-hook () - (when (not (get-buffer-window "*compilation*")) - (split-window-vertically) - ;; (save-selected-window - ;; (save-excursion - ;; (let* ((w (split-window-vertically)) - ;; (h (window-height w))) - ;; (select-window w) - ;; (switch-to-buffer "*compilation*") - ;; (shrink-window (- h compilation-window-height))))) - )) - ;; (add-hook 'compilation-mode-hook 'my-compilation-hook) - - #+END_SRC * Auto-Insert @@ -2633,12 +2681,12 @@ Emacs lisp auto-insert, based on the default module in =autoinsert.el=, but repl ("\\.markdown\\'" . markdown-mode)) :init (setq markdown-command "multimarkdown")) - (add-hook 'gfm-mode-hook (lambda () - (set-face-attribute 'markdown-inline-code-face nil :inherit 'fixed-pitch) - (set-face-attribute 'markdown-pre-face nil :inherit 'fixed-pitch))) - (with-eval-after-load "gfm-mode" - (set-face-attribute 'markdown-inline-code-face nil :inherit 'fixed-pitch) - (set-face-attribute 'markdown-pre-face nil :inherit 'fixed-pitch)) + ;; (add-hook 'gfm-mode-hook (lambda () + ;; (set-face-attribute 'markdown-inline-code-face nil :inherit 'fixed-pitch) + ;; (set-face-attribute 'markdown-pre-face nil :inherit 'fixed-pitch))) + ;; (with-eval-after-load "gfm-mode" + ;; (set-face-attribute 'markdown-inline-code-face nil :inherit 'fixed-pitch) + ;; (set-face-attribute 'markdown-pre-face nil :inherit 'fixed-pitch)) #+END_SRC #+BEGIN_SRC emacs-lisp :tangle yes :results silent @@ -2891,7 +2939,7 @@ config from [[http://www.kirang.in/2014/11/13/emacs-as-email-client-with-offline (:mailing-list . 20) (:thread-subject . 70) (:human-date . 16)))) - (warn "seudut:mu4e not installed, it won't work.")) + (message "seudut:mu4e not installed, it won't work.")) #+END_SRC ** Smtp - send mail @@ -3028,6 +3076,31 @@ Use =ESC= to exit minibuffer. Also I map =Super-h= the same as =C-g= (let ((root (projectile-project-root))) (with-current-buffer buffer (cd root)))))) + + + + ;; https://emacs.stackexchange.com/questions/16497/how-to-exclude-files-from-projectile + (setq projectile-enable-caching t) + (if (executable-find "rg") + (progn + (defconst modi/rg-arguments + `("--line-number" ; line numbers + "--smart-case" + "--follow" ; follow symlinks + "--mmap") ; apply memory map optimization when possible + "Default rg arguments used in the functions in `projectile' package.") + + (defun modi/advice-projectile-use-rg () + "Always use `rg' for getting a list of all files in the project." + (mapconcat 'identity + (append '("\\rg") ; used unaliased version of `rg': \rg + modi/rg-arguments + '("--null" ; output null separated results, + "--files")) ; get file names matching the regex '' (all files) + " ")) + + (advice-add 'projectile-get-ext-command :override #'modi/advice-projectile-use-rg)) + (message "rg is not found")) #+END_SRC *** project config =super= keybindings @@ -3514,7 +3587,8 @@ stolen from [[https://github.com/mariolong/emacs.d/blob/f6a061594ef1b5d1f4750e9d (use-package swiper :ensure t :init - (setq ivy-use-virtual-buffers t) + (setq ivy-use-virtual-buffers nil) + (setq ivy-wrap t) (set-face-attribute 'ivy-current-match nil :background "Orange" :foreground "black") :config (ivy-mode) @@ -3526,6 +3600,9 @@ stolen from [[https://github.com/mariolong/emacs.d/blob/f6a061594ef1b5d1f4750e9d (define-key swiper-map (kbd "M-.") (lambda () (interactive) (insert (format "%s" (with-ivy-window (thing-at-point 'symbol))))))) + + (with-eval-after-load "ivy" + (define-key ivy-minibuffer-map (kbd "C-o") 'ivy-dispatching-done)) #+END_SRC ** Expand region map @@ -3637,8 +3714,6 @@ stolen from [[https://github.com/mariolong/emacs.d/blob/f6a061594ef1b5d1f4750e9d #+BEGIN_SRC emacs-lisp :tangle yes :results silent (org-babel-load-file "~/.emacs.d/emacs-evil.org") #+END_SRC - - * Note ** Check if emacs is in terminal of graphic mode Use =display-graphic-p= instead of =window-system= @@ -3653,6 +3728,7 @@ blog with modify list draw one line top of the windows * test +This is a test. #+BEGIN_SRC emacs-lisp :tangle yes :results silent ;; test local mode line ;; (add-to-list 'load-path "~/.emacs.d/elisp")