X-Git-Url: http://47.100.26.94:8080/?a=blobdiff_plain;f=emacs.d%2Fconfig.org;h=202528141aea665e3f91eec7240e6a95db6eb86e;hb=8b8eb36cc84ca4484af40f926dee9695976d9051;hp=37b75c5d4ae3c29dd1314a1fef52f396da0fc423;hpb=3d3aa028bd5f10501aaa930b91ab3da56f9b9238;p=dotfiles.git diff --git a/emacs.d/config.org b/emacs.d/config.org index 37b75c5..2025281 100644 --- a/emacs.d/config.org +++ b/emacs.d/config.org @@ -25,9 +25,7 @@ Set system PATH and emacs exec path Set the emacs load path #+BEGIN_SRC emacs-lisp :tangle yes :results silent - - (add-to-list 'load-path "~/.emacs.d/elisp") - + ;; (add-to-list 'load-path "~/.emacs.d/elisp") #+END_SRC ** Package Initialization @@ -44,7 +42,7 @@ Set the emacs load path #+END_SRC -** General Setting +** Window Setting Disable scroll bar, tool-bar and menu-bar @@ -53,7 +51,7 @@ Disable scroll bar, tool-bar and menu-bar (tool-bar-mode 0) (menu-bar-mode 1) - (setq debug-on-error t) + ;; (setq debug-on-error t) (setq inhibit-startup-message t) (defalias 'yes-or-no-p 'y-or-n-p) @@ -86,6 +84,21 @@ Setting scroll right/left ; (global-set-key (kbd "C-.") 'scoll-right) #+END_SRC +Set default window size +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (setq initial-frame-alist + '((width . 120) + (height . 50))) +#+END_SRC + +Stop auto save +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (setq auto-save-default nil) + + ;; restore last session + ;; (desktop-save-mode t) +#+END_SRC + * Package Management Tools ** Use-package @@ -343,6 +356,8 @@ clean mode line, Refer to [[https://www.masteringemacs.org/article/hiding-replac (auto-revert-mode . "") ;; default is Ind (org-indent-mode . "") + ;; default is Fly + (flyspell-mode . "") ;; Major modes (lisp-interaction-mode . "λ") (hi-lock-mode . "") @@ -503,16 +518,13 @@ set height in mode line #+END_SRC ** IDO-vertically - #+BEGIN_SRC emacs-lisp :tangle yes :results silent - (use-package ido-vertical-mode :ensure t :init (setq ido-vertical-define-keys 'C-n-C-p-up-and-down) :config (ido-vertical-mode 1)) - #+END_SRC ** SMEX @@ -545,29 +557,124 @@ Use [[https://github.com/DarwinAwardWinner/ido-ubiquitous][ido-ubiquitous]] for #+END_SRC ** Ido-exit-target - [[https://github.com/waymondo/ido-exit-target][ido-exit-target]] let you open file/buffer on =other-windows= when call =ido-switch-buffer= - #+BEGIN_SRC emacs-lisp :tangle yes :results silent - (use-package ido-exit-target :ensure t :init - (define-key ido-common-completion-map (kbd "C-j") #'ido-exit-target-split-window-right) - (define-key ido-common-completion-map (kbd "C-l") #'ido-exit-target-split-window-below)) + (mapcar (lambda (map) + (define-key map (kbd "C-j") #'ido-exit-target-split-window-right) + (define-key map (kbd "C-k") #'ido-exit-target-split-window-below)) + (list ido-buffer-completion-map + ;; ido-common-completion-map + ido-file-completion-map + ido-file-dir-completion-map))) +#+END_SRC + +* Normal Text Operation +** Edit +*** undo-tree +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (use-package undo-tree + :ensure t + :config + (define-key undo-tree-visualizer-mode-map "j" 'undo-tree-visualize-redo) + (define-key undo-tree-visualizer-mode-map "k" 'undo-tree-visualize-undo) + (define-key undo-tree-visualizer-mode-map "h" 'undo-tree-visualize-switch-branch-left) + (define-key undo-tree-visualizer-mode-map "l" 'undo-tree-visualize-switch-branch-right) + (global-undo-tree-mode 1)) + (global-set-key (kbd "s-u") 'undo-tree-visualize) #+END_SRC -* Key bindings +*** flyspell +Stolen from [[https://github.com/redguardtoo/emacs.d/blob/master/lisp/init-spelling.el][here]], hunspell will search dictionary in =DICPATH= +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (setenv "DICPATH" "/usr/local/share/hunspell") + + (when (executable-find "hunspell") + (setq-default ispell-program-name "hunspell") + (setq ispell-really-hunspell t)) + + ;; (defun text-mode-hook-setup () + ;; ;; Turn off RUN-TOGETHER option when spell check text-mode + ;; (setq-local ispell-extra-args (flyspell-detect-ispell-args))) + ;; (add-hook 'text-mode-hook 'text-mode-hook-setup) + (add-hook 'text-mode-hook 'flyspell-mode) + + ;; enable flyspell check on comments and strings in progmamming modes + (add-hook 'prog-mode-hook 'flyspell-prog-mode) -** Remove prefix =ESC=, refer [[http://emacs.stackexchange.com/questions/14755/how-to-remove-bindings-to-the-esc-prefix-key][here]] + ;; I don't use the default mappings + (with-eval-after-load 'flyspell + (define-key flyspell-mode-map (kbd "C-;") nil) + (define-key flyspell-mode-map (kbd "C-,") nil) + (define-key flyspell-mode-map (kbd "C-.") nil)) +#+END_SRC +Make flyspell enabled for org-mode, see [[http://emacs.stackexchange.com/questions/9333/how-does-one-use-flyspell-in-org-buffers-without-flyspell-triggering-on-tangled][here]] #+BEGIN_SRC emacs-lisp :tangle yes :results silent + ;; NO spell check for embedded snippets + (defadvice org-mode-flyspell-verify (after org-mode-flyspell-verify-hack activate) + (let ((rlt ad-return-value) + (begin-regexp "^[ \t]*#\\+begin_\\(src\\|html\\|latex\\)") + (end-regexp "^[ \t]*#\\+end_\\(src\\|html\\|latex\\)") + old-flag + b e) + (when ad-return-value + (save-excursion + (setq old-flag case-fold-search) + (setq case-fold-search t) + (setq b (re-search-backward begin-regexp nil t)) + (if b (setq e (re-search-forward end-regexp nil t))) + (setq case-fold-search old-flag)) + (if (and b e (< (point) e)) (setq rlt nil))) + (setq ad-return-value rlt))) +#+END_SRC - ;; (define-key key-translation-map (kbd "ESC") (kbd "C-g")) +*** Expand-region +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (use-package expand-region + :ensure t + :config + (global-set-key (kbd "C-=") 'er/expand-region)) +#+END_SRC +** Motion +*** Avy +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (use-package avy + :ensure t + :config + (avy-setup-default)) #+END_SRC +*** =M-g= prefix +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (global-set-key (kbd "M-g j") 'avy-goto-line-below) + (global-set-key (kbd "M-g k") 'avy-goto-line-above) + (global-set-key (kbd "M-g w") 'avy-goto-word-1-below) + (global-set-key (kbd "M-g b") 'avy-goto-word-1-above) + (global-set-key (kbd "M-g e") 'avy-goto-word-0) + (global-set-key (kbd "M-g f") 'avy-goto-char-timer) + (global-set-key (kbd "M-g c") 'avy-goto-char-in-line) + + ;; M-g TAB move-to-column + ;; M-g ESC Prefix Command + ;; M-g c goto-char + ;; M-g g goto-line + ;; M-g n next-error + ;; M-g p previous-error + + ;; M-g M-g goto-line + ;; M-g M-n next-error + ;; M-g M-p previous-error +#+END_SRC + + +** Search & highlight +* Key bindings + ** Esc on Minibuffer Use =ESC= to exit minibuffer. Also I map =Super-h= the same as =C-g= @@ -626,13 +733,6 @@ Use =ESC= to exit minibuffer. Also I map =Super-h= the same as =C-g= ;; C-7 ;; C-Space - - - - - - - #+END_SRC ** =Super= bindings for file, buffer and windows @@ -640,25 +740,23 @@ Use =ESC= to exit minibuffer. Also I map =Super-h= the same as =C-g= Some global bindings on =Super=, on Mac, it is =Command= #+BEGIN_SRC emacs-lisp :tangle yes :results silent + (defun sd/delete-current-window () + (interactive) + (if (> (length (window-list)) 1) + (delete-window) + (message "Only one Windows now!"))) + (global-set-key (kbd "s-h") 'keyboard-quit) (global-set-key (kbd "s-j") 'ido-switch-buffer) (global-set-key (kbd "s-k") 'ido-find-file) - ;; s-k --> kill-this-buffer - (global-set-key (kbd "s-l") (lambda () - (interactive) - (if (> (length (window-list)) 1) - (delete-window) - (message "Only one Windows now!")))) + (global-set-key (kbd "s-l") 'sd/delete-current-window) ;; s-l --> goto-line - (global-set-key (kbd "s-;") 'swiper) + ;; (global-set-key (kbd "s-/") 'swiper) ;; s-; --> ;; s-' --> 'next-multiframe-window (global-set-key (kbd "") 'toggle-frame-fullscreen) - ;; (global-set-key (kbd "s-y") 'projectile-find-file) (global-set-key (kbd "s-f") 'projectile-find-file) - ;; (global-set-key (kbd "s-[") 'persp-next) - ;; (global-set-key (kbd "s-]") 'persp-prev) (global-set-key (kbd "s-`") 'mode-line-other-buffer) @@ -668,6 +766,8 @@ Some global bindings on =Super=, on Mac, it is =Command= (global-set-key (kbd "s-=") 'text-scale-increase) (global-set-key (kbd "s--") 'text-scale-decrease) + ;; (global-set-key (kbd "s-u") 'undo-tree-visualize) + ;; someothers default mapping on super (command) key ;; s-s save-buffer @@ -724,60 +824,14 @@ Some global bindings on =Super=, on Mac, it is =Command= ;; s-` --> other-frame #+END_SRC -** =M-s= bindings for searching - -I use the prefix =M-s= for searching in buffers - -#+BEGIN_SRC emacs-lisp :tangle yes :results silent - - (defun pl-make-keymap (key bindings) - (setq keymap (make-sparse-keymap)) - (dolist (binding bindings) - (define-key keymap (car binding) (cdr binding))) - (global-set-key key keymap)) - - (define-key minibuffer-local-map "\M-s" nil) - - (global-set-key (kbd "M-s s") 'isearch-forward-regexp) - (define-key isearch-mode-map "\M-s" 'isearch-repeat-forward) - (global-set-key (kbd "M-s r") 'isearch-backward-regexp) - (define-key isearch-mode-map "\M-r" 'isearch-repeat-backward) - - (global-set-key (kbd "s-/") 'isearch-forward-regexp) - (define-key isearch-mode-map (kbd "s-/") 'isearch-repeat-forward) - (define-key isearch-mode-map (kbd "C-n") 'isearch-repeat-forward) - - - (set-face-background 'ido-first-match "white") - - ;; M-s o --> occur - ;; M-s s --> isearch-forward-regexp - ;; M-s r --> isearch-backward-regexp - ;; M-s w --> isearch-forward-word - ;; M-s . --> isearch-forward-symbol-at-point - ;; M-s _ --> isearch-forward-symbol - - ;; highlight bindings - ;; M-s h . --> highlight-symbol-at-point - ;; M-s h r --> highlight-regexp - ;; M-s h u --> unhighlight-regexp - ;; M-s h l --> highlight-lines-match-regexp - ;; M-s h p --> highlight-phrase - ;; M-s h f --> hi-lock-find-patterns - - ;; - ;; (global-set-key (kbd "M-s M-r") 'isearch-backward-regexp) - ;; - - ;; M-c - ;; M-r - ;; M-t - ;; M-u, -#+END_SRC - +** Search Replace and highlight +*** Occur Occur search key bindings - #+BEGIN_SRC emacs-lisp :tangle yes :results silent + (add-hook 'occur-hook (lambda () + (switch-to-buffer-other-window "*Occur*") + (define-key occur-mode-map (kbd "C-o") nil))) + ;; auto select occur window (define-key occur-mode-map (kbd "C-n") (lambda () @@ -795,22 +849,96 @@ Occur search key bindings (recenter) (other-window 1))) + (use-package color-moccur + :ensure t + :commands (isearch-moccur isearch-all) + :init + (setq isearch-lazy-highlight t) + :config + (use-package moccur-edit)) #+END_SRC +*** swiper +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (use-package swiper + :ensure t) -** =M-o= as prefix key for windows - -** =M-g= as prefix key for launcher + (ivy-mode 1) + (setq ivy-use-virtual-buffers t) + (global-set-key (kbd "s-/") 'swiper) + ;;* + ;; (global-set-key "\C-s" 'swiper) + ;; (global-set-key (kbd "C-c C-r") 'ivy-resume) + ;; (global-set-key (kbd "") 'ivy-resume) + ;; ;; (global-set-key (kbd "M-x") 'counsel-M-x) + ;; ;; (global-set-key (kbd "C-x C-f") 'counsel-find-file) + ;; (global-set-key (kbd " f") 'counsel-describe-function) + ;; (global-set-key (kbd " v") 'counsel-describe-variable) + ;; (global-set-key (kbd " l") 'counsel-load-library) + ;; (global-set-key (kbd " i") 'counsel-info-lookup-symbol) + ;; (global-set-key (kbd " u") 'counsel-unicode-char) + ;; (global-set-key (kbd "C-c g") 'counsel-git) + ;; (global-set-key (kbd "C-c j") 'counsel-git-grep) + ;; (global-set-key (kbd "C-c k") 'counsel-ag) + ;; (global-set-key (kbd "C-x l") 'counsel-locate) + ;; (global-set-key (kbd "C-S-o") 'counsel-rhythmbox) + ;; ;; (define-key read-expression-map (kbd "C-r") 'counsel-expression-history) -** others +#+END_SRC +*** =M-s= prefix +use the prefix =M-s= for searching in buffers #+BEGIN_SRC emacs-lisp :tangle yes :results silent + (defun sd/make-keymap (key bindings) + (setq keymap (make-sparse-keymap)) + (dolist (binding bindings) + (define-key keymap (car binding) (cdr binding))) + (global-set-key key keymap)) + + (use-package highlight-symbol + :ensure t) + + (sd/make-keymap "\M-s" + '(("w" . save-buffer) + ;; ("\M-w" . save-buffer) + ("e" . revert-buffer) + ("s" . isearch-forward-regexp) + ("\M-s" . isearch-forward-regexp) + ("r" . isearch-backward-regexp) + ("." . isearch-forward-symbol-at-point) + ("o" . occur) + ;; ("h" . highlight-symbol-at-point) + ("h" . highlight-symbol) + ("m" . highlight-regexp) + ("l" . highlight-lines-matching-regexp) + ("M" . unhighlight-regexp) + ("f" . keyboard-quit) + ("q" . keyboard-quit))) + + ;; search and replace and highlight + (define-key isearch-mode-map (kbd "M-s") 'isearch-repeat-forward) + (define-key isearch-mode-map (kbd "M-r") 'isearch-repeat-backward) + (global-set-key (kbd "s-[") 'highlight-symbol-next) + (global-set-key (kbd "s-]") 'highlight-symbol-prev) + (global-set-key (kbd "s-\\") 'highlight-symbol-query-replace) + + + (define-key minibuffer-local-map "\M-s" nil) + (set-face-background 'ido-first-match "yellow") - ;; C-' undefined - ;; C-. undefined + ;; M-s M-w eww-search-words + + ;; M-c + ;; M-r + ;; M-t + ;; M-u, #+END_SRC +** =M-o= as prefix key for windows + +** =M-g= as prefix key for launcher + * Org-mode Settings ** Org-mode Basic setting @@ -818,7 +946,6 @@ Occur search key bindings Always indents header, and hide header leading starts so that no need type =#+STATUP: indent= #+BEGIN_SRC emacs-lisp :tangle yes :results silent - (use-package org :ensure t :init @@ -843,11 +970,13 @@ Always indents header, and hide header leading starts so that no need type =#+ST (scheme . t) (sh . t) (sqlite . t) - (js . t))) + (js . t) + (gnuplot . t))) ;; use current window for org source buffer editting (setq org-src-window-setup 'current-window ) + (define-key org-mode-map (kbd "C-'") nil) #+END_SRC ** Org-bullets @@ -863,6 +992,9 @@ use [[https://github.com/sabof/org-bullets][org-bullets]] package to show utf-8 (org-bullets-mode t)))) (setq org-bullets-bullet-list '("⦿" "✪" "◉" "○" "►" "◆")) + + ;; increase font size when enter org-src-mode + (add-hook 'org-src-mode-hook (lambda () (text-scale-increase 2))) #+END_SRC ** Worf Mode @@ -1171,6 +1303,9 @@ and Defined keys, using vi keybindings, Refer abo-abo's setting [[https://github #+BEGIN_SRC emacs-lisp :tangle yes :results silent (use-package magit :ensure t + :init + ;; don't ask me to confirm the unsaved change + (setq magit-save-repository-buffers nil) :commands magit-status magit-blame :config (dolist (map (list magit-status-mode-map @@ -1179,7 +1314,8 @@ and Defined keys, using vi keybindings, Refer abo-abo's setting [[https://github magit-staged-section-map)) (define-key map "j" 'magit-section-forward) (define-key map "k" 'magit-section-backward) - (define-key map "D" 'magit-discard-file) + (define-key map "D" 'magit-discard) + (define-key map "O" 'magit-discard-file) (define-key map "n" nil) (define-key map "p" nil) (define-key map "v" 'recenter-top-bottom) @@ -1261,10 +1397,8 @@ Toggle an eshell in split window below, refer [[http://www.howardism.org/Technic #+END_SRC *** Font Zoom - #+BEGIN_SRC emacs-lisp :tangle yes :results silent - (defhydra sd/font-zoom (global-map "") - + (defhydra sd/font-zoom (global-map "") "zoom" ("g" text-scale-increase "in") ("l" text-scale-decrease "out")) @@ -1311,7 +1445,6 @@ Refer [[https://github.com/abo-abo/hydra/blob/master/hydra-examples.el][hydra-ex #+END_SRC *** hydra-window - #+BEGIN_SRC emacs-lisp :tangle yes :results silent (winner-mode 1) @@ -1336,11 +1469,15 @@ Refer [[https://github.com/abo-abo/hydra/blob/master/hydra-examples.el][hydra-ex (windmove-down)) "horz" :exit t) ("o" delete-other-windows "one" :exit t) + ("C-o" ido-switch-buffer "buf" :exit t) + ("C-k" sd/delete-current-window "del" :exit t) + ("'" other-window "other" :exit t) ("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") + ("b" ido-switch-buffer "buf" :exit t) + ("C-b" ido-switch-buffer "buf" :exit t) ;; ("m" headlong-bookmark-jump "bmk") ("q" nil "cancel") ("u" (progn (winner-undo) (setq this-command 'winner-undo)) "undo") @@ -1349,36 +1486,36 @@ Refer [[https://github.com/abo-abo/hydra/blob/master/hydra-examples.el][hydra-ex (global-unset-key (kbd "C-o")) (global-set-key (kbd "C-o") 'sd/hydra-window/body) - - (defun triggle-windows-max-size () - (interactive) - (if (> (length (window-list)) 1) - (delete-other-windows) - (winner-undo))) - #+END_SRC *** hydra misc #+BEGIN_SRC emacs-lisp :tangle yes :results silent - (defhydra sd/hydra-misc () + (defhydra sd/hydra-misc (:color red :columns nil) "Miscellaneous Commands" - ("e" eshell "eshell" :color red :exit t) + ("e" eshell "eshell" :exit t) ("p" (lambda () (interactive) - (if (sd/buffer-exist "*Packages*") + (if (not (eq nil (get-buffer "*Packages*"))) (switch-to-buffer "*Packages*") (package-list-packages))) - "list-package" :color red :exit t) - ("g" magit-status "git-status" :color red :exit t)) + "list-package" :exit t) + ("g" magit-status "git-status" :exit t) + ("'" mode-line-other-buffer "last buffer" :exit t) + ("C-'" mode-line-other-buffer "last buffer" :exit t) + ("m" man "man" :exit t) + ("d" dired-jump "dired" :exit t) + ("b" ibuffer "ibuffer" :exit t) + ("q" nil "quit") + ("f" nil "quit")) + + (global-set-key (kbd "C-'") 'sd/hydra-misc/body) #+END_SRC *** hydra launcher #+BEGIN_SRC emacs-lisp :tangle yes :results silent - (defhydra hydra-launcher (:color blue :columns 2) + (defhydra sd/hydra-launcher (:color blue :columns 2) "Launch" - ("h" man "man") - ("s" eshell "eshell") - ("p" package-list-packages "Package") + ("e" emms "emms" :exit t) ("q" nil "cancel")) #+END_SRC @@ -1579,46 +1716,6 @@ Play Go in Emacs, gnugo xpm refert [[https://github.com/okanotor/dotemacs/blob/f #+END_SRC -** undo-tree - -#+BEGIN_SRC emacs-lisp :tangle yes :results silent - - (use-package undo-tree - :ensure t - :config - (global-undo-tree-mode 1)) - -#+END_SRC - -** swiper - -#+BEGIN_SRC emacs-lisp :tangle yes :results silent - - (use-package swiper - :ensure t) - - - (ivy-mode 1) - (setq ivy-use-virtual-buffers t) - ;; (global-set-key "\C-s" 'swiper) - ;; (global-set-key (kbd "C-c C-r") 'ivy-resume) - ;; (global-set-key (kbd "") 'ivy-resume) - ;; ;; (global-set-key (kbd "M-x") 'counsel-M-x) - ;; ;; (global-set-key (kbd "C-x C-f") 'counsel-find-file) - ;; (global-set-key (kbd " f") 'counsel-describe-function) - ;; (global-set-key (kbd " v") 'counsel-describe-variable) - ;; (global-set-key (kbd " l") 'counsel-load-library) - ;; (global-set-key (kbd " i") 'counsel-info-lookup-symbol) - ;; (global-set-key (kbd " u") 'counsel-unicode-char) - ;; (global-set-key (kbd "C-c g") 'counsel-git) - ;; (global-set-key (kbd "C-c j") 'counsel-git-grep) - ;; (global-set-key (kbd "C-c k") 'counsel-ag) - ;; (global-set-key (kbd "C-x l") 'counsel-locate) - ;; (global-set-key (kbd "C-S-o") 'counsel-rhythmbox) - ;; ;; (define-key read-expression-map (kbd "C-r") 'counsel-expression-history) - -#+END_SRC - ** Tabbar #+BEGIN_SRC emacs-lisp :tangle yes :results silent @@ -1638,14 +1735,6 @@ Play Go in Emacs, gnugo xpm refert [[https://github.com/okanotor/dotemacs/blob/f #+END_SRC -** dired -=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 - (add-hook 'dired-mode-hook (lambda () - (local-unset-key (kbd "C-o")) - (local-set-key (kbd "o") 'dired-display-file))) -#+END_SRC - ** Info plus #+BEGIN_SRC emacs-lisp :tangle yes :results silent (el-get-bundle info+ @@ -1656,6 +1745,91 @@ Play Go in Emacs, gnugo xpm refert [[https://github.com/okanotor/dotemacs/blob/f ** TODO bookmark ** TODO Calendar +** advice info +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (defun sd/info-mode () + (interactive) + (unless (equal major-mode 'Info-mode) + (unless (> (length (window-list)) 1) + (split-window-right)) + (other-window 1) + ;; (info) + )) + + ;; (global-set-key (kbd "C-h i") 'sd/info-mode) + + ;; open Info buffer in other window instead of current window + (defadvice info (before my-info (&optional file buf) activate) + (sd/info-mode)) + + (defadvice Info-exit (after my-info-exit activate) + (sd/delete-current-window)) +#+END_SRC + +** TODO Man mode +Color for Man-mode +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + ;; (add-hook 'Man-mode-hook (lambda () + ;; (interactive) + ;; (setenv "GROFF_NO_SRG"))) +#+END_SRC + +** TODO swiper to occur + +** TODO UTF8 +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + ;; (set-language-environment "UTF-8") + ;; (set-default-coding-systems 'utf-8) +#+END_SRC + +** Demo It +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + ;; (el-get-bundle howardabrams/demo-it) + + (use-package org-tree-slide + :ensure t) + + ;; (use-package yasnippet + ;; :ensure t) +#+END_SRC + +** Presentation +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (use-package org-tree-slide + :ensure + :config + ;; (define-key org-mode-map "\C-ccp" 'org-tree-slide-mode) + (define-key org-tree-slide-mode-map (kbd "") 'org-tree-slide-content) + (define-key org-tree-slide-mode-map (kbd "") 'org-tree-slide-move-next-tree) + (define-key org-tree-slide-mode-map [escape] 'org-tree-slide-move-previous-tree)) +#+END_SRC + +* dired +=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 + (use-package dired + :config + (require 'dired-x) + (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 ".."))) + (dired-omit-mode)))) +#+END_SRC + +Dired+ +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (use-package dired+ + :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)) +#+END_SRC * Programming @@ -1682,27 +1856,22 @@ In Lisp Mode, =M-o= is defined, but I use this for global hydra window. So here 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 - (use-package lispy :ensure t :init - (eval-after-load 'lispy - '(progn + (eval-after-load "lispy" + `(progn (define-key lispy-mode-map (kbd "M-o") nil))) :config (add-hook 'emacs-lisp-mode-hook (lambda () (lispy-mode 1)))) - #+END_SRC *** Perl - [[https://www.emacswiki.org/emacs/CPerlMode][CPerl mode]] has more features than =PerlMode= for perl programming. Alias this to =CPerlMode= - #+BEGIN_SRC emacs-lisp :tangle yes :results silent - (defalias 'perl-mode 'cperl-mode) - ;(setq cperl-hairy t) ;; Turns on most of the CPerlMode options + (setq cperl-hairy t) ;; Turns on most of the CPerlMode options (setq cperl-auto-newline t) (setq cperl-highlight-variables-indiscriminately t) ;(setq cperl-indent-level 4) @@ -1716,10 +1885,7 @@ bindings in =lispy-mode-map= after loaded. see [[http://stackoverflow.com/questi '(lambda () (cperl-set-style "C++"))) - ;(require 'template) - ;(template-initialize) - ;(require 'perlnow) - + (defalias 'perldoc 'cperl-perldoc) #+END_SRC - auto insert @@ -1759,33 +1925,33 @@ to call =compilation= interactively. #+END_SRC ** Compile - Set the environments vairables in compilation mode - #+BEGIN_SRC emacs-lisp :tangle yes :results silent - (use-package compile :commands compile :config - (setq compilation-environment (cons "LC_ALL=C" compilation-environment))) + (setq compilation-environment (cons "LC_ALL=C" compilation-environment)) + (setq compilation-auto-jump-to-first-error t) + (setq compilation-auto-jump-to-next t) + (setq compilation-scroll-output 'first-error)) + ;; super-r to compile + (with-eval-after-load "compile" + (define-key compilation-mode-map (kbd "C-o") nil) + (define-key compilation-mode-map (kbd "n") 'compilation-next-error) + (define-key compilation-mode-map (kbd "p") 'compilation-previous-error) + (define-key compilation-mode-map (kbd "r") #'recompile)) #+END_SRC ** Auto-Insert - -Enable auto-insert mode - +*** Enable auto-insert mode #+BEGIN_SRC emacs-lisp :tangle yes :results silent - (auto-insert-mode t) (setq auto-insert-query nil) - #+END_SRC *** C++ Auto Insert - #+BEGIN_SRC emacs-lisp :tangle yes :results silent - (eval-after-load 'autoinsert '(define-auto-insert '("\\.cpp\\'" . "C++ skeleton") '( @@ -1824,24 +1990,102 @@ Enable auto-insert mode "return 1;\n" "}" > \n ))) - #+END_SRC *** Perl Auto Insert - Refer [[https://www.emacswiki.org/emacs/AutoInsertMode][AutoInsertMode]] Wiki - #+BEGIN_SRC emacs-lisp :tangle yes :results silent - (eval-after-load 'autoinsert '(define-auto-insert '("\\.pl\\'" . "Perl skeleton") '( - "Description: " + "Empty" "#!/usr/bin/perl -w" \n \n - "use strict;" \n \n + "use strict;" > \n \n + > _ + ))) +#+END_SRC + +*** Python template +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (eval-after-load 'autoinsert + '(define-auto-insert '("\\.\\(py\\)\\'" . "Python skeleton") + '( + "Empty" + "#import os,sys" \n + \n \n ))) +#+END_SRC +*** Elisp +Emacs lisp auto-insert, based on the default module in =autoinsert.el=, but replace =completing-read= as +=completing-read-ido-ubiquitous= to fix the edge case of that =ido= cannot handle. +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (eval-after-load 'autoinsert + '(define-auto-insert '("\\.el\\'" . "my Emacs Lisp header") + '( + "Short description: " + ";;; " (file-name-nondirectory (buffer-file-name)) " --- " str + (make-string (max 2 (- 80 (current-column) 27)) ?\s) + "-*- lexical-binding: t; -*-" '(setq lexical-binding t) + "\n + ;; Copyright (C) " (format-time-string "%Y") " " + (getenv "ORGANIZATION") | (progn user-full-name) " + + ;; Author: " (user-full-name) + '(if (search-backward "&" (line-beginning-position) t) + (replace-match (capitalize (user-login-name)) t t)) + '(end-of-line 1) " <" (progn user-mail-address) "> + ;; Keywords: " + '(require 'finder) + ;;'(setq v1 (apply 'vector (mapcar 'car finder-known-keywords))) + '(setq v1 (mapcar (lambda (x) (list (symbol-name (car x)))) + finder-known-keywords) + v2 (mapconcat (lambda (x) (format "%12s: %s" (car x) (cdr x))) + finder-known-keywords + "\n")) + ((let ((minibuffer-help-form v2)) + (completing-read-ido-ubiquitous "Keyword, C-h: " v1 nil t)) + str ", ") & -2 " + + \;; This program is free software; you can redistribute it and/or modify + \;; it under the terms of the GNU General Public License as published by + \;; the Free Software Foundation, either version 3 of the License, or + \;; (at your option) any later version. + + \;; This program is distributed in the hope that it will be useful, + \;; but WITHOUT ANY WARRANTY; without even the implied warranty of + \;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + \;; GNU General Public License for more details. + + \;; You should have received a copy of the GNU General Public License + \;; along with this program. If not, see . + + \;;; Commentary: + + \;; " _ " + + \;;; Code: + + + \(provide '" + (file-name-base) + ") + \;;; " (file-name-nondirectory (buffer-file-name)) " ends here\n"))) +#+END_SRC + +*** Org file template +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (eval-after-load 'autoinsert + '(define-auto-insert '("\\.\\(org\\)\\'" . "Org-mode skeleton") + '( + "title: " + "#+TITLE: " str (make-string 30 ?\s) > \n + "#+AUTHOR: Peng Li\n" + "#+EMAIL: seudut@gmail.com\n" + "#+DATE: " (shell-command-to-string "echo -n $(date +%Y-%m-%d)") > \n + > \n + > _))) #+END_SRC ** Completion @@ -1887,6 +2131,7 @@ company mode #+END_SRC * Gnus +** Gmail setting Refer [[https://www.emacswiki.org/emacs/GnusGmail][GnusGmail]] #+BEGIN_SRC emacs-lisp :tangle yes :results silent (setq user-mail-address "seudut@gmail.com" @@ -1919,6 +2164,42 @@ and == with the password #+END_EXAMPLE Then Run =M-x gnus= + +** Group buffer +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (use-package gnus + :init + (setq gnus-permanently-visible-groups "\.*") + :config + (cond (window-system + (setq custom-background-mode 'light) + (defface my-group-face-1 + '((t (:foreground "Red" :bold t))) "First group face") + (defface my-group-face-2 + '((t (:foreground "DarkSeaGreen4" :bold t))) + "Second group face") + (defface my-group-face-3 + '((t (:foreground "Green4" :bold t))) "Third group face") + (defface my-group-face-4 + '((t (:foreground "SteelBlue" :bold t))) "Fourth group face") + (defface my-group-face-5 + '((t (:foreground "Blue" :bold t))) "Fifth group face"))) + (setq gnus-group-highlight + '(((> unread 200) . my-group-face-1) + ((and (< level 3) (zerop unread)) . my-group-face-2) + ((< level 3) . my-group-face-3) + ((zerop unread) . my-group-face-4) + (t . my-group-face-5)))) + + + ;; key- + (add-hook 'gnus-group-mode-hook (lambda () + (define-key gnus-group-mode-map "k" 'gnus-group-prev-group) + (define-key gnus-group-mode-map "j" 'gnus-group-next-group) + (define-key gnus-group-mode-map "g" 'gnus-group-jump-to-group) + (define-key gnus-group-mode-map "v" (lambda () (interactive) (gnus-group-select-group t))))) +#+END_SRC + #+BEGIN_SRC emacs-lisp :tangle yes :results silent (setq gnus-fetch-old-headers 't) @@ -1926,16 +2207,103 @@ Then Run =M-x gnus= (setq gnus-extract-address-components 'mail-extract-address-components) - - (setq gnus-summary-line-format "%U%R%z%I%(%[%-20,20f%]%) %s%-67= %11&user-date;\n") + ;; summary buffer + (setq gnus-summary-line-format "%U%R%z%I%(%[%-20,20f%]%) %s%-80= %11&user-date;\n") (setq gnus-user-date-format-alist '(((gnus-seconds-today) . "%H:%M") ((+ 86400 (gnus-seconds-today)) . "%a %H:%M") (604800 . "%a, %b %-d") (15778476 . "%b %-d") (t . "%Y-%m-%d"))) + + (setq gnus-thread-sort-functions '((not gnus-thread-sort-by-number))) + (setq gnus-unread-mark ?\.) + (setq gnus-use-correct-string-widths t) + + ;; thread + (setq gnus-thread-hide-subtree t) + + ;; (with-eval-after-load 'gnus-summary-mode + ;; (define-key gnus-summary-mode-map (kbd "C-o") 'sd/hydra-window/body)) + + (add-hook 'gnus-summary-mode-hook (lambda () + (define-key gnus-summary-mode-map (kbd "C-o") nil))) + + +#+END_SRC + +** Windows layout +See [[https://www.emacswiki.org/emacs/GnusWindowLayout][GnusWindowLayout]] +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (gnus-add-configuration + '(summary + (horizontal 1.0 + (vertical 35 + (group 1.0)) + (vertical 1.0 + (summary 1.0 poine))))) + + (gnus-add-configuration + '(article + (horizontal 1.0 + (vertical 35 + (group 1.0)) + (vertical 1.0 + (summary 0.50 point) + (article 1.0))))) + + (with-eval-after-load 'gnus-group-mode + (gnus-group-select-group "INBOX")) + ;; (add-hook 'gnus-group-mode-map (lambda () + ;; (gnus-group-select-group "INBOX"))) +#+END_SRC + +* Gnu Plot +To fix some issue that =toolbar-make-button-list= is void, see the [[https://github.com/bruceravel/gnuplot-mode/issues/31][issue]], here I set some variable as =nil= +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (use-package gnuplot + :ensure + :init + (setq gnuplot-help-xpm nil) + (setq gnuplot-line-xpm nil) + (setq gnuplot-region-xpm nil) + (setq gnuplot-buffer-xpm nil) + (setq gnuplot-doc-xpm nil)) +#+END_SRC + +Use =gnuplot= on =Org-mode= file, see [[http://orgmode.org/worg/org-contrib/babel/languages/ob-doc-gnuplot.html][ob-doc-gnuplot]] +#+BEGIN_SRC gnuplot :exports code :file ./temp/file.png + reset + + set title "Putting it All Together" + + set xlabel "X" + set xrange [-8:8] + set xtics -8,2,8 + + + set ylabel "Y" + set yrange [-20:70] + set ytics -20,10,70 + + f(x) = x**2 + g(x) = x**3 + h(x) = 10*sqrt(abs(x)) + + plot f(x) w lp lw 1, g(x) w p lw 2, h(x) w l lw 3 +#+END_SRC + +#+RESULTS: +[[file:./temp/file.png]] + +* Blog +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + #+END_SRC * key - passion - vision - mission +* TODO Convert ASCII to key +map =function-key-map= [[http://academic.evergreen.edu/projects/biophysics/technotes/program/ascii_ctrl.htm][ascii_ctrl]] +new file =C-x C-f C-f=