X-Git-Url: http://47.100.26.94:8080/?a=blobdiff_plain;ds=inline;f=emacs.d%2Fconfig.org;h=a027b1482c6a0ea2d049fc87fa0c524502386f15;hb=4f59901dcf618abb717f5f45b02802dbf922b659;hp=386ad6ab289e49ff2a00988ec17a981a33012188;hpb=b662f58bf2771962ebfa2e5a4cd4a22c3a948ffb;p=dotfiles.git
diff --git a/emacs.d/config.org b/emacs.d/config.org
index 386ad6a..a027b14 100644
--- a/emacs.d/config.org
+++ b/emacs.d/config.org
@@ -8,29 +8,17 @@ Most config are just copied from [[https://github.com/howardabrams/dot-files][ho
* Basic Settings
** Setting loading Path
-
Set system PATH and emacs exec path
-
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
(setenv "PATH" (concat (getenv "PATH")
":" "/usr/local/bin"
":" "/Library/TeX/texbin"))
(setq exec-path (append exec-path '("/usr/local/bin")))
(setq exec-path (append exec-path '("/Library/TeX/texbin/")))
-
-#+END_SRC
-
-Set the emacs load path
-
-#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- ;; (add-to-list 'load-path "~/.emacs.d/elisp")
#+END_SRC
** Package Initialization
-
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
(require 'package)
(setq package-archives '(("mepla" . "http://melpa.milkbox.net/packages/")
@@ -38,7 +26,6 @@ Set the emacs load path
("org" . "http://orgmode.org/elpa/")))
(package-initialize)
-
#+END_SRC
** General Setting
@@ -46,15 +33,21 @@ Set the emacs load path
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
(scroll-bar-mode 0)
(tool-bar-mode 0)
- (menu-bar-mode 1)
- ;; (setq debug-on-error t)
+ (if window-system
+ (menu-bar-mode 1)
+ (menu-bar-mode 0))
+
+ (setq debug-on-error t)
(setq inhibit-startup-message t)
(defalias 'yes-or-no-p 'y-or-n-p)
(show-paren-mode 1)
;; don't backupf
(setq make-backup-files nil)
+
+ ;;supress the redefined warning at startup
+ (setq ad-redefinition-action 'accept)
#+END_SRC
*** Custom file
@@ -108,8 +101,12 @@ Make a temp directory for all cache/history files
(setq auto-save-list-file-prefix (concat sd-temp-directory "auto-save-list/.saves-"))
#+END_SRC
-* Package Management Tools
+*** Max file size
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (setq large-file-warning-threshold nil)
+#+END_SRC
+* 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
@@ -137,61 +134,120 @@ Check out [[http://tapoueh.org/emacs/el-get.html][el-get]].
#+END_SRC
* Color and Fonts Settings
-
** highlight current line
-
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
- (global-hl-line-mode)
-
+ ;; (global-hl-line-mode)
+ ;; don't want high light current line in eshell/term mode
+ (add-hook 'prog-mode-hook 'hl-line-mode)
+ (add-hook 'text-mode-hook 'hl-line-mode)
+ (add-hook 'dired-mode-hook 'hl-line-mode)
#+END_SRC
** Smart Comments
-
[[https://github.com/paldepind/smart-comment][smart-comments]]
-
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
(use-package smart-comment
:ensure t
:bind ("M-;" . smart-conmment))
-
#+END_SRC
** Font Setting
-
-syntax highlighting
-
+*** syntax highlighting
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
(global-font-lock-mode 1)
-
#+END_SRC
-[[https://github.com/i-tu/Hasklig][Hasklig]] and Source Code Pro, defined fonts family
-
+*** [[https://github.com/i-tu/Hasklig][Hasklig]] and Source Code Pro, defined fonts family
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
(if window-system
(defvar sd/fixed-font-family
(cond ((x-list-fonts "Hasklig") "Hasklig")
- ((x-list-fonts "Source Code Pro") "Source Code Pro:weight:light")
+ ((x-list-fonts "Source Code Pro") "Source Code Pro:weight") ;; 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."))
-
#+END_SRC
-Setting the fonts
-
+Setting the fonts alignment issue
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
(if window-system
(when sd/fixed-font-family
(set-frame-font sd/fixed-font-family)
- (set-face-attribute 'default nil :font sd/fixed-font-family :height 130)
+ (set-face-attribute 'default nil :font sd/fixed-font-family :height 140)
(set-face-font 'default sd/fixed-font-family)))
+#+END_SRC
+
+*** Chinese fonts
+Fix the font alignment issue when both Chinese and English hybird in org-mode table. Refer [[http://coldnew.github.io/blog/2013/11-16_d2f3a/][解決 org-mode è¡¨æ ¼å
§ä¸è±æå°é½çåé¡]]
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (defvar emacs-english-font "Source Code Pro" "The font name of English.")
+
+ (defvar emacs-cjk-font "STHeiti" "The font name for CJK.")
+
+ (defvar emacs-font-size-pair '(13 . 16) "Default font size pair for (english . chinese)")
+
+ (defvar emacs-font-size-pair-list
+ '(( 5 . 6) (10 . 12)
+ (11 . 14) (12 . 14)
+ (13 . 16) (14 . 16) (15 . 18) (16 . 20) (17 . 20)
+ (18 . 22) (19 . 22) (20 . 24) (21 . 26)
+ (24 . 28) (26 . 32) (28 . 34)
+ (30 . 36) (34 . 40) (36 . 44))
+ "This list is used to store matching (englis . chinese) font-size.")
+
+ (defun font-exist-p (fontname)
+ "Test if this font is exist or not."
+ (if (or (not fontname) (string= fontname ""))
+ nil
+ (if (not (x-list-fonts fontname)) nil t)))
+
+ (defun set-font (english chinese size-pair)
+ "Setup emacs English and Chinese font on x window-system."
+ (if (font-exist-p english)
+ (set-frame-font (format "%s:pixelsize=%d" english (car size-pair)) t))
+ (if (font-exist-p chinese)
+ (dolist (charset '(han cjk-misc) ;; '(kana han symbol cjk-misc bopomofo)
+ )
+ (set-fontset-font (frame-parameter nil 'font) charset
+ (font-spec :family chinese :size (cdr size-pair))))))
+
+ (defun emacs-step-font-size (step)
+ "Increase/Decrease emacs's font size."
+ (let ((scale-steps emacs-font-size-pair-list))
+ (if (< step 0) (setq scale-steps (reverse scale-steps)))
+ (setq emacs-font-size-pair
+ (or (cadr (member emacs-font-size-pair scale-steps))
+ emacs-font-size-pair))
+ (when emacs-font-size-pair
+ (message "emacs font size set to %.1f" (car emacs-font-size-pair))
+ (set-font emacs-english-font emacs-cjk-font emacs-font-size-pair))))
+
+ (defun increase-emacs-font-size ()
+ "Decrease emacs's font-size acording emacs-font-size-pair-list."
+ (interactive) (emacs-step-font-size 1))
+
+ (defun decrease-emacs-font-size ()
+ "Increase emacs's font-size acording emacs-font-size-pair-list."
+ (interactive) (emacs-step-font-size -1))
+#+END_SRC
+
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ ;; Setup font size based on emacs-font-size-pair
+ ;; (if window-system
+ ;; (set-font emacs-english-font emacs-cjk-font '(13 . 16)))
+
+
+ ;; (global-set-key (kbd "s-=") 'increase-emacs-font-size)
+ ;; (global-set-key (kbd "s--") 'decrease-emacs-font-size)
+
+ ;; set different fonts (chinese) size for org-mode.
+ (defun sd/org-buffer-font ()
+ "My font setting for org-mode"
+ (interactive)
+ (setq buffer-face-mode-face '(:family "Source Sans Code" :height 160))
+ (buffer-face-mode))
+ ;; (add-hook 'org-mode-hook 'sd/org-buffer-font)
#+END_SRC
** Color Theme
@@ -199,7 +255,6 @@ Setting the fonts
Loading theme should be after all required loaded, refere [[https://github.com/jwiegley/use-package][:defer]] in =use-package=
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
(setq vc-follow-symlinks t)
(use-package color-theme
@@ -209,7 +264,9 @@ Loading theme should be after all required loaded, refere [[https://github.com/j
:ensure t
:no-require t
:config
- (load-theme 'sanityinc-tomorrow-bright t)))
+ ;; (load-theme 'sanityinc-tomorrow-bright t)
+ (load-theme 'molokai t)
+ ))
;(eval-after-load 'color-theme
; (load-theme 'sanityinc-tomorrow-bright t))
@@ -314,14 +371,13 @@ improve color for org-mode
#+END_SRC
** page-break-lines
-
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
(use-package page-break-lines
:ensure t
:config
- (turn-on-page-break-lines-mode))
-
+ (global-page-break-lines-mode)
+ ;; (turn-on-page-break-lines-mode)
+ )
#+END_SRC
** rainbow-mode
@@ -337,16 +393,18 @@ Enable rainbow mode in emacs lisp mode
#+END_SRC
-* Mode-line
+** cusor color
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (if (display-graphic-p)
+ (set-cursor-color 'red))
+#+END_SRC
+* 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 . " α")
- (yas/minor-mode . " Ï
")
(paredit-mode . " Ï")
(eldoc-mode . "")
(abbrev-mode . "")
@@ -365,12 +423,18 @@ clean mode line, Refer to [[https://www.masteringemacs.org/article/hiding-replac
(org-indent-mode . "")
;; default is Fly
(flyspell-mode . "")
+ (irony-mode . "")
+ (page-break-lines-mode . "")
+ (yas-minor-mode . "y")
;; 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'.
@@ -396,9 +460,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
@@ -510,13 +572,15 @@ Fix the issue in mode line when showing triangle
set height in mode line
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- (set-variable 'powerline-height 14)
- (set-variable 'powerline-text-scale-factor (/ (float 100) 140))
- ;; (custom-set-variables
- ;; '(powerline-height 14)
- ;; '(powerline-text-scale-factor (/ (float 100) 140)))
- ;; 100/140;0.8
- (set-face-attribute 'mode-line nil :height 100)
+ (with-eval-after-load "powerline"
+ (if window-system
+ (progn
+ (let* ((base-font-size (face-attribute 'default :height)))
+ ;; 100/140;0.8
+ (set-variable 'powerline-height (/ base-font-size 10))
+ (set-variable 'powerline-text-scale-factor (/ (float 100) base-font-size)))
+ (set-face-attribute 'mode-line nil :height 100)
+ (set-face-attribute 'mode-line-inactive nil :height 100))))
#+END_SRC
* IDO & SMEX
@@ -524,7 +588,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)
@@ -541,9 +605,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
@@ -586,8 +650,8 @@ Use [[https://github.com/DarwinAwardWinner/ido-ubiquitous][ido-ubiquitous]] for
(use-package ido-exit-target
:ensure t
:init
- (mapcar (lambda (map)
- (define-key map (kbd "C-j") #'ido-exit-target-split-window-right)
+ (mapcar #'(lambda (map)
+ (define-key map (kbd "C-j") #'ido-exit-target-other-window)
(define-key map (kbd "C-k") #'ido-exit-target-split-window-below))
(list ido-buffer-completion-map
;; ido-common-completion-map
@@ -639,11 +703,8 @@ let helm windows split inside current window
#+END_SRC
* Org-mode Settings
-
** Org-mode Basic setting
-
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
@@ -654,43 +715,97 @@ Always indents header, and hide header leading starts so that no need type =#+ST
(setq org-src-tab-acts-natively t)
(setq org-confirm-babel-evaluate nil)
(setq org-use-speed-commands t)
- (setq org-completion-use-ido t))
-
- (org-babel-do-load-languages
- 'org-babel-load-languages
- '((python . t)
- (C . t)
- (perl . t)
- (calc . t)
- (latex . t)
- (java . t)
- (ruby . t)
- (lisp . t)
- (scheme . t)
- (sh . t)
- (sqlite . t)
- (js . t)
- (gnuplot . t)
- (ditaa . t)))
+ (setq org-completion-use-ido t)
+ (setq org-startup-with-inline-images t)
+ ;; latex preview
+ ;; (setq org-startup-with-latex-preview t)
+ ;; (setq org-format-latex-options (plist-put org-format-latex-options :scale 1.2))
+ (require 'org-habit)
+ (add-to-list 'org-modules 'org-habit)
+ (setq org-habit-graph-column 50)
+ (setq org-hide-emphasis-markers t)
+ (setq org-html-validation-link nil)
+ ;; open link when return clicked
+ (setq org-return-follows-link t)
+ ;; open the ppt file by external open instead of emacs
+ (add-to-list 'org-file-apps '("\\.pptx" . "open %s")))
+#+END_SRC
+
+
+** Org babel
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (el-get-bundle hasu/emacs-ob-racket
+ :features ob-racket)
+
+ ;; Lua support
+ (use-package ob-lua
+ :ensure t)
;; use current window for org source buffer editting
- (setq org-src-window-setup 'current-window )
+ (setq org-src-window-setup 'current-window )
(define-key org-mode-map (kbd "C-'") nil)
;; C-M-i is mapped to imenu globally
(define-key org-mode-map (kbd "C-M-i") nil)
-
;; set the ditta.jar path
+
(setq org-ditaa-jar-path "/usr/local/Cellar/ditaa/0.9/libexec/ditaa0_9.jar")
(unless
(file-exists-p org-ditaa-jar-path)
(error "seudut: ditaa.jar not found at %s " org-ditaa-jar-path))
+
+ (org-babel-do-load-languages 'org-babel-load-languages
+ '((python . t)
+ (C . t)
+ (perl . t)
+ (calc . t)
+ (latex . t)
+ (java . t)
+ (ruby . t)
+ (lua . t)
+ (lisp . t)
+ (scheme . t)
+ (racket . t)
+ (sh . t)
+ (sqlite . t)
+ (js . t)
+ (gnuplot . t)
+ (ditaa . t)
+ (plantuml . t)))
+
+
+ ;; toggle image preview
+ (add-hook 'org-babel-after-execute-hook 'sd/display-inline-images 'append)
+
+ (defun sd/display-inline-images ()
+ (condition-case nil
+ (org-display-inline-images)
+ (error nil)))
+
+ ;; ditaa artist mode
+ (with-eval-after-load "artist"
+ (define-key artist-mode-map [down-mouse-3] 'artist-mouse-choose-operation))
+#+END_SRC
+*** plantUML
+[[http://eschulte.github.io/babel-dev/DONE-integrate-plantuml-support.html][DONE-integrate-plantuml-support]]
+#+BEGIN_SRC sh
+ ## support plantuml
+ brew install plantuml
#+END_SRC
-** Org-bullets
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (use-package plantuml-mode
+ :ensure t)
-use [[https://github.com/sabof/org-bullets][org-bullets]] package to show utf-8 charactes
+ (setq org-plantuml-jar-path
+ (expand-file-name "/usr/local/Cellar/plantuml/8041/plantuml.8041.jar"))
+
+ (set-variable 'plantuml-jar-path
+ (expand-file-name "/usr/local/Cellar/plantuml/8041/plantuml.8041.jar"))
+#+END_SRC
+** Org-bullets
+use [[https://github.com/sabof/org-bullets][org-bullets]] package to show utf-8 charactes
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
(use-package org-bullets
:ensure t
@@ -702,38 +817,32 @@ use [[https://github.com/sabof/org-bullets][org-bullets]] package to show utf-8
(setq org-bullets-bullet-list '("⦿" "âª" "â" "â" "âº" "â"))
;; increase font size when enter org-src-mode
- (add-hook 'org-src-mode-hook (lambda () (text-scale-increase 2)))
+ ;; (add-hook 'org-src-mode-hook (lambda () (text-scale-increase 2)))
+
+ ;; define a face for org-bullets
+ (defface org-bullet-face
+ '((t (:foreground "green yellow")))
+ "Face used for the org-bullets.")
+ (setq org-bullets-face-name (quote org-bullet-face))
+ (set-face-attribute 'org-bullet-face t :foreground "burlywood" :weight 'normal :height 1.6)
#+END_SRC
** Worf Mode
-
[[https://github.com/abo-abo/worf][worf]] mode is an extension of vi-like binding for org-mode.
In =worf-mode=, it is mapping =[=, =]= as =worf-backward= and =worf-forward= in global, wich
cause we cannot input =[= and =]=, so here I unset this mappings. And redifined this two to
=M-[= and =M-]=. see this [[https://github.com/abo-abo/worf/issues/19#issuecomment-223756599][issue]]
-
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
(use-package worf
:ensure t
:commands worf-mode
- :init (add-hook 'org-mode-hook 'worf-mode)
- ;; :config
- ;; (define-key worf-mode-map "[" nil)
- ;; (define-key worf-mode-map "]" nil)
- ;; (define-key worf-mode-map (kbd "M-[") 'worf-backward)
- ;; (define-key worf-mode-map (kbd "M-]") 'worf-forward)
- )
-
+ :init (add-hook 'org-mode-hook 'worf-mode))
#+END_SRC
** Get Things Done
-
Refer to [[http://doc.norang.ca/org-mode.html][Organize Your Life in Plain Text]]
*** basic setup
-
standard key binding
-
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
(global-set-key "\C-cl" 'org-store-link)
(global-set-key "\C-ca" 'org-agenda)
@@ -741,9 +850,7 @@ standard key binding
#+END_SRC
*** Plain List
-
Replace the list bullet =-=, =+=, with =â¢=, a litter change based [[https://github.com/howardabrams/dot-files/blob/master/emacs-org.org][here]]
-
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
;; (use-package org-mode
;; :init
@@ -753,12 +860,9 @@ Replace the list bullet =-=, =+=, with =â¢=, a litter change based [[https://g
#+END_SRC
*** Todo Keywords
-
refer to [[http://coldnew.github.io/coldnew-emacs/#orgheadline94][fancy todo states]],
-
To track TODO state changes, the =!= is to insert a timetamp, =@= is to insert a note with
timestamp for the state change.
-
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
;; (setq org-todo-keywords
;; '((sequence "â TODO(t)" "|" "â DONE(d)")
@@ -891,9 +995,9 @@ Setting agenda files and the agenda view
"~/org/work.org")))
;; only show today's tasks in agenda view
- (setq org-agenda-span 'day)
+ ;; (setq org-agenda-span 'day)
;; Use current windows for agenda view
- (setq org-agenda-window-setup 'current-window)
+ ;; (setq org-agenda-window-setup 'current-window)
;; show all feature entries for repeating tasks,
;; this is already setting by default
@@ -906,6 +1010,8 @@ Setting agenda files and the agenda view
** Export PDF
Install MacTex-basic [[http://www.tug.org/mactex/morepackages.html][MacTex-basic]] and some tex packages
#+BEGIN_SRC sh
+ wget http://tug.org/cgi-bin/mactex-download/BasicTeX.pkg
+
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
@@ -986,19 +1092,141 @@ Install MacTex-basic [[http://www.tug.org/mactex/morepackages.html][MacTex-basic
#+END_SRC
-** others
+** Export Html
+Color higlight the source code block in exported html, [[http://stackoverflow.com/questions/24082430/org-mode-no-syntax-highlighting-in-exported-html-page][org-mode-no-syntax-highlighting-in-exported-html-page]]
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (use-package htmlize
+ :ensure t)
+#+END_SRC
+** Org structure template
extend org-mode's easy templates, refer to [[http://coldnew.github.io/coldnew-emacs/#orgheadline94][Extend org-modes' esay templates]]
-
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ ;; âsâ â#+BEGIN_SRC ... #+END_SRCâ
+ ;; âeâ â#+BEGIN_EXAMPLE ... #+END_EXAMPLEâ
+ ;; âqâ â#+BEGIN_QUOTE ... #+END_QUOTEâ
+ ;; âvâ â#+BEGIN_VERSE ... #+END_VERSEâ
+ ;; âcâ â#+BEGIN_CENTER ... #+END_CENTERâ
+ ;; âlâ â#+BEGIN_LaTeX ... #+END_LaTeXâ
+ ;; âLâ â#+LaTeX:â
+ ;; âhâ â#+BEGIN_HTML ... #+END_HTMLâ
+ ;; âHâ â#+HTML:â
+ ;; âaâ â#+BEGIN_ASCII ... #+END_ASCIIâ
+ ;; âAâ â#+ASCII:â
+ ;; âiâ â#+INDEX:â line
+ ;; âIâ â#+INCLUDE:â line
+
(add-to-list 'org-structure-template-alist
'("E" "#+BEGIN_SRC emacs-lisp :tangle yes :results silent\n?\n#+END_SRC"))
(add-to-list 'org-structure-template-alist
- '("S" "#+BEGIN_SRC sh\n?\n#+END_SRC"))
+ '("R" "#+BEGIN_SRC racket :tangle no :results output replace\n?\n#+END_SRC"))
+ (add-to-list 'org-structure-template-alist
+ '("S" "#+BEGIN_SRC sh :results output replace\n?\n#+END_SRC"))
(add-to-list 'org-structure-template-alist
'("p" "#+BEGIN_SRC plantuml :file uml.png \n?\n#+END_SRC"))
-
+ (add-to-list 'org-structure-template-alist
+ '("P" "#+BEGIN_SRC perl \n?\n#+END_SRC"))
+ (add-to-list 'org-structure-template-alist
+ '("f" "#+BEGIN_SRC fundamental :tangle ?\n\n#+END_SRC"))
+ (add-to-list 'org-structure-template-alist
+ '("C" "#+BEGIN_SRC c :tangle ?\n\n#+END_SRC"))
+ (add-to-list 'org-structure-template-alist
+ '("m" "\\begin{equation}\n?\n\\end{equation}"))
+ (add-to-list 'org-structure-template-alist
+ '("b" "#+STARTUP: showall
+ ,#+STARTUP: inlineimages
+ ,#+OPTIONS: toc:nil\n"))
+ (add-to-list 'org-structure-template-alist
+ '("d" "#+BEGIN_SRC ditaa :file ? :cmdline -r -s 0.8 :cache yes \n\n#+END_SRC"))
+ (add-to-list 'org-structure-template-alist
+ '("u" "#+BEGIN_SRC plantuml :file ? \n\n#+END_SRC"))
+
+#+END_SRC
+
+** Org theme
+*** 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
+ (set-face-attribute 'variable-pitch nil :font "Calibri" :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))
+ (set-face-attribute 'org-table 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))
+
+ ;; 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)))
+#+END_SRC
+
+Also correct the face of =org-meta-line= in =org-table=
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (with-eval-after-load "org"
+ (set-face-attribute 'org-meta-line nil :font "Source Code Pro" :height 120 :slant 'italic :inherit 'font-lock-comment-face))
+#+END_SRC
+
+*** Org-head face
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (with-eval-after-load "org"
+ (let* ((base-height (face-attribute 'variable-pitch :height))
+ (base-font-color (face-foreground 'default nil 'default)))
+ (set-face-attribute 'org-document-title nil :weight 'bold :height (+ 60 base-height))
+ (set-face-attribute 'org-level-1 nil :weight 'bold :height (+ 40 base-height))
+ (set-face-attribute 'org-level-2 nil :weight 'bold :height (+ 30 base-height))
+ (set-face-attribute 'org-level-3 nil :weight 'bold :height (+ 20 base-height))
+ (set-face-attribute 'org-level-4 nil :weight 'bold :height (+ 10 base-height))
+ (set-face-attribute 'org-level-5 nil :weight 'bold)
+ (set-face-attribute 'org-level-6 nil :weight 'bold)
+ (set-face-attribute 'org-level-7 nil :weight 'bold)
+ (set-face-attribute 'org-level-8 nil :weight 'bold)))
+#+END_SRC
+
+** Org Blog
+Refer to [[http://orgmode.org/worg/org-tutorials/org-publish-html-tutorial.html][org-publish-html-tutorial]], and [[https://ogbe.net/blog/blogging_with_org.html][blogging_with_org]]
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (require 'ox-publish)
+
+ (setq org-publish-project-alist
+ `(
+ ("org-notes"
+ :base-directory "~/Private/blog/"
+ :base-extension "org"
+ :publishing-directory "~/Private/publish_html"
+ :recursive t
+ :publishing-function org-html-publish-to-html
+ :headline-levels 4
+ :section-numbers nil
+ :auto-preamble t
+ :auto-sitemap t ;Generate sitmap.org automagicaly...
+ :sitemap-filename "sitemap.org" ;... call it sitemap.org (it's the default )...
+ :sitemap-title "Sitemap"
+
+ :html-table-of-contents nil
+ :html-postamble nil ;dont export creator auto validation info in html postamble div
+ :html-link-home "/"
+ :html-head ""
+ :html-head-include-default-style nil
+ :html-head-include-scripts nil)
+ ("org-static"
+ :base-directory "~/Private/blog/"
+ :base-extension "css\\|js\\|png\\|gif\\|pdf\\|mp3\\|ogg\\|swf"
+ :publishing-directory "~/Private/publish_html"
+ :recursive t
+ :publishing-function org-publish-attachment
+ :table-of-contents nil)
+ ("org" :components ("org-notes" "org-static"))))
#+END_SRC
* Magit
@@ -1069,7 +1297,7 @@ Toggle an eshell in split window below, refer [[http://www.howardism.org/Technic
nil nil)
ret))
- (defun sd/toggle-eshell-here ()
+ (defun sd/toggle-project-eshell ()
"Toggle a eshell buffer vertically"
(interactive)
(if (sd/window-has-eshell)
@@ -1080,25 +1308,26 @@ Toggle an eshell in split window below, refer [[http://www.howardism.org/Technic
(delete-window)))
(select-window (sd/window-has-eshell)))
(progn
- (let ((dir default-directory))
-
- (split-window-vertically (- (/ (window-total-height) 3)))
- (other-window 1)
- (unless (and (boundp 'eshell-buffer-name) (get-buffer eshell-buffer-name))
- (eshell))
- (switch-to-buffer eshell-buffer-name)
- (goto-char (point-max))
- (eshell-kill-input)
- (insert (format "cd %s" dir))
- (eshell-send-input)))))
-
- ;; (global-unset-key (kbd "M-`"))
- (global-set-key (kbd "s-e") 'sd/toggle-eshell-here)
-#+END_SRC
-
-** TODO smart display
-* Misc Settings
+ (split-window-vertically (- (/ (window-total-height) 3)))
+ (other-window 1)
+ (if (projectile-project-p)
+ (projectile-run-eshell)
+ (eshell)))))
+ (global-set-key (kbd "s-e") 'sd/toggle-project-eshell)
+#+END_SRC
+
+** 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
+
+* Misc Settings
** [[https://github.com/abo-abo/hydra][Hydra]]
*** hydra install
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
@@ -1180,33 +1409,26 @@ Refer [[https://github.com/abo-abo/hydra/blob/master/hydra-examples.el][hydra-ex
#+END_SRC
** Line Number
-
Enable linum mode on programming modes
-
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
(add-hook 'prog-mode-hook 'linum-mode)
- ;; (add-hook 'prog-mode-hook (lambda ()
- ;; (setq-default indicate-empty-lines t)))
#+END_SRC
Fix the font size of line number
-
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
(defun fix-linum-size ()
- (interactive)
- (set-face-attribute 'linum nil :height 110))
+ (interactive)
+ (set-face-attribute 'linum nil :height 110))
(add-hook 'linum-mode-hook 'fix-linum-size)
-
#+END_SRC
I like [[https://github.com/coldnew/linum-relative][linum-relative]], just like the =set relativenumber= on =vim=
-
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
(use-package linum-relative
:ensure t
+ :init
+ (setq linum-relative-current-symbol "")
:config
(defun linum-new-mode ()
"If line numbers aren't displayed, then display them.
@@ -1221,102 +1443,72 @@ I like [[https://github.com/coldnew/linum-relative][linum-relative]], just like
;; auto enable linum-new-mode in programming modes
(add-hook 'prog-mode-hook 'linum-relative-mode)
-
#+END_SRC
** Save File Position
-
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
(require 'saveplace)
(setq-default save-place t)
(setq save-place-forget-unreadable-files t)
(setq save-place-skip-check-regexp "\\`/\\(?:cdrom\\|floppy\\|mnt\\|/[0-9]\\|\\(?:[^@/:]*@\\)?[^@/:]*[^@/:.]:\\)")
-
#+END_SRC
** Multi-term
-
+define =multi-term= mapping to disable some mapping which is used globally.
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
(use-package multi-term
:ensure t)
+ (defun sd/term-mode-mapping ()
+ (mapcar #'(lambda (map)
+ (define-key map (kbd "C-o") nil)
+ (define-key map (kbd "C-g") nil))
+ (list term-mode-map
+ term-raw-map)))
+
+ (with-eval-after-load 'multi-term
+ (sd/term-mode-mapping))
#+END_SRC
** ace-link
-
[[https://github.com/abo-abo/ace-link][ace-link]] is a package written by [[https://github.com/abo-abo][Oleh Krehel]]. It is convenient to jump to link in help mode, info-mode, etc
Type =o= to go to the link
-
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
(use-package ace-link
:ensure t
:init
(ace-link-setup-default))
-
#+END_SRC
** 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)))
-
#+END_SRC
** Ace-Windows
-
[[https://github.com/abo-abo/ace-window][ace-window]]
-
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
(use-package ace-window
:ensure t
:defer t
- ; :init
- ; (global-set-key (kbd "M-o") 'ace-window)
+ ; :init
+ ; (global-set-key (kbd "M-o") 'ace-window)
:config
(setq aw-keys '(?a ?s ?d ?f ?j ?k ?l)))
-
#+END_SRC
** Which key
-
[[https://github.com/justbur/emacs-which-key][which-key]] show the key bindings
-
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
(use-package which-key
:ensure t
:config
(which-key-mode))
-
-#+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
@@ -1328,15 +1520,39 @@ When see function by =C-h f=, and visit the source code, I would like the buffer
(show-trailing-whitespace . nil)
(tab-width . 8)
(eval . (whitespace-mode -1))
- (eval . (when buffer-file-name
- (setq-local view-no-disable-on-exit t)
- (view-mode-enter)))))))
+ ;; (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)
;; (dir-locals-set-directory-class "~/.emacs.d/elpa" 'emacs)
(dir-locals-set-directory-class "~/dotfiles/emacs.d/elpa" 'emacs)
(dir-locals-set-directory-class "~/dotfiles/emacs.d/el-get" 'emacs)
+
+ ;; temp-mode.el
+ ;; Temporary minor mode
+ ;; Main use is to enable it only in specific buffers to achieve the goal of
+ ;; buffer-specific keymaps
+
+ ;; (defvar sd/temp-mode-map (make-sparse-keymap)
+ ;; "Keymap while temp-mode is active.")
+
+ ;; ;;;###autoload
+ ;; (define-minor-mode sd/temp-mode
+ ;; "A temporary minor mode to be activated only specific to a buffer."
+ ;; nil
+ ;; :lighter " Temp"
+ ;; sd/temp-mode-map)
+
+ ;; (defun sd/temp-hook ()
+ ;; (if sd/temp-mode
+ ;; (progn
+ ;; (define-key sd/temp-mode-map (kbd "q") 'quit-window))))
+
+ ;; (add-hook 'lispy-mode-hook (lambda ()
+ ;; (sd/temp-hook)))
#+END_SRC
** Info plus
@@ -1350,9 +1566,6 @@ When see function by =C-h f=, and visit the source code, I would like the buffer
(require 'info+))
#+END_SRC
-** TODO bookmark
-
-** TODO Calendar
** advice info
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
(defun sd/info-mode ()
@@ -1360,11 +1573,7 @@ When see function by =C-h f=, and visit the source code, I would like the buffer
(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)
+ (other-window 1)))
;; open Info buffer in other window instead of current window
(defadvice info (before my-info (&optional file buf) activate)
@@ -1374,24 +1583,10 @@ When see function by =C-h f=, and visit the source code, I would like the buffer
(sd/delete-current-window))
#+END_SRC
-** TODO Man mode
-Color for Man-mode
-
-** 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
@@ -1429,68 +1624,212 @@ Color for Man-mode
(define-key pdf-outline-buffer-mode-map (kbd "k") 'previous-line))
#+END_SRC
-* Dired
-** Dired config
-=C-o= is defined as a global key for window operation, here unset it in dired mode
+** help-mode
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- (defun sd/dired-new-file ()
- "Create a new file in dired mode"
+ (defun sd/help-mode-hook ()
+ "Mapping for help mode"
+ (define-key help-mode-map "j" 'next-line)
+ (define-key help-mode-map "k" 'previous-line)
+ (define-key help-mode-map "h" 'forward-char)
+ (define-key help-mode-map "l" 'forward-char)
+ (define-key help-mode-map "H" 'describe-mode)
+ (define-key help-mode-map "v" 'recenter-top-bottom)
+ (define-key help-mode-map "i" 'forward-button)
+ (define-key help-mode-map "I" 'backward-button)
+ (define-key help-mode-map "o" 'ace-link-help))
+
+ (add-hook 'help-mode-hook 'sd/help-mode-hook)
+#+END_SRC
+
+** goto-last-change
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (use-package goto-last-change
+ :ensure t)
+#+END_SRC
+
+** Ag
+install =ag=, =the-silver-searcher= by homebrew on mac
+#+BEGIN_SRC sh
+brew install the-silver-searcher
+#+END_SRC
+
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (use-package ag
+ :ensure t)
+#+END_SRC
+
+** Local Variable hooks
+[[https://www.emacswiki.org/emacs/LocalVariables][LocalVariables]], use =hack-local-variables-hook=, run a hook to set local variable in mode hook
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ ;; make Emacs run a new "local variables hook" for each major mode
+ (add-hook 'hack-local-variables-hook 'run-local-vars-mode-hook)
+
+ (defun run-local-vars-mode-hook ()
+ "Run a hook for the major-mode after the local variables have been processed."
+ (run-hooks (intern (concat (symbol-name major-mode) "-local-vars-hook"))))
+
+ ;; (add-hook 'c++-mode-local-vars-hook #'sd/c++-mode-local-vars)
+#+END_SRC
+
+** Table
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (add-hook 'text-mode-hook 'table-recognize)
+#+END_SRC
+
+** url-download
+To download file in =elisp=, best is =url-copy-file=, here refer [[http://stackoverflow.com/questions/4448055/download-a-file-with-emacs-lisp][download-a-file-with-emacs-lisp]] using =url-retrieve-synchronously= wrapping
+as a http download client tool
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (defun sd/download-file (&optional url download-dir download-name)
(interactive)
- (call-interactively 'find-file))
+ (let ((url (or url
+ (read-string "Enter download URL: ")))
+ (download-dir (read-directory-name "Save to (~/Downloads): " "~/Downloads" "~/Downloads" 'confirm' nil)))
+ (let ((download-buffer (url-retrieve-synchronously url)))
+ (save-excursion
+ (set-buffer download-buffer)
+ ;; we may have to trim the http response
+ (goto-char (point-min))
+ (re-search-forward "^$" nil 'move)
+ (forward-char)
+ (delete-region (point-min) (point))
+ (write-file (concat (or download-dir
+ "~/Downloads/")
+ (or download-name
+ (car (last (split-string url "/" t))))))))))
+#+END_SRC
+
+** Elscreen
+Fix one elscreen issue when startup emacs https://github.com/knu/elscreen/issues/6
+#+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))
+#+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)
- (define-key dired-mode-map (kbd "SPC") 'scroll-up-command)
- (define-key dired-mode-map (kbd "S-SPC") 'scroll-down-command)
+ ;; these two prefix are used globally
(define-key dired-mode-map (kbd "C-o") nil)
(define-key dired-mode-map (kbd "M-s") nil)
- (define-key dired-mode-map (kbd "l") 'dired-isearch-filenames)
+ ;; toggle hidden files
(define-key dired-mode-map (kbd "H") 'dired-omit-mode)
- (define-key dired-mode-map (kbd "DEL") (lambda () (interactive) (find-alternate-file "..")))
- (define-key dired-mode-map (kbd "c") 'sd/dired-new-file))
+ ;; 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)
+ (define-key dired-mode-map (kbd "o") '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 ()
(sd/dired-key-map)
(dired-omit-mode))))
- (setq dired-guess-shell-alist-user
- '(("\\.pdf\\'" "evince" "okular")
- ("\\.\\(?:djvu\\|eps\\)\\'" "evince")
- ("\\.\\(?:jpg\\|jpeg\\|png\\|gif\\|xpm\\)\\'" "eog")
- ("\\.\\(?:xcf\\)\\'" "gimp")
- ("\\.csv\\'" "libreoffice")
- ("\\.tex\\'" "pdflatex" "latex")
- ("\\.\\(?:mp4\\|mkv\\|avi\\|flv\\|ogv\\)\\(?:\\.part\\)?\\'"
- "vlc")
- ("\\.\\(?:mp3\\|flac\\)\\'" "rhythmbox")
- ("\\.html?\\'" "firefox")
- ("\\.cue?\\'" "audacious")))
-
-#+END_SRC
-
-I would like change the default dired summary
-#+BEGIN_SRC emacs-lisp :tangle yes :results silent
(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, ?-summary"))
+ "Î: d-delete, u-ndelete, x-punge, f-ind, o-ther window, R-ename, C-opy, c-create, +new dir, r-evert, /-filter, v-iew, l-ist, z-Size, 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-and-open ()
+ "Create a new file in dired mode"
+ (interactive)
+ (call-interactively 'find-file))
+
+ (defun sd/dired-new-file (file)
+ "Create a new file called FILE.
+ If FILE already exists, signal an error."
+ (interactive
+ (list (read-file-name "Create file: " (dired-current-directory))))
+ (let* ((expanded (expand-file-name file)))
+ (if (file-exists-p expanded)
+ (error "Cannot create file %s: file exists" expanded))
+ (write-region "" nil expanded t)
+ (when expanded
+ (dired-add-file expanded)
+ (dired-move-to-filename))))
+
+ ;; 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))
+ (let ((read-file-name-function #'read-file-name-default)
+ (completing-read-function #'completing-read-default))
(if (called-interactively-p 'any)
(call-interactively func)
(apply func args))))
@@ -1498,40 +1837,93 @@ from [[https://emacs.stackexchange.com/questions/13713/how-to-disable-ido-in-dir
(defun mk-disable-ido (command)
"Disable IDO when command COMMAND is called."
(advice-add command :around #'mk-anti-ido-advice))
+
+ (defun mk-anti-ido-no-completing-advice (func &rest args)
+ "Temporarily disable IDO and call function FUNC with arguments ARGS."
+ (interactive)
+ (let ((read-file-name-function #'read-file-name-default)
+ ;; (completing-read-function #'completing-read-default)
+ )
+ (if (called-interactively-p 'any)
+ (call-interactively func)
+ (apply func args))))
+
+ (defun mk-disable-ido-no-completing (command)
+ "Disable IDO when command COMMAND is called."
+ (advice-add command :around #'mk-anti-ido-no-completing-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-and-open)
(mk-disable-ido 'sd/dired-new-file)
+ (mk-disable-ido-no-completing 'dired-goto-file)
#+END_SRC
-** Dired+
+** 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
- (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))
+ (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\\|rmvb\\|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)
-
-
- (defconst my-dired-media-files-extensions '("mp3" "mp4" "MP3" "MP4" "avi" "mpg" "flv" "ogg" "wmv" "mkv" "mov" "wma")
- "Media file extensions that should launch in VLC.")
+ :ensure t
+ :defer t)
+#+END_SRC
- (add-to-list 'dired-guess-shell-alist-user
- (list (concat "\\."
- (regexp-opt my-dired-media-files-extensions)
- "\\'") "mplayer"))
+** dired-narrow
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ ;;narrow dired to match filter
+ (use-package dired-narrow
+ :ensure t
+ :commands (dired-narrow)
+ :bind (:map dired-mode-map
+ ("/" . dired-narrow)))
#+END_SRC
* Ibuffer
@@ -1543,18 +1935,35 @@ Disalble =ido= when new a directory or file in =dired= mode
(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
-company mode and company-statistics
+** company mode and company-statistics
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
(use-package company
:ensure t
:diminish company-mode
:init (setq company-idle-delay 0.1)
+ (setq company-selection-wrap-around t)
:config
- (global-company-mode))
+ (define-key company-active-map (kbd "M-n") nil)
+ (define-key company-active-map (kbd "M-p") nil)
+ (define-key company-active-map (kbd "C-n") #'company-select-next)
+ (define-key company-active-map (kbd "C-p") #'company-select-previous)
+ ;; should map both (kbd "TAB") and [tab],https://github.com/company-mode/company-mode/issues/75
+ (define-key company-active-map (kbd "TAB") #'company-complete-selection)
+ (define-key company-active-map [tab] #'company-complete-selection)
+ (global-company-mode)
+ ;; magig-commit is text-modeh
+ (setq company-global-modes '(not org-mode magit-status-mode text-mode eshell-mode)))
(use-package company-statistics
:ensure t
@@ -1562,6 +1971,122 @@ company mode and company-statistics
(company-statistics-mode))
#+END_SRC
+** YASnippet
+*** yasnippet
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (use-package yasnippet
+ :ensure t
+ :defer t
+ :init
+ (add-hook 'prog-mode-hook #'yas-minor-mode)
+ :config
+ (yas-reload-all))
+#+END_SRC
+
+
+** company and yasnippet
+Add yasnippet as the company candidates
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ ;Add yasnippet support for all company backends
+ ;https://github.com/syl20bnr/spacemacs/pull/179
+ (defvar company-mode/enable-yas t
+ "Enable yasnippet for all backends.")
+
+ (defun company-mode/backend-with-yas (backend)
+ (if (or (not company-mode/enable-yas) (and (listp backend) (member 'company-yasnippet backend)))
+ backend
+ (append (if (consp backend) backend (list backend))
+ '(:with company-yasnippet))))
+
+ (setq company-backends (mapcar #'company-mode/backend-with-yas company-backends))
+#+END_SRC
+
+Refer, [[http://emacs.stackexchange.com/questions/7908/how-to-make-yasnippet-and-company-work-nicer][how-to-make-yasnippet-and-company-work-nicer]]
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (defun check-expansion ()
+ (save-excursion
+ (if (looking-at "\\_>") t
+ (backward-char 1)
+ (if (looking-at "\\.") t
+ (backward-char 1)
+ (if (looking-at "->") t nil)))))
+
+ (defun do-yas-expand ()
+ (let ((yas/fallback-behavior 'return-nil))
+ (yas/expand)))
+
+ (defun tab-indent-or-complete ()
+ (interactive)
+ (cond
+ ((minibufferp)
+ (minibuffer-complete))
+ (t
+ (indent-for-tab-command)
+ (if (or (not yas/minor-mode)
+ (null (do-yas-expand)))
+ (if (check-expansion)
+ (progn
+ (company-manual-begin)
+ (if (null company-candidates)
+ (progn
+ (company-abort)
+ (indent-for-tab-command)))))))))
+
+ (defun tab-complete-or-next-field ()
+ (interactive)
+ (if (or (not yas/minor-mode)
+ (null (do-yas-expand)))
+ (if company-candidates
+ (company-complete-selection)
+ (if (check-expansion)
+ (progn
+ (company-manual-begin)
+ (if (null company-candidates)
+ (progn
+ (company-abort)
+ (yas-next-field))))
+ (yas-next-field)))))
+
+ (defun expand-snippet-or-complete-selection ()
+ (interactive)
+ (if (or (not yas/minor-mode)
+ (null (do-yas-expand))
+ (company-abort))
+ (company-complete-selection)))
+
+ (defun abort-company-or-yas ()
+ (interactive)
+ (if (null company-candidates)
+ (yas-abort-snippet)
+ (company-abort)))
+
+ '
+ ;; (require 'company)
+ ;; (require 'yasnippet)
+
+
+ ;; (global-set-key [tab] 'tab-indent-or-complete)
+ ;; (global-set-key (kbd "TAB") 'tab-indent-or-complete)
+ ;; (global-set-key [(control return)] 'company-complete-common)
+
+ ;; (define-key company-active-map [tab] 'expand-snippet-or-complete-selection)
+ ;; (define-key company-active-map (kbd "TAB") 'expand-snippet-or-complete-selection)
+
+ ;; (define-key yas-minor-mode-map [tab] nil)
+ ;; (define-key yas-minor-mode-map (kbd "TAB") nil)
+
+ ;; (define-key yas-keymap [tab] 'tab-complete-or-next-field)
+ ;; (define-key yas-keymap (kbd "TAB") 'tab-complete-or-next-field)
+ ;; (define-key yas-keymap [(control tab)] 'yas-next-field)
+ ;; (define-key yas-keymap (kbd "C-g") 'abort-company-or-yas)
+#+END_SRC
+
+* Libs
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (use-package s
+ :ensure t)
+#+END_SRC
+
* Programming Language
** Emacs Lisp
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
@@ -1662,9 +2187,189 @@ to call =compilation= interactively.
#+END_SRC
** C & C++
+C/C++ ide tools
+1. completion (file name, function name, variable name)
+2. template yasnippet (keywords, if, function)
+3. tags jump
+*** c/c++ style
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
(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
+ (mapcar #'(lambda (map)
+ (define-key map (kbd "C-M-j") nil))
+ (list c-mode-map
+ c++-mode-map
+ objc-mode-map))
+
+ ;; objective c
+ (add-to-list 'auto-mode-alist '("\\.mm\\'" . objc-mode))
+#+END_SRC
+
+*** irony
+**** install irony server
+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 config
+irony-mode-hook, copied from [[https://github.com/Sarcasm/irony-mode][irony-mode]] github
+#+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))
+
+ ;; 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)
+
+ (add-hook 'c++-mode-local-vars-hook #'sd/c++-mode-local-vars)
+
+ ;; add C++ completions, because by default c++ file can not complete
+ ;; c++ std functions, another method is create .dir-local.el file, for p
+ ;; for project see irony
+ (defun sd/c++-mode-local-vars ()
+ (setq irony--compile-options
+ '("-std=c++11"
+ "-stdlib=libc++"
+ "-I/usr/include/c++/4.2.1")))
+#+END_SRC
+
+irony-company
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (use-package company-irony
+ :ensure t)
+
+ (use-package flycheck-irony
+ :ensure t)
+
+ (use-package company-c-headers
+ :ensure t
+ :config
+ (add-to-list 'company-c-headers-path-system "/usr/include/c++/4.2.1/"))
+
+ ;; (with-eval-after-load 'company
+ ;; (add-to-list 'company-backends 'company-irony)
+ ;; (add-to-list 'company-backends 'company-c-headers))
+
+ (with-eval-after-load 'company
+ (push '(company-irony :with company-yasnippet) company-backends)
+ (push '(company-c-headers :with company-yasnippet) company-backends))
+
+ (with-eval-after-load 'flycheck
+ (add-hook 'flycheck-mode-hook #'flycheck-irony-setup))
+#+END_SRC
+
+*** flycheck
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (use-package flycheck
+ :ensure t)
+#+END_SRC
+
+*** gtags
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (use-package ggtags
+ :ensure t
+ :config
+ (define-key ggtags-mode-map (kbd "M-g d") 'ggtags-find-definition)
+ (define-key ggtags-mode-map (kbd "M-g r") 'ggtags-find-reference)
+ (define-key ggtags-mode-map (kbd "M-g r") 'ggtags-find-reference)
+ (define-key ggtags-mode-map (kbd "C-c g s") 'ggtags-find-other-symbol)
+ (define-key ggtags-mode-map (kbd "C-c g h") 'ggtags-view-tag-history)
+ (define-key ggtags-mode-map (kbd "C-c g r") 'ggtags-find-reference)
+ (define-key ggtags-mode-map (kbd "C-c g f") 'ggtags-find-file)
+ (define-key ggtags-mode-map (kbd "C-c g c") 'ggtags-create-tags)
+ (define-key ggtags-mode-map (kbd "C-c g u") 'ggtags-update-tags))
+
+ (add-hook 'c-mode-common-hook
+ (lambda ()
+ (when (derived-mode-p 'c-mode 'c++-mode 'java-mode)
+ (ggtags-mode 1))))
+
+ (require 'cc-mode)
+ (require 'semantic)
+
+ (global-semanticdb-minor-mode 1)
+ (global-semantic-idle-scheduler-mode 1)
+
+ (semantic-mode 1)
+#+END_SRC
+
+*** google C style
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (use-package google-c-style
+ :ensure t
+ :config
+ (add-hook 'c-mode-hook 'google-set-c-style)
+ (add-hook 'c++-mode-hook 'google-set-c-style))
+#+END_SRC
+
+** Lua
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (use-package lua-mode
+ :ensure t)
+#+END_SRC
+
+** Scheme
+Install =guile=, =guile= is an implementation of =Scheme= programming language.
+#+BEGIN_SRC sh
+ brew install guile
+#+END_SRC
+
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (setq geiser-scheme-implementation 'guile)
+#+END_SRC
+
+#+BEGIN_SRC scheme
+ (define a "3")
+ a
+#+END_SRC
+
+#+RESULTS:
+: 3
+
+** Racket
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (use-package racket-mode
+ :ensure t
+ :config
+ (define-key racket-mode-map (kbd "s-r") 'racket-run)
+ (add-to-list 'racket-mode-hook (lambda () (lispy-mode 1))))
+
+ ;; set racket path
+ (setenv "PATH" (concat (getenv "PATH")
+ ":" "/Applications/Racket v6.6/bin"))
+ (setenv "MANPATH" (concat (getenv "MANPATH")
+ ":" "/Applications/Racket v6.6/man"))
+ (setq exec-path (append exec-path '("/Applications/Racket v6.6/bin")))
+
+ (add-to-list 'auto-mode-alist '("\\.rkt\\'" . racket-mode))
#+END_SRC
* Compile
@@ -1684,6 +2389,8 @@ Set the environments vairables in compilation mode
(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))
+
+ (global-set-key (kbd "s-r") 'compile)
#+END_SRC
* Auto-Insert
@@ -1696,22 +2403,22 @@ Set the environments vairables in compilation mode
** C++ Auto Insert
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
(eval-after-load 'autoinsert
- '(define-auto-insert '("\\.cpp\\'" . "C++ skeleton")
+ '(define-auto-insert '("\\.cpp\\|.cc\\'" . "C++ skeleton")
'(
"Short description:"
"/*"
"\n * " (file-name-nondirectory (buffer-file-name))
"\n */" > \n \n
"#include " \n
- "#include \""
+ "//#include \""
(file-name-sans-extension
(file-name-nondirectory (buffer-file-name)))
".hpp\"" \n \n
"using namespace std;" \n \n
- "int main ()"
+ "int main (int argc, char *argv[])"
"\n{" \n
> _ \n
- "return 1;"
+ "return 0;"
"\n}" > \n
)))
@@ -1723,16 +2430,21 @@ Set the environments vairables in compilation mode
" * " (file-name-nondirectory (buffer-file-name)) "\n"
" */" > \n \n
"#include " \n
- "#include \""
+ "//#include \""
(file-name-sans-extension
(file-name-nondirectory (buffer-file-name)))
".h\"" \n \n
- "int main ()\n"
+ "int main (int argc, char *argv[])\n"
"{" \n
> _ \n
- "return 1;\n"
+ "return 0;\n"
"}" > \n
)))
+
+ (eval-after-load 'autoinsert
+ '(define-auto-insert '("\\.h\\|.hpp\\'" . "c/c++ header")
+ '((s-upcase (s-snake-case (file-name-nondirectory buffer-file-name)))
+ "#ifndef " str n "#define " str "\n\n" _ "\n\n#endif // " str)))
#+END_SRC
** Python template
@@ -1960,43 +2672,135 @@ See [[https://www.emacswiki.org/emacs/GnusWindowLayout][GnusWindowLayout]]
;; (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
+* Mu4e
+Refer [[http://www.kirang.in/2014/11/13/emacs-as-email-client-with-offlineimap-and-mu4e-on-osx][emacs-as-email-client-with-offlineimap-and-mu4e-on-osx]]
-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
+** OfflineImap - download all mails from IMAP into local directory, and keep in sync
+#+BEGIN_SRC sh :results output replace
+ # offline-imap
+ brew install offline-imap
- set title "Putting it All Together"
+ cp /usr/local/etc/offlineimap.conf ~/.offlineimapr
- set xlabel "X"
- set xrange [-8:8]
- set xtics -8,2,8
+ #For the =offlineimap= config on mac, using =sslcacertfile= instead of =cert_fingerpring=. On Mac
+ sslcacertfile = /usr/local/etc/openssl/cert.pem
+#+END_SRC
+#+BEGIN_SRC conf
+ [general]
+ ui=TTYUI
+ accounts = Gmail
+ autorefresh = 5
- set ylabel "Y"
- set yrange [-20:70]
- set ytics -20,10,70
+ [Account Gmail]
+ localrepository = Gmail-Local
+ remoterepository = Gmail-Remote
- f(x) = x**2
- g(x) = x**3
- h(x) = 10*sqrt(abs(x))
+ [Repository Gmail-Local]
+ type = Maildir
+ localfolders = ~/.Mail/seudut@gmail.com
- plot f(x) w lp lw 1, g(x) w p lw 2, h(x) w l lw 3
+ [Repository Gmail-Remote]
+ type = Gmail
+ remotehost = imap.gmail.com
+ remoteuser = seudut@gmail.com
+ remotepass = xxxxxxxx
+ realdelete = no
+ ssl = yes
+ #cert_fingerprint =
+ sslcacertfile = /usr/local/etc/openssl/cert.pem
+ maxconnections = 1
+ folderfilter = lambda folder: folder not in ['[Gmail]/Trash',
+ '[Gmail]/Spam',
+ '[Gmail]/All Mail',
+ ]
+#+END_SRC
+
+Then, run =offlineimap= to sync the mail
+
+** Mu - fast search, view mails and extract attachments.
+#+BEGIN_SRC sh
+ EMACS=/usr/local/bin/emacs brew install mu --with-emacs
+#+END_SRC
+
+Then, run =mu index --maildir=~/.Mail=
+
+** Mu4e - Emacs frontend of Mu
+config from [[http://www.kirang.in/2014/11/13/emacs-as-email-client-with-offlineimap-and-mu4e-on-osx/][emacs-as-email-client-with-offlineimap-and-mu4e-on-osx]]
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (require 'mu4e)
+ (setq mu4e-maildir "~/.Mail")
+ (setq mu4e-drafts-folder "/[Gmail].Drafts")
+ (setq mu4e-sent-folder "/[Gmail].Sent Mail")
+ ;; don't save message to Sent Messages, Gmail/IMAP takes care of this
+ (setq mu4e-sent-messages-behavior 'delete)
+ ;; allow for updating mail using 'U' in the main view:
+ (setq mu4e-get-mail-command "offlineimap")
+
+ ;; shortcuts
+ (setq mu4e-maildir-shortcuts
+ '( ("/INBOX" . ?i)
+ ("/[Gmail].Sent Mail" . ?s)))
+
+ ;; something about ourselves
+ (setq
+ user-mail-address "seudut@gmail.com"
+ user-full-name "Peng Li"
+ mu4e-compose-signature
+ (concat
+ "Thanks,\n"
+ "Peng\n"))
+
+ ;; show images
+ (setq mu4e-show-images t)
+
+ ;; use imagemagick, if available
+ (when (fboundp 'imagemagick-register-types)
+ (imagemagick-register-types))
+
+ ;; convert html emails properly
+ ;; Possible options:
+ ;; - html2text -utf8 -width 72
+ ;; - textutil -stdin -format html -convert txt -stdout
+ ;; - html2markdown | grep -v ' _place_holder;' (Requires html2text pypi)
+ ;; - w3m -dump -cols 80 -T text/html
+ ;; - view in browser (provided below)
+ (setq mu4e-html2text-command "textutil -stdin -format html -convert txt -stdout")
+
+ ;; spell check
+ (add-hook 'mu4e-compose-mode-hook
+ (defun my-do-compose-stuff ()
+ "My settings for message composition."
+ (set-fill-column 72)
+ (flyspell-mode)))
+
+ ;; add option to view html message in a browser
+ ;; `aV` in view to activate
+ (add-to-list 'mu4e-view-actions
+ '("ViewInBrowser" . mu4e-action-view-in-browser) t)
+
+ ;; fetch mail every 10 mins
+ (setq mu4e-update-interval 600)
+
+ ;; mu4e view
+ (setq-default mu4e-headers-fields '((:flags . 6)
+ (:from-or-to . 22)
+ (:mailing-list . 20)
+ (:thread-subject . 70)
+ (:human-date . 16)))
+#+END_SRC
+
+** Smtp - send mail
+- =gnutls=, depends on =gnutls=, first confirm this is installed, otherwise, =brew install gnutls=
+- =~/.authinfo=
+#+BEGIN_SRC fundamental
+ machine smtp.gmail.com login password
+#+END_SRC
+- OPTIONAL, encrypt the =~/.authinfo= file
+#+BEGIN_SRC sh :results output replace
+ gpg --output ~/.authinfo.gpg --symmetric ~/.authinfo
#+END_SRC
-#+RESULTS:
-[[file:./temp/file.png]]
* Ediff
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
(with-eval-after-load 'ediff
@@ -2008,7 +2812,7 @@ Use =gnuplot= on =Org-mode= file, see [[http://orgmode.org/worg/org-contrib/babe
#+END_SRC
* Entertainment
-** GnoGo
+** GnuGo
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
@@ -2079,6 +2883,9 @@ 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")
@@ -2089,12 +2896,20 @@ Use =ESC= to exit minibuffer. Also I map =Super-h= the same as =C-g=
:config
(persp-mode)
:bind
- (:map projectile-mode-map
- ("s-t" . projectile-persp-switch-project)))
+ ;; (:map projectile-mode-map
+ ;; ("s-t" . projectile-persp-switch-project))
+ )
- ;; projectile-find-file
- ;; projectile-switch-buffer
- ;; projectile-find-file-other-window
+ ;; 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))
+ (let ((root (projectile-project-root)))
+ (with-current-buffer buffer
+ (cd root))))))
#+END_SRC
*** project config =super= keybindings
@@ -2110,70 +2925,16 @@ Use =ESC= to exit minibuffer. Also I map =Super-h= the same as =C-g=
(global-set-key (kbd "") 'toggle-frame-fullscreen)
(global-set-key (kbd "s-f") 'projectile-find-file)
- (global-set-key (kbd "s-`") 'mode-line-other-buffer)
+ ;; (global-set-key (kbd "s-`") 'mode-line-other-buffer)
- (global-set-key (kbd "s-n") 'persp-next)
- (global-set-key (kbd "s-p") 'persp-prev)
+ ;; (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)
;; (global-set-key (kbd "s-u") 'undo-tree-visualize)
-
-
- ;; someothers default mapping on super (command) key
- ;; s-s save-buffer
- ;; s-k kill-this-buffer
-
-
- ;; s-h --> ns-do-hide-emacs
- ;; s-j --> ido-switch-buffer +
- ;; s-k --> kill-this-buffer
- ;; s-l --> goto-line
- ;; s-; --> undefined
- ;; s-' --> next-multiframe-window
- ;; s-ret --> toggle-frame-fullscreen +
-
- ;; s-y --> ns-paste-secondary
- ;; s-u --> revert-buffer
- ;; s-i --> undefined - but used for iterm globally
- ;; s-o --> used for emacs globally
- ;; s-p --> projectile-persp-switch-project +
- ;; s-[ --> next-buffer +
- ;; s-] --> previous-buffer +
-
- ;; s-0 --> undefined
- ;; s-9 --> undefined
- ;; s-8 --> undefined
- ;; s-7 --> undefined
- ;; s-6 --> undefined
- ;; s-- --> center-line
- ;; s-= --> undefined
-
- ;; s-n --> make-frame
- ;; s-m --> iconify-frame
- ;; s-b --> undefined
- ;; s-, --> customize
- ;; s-. --> undefined
- ;; s-/ --> undefined
-
- ;; s-g --> isearch-repeat-forward
- ;; s-f --> projectile-find-file +
- ;; s-d --> isearch-repeat-background
- ;; s-s --> save-buffer
- ;; s-a --> make-whole-buffer
-
- ;; s-b --> undefined
- ;; s-v --> yank
- ;; s-c --> ns-copy-including-secondary
-
- ;; s-t --> ns-popup-font-panel
- ;; s-r --> undefined
- ;; s-e --> isearch-yanqk-kill
- ;; s-w --> delete-frame
- ;; s-q --> same-buffers-kill-emacs
-
- ;; s-` --> other-frame
#+END_SRC
** Windown & Buffer - =C-o=
@@ -2198,15 +2959,18 @@ Most use =C-o C-o= to switch buffers; =C-o x, v= to split window; =C-o o= to del
(defhydra sd/hydra-window (:color red :columns nil)
"Window"
- ;; windows split
+ ;; windows switch
("h" windmove-left nil :exit t)
("j" windmove-down nil :exit t)
("k" windmove-up nil :exit t)
("l" windmove-right nil :exit t)
+ ("C-o" other-window nil :exit t)
+ ;; window resize
("H" hydra-move-splitter-left nil)
("J" hydra-move-splitter-down nil)
("K" hydra-move-splitter-up nil)
("L" hydra-move-splitter-right nil)
+ ;; windows split
("v" (lambda ()
(interactive)
(split-window-right)
@@ -2217,36 +2981,49 @@ 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)
-
;; buffer / windows switch
("o" sd/toggle-max-windows "one" :exit t)
("C-k" sd/delete-current-window "del" :exit t)
- ("'" other-window "other" :exit t)
+ ("C-d" (lambda ()
+ (interactive)
+ (kill-buffer)
+ (sd/delete-current-window))
+ "kill" :exit t)
+
+ ;; ace-window
+ ;; ("'" 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)
-
+ ;; Windows undo - redo
("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" dired-jump nil :exit t)
- ("b" ibuffer nil n:exit t)
- ("e" eshell nil :exit t)
+ ;; ("C-i" other-window nil :exit t)
+ ("C-b" ido-switch-buffer nil :exit t)
+ ("C-f" projectile-find-file nil :exit t)
+ ("C-p" persp-switch :exit t)
+ ("C-t" projectile-persp-switch-project nil :exit t)
+
+ ;; other special buffers
+ ("d" sd/project-or-dired-jump nil :exit t)
+ ("b" ibuffer nil :exit t)
+ ("t" multi-term nil :exit t)
+ ("e" sd/toggle-project-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)
+ ;; ("p" paradox-list-packages nil :exit t)
;; quit
("q" nil "cancel")
("" nil)
- ("C-h" nil nil :exit t)
- ("C-j" nil nil :exit t)
- ;; ("C-k" nil :exit t)
- ("C-l" nil nil :exit t)
+ ("C-h" windmove-left nil :exit t)
+ ("C-j" windmove-down nil :exit t)
+ ("C-k" windmove-up :exit t)
+ ("C-l" windmove-right nil :exit t)
("C-;" nil nil :exit t)
("n" nil nil :exit t)
("[" nil nil :exit t)
@@ -2255,6 +3032,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
@@ -2379,6 +3164,11 @@ Search, replace and hightlight will in later paragraph
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
(global-set-key (kbd "M-i") #'counsel-imenu)
;; (global-set-key (kbd "M-i") #'imenu)
+
+ ;; define M-[ as C-M-a
+ ;; http://ergoemacs.org/emacs/emacs_key-translation-map.html
+ (define-key key-translation-map (kbd "M-[") (kbd "C-M-a"))
+ (define-key key-translation-map (kbd "M-]") (kbd "C-M-e"))
#+END_SRC
*** Go-to line
@@ -2671,69 +3461,31 @@ stolen from [[https://github.com/mariolong/emacs.d/blob/f6a061594ef1b5d1f4750e9d
#+END_SRC
*** TODO make expand-region hydra work with lispy selected
+** =C-w= delete backward word
+Refer [[https://github.com/fnwiya/dotfiles/blob/c9ca79f1b22c919d9f4c3a0f944ba8281255a594/setup/.emacs.d/loader-init/_90-kill-region-or-backward-kill-word.el][kill-region-or-backward-kill-word]]
-* 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=
-
-** write color syntax for =Man-mode=
-
-#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- (font-lock-add-keywords 'perl-mode '(("\\(|\\w+?\\(,\\w+?\\)?|\\)" 1 'py-builtins-face)))
-#+END_SRC
-
-* TODO jump last change point
-* TODO emms mode-line
-
-* =C-u C-h a= search funtions
-=apropos-command=
-
-* key
-- passion
-- vision
-- mission
-
-* M prefix
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (defun sd/kill-region-or-backward-kill-word ()
+ (interactive)
+ (if (region-active-p)
+ (kill-region (point) (mark))
+ (backward-kill-word 1)))
- ;; M-h - mark-paragraph
- ;; M-j - new line indent
- ;; M-k - kill-sentence
- ;; M-l - downcase words ====== goto-line
- ;; M-; - comments
- ;; M-'- abbrev-prefix-mark =======
- ;; M-RET none ======
-
- ;; M-y - yank
- ;; M-u - upcase word
- ;; M-i - ====== imenu
- ;; M-o ====== prefix
- ;; M-p
- ;; M-[ =====
- ;; M-] ========
- ;; M-\ deleter horizontal space =====
-
- ;; M-n
- ;; M-m ---- indent
- ;; M-, --- mark stack====== =
- ;; M-. lisp-goto-symboo, find definitation
+ (global-set-key (kbd "C-w") 'sd/kill-region-or-backward-kill-word)
+#+END_SRC
- ;; M-a
- ;; M-s =====
- ;; M-d
- ;; M-f
- ;; M-g - prefix
+* TODO todolist
+** Rucket
+** player video on iphone for
+** SICP
+** music searcher
+search music on some music web site
- ;; M-q - lisp fill, fill paragraph
- ;; M-w
- ;; M-e
- ;; M-r - rePositioning
- ;; M-t transpose word
- ;; M-z zap-to-char
- ;; M-x
- ;; M-c capitalize-word
- ;; M-v
- ;; M-b
-#+END_SRC
+** Need separate the Key-bindings and package-initialization
+* Note
+** Check if emacs is in terminal of graphic mode
+Use =display-graphic-p= instead of =window-system=
+[[info:elisp#Window%20Systems][Window Systems]]
+** =Interactive=