X-Git-Url: http://47.100.26.94:8080/?a=blobdiff_plain;f=emacs.d%2Fconfig.org;h=5ab2df74376ea43ac5f092ba2f813e94ac788c28;hb=94e41398d7f8c57c46067a6b7fb4a8eff87d4621;hp=aa8ddf30b3283fa1b8df9321c5f16b0bb9b882cc;hpb=1c274f028dea54905fa987601161f6e95947485d;p=dotfiles.git diff --git a/emacs.d/config.org b/emacs.d/config.org index aa8ddf3..5ab2df7 100644 --- a/emacs.d/config.org +++ b/emacs.d/config.org @@ -111,31 +111,29 @@ Make a temp directory for all cache/history files * Package Management Tools ** Use-package - Using [[https://github.com/jwiegley/use-package][use-package]] to manage emacs packages - #+BEGIN_SRC emacs-lisp :tangle yes :results silent - (unless (package-installed-p 'use-package) (package-refresh-contents) (package-install 'use-package)) (require 'use-package) - #+END_SRC ** El-get - [[https://github.com/dimitri/el-get][El-get]] is package management tool, whicl allows to install external elisp package from any git repository not in mepla. Check out [[http://tapoueh.org/emacs/el-get.html][el-get]]. - #+BEGIN_SRC emacs-lisp :tangle yes :results silent - (use-package el-get :ensure t :init (add-to-list 'load-path "~/.emacs.d/el-get")) +#+END_SRC +** paradox +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (use-package paradox + :ensure t) #+END_SRC * Color and Fonts Settings @@ -342,9 +340,7 @@ Enable rainbow mode in emacs lisp mode * Mode-line ** clean mode line - -clean mode line, Refer to [[https://www.masteringemacs.org/article/hiding-replacing-modeline-strings][Marstering Emacs]] - +clean mode line, Refer to [[https://www.masteringemacs.org/article/hiding-replacing-modeline-strings][Marstering Emacs]], some greek character see [[http://xahlee.info/math/math_unicode_greek.html][math_unicode_greek]] #+BEGIN_SRC emacs-lisp :tangle yes :results silent (defvar mode-line-cleaner-alist `((auto-complete-mode . " α") @@ -367,12 +363,16 @@ clean mode line, Refer to [[https://www.masteringemacs.org/article/hiding-replac (org-indent-mode . "") ;; default is Fly (flyspell-mode . "") + (irony-mode . "I") ;; Major modes (lisp-interaction-mode . "λ") (hi-lock-mode . "") (python-mode . "Py") (emacs-lisp-mode . "EL") - (eshell-mode . "ε") + (eshell-mode . "𝞔") + (dired-mode . "𝞓") + (ibuffer-mode . "𝞑") + (org-mode . "𝞞") (nxhtml-mode . "nx")) "Alist for `clean-mode-line'. @@ -398,9 +398,7 @@ clean mode line, Refer to [[https://www.masteringemacs.org/article/hiding-replac #+END_SRC ** Powerline mode - Install powerline mode [[https://github.com/milkypostman/powerline][powerline]] - #+BEGIN_SRC emacs-lisp :tangle yes :results silent (use-package powerline :ensure t @@ -439,7 +437,7 @@ Revised powerline-center-theme :group 'powerline) ;; Don't show buffer modified for scratch and eshell mode - (defun sd/buffer-show-modified () + (defun sd/buffer-is-eshel-or-scratch () "Dot not show modified indicator for buffers" (interactive) (unless (or (string-match "*scratch*" (buffer-name)) @@ -456,7 +454,7 @@ Revised powerline-center-theme (mode-line-buffer-id (if active 'sd/mode-line-buffer-id 'mode-line-buffer-id-inactive)) (mode-line (if active 'mode-line 'mode-line-inactive)) (my-face1 (if active 'sd/powerline-active1 'powerline-inactive1)) - (my-face-buffer-modified (if (and (sd/buffer-show-modified) (buffer-modified-p)) + (my-face-buffer-modified (if (and (sd/buffer-is-eshel-or-scratch) (buffer-modified-p) (not buffer-read-only)) 'sd/buffer-modified-active1 (if buffer-read-only 'sd/buffer-view-active1 my-face1))) @@ -526,7 +524,7 @@ set height in mode line #+BEGIN_SRC emacs-lisp :tangle yes :results silent (use-package ido :ensure t - :init (setq ido-enable-flex-matching t + :init (setq ido-enable-flex-matching nil ido-ignore-extensions t ido-use-virtual-buffers t ido-everywhere t) @@ -543,9 +541,9 @@ 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 t + :init (setq ido-enable-flex-matching nil ido-use-faces nil) - :config (flx-ido-mode 1)) + :config (flx-ido-mode nil)) #+END_SRC ** IDO-vertically @@ -906,15 +904,11 @@ Setting agenda files and the agenda view #+END_SRC ** Export PDF - -Install MacTex-basic and some tex packages - -#+BEGIN_SRC bash - +Install MacTex-basic [[http://www.tug.org/mactex/morepackages.html][MacTex-basic]] and some tex packages +#+BEGIN_SRC sh sudo tlmgr update --self sudo tlmgr install titlesec framed threeparttable wrapfig multirow enumitem bbding titling tabu mdframed tcolorbox textpos import varwidth needspace tocloft ntheorem environ trimspaces collection-fontsrecommended capt-of - #+END_SRC #+BEGIN_SRC emacs-lisp :tangle yes :results silent @@ -1016,6 +1010,8 @@ and Defined keys, using vi keybindings, Refer abo-abo's setting [[https://github :init ;; don't ask me to confirm the unsaved change (setq magit-save-repository-buffers nil) + ;; default is 50 + (setq git-commit-summary-max-length 80) :commands magit-status magit-blame :config (dolist (map (list magit-status-mode-map @@ -1033,20 +1029,20 @@ and Defined keys, using vi keybindings, Refer abo-abo's setting [[https://github #+END_SRC * Eshell -*** Eshell alias +** Eshell alias #+BEGIN_SRC emacs-lisp :tangle yes :results silent (defalias 'e 'find-file) (defalias 'ff 'find-file) (defalias 'ee 'find-files) #+END_SRC -*** eshell temp directory +** eshell temp directory set default eshell history folder #+BEGIN_SRC emacs-lisp :tangle yes :results silent (setq eshell-directory-name (concat sd-temp-directory "eshell")) #+END_SRC -*** Eshell erase buffer +** Eshell erase buffer #+BEGIN_SRC emacs-lisp :tangle yes :results silent (defun sd/eshell-clear-buffer () "Clear eshell buffer" @@ -1059,7 +1055,7 @@ set default eshell history folder (local-set-key (kbd "C-l") 'sd/eshell-clear-buffer))) #+END_SRC -*** Toggle Eshell +** Toggle Eshell Toggle an eshell in split window below, refer [[http://www.howardism.org/Technical/Emacs/eshell-fun.html][eshell-here]] #+BEGIN_SRC emacs-lisp :tangle yes :results silent (defun sd/window-has-eshell () @@ -1100,7 +1096,17 @@ Toggle an eshell in split window below, refer [[http://www.howardism.org/Technic (global-set-key (kbd "s-e") 'sd/toggle-eshell-here) #+END_SRC -*** TODO smart display +** exec-path-from-shell +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (use-package exec-path-from-shell + :ensure t + :init + (setq exec-path-from-shell-check-startup-files nil) + :config + (exec-path-from-shell-initialize)) +#+END_SRC + +** TODO smart display * Misc Settings ** [[https://github.com/abo-abo/hydra][Hydra]] @@ -1155,7 +1161,7 @@ Refer [[https://github.com/abo-abo/hydra/blob/master/hydra-examples.el][hydra-ex *** hydra misc #+BEGIN_SRC emacs-lisp :tangle yes :results silent (defhydra sd/hydra-misc (:color red :columns nil) - "Miscellaneous Commands" + "Misc" ("e" eshell "eshell" :exit t) ("p" (lambda () (interactive) @@ -1262,16 +1268,6 @@ Type =o= to go to the link #+END_SRC -** Emux - -[[https://github.com/re5et/emux][emux]] is - -#+BEGIN_SRC emacs-lisp :tangle yes :results silent - - (el-get-bundle re5et/emux) - -#+END_SRC - ** Smart Parens #+BEGIN_SRC emacs-lisp :tangle yes :results silent @@ -1314,65 +1310,6 @@ Type =o= to go to the link #+END_SRC -** Emms -We can use [[https://www.gnu.org/software/emms/quickstart.html][Emms]] for multimedia in Emacs -#+BEGIN_SRC emacs-lisp :tangle yes :results silent - (use-package emms - :ensure t - :init - (setq emms-directory (concat sd-temp-directory "emms")) - (setq emms-source-file-default-directory "~/Music/") - :config - (emms-standard) - (emms-default-players) - (define-emms-simple-player mplayer '(file url) - (regexp-opt '(".ogg" ".mp3" ".mgp" ".wav" ".wmv" ".wma" ".ape" - ".mov" ".avi" ".ogm" ".asf" ".mkv" ".divx" ".mpeg" - "http://" "mms://" ".rm" ".rmvb" ".mp4" ".flac" ".vob" - ".m4a" ".flv" ".ogv" ".pls")) - "mplayer" "-slave" "-quiet" "-really-quiet" "-fullscreen") - (emms-history-load)) -#+END_SRC - -** GnoGo - -Play Go in Emacs, gnugo xpm refert [[https://github.com/okanotor/dotemacs/blob/f95b774cb292d1169748bc0a62ba647bbd8c0652/etc/my-inits/my-inits-gnugo.el][to here]]. start at image display mode and grid mode - -#+BEGIN_SRC emacs-lisp :tangle yes :results silent - - (use-package gnugo - :ensure t - :defer t - :init - (require 'gnugo-imgen) - (setq gnugo-xpms 'gnugo-imgen-create-xpms) - (add-hook 'gnugo-start-game-hook '(lambda () - (gnugo-image-display-mode) - (gnugo-grid-mode))) - :config - (add-to-list 'gnugo-option-history (format "--boardsize 19 --color black --level 1"))) - -#+END_SRC - -** Tabbar - -#+BEGIN_SRC emacs-lisp :tangle yes :results silent - - ;; (use-package tabbar-ruler - ;; :ensure t - ;; :init - ;; (setq tabbar-ruler-global-tabbar t) - ;; (setq tabbar-ruler-global-ruler t) - ;; (setq tabbar-ruler-popu-menu t) - ;; (setq tabbar-ruler-popu-toolbar t) - ;; (setq tabbar-use-images t) - ;; :config - ;; (tabbar-ruler-group-by-projectile-project) - ;; (global-set-key (kbd "s-1") 'tabbar-forward-group) - ;; (global-set-key (kbd "s-2") 'tabbar-ruler-forward)) - -#+END_SRC - ** View only for some directory When see function by =C-h f=, and visit the source code, I would like the buffer is read only. See [[http://emacs.stackexchange.com/questions/3676/how-to-enter-view-only-mode-when-browsing-emacs-source-code-from-help/3681#3681][here]] #+BEGIN_SRC emacs-lisp :tangle yes :results silent @@ -1381,7 +1318,10 @@ When see function by =C-h f=, and visit the source code, I would like the buffer '((nil . ((buffer-read-only . t) (show-trailing-whitespace . nil) (tab-width . 8) - (eval . (whitespace-mode -1)))))) + (eval . (whitespace-mode -1)) + (eval . (when buffer-file-name + (setq-local view-no-disable-on-exit t) + (view-mode-enter))))))) ;; (dir-locals-set-directory-class (expand-file-name "/usr/local/share/emacs") 'emacs) (dir-locals-set-directory-class "/usr/local/Cellar/emacs" 'emacs) @@ -1394,6 +1334,10 @@ When see function by =C-h f=, and visit the source code, I would like the buffer #+BEGIN_SRC emacs-lisp :tangle yes :results silent (el-get-bundle info+ :url "https://raw.githubusercontent.com/emacsmirror/emacswiki.org/master/info+.el" + ;; (require 'info+) + ) + + (with-eval-after-load 'info (require 'info+)) #+END_SRC @@ -1424,8 +1368,6 @@ When see function by =C-h f=, and visit the source code, I would like the buffer ** TODO Man mode Color for Man-mode -** TODO swiper to occur - ** TODO UTF8 #+BEGIN_SRC emacs-lisp :tangle yes :results silent ;; (set-language-environment "UTF-8") @@ -1454,34 +1396,206 @@ Color for Man-mode (define-key org-tree-slide-mode-map [escape] 'org-tree-slide-move-previous-tree)) #+END_SRC -* dired +** pdf-tools +#+BEGIN_SRC sh + brew install poppler +#+END_SRC + +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (use-package pdf-tools + :ensure t + :init + ;; run to complete the installation + (pdf-tools-install) + :config + (add-to-list 'auto-mode-alist '("\.pdf$" . pdf-view-mode)) + (add-hook 'pdf-outline-buffer-mode-hook #'sd/pdf-outline-map)) + + (defun sd/pdf-outline-map () + "My keybindings in pdf-outline-map" + (interactive) + (define-key pdf-outline-buffer-mode-map (kbd "C-o") nil) + (define-key pdf-outline-buffer-mode-map (kbd "i") 'outline-toggle-children) + (define-key pdf-outline-buffer-mode-map (kbd "j") 'next-line) + (define-key pdf-outline-buffer-mode-map (kbd "k") 'previous-line)) +#+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 + (defun sd/dired-key-map () + "My keybindings for dired" + (interactive) + ;; these two prefix are used globally + (define-key dired-mode-map (kbd "C-o") nil) + (define-key dired-mode-map (kbd "M-s") nil) + ;; toggle hidden files + (define-key dired-mode-map (kbd "H") 'dired-omit-mode) + ;; scroll + (define-key dired-mode-map (kbd "SPC") 'scroll-up-command) + (define-key dired-mode-map (kbd "DEL") 'scroll-down-command) + (define-key dired-mode-map (kbd "j") 'diredp-next-line) + (define-key dired-mode-map (kbd "k") 'diredp-previous-line) + (define-key dired-mode-map (kbd "g") 'dired-goto-file) + ;; (define-key dired-mode-map (kbd "S-SPC") 'scroll-down-command) + ;; jump to fil/dirs + (define-key dired-mode-map (kbd "f") 'dired-isearch-filenames) + ;; subdir + ;; i dired-maybe-insert-subdir + ;; o dired-find-file-other-window (switch to other window) + ;; O dired-display-file + (define-key dired-mode-map (kbd "G") 'ido-dired) + (define-key dired-mode-map (kbd "c") 'sd/dired-new-file) + (define-key dired-mode-map (kbd "h") 'dired-summary) + (define-key dired-mode-map (kbd "r") 'revert-buffer) + (define-key dired-mode-map (kbd "l") 'dired-display-file) + (define-key dired-mode-map [C-backspace] 'dired-up-directory) + (define-key dired-mode-map (kbd "?") 'describe-mode) + (define-key dired-mode-map (kbd "z") #'sd/dired-get-size) + (define-key dired-mode-map (kbd "C-d") 'dired-kill-subdir) + (define-key dired-mode-map (kbd "M-d") 'dired-kill-subdir) + (define-key dired-mode-map (kbd "J") 'diredp-next-subdir) + (define-key dired-mode-map (kbd "TAB") 'diredp-next-subdir) + (define-key dired-mode-map (kbd "K") 'diredp-prev-subdir) + (define-key dired-mode-map (kbd "O") 'dired-display-file) + (define-key dired-mode-map (kbd "I") 'other-window)) + (use-package dired :config (require 'dired-x) + ;; also load dired+ + (use-package dired+ + :ensure t + :init (setq diredp-hide-details-initially-flag nil)) + (setq dired-omit-mode t) (setq dired-omit-files (concat dired-omit-files "\\|^\\..+$")) (add-hook 'dired-mode-hook (lambda () - (define-key dired-mode-map (kbd "C-o") nil) - (define-key dired-mode-map (kbd "H") 'dired-omit-mode) - (define-key dired-mode-map (kbd "DEL") (lambda () (interactive) (find-alternate-file ".."))) + (sd/dired-key-map) (dired-omit-mode)))) + + (defadvice dired-summary (around sd/dired-summary activate) + "Revisied dired summary." + (interactive) + (dired-why) + (message + "Δ: d-delete, u-ndelete, x-punge, f-ind, o-ther window, R-ename, C-opy, c-create, +new dir, r-evert, /-filter, h-summary, ?-help")) + + (defun sd/dired-high-level-dir () + "Go to higher level directory" + (interactive) + (find-alternate-file "..")) +#+END_SRC + +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (defun sd/dired-new-file () + "Create a new file in dired mode" + (interactive) + (call-interactively 'find-file)) + + ;; copied from abo-abo's config + (defun sd/dired-get-size () + (interactive) + (let ((files (dired-get-marked-files))) + (with-temp-buffer + (apply 'call-process "/usr/bin/du" nil t nil "-sch" files) + (message + "Size of all marked files: %s" + (progn + (re-search-backward "\\(^[ 0-9.,]+[A-Za-z]+\\).*total$") + (match-string 1)))))) +#+END_SRC + +** disable ido when dired new file +When create a new directory, I want to disalbe =ido= completion. see [[http://stackoverflow.com/questions/7479565/emacs-ido-mode-and-creating-new-files-in-directories-it-keeps-changing-the-dire][here]]. Thhis code snippets copied +from [[https://emacs.stackexchange.com/questions/13713/how-to-disable-ido-in-dired-create-directory/13795#13795?newreg%3Ddb17c20f7af3490fb11cf15f1d888e9e][How to disable IDO in ‘dired-create-directory’]] +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (defun mk-anti-ido-advice (func &rest args) + "Temporarily disable IDO and call function FUNC with arguments ARGS." + (interactive) + (let ((read-file-name-function #'read-file-name-default)) + (if (called-interactively-p 'any) + (call-interactively func) + (apply func args)))) + + (defun mk-disable-ido (command) + "Disable IDO when command COMMAND is called." + (advice-add command :around #'mk-anti-ido-advice)) +#+END_SRC + +Disalble =ido= when new a directory or file in =dired= mode +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + ;; call the function which you want to disable ido + (mk-disable-ido 'dired-create-directory) + (mk-disable-ido 'sd/dired-new-file) +#+END_SRC + +** Dired open with +=!= =dired-do-shell-command= +=&= =dired-do-async-shell-command= +here on Mac, just use "open" commands to pen =.pdf=, =.html= and image files +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (setq dired-guess-shell-alist-user + '(("\\.pdf\\'" "open" "okular") + ("\\.\\(?:djvu\\|eps\\)\\'" "evince") + ("\\.\\(?:jpg\\|jpeg\\|png\\|gif\\|xpm\\)\\'" "open") + ("\\.\\(?:xcf\\)\\'" "gimp") + ("\\.csv\\'" "libreoffice") + ("\\.tex\\'" "pdflatex" "latex") + ("\\.\\(?:mp4\\|mkv\\|avi\\|flv\\|ogv\\)\\(?:\\.part\\)?\\'" "mplayer") + ("\\.\\(?:mp3\\|flac\\)\\'" "rhythmbox") + ("\\.html?\\'" "open") + ("\\.dmg\\'" "open") + ("\\.cue?\\'" "audacious"))) + + + (defun sd/dired-start-process (cmd &optional file-list) + (interactive + (let ((files (dired-get-marked-files + t current-prefix-arg))) + (list + (unless (eq system-type 'windows-nt) + (dired-read-shell-command "& on %s: " + current-prefix-arg files)) + files))) + + (if (eq system-type 'windows-nt) + (dolist (file file-list) + (w32-shell-execute "open" (expand-file-name file))) + (let (list-switch) + (start-process + cmd nil shell-file-name + shell-command-switch + (format + "nohup 1>/dev/null 2>/dev/null %s \"%s\"" + cmd + ;; (if (and (> (length file-list) 1) + ;; (setq list-switch + ;; (cadr (assoc cmd ora-dired-filelist-cmd)))) + ;; (format "%s %s" cmd list-switch) + ;; cmd) + (mapconcat #'expand-file-name file-list "\" \"")))))) +#+END_SRC + +** dired-hacks +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (use-package dired-hacks-utils + :ensure t + :defer t) #+END_SRC -Dired+ +** dired-narrow #+BEGIN_SRC emacs-lisp :tangle yes :results silent - (use-package dired+ + ;;narrow dired to match filter + (use-package dired-narrow :ensure t - :init - (setq diredp-hide-details-initially-flag nil) - :config - (define-key dired-mode-map (kbd "j") 'diredp-next-line) - (define-key dired-mode-map (kbd "k") 'diredp-previous-line) - (define-key dired-mode-map (kbd "g") 'dired-goto-file)) + :commands (dired-narrow) + :bind (:map dired-mode-map + ("/" . dired-narrow))) #+END_SRC -* TODO ibuffer +* Ibuffer #+BEGIN_SRC emacs-lisp :tangle yes :results silent (global-set-key (kbd "s-b") 'ibuffer) @@ -1490,7 +1604,14 @@ Dired+ (define-key ibuffer-mode-map (kbd "j") 'ibuffer-forward-line) (define-key ibuffer-mode-map (kbd "k") 'ibuffer-backward-line) (define-key ibuffer-mode-map (kbd "r") 'ibuffer-update) - (define-key ibuffer-mode-map (kbd "g") 'ibuffer-jump-to-buffer)) + (define-key ibuffer-mode-map (kbd "g") 'ibuffer-jump-to-buffer) + (define-key ibuffer-mode-map (kbd "h") 'sd/ibuffer-summary)) + + (defun sd/ibuffer-summary () + "Show summary of keybindings in ibuffer mode" + (interactive) + (message + "Β: m|u - (un)mark, /-filter, //-remove filter, t, RET, g, k, S, D, Q; q to quit; h for help")) #+END_SRC * Completion @@ -1609,11 +1730,79 @@ to call =compilation= interactively. #+END_SRC ** C & C++ +*** c/c++ style #+BEGIN_SRC emacs-lisp :tangle yes :results silent (setq c-default-style "stroustrup" c-basic-offset 4) #+END_SRC +*** flycheck +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (use-package flycheck + :ensure t) +#+END_SRC + +*** irony +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (use-package irony + :ensure t + :config + (add-hook 'c++-mode-hook 'irony-mode) + (add-hook 'c-mode-hook 'irony-mode) + (add-hook 'objc-mode-hook 'irony-mode)) +#+END_SRC + +Install clang, on mac, it has =libclang.dylib=, but no develop headers. Install by =brew= +#+BEGIN_SRC sh + brew install llvm --with-clang +#+END_SRC + +then install irony searver, and =LIBCLANG_LIBRARY= and =LIBCLANG_INCLUDE_DIR= accordingly +#+BEGIN_SRC emacs-lisp :tangle no :results silent + (irony-install-server) +#+END_SRC + +#+BEGIN_SRC sh + cmake -DLIBCLANG_LIBRARY\=/usr/local/Cellar/llvm/3.6.2/lib/libclang.dylib \ + -DLIBCLANG_INCLUDE_DIR=/usr/local/Cellar/llvm/3.6.2/include \ + -DCMAKE_INSTALL_PREFIX\=/Users/peli3/.emacs.d/irony/ \ + /Users/peli3/.emacs.d/elpa/irony-20160713.1245/server && cmake --build . --use-stderr --config Release --target install +#+END_SRC + +irony-mode-hook, copied from [[https://github.com/Sarcasm/irony-mode][irony-mode]] github +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + ;; replace the `completion-at-point' and `complete-symbol' bindings in + ;; irony-mode's buffers by irony-mode's function + (defun my-irony-mode-hook () + (define-key irony-mode-map [remap completion-at-point] + 'irony-completion-at-point-async) + (define-key irony-mode-map [remap complete-symbol] + 'irony-completion-at-point-async)) + (add-hook 'irony-mode-hook 'my-irony-mode-hook) + (add-hook 'irony-mode-hook 'irony-cdb-autosetup-compile-options) +#+END_SRC + +irony-company +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (use-package company-irony + :ensure t) + + (eval-after-load 'company + '(add-to-list 'company-backends 'company-irony)) + + (use-package flycheck-irony + :ensure t) + + (eval-after-load 'flycheck + '(add-hook 'flycheck-mode-hook #'flycheck-irony-setup)) +#+END_SRC + +*** yasnippet +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (use-package yasnippet + :ensure t) +#+END_SRC + * Compile Set the environments vairables in compilation mode #+BEGIN_SRC emacs-lisp :tangle yes :results silent @@ -1954,6 +2143,43 @@ Use =gnuplot= on =Org-mode= file, see [[http://orgmode.org/worg/org-contrib/babe (add-hook 'ediff-suspend-hook 'ediff-toggle-wide-display)) #+END_SRC +* Entertainment +** GnoGo +Play Go in Emacs, gnugo xpm refert [[https://github.com/okanotor/dotemacs/blob/f95b774cb292d1169748bc0a62ba647bbd8c0652/etc/my-inits/my-inits-gnugo.el][to here]]. start at image display mode and grid mode +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (use-package gnugo + :ensure t + :defer t + :init + (require 'gnugo-imgen) + (setq gnugo-xpms 'gnugo-imgen-create-xpms) + (add-hook 'gnugo-start-game-hook '(lambda () + (gnugo-image-display-mode) + (gnugo-grid-mode))) + :config + (add-to-list 'gnugo-option-history (format "--boardsize 19 --color black --level 1"))) +#+END_SRC + +** Emms +We can use [[https://www.gnu.org/software/emms/quickstart.html][Emms]] for multimedia in Emacs +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (use-package emms + :ensure t + :init + (setq emms-directory (concat sd-temp-directory "emms")) + (setq emms-source-file-default-directory "~/Music/") + :config + (emms-standard) + (emms-default-players) + (define-emms-simple-player mplayer '(file url) + (regexp-opt '(".ogg" ".mp3" ".mgp" ".wav" ".wmv" ".wma" ".ape" + ".mov" ".avi" ".ogm" ".asf" ".mkv" ".divx" ".mpeg" + "http://" "mms://" ".rm" ".rmvb" ".mp4" ".flac" ".vob" + ".m4a" ".flv" ".ogv" ".pls")) + "mplayer" "-slave" "-quiet" "-really-quiet" "-fullscreen") + (emms-history-load)) +#+END_SRC + * Dictionary #+BEGIN_SRC emacs-lisp :tangle yes :results silent (use-package bing-dict @@ -1989,8 +2215,12 @@ Use =ESC= to exit minibuffer. Also I map =Super-h= the same as =C-g= :ensure t :init (setq projectile-enable-caching t) + (setq projectile-switch-project-action (lambda () + (projectile-dired) + (sd/project-switch-action))) (setq projectile-cache-file (concat sd-temp-directory "projectile.cache")) :config + (add-to-list 'projectile-globally-ignored-files "GTAGS") (projectile-global-mode t)) (use-package persp-projectile @@ -2001,9 +2231,19 @@ Use =ESC= to exit minibuffer. Also I map =Super-h= the same as =C-g= (:map projectile-mode-map ("s-t" . projectile-persp-switch-project))) - ;; projectile-find-file - ;; projectile-switch-buffer - ;; projectile-find-file-other-window + (defun sd/change-default-directory (buffer dir) + "change defafult directory of buffer to dir" + (with-current-buffer buffer + (cd dir))) + + ;; change default-directory of scratch buffer to projectile-project-root + (defun sd/project-switch-action () + "Change default-directory of scratch buffer to current projectile-project-root directory" + (interactive) + (dolist (buffer (buffer-list)) + (if (string-match (concat "scratch.*" (projectile-project-name)) + (buffer-name buffer)) + (sd/change-default-directory buffer (projectile-project-root))))) #+END_SRC *** project config =super= keybindings @@ -2023,6 +2263,7 @@ Use =ESC= to exit minibuffer. Also I map =Super-h= the same as =C-g= (global-set-key (kbd "s-n") 'persp-next) (global-set-key (kbd "s-p") 'persp-prev) + (global-set-key (kbd "s-;") 'persp-switch-last) (global-set-key (kbd "s-=") 'text-scale-increase) (global-set-key (kbd "s--") 'text-scale-decrease) @@ -2106,7 +2347,8 @@ Most use =C-o C-o= to switch buffers; =C-o x, v= to split window; =C-o o= to del (delete-other-windows))) (defhydra sd/hydra-window (:color red :columns nil) - "window" + "Window" + ;; windows split ("h" windmove-left nil :exit t) ("j" windmove-down nil :exit t) ("k" windmove-up nil :exit t) @@ -2125,21 +2367,35 @@ Most use =C-o C-o= to switch buffers; =C-o x, v= to split window; =C-o o= to del (split-window-below) (windmove-down)) "horz" :exit t) - ;; ("o" delete-other-windows "one" :exit t) + + ;; buffer / windows switch ("o" sd/toggle-max-windows "one" :exit t) - ("C-o" ido-switch-buffer "buf" :exit t) ("C-k" sd/delete-current-window "del" :exit t) + ("D" (lambda () + (interactive) + (kill-buffer) + (sd/delete-current-window)) + "kill" :exit t) ("'" other-window "other" :exit t) - ("a" ace-window "ace") + ;; ("a" ace-window "ace") ("s" ace-swap-window "swap") - ("d" ace-delete-window "ace-one" :exit t) - ("i" ace-maximize-window "ace-one" :exit t) - ("b" ido-switch-buffer "buf" :exit t) - ("C-b" ido-switch-buffer "buf" :exit t) - ("m" bookmark-jump-other-window "open bmk" :exit t) - ("M" bookmark-set "set bmk" :exit t) + ;; ("i" ace-maximize-window "ace-one" :exit t) + ("u" (progn (winner-undo) (setq this-command 'winner-undo)) "undo") ("r" (progn (winner-redo) (setq this-command 'winner-redo)) "redo") + + ;; ibuffer, dired, eshell, bookmarks + ;; ("d" ace-delete-window "ace-one" :exit t) + ("C-o" ido-switch-buffer nil :exit t) + ("d" sd/project-or-dired-jump nil :exit t) + ("b" ibuffer nil :exit t) + ("e" eshell nil :exit t) + ("m" bookmark-jump-other-window nil :exit t) + ("M" bookmark-set nil :exit t) + ("g" magit-status nil :exit t) + ("p" paradox-list-packages nil :exit t) + + ;; quit ("q" nil "cancel") ("" nil) ("C-h" nil nil :exit t) @@ -2147,7 +2403,6 @@ Most use =C-o C-o= to switch buffers; =C-o x, v= to split window; =C-o o= to del ;; ("C-k" nil :exit t) ("C-l" nil nil :exit t) ("C-;" nil nil :exit t) - ("p" nil nil :exit t) ("n" nil nil :exit t) ("[" nil nil :exit t) ("]" nil nil :exit t) @@ -2155,6 +2410,14 @@ Most use =C-o C-o= to switch buffers; =C-o x, v= to split window; =C-o o= to del (global-unset-key (kbd "C-o")) (global-set-key (kbd "C-o") 'sd/hydra-window/body) + + (defun sd/project-or-dired-jump () + "If under project, jump to the root directory, otherwise + jump to dired of current file" + (interactive) + (if (projectile-project-p) + (projectile-dired) + (dired-jump))) #+END_SRC ** Motion @@ -2214,7 +2477,11 @@ toggle the mark ring. the best way is add a new action and mapping to =helm-sour since there is no map such as =helm-mark-ring=map=, so I cannot binding a key to the quit action. #+BEGIN_SRC emacs-lisp :tangle yes :results silent (setq mark-ring-max 50) - (global-set-key (kbd "M-`") #'helm-mark-ring) + + (use-package helm + :ensure t + :init + (global-set-key (kbd "M-`") #'helm-mark-ring)) (define-key minibuffer-local-map (kbd "M-`") 'keyboard-escape-quit) #+END_SRC @@ -2273,10 +2540,8 @@ Search, replace and hightlight will in later paragraph *** =Imenu= goto tag #+BEGIN_SRC emacs-lisp :tangle yes :results silent - ;; (global-set-key (kbd "M-i") #'counsel-imenu) - (global-set-key (kbd "M-i") #'imenu) - - ;; (global-set-key (kbd "M-l") 'goto-line) + (global-set-key (kbd "M-i") #'counsel-imenu) + ;; (global-set-key (kbd "M-i") #'imenu) #+END_SRC *** Go-to line @@ -2296,7 +2561,11 @@ Search, replace and hightlight will in later paragraph =helm-show-kill-ring= #+BEGIN_SRC emacs-lisp :tangle yes :results silent (setq kill-ring-max 100) ; default is 60p - (global-set-key (kbd "M-y") #'helm-show-kill-ring) + + (use-package helm + :ensure t + :init + (global-set-key (kbd "M-y") #'helm-show-kill-ring)) #+END_SRC *** undo-tree @@ -2512,15 +2781,18 @@ stolen from [[https://github.com/mariolong/emacs.d/blob/f6a061594ef1b5d1f4750e9d (back-to-indentation) (set-mark (line-end-position))) - (defhydra sd/expand-selected (:color pink :columns nil - :post (deactivate-mark)) + (defhydra sd/expand-selected (:color red :columns nil + :post (deactivate-mark) + ) "Selected" ;; select - ("e" er/expand-region "+") - ("c" er/contract-region "-") - ("r" (lambda () - (interactive) - (er/contract-region 0)) + ;; ("e" er/expand-region "+") + ("SPC" er/expand-region "+") + ;; ("c" er/contract-region "-") + ("S-SPC" er/contract-region "-") + ("r" (lambda () + (interactive) + (er/contract-region 0)) "reset") ("i'" er/mark-inside-quotes "in") @@ -2533,36 +2805,32 @@ stolen from [[https://github.com/mariolong/emacs.d/blob/f6a061594ef1b5d1f4750e9d ("o{" er/mark-inside-pairs nil) ("o(" er/mark-inside-pairs nil) - ("p" er/mark-paragraph "paragraph") + ("p" er/mark-paragraph "paragraph") - ("l" sd/mark-line "line") - ("u" er/mark-url "url") - ("f" er/mark-defun "fun") - ("n" er/mark-next-accessor "next") + ("l" sd/mark-line "line") + ("u" er/mark-url "url") + ("f" er/mark-defun "fun") + ("n" er/mark-next-accessor "next") ("x" exchange-point-and-mark "exchange") - ;; Move - ;; ("h" backward-char nil) - ;; ("j" next-line nil) - ;; ("k" previous-line nil) - ;; ("l" foreward-char nil) - ;; Search ;; higlight - + ;; exit ("d" kill-region "delete" :exit t) - + ("y" kill-ring-save "yank" :exit t) ("M-SPC" nil "quit" :exit t) - ("C-SPC" nil "quit" :exit t) - ("q" nil "quit" :exit t)) + ;; ("C-SPC" "quit" :exit t) + ("q" deactivate-mark "quit" :exit t)) (global-set-key (kbd "M-SPC") (lambda () - (interactive) - (er/mark-word) - (sd/expand-selected/body))) + (interactive) + (set-mark-command nil) + ;; (er/expand-region 1) + (er/mark-word) + (sd/expand-selected/body))) #+END_SRC *** TODO make expand-region hydra work with lispy selected @@ -2583,22 +2851,11 @@ new file =C-x C-f C-f= * =C-u C-h a= search funtions =apropos-command= -* TODO Questions -- interactive for anonymous function -When define a key to a anonymous function, the lambda function should be interactive - -#+BEGIN_SRC emacs-lisp :tangle yes :results silent - ;; (require 'saveplace) - ;; (setq-default save-place t) - ;; (delete-selection-mode 1) -#+END_SRC - * key - passion - vision - mission - * M prefix #+BEGIN_SRC emacs-lisp :tangle yes :results silent @@ -2643,4 +2900,3 @@ When define a key to a anonymous function, the lambda function should be interac ;; M-b #+END_SRC -* TODO ibuffer hydra