Disable scroll bar, tool-bar and menu-bar
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
(scroll-bar-mode 0)
(tool-bar-mode 0)
(menu-bar-mode 1)
(defalias 'yes-or-no-p 'y-or-n-p)
(show-paren-mode 1)
-
-
-
+ ;; don't backupf
+ (setq make-backup-files nil)
#+END_SRC
set custom file
#+END_SRC
+Setting scroll right/left
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ ; (global-set-key (kbd "C-,") 'scoll-left)
+ ; (global-set-key (kbd "C-.") 'scoll-right)
+#+END_SRC
+
* Package Management Tools
** Use-package
(if window-system
(defvar sd/fixed-font-family
(cond ((x-list-fonts "Hasklig") "Hasklig")
- ((x-list-fonts "Source Code Pro") "Source Code Pro")
+ ((x-list-fonts "Source Code Pro") "Source Code Pro:weight: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."))
(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 140)
+ (set-face-attribute 'default nil :font sd/fixed-font-family :height 130)
(set-face-font 'default sd/fixed-font-family)))
#+END_SRC
#+END_SRC
-** Mode-line
+* Mode-line
+
+** clean mode line
clean mode line, Refer to [[https://www.masteringemacs.org/article/hiding-replacing-modeline-strings][Marstering Emacs]]
(hi-lock-mode . "")
(python-mode . "Py")
(emacs-lisp-mode . "EL")
+ (eshell-mode . "ε")
(nxhtml-mode . "nx"))
"Alist for `clean-mode-line'.
(add-hook 'after-change-major-mode-hook 'clean-mode-line)
#+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
;; :ensure t)
;; (use-package smart-mode-line-powerline-theme
;; :ensure t)
+#+END_SRC
+
+Revised powerline-center-theme
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
(defun sd/powerline-simpler-vc (s)
(if s
(replace-regexp-in-string "Git[:-]" "" s)
(setq ns-use-srgb-colorspace nil)
#+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
- :init
- (setq org-startup-indented t)
- (setq org-hide-leading-starts t)
- (setq org-src-fontify-natively t)
- (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)))
-
- ;; use current window for org source buffer editting
- (setq org-src-window-setup 'current-window )
-
-#+END_SRC
-
-** Org-bullets
-
-use [[https://github.com/sabof/org-bullets][org-bullets]] package to show utf-8 charactes
+set height in mode line
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- (use-package org-bullets
- :ensure t
- :init
- (add-hook 'org-mode-hook
- (lambda ()
- (org-bullets-mode t))))
-
-#+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)
- )
-
-#+END_SRC
-
-** Task Management
-
-** Capture
-
-** Export PDF
-
-Install MacTex-basic and some tex packages
-
-#+BEGIN_SRC bash
-
- sudo tlmgr update --self
-
- sudo tlmgr install titlesec framed threeparttable wrapfig multirow enumitem bbding titling tabu mdframed tcolorbox textpos import varwidth needspace tocloft ntheorem environ trimspaces collection-fontsrecommended capt-of
-
-#+END_SRC
-
-#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- ;; ;; allow for export=>beamer by placing
-
- ;; http://emacs-fu.blogspot.com/2011/04/nice-looking-pdfs-with-org-mode-and.html
- ;; #+LaTeX_CLASS: beamer in org files
- (unless (boundp 'org-export-latex-classes)
- (setq org-export-latex-classes nil))
- (add-to-list 'org-export-latex-classes
- ;; beamer class, for presentations
- '("beamer"
- "\\documentclass[11pt]{beamer}\n
- \\mode<{{{beamermode}}}>\n
- \\usetheme{{{{beamertheme}}}}\n
- \\usecolortheme{{{{beamercolortheme}}}}\n
- \\beamertemplateballitem\n
- \\setbeameroption{show notes}
- \\usepackage[utf8]{inputenc}\n
- \\usepackage[T1]{fontenc}\n
- \\usepackage{hyperref}\n
- \\usepackage{color}
- \\usepackage{listings}
- \\lstset{numbers=none,language=[ISO]C++,tabsize=4,
- frame=single,
- basicstyle=\\small,
- showspaces=false,showstringspaces=false,
- showtabs=false,
- keywordstyle=\\color{blue}\\bfseries,
- commentstyle=\\color{red},
- }\n
- \\usepackage{verbatim}\n
- \\institute{{{{beamerinstitute}}}}\n
- \\subject{{{{beamersubject}}}}\n"
-
- ("\\section{%s}" . "\\section*{%s}")
-
- ("\\begin{frame}[fragile]\\frametitle{%s}"
- "\\end{frame}"
- "\\begin{frame}[fragile]\\frametitle{%s}"
- "\\end{frame}")))
-
- ;; letter class, for formal letters
-
- (add-to-list 'org-export-latex-classes
-
- '("letter"
- "\\documentclass[11pt]{letter}\n
- \\usepackage[utf8]{inputenc}\n
- \\usepackage[T1]{fontenc}\n
- \\usepackage{color}"
-
- ("\\section{%s}" . "\\section*{%s}")
- ("\\subsection{%s}" . "\\subsection*{%s}")
- ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
- ("\\paragraph{%s}" . "\\paragraph*{%s}")
- ("\\subparagraph{%s}" . "\\subparagraph*{%s}")))
-
-
- (require 'ox-md)
- (require 'ox-beamer)
-
- (setq org-latex-pdf-process
- '("pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"
- "pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"
- "pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"))
-
- (setq TeX-parse-self t)
-
- (setq TeX-PDF-mode t)
- (add-hook 'LaTeX-mode-hook
- (lambda ()
- (LaTeX-math-mode)
- (setq TeX-master t)))
-
-#+END_SRC
-
-** others
-
-refer to [[http://coldnew.github.io/coldnew-emacs/#orgheadline94][fancy todo states]]
-
-#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
- (setq org-todo-keywords '((sequence "☛ TODO(t)" "|" "✔ DONE(d)")
- (sequence "⚑ WAITING(w)" "|")
- (sequence "|" "✘ CANCELED(c)")))
-
-#+END_SRC
-
-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
-
- (add-to-list 'org-structure-template-alist
- '("E" "#+BEGIN_SRC emacs-lisp\n?\n#+END_SRC"))
- (add-to-list 'org-structure-template-alist
- '("S" "#+BEGIN_SRC sh\n?\n#+END_SRC"))
- (add-to-list 'org-structure-template-alist
- '("p" "#+BEGIN_SRC plantuml :file uml.png \n?\n#+END_SRC"))
-
-#+END_SRC
-
-* Magit
-
-[[https://github.com/magit/magit][Magit]] is a very cool git interface on Emacs.
-
-#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
- (use-package magit
- :ensure t
- :commands magit-status magit-blame)
-
+ (custom-set-variables
+ '(powerline-height 14)
+ '(powerline-text-scale-factor 0.8))
+ ;; 100/140
+ (set-face-attribute 'mode-line nil :height 100)
#+END_SRC
Some global bindings on =Super=, on Mac, it is =Command=
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
(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)
;; (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-[") 'persp-next)
+ ;; (global-set-key (kbd "s-]") 'persp-prev)
(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-=") 'text-scale-increase)
+ (global-set-key (kbd "s--") 'text-scale-decrease)
;; someothers default mapping on super (command) key
;; C-. undefined
#+END_SRC
-* Eshell
+* 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
+ :init
+ (setq org-startup-indented t)
+ (setq org-hide-leading-starts t)
+ (setq org-src-fontify-natively t)
+ (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)))
+
+ ;; use current window for org source buffer editting
+ (setq org-src-window-setup 'current-window )
+
+#+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
+ :init
+ (add-hook 'org-mode-hook
+ (lambda ()
+ (org-bullets-mode t))))
+
+ (setq org-bullets-bullet-list '("⦿" "✪" "◉" "○" "►" "◆"))
+#+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)
+ )
+
+#+END_SRC
-Eshell alias
+** 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)
+ (global-set-key "\C-cb" 'org-iswitchb)
+#+END_SRC
+
+*** Plain List
- (defalias 'e 'ido-find-file)
- (defalias 'ff 'ido-find-file)
- (defalias 'ee 'ido-find-file-other-window)
+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
+ ;; (font-lock-add-keywords 'org-mode
+ ;; '(("^ *\\([-+]\\) "
+ ;; (0 (prog1 () (compose-region (match-beginning 1) (match-end 1) "•")))))))
#+END_SRC
+
+*** Todo Keywords
+
+refer to [[http://coldnew.github.io/coldnew-emacs/#orgheadline94][fancy todo states]],
-Quickly start eshll in split window below, refer [[http://www.howardism.org/Technical/Emacs/eshell-fun.html][eshell-here]]
+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)")
+ ;; (sequence "⚑ WAITING(w)" "|")
+ ;; (sequence "|" "✘ CANCELLED(c)")))
+ ; (setq org-todo-keyword-faces
+ ; (quote ("TODO" . (:foreground "red" :weight bold))
+ ; ("NEXT" . (:foreground "blue" :weight bold))
+ ; ("WAITING" . (:foreground "forest green" :weight bold))
+ ; ("DONE" . (:foreground "magenta" :weight bold))
+ ; ("CANCELLED" . (:foreground "forest green" :weight bold))))
+
+
+ (setq org-todo-keywords
+ (quote ((sequence "TODO(t)" "NEXT(n)" "|" "DONE(d!)")
+ ;; (sequence "WAITING(w@/!)" "HOLD(h@/!)" "|" "CANCELLED(c@/!)" "PHONE" "MEETING")
+ (sequence "WAITING(w@/!)" "HOLD(h@/!)" "|" "CANCELLED(c@/!)" ))))
+
+ (setq org-todo-keyword-faces
+ (quote (("TODO" :foreground "red" :weight bold)
+ ("NEXT" :foreground "blue" :weight bold)
+ ("DONE" :foreground "forest green" :weight bold)
+ ("WAITING" :foreground "orange" :weight bold)
+ ("HOLD" :foreground "magenta" :weight bold)
+ ("CANCELLED" :foreground "forest green" :weight bold)
+ ;; ("MEETING" :foreground "forest green" :weight bold)
+ ;; ("PHONE" :foreground "forest green" :weight bold)
+ )))
+#+END_SRC
- (defun eshell-x ()
- (insert "exit")
- (eshell-send-input)
- (delete-window))
+Fast todo selections
+
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (setq org-use-fast-todo-selection t)
+ (setq org-treat-S-cursor-todo-selection-as-state-change nil)
+#+END_SRC
+
+TODO state triggers and tags, [[http://doc.norang.ca/org-mode.html][Organize Your Life in Plain Text]]
+
+- Moving a task to =CANCELLED=, adds a =CANCELLED= tag
+- Moving a task to =WAITING=, adds a =WAITING= tag
+- Moving a task to =HOLD=, add =HOLD= tags
+- Moving a task to =DONE=, remove =WAITING=, =HOLD= tag
+- Moving a task to =NEXT=, remove all waiting/hold/cancelled tags
+
+This tags are used to filter tasks in agenda views
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (setq org-todo-state-tags-triggers
+ (quote (("CANCELLED" ("CANCELLED" . t))
+ ("WAITING" ("WAITING" . t))
+ ("HOLD" ("WAITING") ("HOLD" . t))
+ (done ("WAITING") ("HOLD"))
+ ("TODO" ("WAITING") ("CANCELLED") ("HOLD"))
+ ("NEXT" ("WAITING") ("CANCELLED") ("HOLD"))
+ ("DONE" ("WAITING") ("CANCELLED") ("HOLD")))))
+#+END_SRC
+
+Logging Stuff
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ ;; log time when task done
+ ;; (setq org-log-done (quote time))
+ ;; save clocking into to LOGBOOK
+ (setq org-clock-into-drawer t)
+ ;; save state change notes and time stamp into LOGBOOK drawer
+ (setq org-log-into-drawer t)
+ (setq org-clock-into-drawer "CLOCK")
+#+END_SRC
+
+*** Tags
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (setq org-tag-alist (quote ((:startgroup)
+ ("@office" . ?e)
+ ("@home" . ?h)
+ (:endgroup)
+ ("WAITING" . ?w)
+ ("HOLD" . ?h)
+ ("CANCELLED" . ?c))))
+
+ ;; Allow setting single tags without the menu
+ (setq org-fast-tag-selection-single-key (quote expert))
+#+END_SRC
- (defun eshell-here ()
- "Opens up a new shell in the directory associated with the
- current buffer's file. The eshell is renamed to match that
- directory to make multiple eshell windows easier."
+*** Capture - Refile - Archive
+
+Capture lets you quickly store notes with little interruption of your work flow.
+
+**** Capture Templates
+
+When a new taks needs to be added, categorize it as
+
+All captured file which need next actions are stored in =refile.org=,
+- A new task / note (t) =refile.org=
+- A work task in office =office.org=
+- A jourenl =diary.org=
+- A new habit (h) =refile.org=
+
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (setq org-directory "~/org")
+ (setq org-default-notes-file "~/org/refile.org")
+ (setq sd/org-diary-file "~/org/diary.org")
+
+ (global-set-key (kbd "C-c c") 'org-capture)
+
+ (setq org-capture-templates
+ (quote (("t" "Todo" entry (file org-default-notes-file)
+ "* TODO %?\n:LOGBOOK:\n- Added: %U\t\tAt: %a\n:END:")
+ ("n" "Note" entry (file org-default-notes-file)
+ "* %? :NOTE:\n:LOGBOOK:\n- Added: %U\t\tAt: %a\n:END:")
+ ("j" "Journal" entry (file+datetree sd/org-diary-file)
+ "* %?\n:LOGBOOK:\n:END:" :clock-in t :clock-resume t)
+ ("h" "Habit" entry (file org-default-notes-file)
+ "* NEXT %?\n:LOGBOOK:\n%a\nSCHEDULED: %(format-time-string \"%<<%Y-%m-%d %a .+1d/3d>>\")\n:END:\n:PROPERTIES:\n:STYLE: habit\n:REPEAT_TO_STATE: NEXT\n:END:\n "))))
+#+END_SRC
+
+**** Refiling Tasks
+
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (setq org-refile-targets (quote (;; (nil :maxlevel . 9)
+ (org-agenda-files :maxlevel . 9))))
+
+ (setq org-refile-use-outline-path t)
+
+ (setq org-refile-allow-creating-parent-nodes (quote confirm))
+#+END_SRC
+
+*** Agenda Setup
+Setting agenda files and the agenda view
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (setq org-agenda-files (quote ("~/org/gtd.org"
+ "~/org/work.org")))
+
+ ;; only show today's tasks in agenda view
+ (setq org-agenda-span 'day)
+ ;; Use current windows for agenda view
+ (setq org-agenda-window-setup 'current-window)
+
+ ;; show all feature entries for repeating tasks,
+ ;; this is already setting by default
+ (setq org-agenda-repeating-timestamp-show-all t)
+
+ ;; Show all agenda dates - even if they are empty
+ (setq org-agenda-show-all-dates t)
+#+END_SRC
+
+** Export PDF
+
+Install MacTex-basic and some tex packages
+
+#+BEGIN_SRC bash
+
+ sudo tlmgr update --self
+
+ sudo tlmgr install titlesec framed threeparttable wrapfig multirow enumitem bbding titling tabu mdframed tcolorbox textpos import varwidth needspace tocloft ntheorem environ trimspaces collection-fontsrecommended capt-of
+
+#+END_SRC
+
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ ;; ;; allow for export=>beamer by placing
+
+ ;; http://emacs-fu.blogspot.com/2011/04/nice-looking-pdfs-with-org-mode-and.html
+ ;; #+LaTeX_CLASS: beamer in org files
+ (unless (boundp 'org-export-latex-classes)
+ (setq org-export-latex-classes nil))
+ (add-to-list 'org-export-latex-classes
+ ;; beamer class, for presentations
+ '("beamer"
+ "\\documentclass[11pt]{beamer}\n
+ \\mode<{{{beamermode}}}>\n
+ \\usetheme{{{{beamertheme}}}}\n
+ \\usecolortheme{{{{beamercolortheme}}}}\n
+ \\beamertemplateballitem\n
+ \\setbeameroption{show notes}
+ \\usepackage[utf8]{inputenc}\n
+ \\usepackage[T1]{fontenc}\n
+ \\usepackage{hyperref}\n
+ \\usepackage{color}
+ \\usepackage{listings}
+ \\lstset{numbers=none,language=[ISO]C++,tabsize=4,
+ frame=single,
+ basicstyle=\\small,
+ showspaces=false,showstringspaces=false,
+ showtabs=false,
+ keywordstyle=\\color{blue}\\bfseries,
+ commentstyle=\\color{red},
+ }\n
+ \\usepackage{verbatim}\n
+ \\institute{{{{beamerinstitute}}}}\n
+ \\subject{{{{beamersubject}}}}\n"
+
+ ("\\section{%s}" . "\\section*{%s}")
+
+ ("\\begin{frame}[fragile]\\frametitle{%s}"
+ "\\end{frame}"
+ "\\begin{frame}[fragile]\\frametitle{%s}"
+ "\\end{frame}")))
+
+ ;; letter class, for formal letters
+
+ (add-to-list 'org-export-latex-classes
+
+ '("letter"
+ "\\documentclass[11pt]{letter}\n
+ \\usepackage[utf8]{inputenc}\n
+ \\usepackage[T1]{fontenc}\n
+ \\usepackage{color}"
+
+ ("\\section{%s}" . "\\section*{%s}")
+ ("\\subsection{%s}" . "\\subsection*{%s}")
+ ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
+ ("\\paragraph{%s}" . "\\paragraph*{%s}")
+ ("\\subparagraph{%s}" . "\\subparagraph*{%s}")))
+
+
+ (require 'ox-md)
+ (require 'ox-beamer)
+
+ (setq org-latex-pdf-process
+ '("pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"
+ "pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"
+ "pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"))
+
+ (setq TeX-parse-self t)
+
+ (setq TeX-PDF-mode t)
+ (add-hook 'LaTeX-mode-hook
+ (lambda ()
+ (LaTeX-math-mode)
+ (setq TeX-master t)))
+
+#+END_SRC
+
+** others
+
+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
+
+ (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"))
+ (add-to-list 'org-structure-template-alist
+ '("p" "#+BEGIN_SRC plantuml :file uml.png \n?\n#+END_SRC"))
+
+#+END_SRC
+
+* Magit
+[[https://github.com/magit/magit][Magit]] is a very cool git interface on Emacs.
+and Defined keys, using vi keybindings, Refer abo-abo's setting [[https://github.com/abo-abo/oremacs/blob/c5cafdcebc88afe9e73cc8bd40c49b70675509c7/modes/ora-nextmagit.el][here]]
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (use-package magit
+ :ensure t
+ :commands magit-status magit-blame
+ :config
+ (dolist (map (list magit-status-mode-map
+ magit-log-mode-map
+ magit-diff-mode-map
+ 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 "n" nil)
+ (define-key map "p" nil)
+ (define-key map "v" 'recenter-top-bottom)
+ (define-key map "i" 'magit-section-toggle)))
+#+END_SRC
+
+* Eshell
+*** Eshell alias
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (defalias 'e 'find-file)
+ (defalias 'ff 'find-file)
+ (defalias 'ee 'find-files)
+#+END_SRC
+
+*** Eshell erase buffer
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (defun sd/eshell-clear-buffer ()
+ "Clear eshell buffer"
(interactive)
- (let* ((parent (if (buffer-file-name)
- (file-name-directory (buffer-file-name))
- default-directory))
- (height (/ (window-total-height) 3))
- (name (car (last (split-string parent "/" t))))
- (eshell-name (concat "*eshell: " name "*")))
- (split-window-vertically (- height))
- (other-window 1)
- (if (get-buffer eshell-name)
- (progn
- (message "buffer exist")
- (switch-to-buffer eshell-name))
- (progn
- (eshell "new")
- (rename-buffer eshell-name)
-
- (insert (concat "ls"))
- (eshell-send-input)))))
+ (let ((inhibit-read-only t))
+ (erase-buffer)
+ (eshell-send-input)))
- ;; (global-set-key (kbd "M-`") (lambda ()
- ;; (interactive)
- ;; (if (buffer-name))))
+ (add-hook 'eshell-mode-hook (lambda ()
+ (local-set-key (kbd "C-l") 'sd/eshell-clear-buffer)))
+#+END_SRC
+*** Toggle Eshell
+Toggle an eshell in split window below, refer [[http://www.howardism.org/Technical/Emacs/eshell-fun.html][eshell-here]]
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (defun sd/window-has-eshell ()
+ "Check if current windows list has a eshell buffer, and return the window"
+ (interactive)
+ (let ((ret nil))
+ (walk-windows (lambda (window)
+ (if (equal (with-current-buffer (window-buffer window) major-mode)
+ 'eshell-mode)
+ (setq ret window)))
+ nil nil)
+ ret))
+
+ (defun sd/toggle-eshell-here ()
+ "Toggle a eshell buffer vertically"
+ (interactive)
+ (if (sd/window-has-eshell)
+ (if (equal major-mode 'eshell-mode)
+ (progn
+ (if (equal (length (window-list)) 1)
+ (mode-line-other-buffer)
+ (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 "M-`") 'sd/toggle-eshell-here)
#+END_SRC
+*** TODO smart display
* Misc Settings
** [[https://github.com/abo-abo/hydra][Hydra]]
-
+*** hydra install
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
(use-package hydra
:ensure t)
-
+ ;; disable new line in minibuffer when hint hydra
+ (setq hydra-lv nil)
#+END_SRC
*** Font Zoom
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (defhydra sd/font-zoom (global-map "<f2>")
- (defhydra sd/font-zoom (global-map "<f2>")
"zoom"
("g" text-scale-increase "in")
("l" text-scale-decrease "out"))
-
#+END_SRC
*** Windmove Splitter
*** hydra-window
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
(winner-mode 1)
(defhydra sd/hydra-window (:color red :columns nil)
"window"
- ("h" windmove-left nil)
- ("j" windmove-down nil)
- ("k" windmove-up nil)
- ("l" windmove-right nil)
+ ("h" windmove-left nil :exit t)
+ ("j" windmove-down nil :exit t)
+ ("k" windmove-up nil :exit t)
+ ("l" windmove-right nil :exit t)
("H" hydra-move-splitter-left nil)
("J" hydra-move-splitter-down nil)
("K" hydra-move-splitter-up nil)
(interactive)
(split-window-right)
(windmove-right))
- "vert")
+ "vert" :exit t)
("x" (lambda ()
(interactive)
(split-window-below)
(windmove-down))
- "horz")
+ "horz" :exit t)
("o" delete-other-windows "one" :exit t)
+ ("C-o" delete-other-windows "one" :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")
- ("m" headlong-bookmark-jump "bmk")
+ ("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")
("r" (progn (winner-redo) (setq this-command 'winner-redo)) "redo")
("f" nil))
- (global-unset-key (kbd "M-o"))
- (global-set-key (kbd "M-o") 'sd/hydra-window/body)
+ (global-unset-key (kbd "C-o"))
+ (global-set-key (kbd "C-o") 'sd/hydra-window/body)
(defun triggle-windows-max-size ()
(interactive)
#+END_SRC
+*** hydra misc
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (defhydra sd/hydra-misc ()
+ "Miscellaneous Commands"
+ ("e" eshell "eshell" :color red :exit t)
+ ("p" (lambda ()
+ (interactive)
+ (if (sd/buffer-exist "*Packages*")
+ (switch-to-buffer "*Packages*")
+ (package-list-packages)))
+ "list-package" :color red :exit t)
+ ("g" magit-status "git-status" :color red :exit t))
+#+END_SRC
+
+*** hydra launcher
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (defhydra hydra-launcher (:color blue :columns 2)
+ "Launch"
+ ("h" man "man")
+ ("s" eshell "eshell")
+ ("p" package-list-packages "Package")
+ ("q" nil "cancel"))
+#+END_SRC
+
** Line Number
Enable linum mode on programming modes
We can use [[https://www.gnu.org/software/emms/quickstart.html][Emms]] for multimedia in Emacs
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
(use-package emms
:ensure t
:init
- (setq emms-source-file-default-directory "~/Music/emms/")
+ (setq emms-source-file-default-directory "~/Music/")
:config
(emms-standard)
(emms-default-players)
#+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+
+ :url "https://raw.githubusercontent.com/emacsmirror/emacswiki.org/master/info+.el"
+ (require 'info+))
+#+END_SRC
+
+** TODO bookmark
+
+** TODO Calendar
+
* Programming
** Languages
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
- (define-key lispy-mode-map (kbd "M-o") nil)))
+ `(progn
+ (define-key lispy-mode-map (kbd "M-o") nil)
+ (define-key lispy-mode-map (kbd "C-d") nil)))
:config
(add-hook 'emacs-lisp-mode-hook (lambda () (lispy-mode 1))))
-
#+END_SRC
*** Perl
#+END_SRC
-* Todo
+* Markdown mode
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (use-package markdown-mode
+ :ensure t
+ :commands (markdown-mode gfm-mode)
+ :mode (("README\\.md\\'" . gfm-mode)
+ ("\\.md\\'" . markdown-mode)
+ ("\\.markdown\\'" . markdown-mode))
+ :init (setq markdown-command "multimarkdown"))
+#+END_SRC
+
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (use-package markdown-preview-eww
+ :ensure t)
+#+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"
+ user-full-name "Peng Li")
+
+ (setq gnus-select-method
+ '(nnimap "gmail"
+ (nnimap-address "imap.gmail.com")
+ (nnimap-server-port "imaps")
+ (nnimap-stream ssl)))
-- change M-o to trigger to delete other windows and restore previous config
+ (setq smtpmail-smtp-service 587
+ gnus-ignored-newsgroups "^to\\.\\|^[0-9. ]+\\( \\|$\\)\\|^[\"]\"[#'()]")
+ ;; Use gmail sending mail
+ (setq message-send-mail-function 'smtpmail-send-it
+ smtpmail-starttls-credentials '(("smtp.gmail.com" 587 nil nil))
+ smtpmail-auth-credentials '(("smtp.gmail.com" 587 "seudut@gmail.com" nil))
+ smtpmail-default-smtp-server "smtp.gmail.com"
+ smtpmail-smtp-server "smtp.gmail.com"
+ smtpmail-smtp-service 587
+ starttls-use-gnutls t)
+#+END_SRC
+
+And put the following in =~/.authinfo= file, replacing =<USE>= with your email address
+and =<PASSWORD>= with the password
+#+BEGIN_EXAMPLE
+ machine imap.gmail.com login <USER> password <PASSWORD> port imaps
+ machine smtp.gmail.com login <USER> password <PASSWORD> port 587
+#+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)
+
+
+
+ (setq gnus-extract-address-components
+ 'mail-extract-address-components)
+ ;; 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)
+
+
+
+#+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)))))
+
+ ;; (add-hook 'gnus-group-mode-map (lambda ()
+ ;; (gnus-group-select-group "INBOX")))
+#+END_SRC
+
+* key
+- passion
+- vision
+- mission