X-Git-Url: http://47.100.26.94:8080/?a=blobdiff_plain;f=emacs.d%2Fconfig.org;h=df7137afd6c47e1740621fabfff6fd5d6fd86250;hb=5bcb759b2420ab6720c9e6e04e5d5de20b3b2bfa;hp=3b87ed1e53667c0aa383d180bcf50cfee7350b6b;hpb=3f2b65859bc7bb7a03ec083633984420692da38c;p=dotfiles.git diff --git a/emacs.d/config.org b/emacs.d/config.org index 3b87ed1..df7137a 100644 --- a/emacs.d/config.org +++ b/emacs.d/config.org @@ -25,9 +25,7 @@ Set system PATH and emacs exec path Set the emacs load path #+BEGIN_SRC emacs-lisp :tangle yes :results silent - - (add-to-list 'load-path "~/.emacs.d/elisp") - + ;; (add-to-list 'load-path "~/.emacs.d/elisp") #+END_SRC ** Package Initialization @@ -44,7 +42,7 @@ Set the emacs load path #+END_SRC -** General Setting +** Window Setting Disable scroll bar, tool-bar and menu-bar @@ -53,7 +51,7 @@ Disable scroll bar, tool-bar and menu-bar (tool-bar-mode 0) (menu-bar-mode 1) - (setq debug-on-error t) + ;; (setq debug-on-error t) (setq inhibit-startup-message t) (defalias 'yes-or-no-p 'y-or-n-p) @@ -86,6 +84,21 @@ Setting scroll right/left ; (global-set-key (kbd "C-.") 'scoll-right) #+END_SRC +Set default window size +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (setq initial-frame-alist + '((width . 120) + (height . 50))) +#+END_SRC + +Stop auto save +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (setq auto-save-default nil) + + ;; restore last session + ;; (desktop-save-mode t) +#+END_SRC + * Package Management Tools ** Use-package @@ -343,6 +356,8 @@ clean mode line, Refer to [[https://www.masteringemacs.org/article/hiding-replac (auto-revert-mode . "") ;; default is Ind (org-indent-mode . "") + ;; default is Fly + (flyspell-mode . "") ;; Major modes (lisp-interaction-mode . "λ") (hi-lock-mode . "") @@ -469,778 +484,922 @@ set height in mode line #+END_SRC -* Org-mode Settings - -** Org-mode Basic setting +* IDO & SMEX -Always indents header, and hide header leading starts so that no need type =#+STATUP: indent= +** IDO #+BEGIN_SRC emacs-lisp :tangle yes :results silent - (use-package org + (use-package ido :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))) + :init (setq ido-enable-flex-matching t + ido-ignore-extensions t + ido-use-virtual-buffers t + ido-everywhere t) + :config + (ido-mode 1) + (ido-everywhere 1) + (add-to-list 'completion-ignored-extensions ".pyc")) - ;; use current window for org source buffer editting - (setq org-src-window-setup 'current-window ) + (icomplete-mode t) #+END_SRC -** Org-bullets - -use [[https://github.com/sabof/org-bullets][org-bullets]] package to show utf-8 charactes +** FLX #+BEGIN_SRC emacs-lisp :tangle yes :results silent - (use-package org-bullets + (use-package flx-ido :ensure t - :init - (add-hook 'org-mode-hook - (lambda () - (org-bullets-mode t)))) + :init (setq ido-enable-flex-matching t + ido-use-faces nil) + :config (flx-ido-mode 1)) #+END_SRC -** Worf Mode +** IDO-vertically +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (use-package ido-vertical-mode + :ensure t + :init + (setq ido-vertical-define-keys 'C-n-C-p-up-and-down) + :config + (ido-vertical-mode 1)) +#+END_SRC -[[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]] +** SMEX #+BEGIN_SRC emacs-lisp :tangle yes :results silent - (use-package worf + (use-package smex :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 (smex-initialize) + :bind + ("M-x" . smex) + ("M-X" . smex-major-mode-commands)) #+END_SRC -** Get Things Done - -Refer to [[http://doc.norang.ca/org-mode.html][Organize Your Life in Plain Text]] -*** basic setup +** Ido-ubiquitous -standard key binding +Use [[https://github.com/DarwinAwardWinner/ido-ubiquitous][ido-ubiquitous]] for ido everywhere. It makes =describe-function= can also use ido #+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 + (use-package ido-ubiquitous + :ensure t + :init + (setq magit-completing-read-function 'magit-ido-completing-read) + (setq gnus-completing-read-function 'gnus-ido-completing-read) + :config + (ido-ubiquitous-mode 1)) -Replace the list bullet =-=, =+=, with =•=, a litter change based [[https://github.com/howardabrams/dot-files/blob/master/emacs-org.org][here]] +#+END_SRC +** Ido-exit-target +[[https://github.com/waymondo/ido-exit-target][ido-exit-target]] let you open file/buffer on =other-windows= when call =ido-switch-buffer= #+BEGIN_SRC emacs-lisp :tangle yes :results silent - ;; (use-package org-mode - ;; :init - ;; (font-lock-add-keywords 'org-mode - ;; '(("^ *\\([-+]\\) " - ;; (0 (prog1 () (compose-region (match-beginning 1) (match-end 1) "•"))))))) + (use-package ido-exit-target + :ensure t + :init + (mapcar (lambda (map) + (define-key map (kbd "C-j") #'ido-exit-target-split-window-right) + (define-key map (kbd "C-k") #'ido-exit-target-split-window-below)) + (list ido-buffer-completion-map + ;; ido-common-completion-map + ido-file-completion-map + ido-file-dir-completion-map))) #+END_SRC - -*** Todo Keywords -refer to [[http://coldnew.github.io/coldnew-emacs/#orgheadline94][fancy todo states]], +* Normal Text Operation +** Edit +*** undo-tree +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (use-package undo-tree + :ensure t + :config + (define-key undo-tree-visualizer-mode-map "j" 'undo-tree-visualize-redo) + (define-key undo-tree-visualizer-mode-map "k" 'undo-tree-visualize-undo) + (define-key undo-tree-visualizer-mode-map "h" 'undo-tree-visualize-switch-branch-left) + (define-key undo-tree-visualizer-mode-map "l" 'undo-tree-visualize-switch-branch-right) + (global-undo-tree-mode 1)) -To track TODO state changes, the =!= is to insert a timetamp, =@= is to insert a note with -timestamp for the state change. + (global-set-key (kbd "s-u") 'undo-tree-visualize) +#+END_SRC +*** flyspell +Stolen from [[https://github.com/redguardtoo/emacs.d/blob/master/lisp/init-spelling.el][here]], hunspell will search dictionary in =DICPATH= #+BEGIN_SRC emacs-lisp :tangle yes :results silent - ;; (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)))) + (setenv "DICPATH" "/usr/local/share/hunspell") + (when (executable-find "hunspell") + (setq-default ispell-program-name "hunspell") + (setq ispell-really-hunspell t)) - (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@/!)" )))) + ;; (defun text-mode-hook-setup () + ;; ;; Turn off RUN-TOGETHER option when spell check text-mode + ;; (setq-local ispell-extra-args (flyspell-detect-ispell-args))) + ;; (add-hook 'text-mode-hook 'text-mode-hook-setup) + (add-hook 'text-mode-hook 'flyspell-mode) - (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 + ;; enable flyspell check on comments and strings in progmamming modes + (add-hook 'prog-mode-hook 'flyspell-prog-mode) -Fast todo selections + ;; I don't use the default mappings + (with-eval-after-load 'flyspell + (define-key flyspell-mode-map (kbd "C-;") nil) + (define-key flyspell-mode-map (kbd "C-,") nil) + (define-key flyspell-mode-map (kbd "C-.") nil)) +#+END_SRC +Make flyspell enabled for org-mode, see [[http://emacs.stackexchange.com/questions/9333/how-does-one-use-flyspell-in-org-buffers-without-flyspell-triggering-on-tangled][here]] #+BEGIN_SRC emacs-lisp :tangle yes :results silent - (setq org-use-fast-todo-selection t) - (setq org-treat-S-cursor-todo-selection-as-state-change nil) + ;; NO spell check for embedded snippets + (defadvice org-mode-flyspell-verify (after org-mode-flyspell-verify-hack activate) + (let ((rlt ad-return-value) + (begin-regexp "^[ \t]*#\\+begin_\\(src\\|html\\|latex\\)") + (end-regexp "^[ \t]*#\\+end_\\(src\\|html\\|latex\\)") + old-flag + b e) + (when ad-return-value + (save-excursion + (setq old-flag case-fold-search) + (setq case-fold-search t) + (setq b (re-search-backward begin-regexp nil t)) + (if b (setq e (re-search-forward end-regexp nil t))) + (setq case-fold-search old-flag)) + (if (and b e (< (point) e)) (setq rlt nil))) + (setq ad-return-value rlt))) #+END_SRC -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 +*** Expand-region #+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"))))) + (use-package expand-region + :ensure t + :config + (global-set-key (kbd "C-=") 'er/expand-region)) #+END_SRC -Logging Stuff +** Motion +*** Avy #+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) + (use-package avy + :ensure t + :config + (avy-setup-default)) #+END_SRC -*** Tags +*** =M-g= prefix #+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)))) + (global-set-key (kbd "M-g j") 'avy-goto-line-below) + (global-set-key (kbd "M-g k") 'avy-goto-line-above) + (global-set-key (kbd "M-g w") 'avy-goto-word-1-below) + (global-set-key (kbd "M-g b") 'avy-goto-word-1-above) + (global-set-key (kbd "M-g e") 'avy-goto-word-0) + (global-set-key (kbd "M-g f") 'avy-goto-char-timer) + (global-set-key (kbd "M-g c") 'avy-goto-char-in-line) - ;; Allow setting single tags without the menu - (setq org-fast-tag-selection-single-key (quote expert)) -#+END_SRC + ;; M-g TAB move-to-column + ;; M-g ESC Prefix Command + ;; M-g c goto-char + ;; M-g g goto-line + ;; M-g n next-error + ;; M-g p previous-error -*** Capture - Refile - Archive + ;; M-g M-g goto-line + ;; M-g M-n next-error + ;; M-g M-p previous-error +#+END_SRC -Capture lets you quickly store notes with little interruption of your work flow. -**** Capture Templates +** Search & highlight +* Key bindings -When a new taks needs to be added, categorize it as +** Esc on Minibuffer -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= +Use =ESC= to exit minibuffer. Also I map =Super-h= the same as =C-g= #+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) + (define-key minibuffer-local-map [escape] 'keyboard-escape-quit) + (define-key minibuffer-local-map [escape] 'keyboard-escape-quit) + (define-key minibuffer-local-ns-map [escape] 'keyboard-escape-quit) + (define-key minibuffer-local-isearch-map [escape] 'keyboard-escape-quit) + (define-key minibuffer-local-completion-map [escape] 'keyboard-escape-quit) + (define-key minibuffer-local-must-match-map [escape] 'keyboard-escape-quit) + (define-key minibuffer-local-must-match-filename-map [escape] 'keyboard-escape-quit) + (define-key minibuffer-local-filename-completion-map [escape] 'keyboard-escape-quit) + (define-key minibuffer-local-filename-must-match-map [escape] 'keyboard-escape-quit) + + ;; Also map s-h same as C-g + (define-key minibuffer-local-map (kbd "s-h") 'keyboard-escape-quit) - (setq org-capture-templates - (quote (("t" "Todo" entry (file org-default-notes-file) - "* TODO %?\n%a\n" :clock-in t :clock-resume t) - ("n" "Note" entry (file org-default-notes-file) - "* %? :NOTE:\n%a\n" :clock-in t :clock-resume t) - ("j" "Journal" entry (file+datetree sd/org-diary-file) - "* %?\n" :clock-in t :clock-resume t) - ("h" "Habit" entry (file org-default-notes-file) - "* NEXT %?\n%a\nSCHEDULED: %(format-time-string \"%<<%Y-%m-%d %a .+1d/3d>>\")\n:PROPERTITES:\n:STYLE: habit\n:REPEAT_TO_STATE: NEXT\n:END:\n ")))) #+END_SRC -**** Refiling Tasks +** =Ctrl= key bindings #+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 + ;; C-h help + ;; C-j newline and indent + ;; C-k kill line + ;; C-l recenter-top-bottom + ;; (global-set-key (kbd "C-;") 'ido-switch-buffer) + ;; C-; + ;; C-' + ;; C-ret -*** 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"))) + ;; C-n next-line + ;; C-m + ;; C-, + ;; C-. + ;; C-/ - ;; 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) -#+END_SRC + ;; C-y + ;; C-u + ;; C-i + ;; C-o + ;; C-p + ;; C-[ + ;; C-] + ;; C-\ -** Capture + ;; C-= + ;; C-- + ;; C-0 + ;; C-9 + ;; C-8 + ;; C-7 -** Export PDF + ;; C-Space +#+END_SRC -Install MacTex-basic and some tex packages +** =Super= bindings for file, buffer and windows -#+BEGIN_SRC bash +Some global bindings on =Super=, on Mac, it is =Command= - sudo tlmgr update --self +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (defun sd/delete-current-window () + (interactive) + (if (> (length (window-list)) 1) + (delete-window) + (message "Only one Windows now!"))) - 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 + (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-l") 'sd/delete-current-window) + ;; s-l --> goto-line + ;; (global-set-key (kbd "s-/") 'swiper) + ;; s-; --> + ;; s-' --> 'next-multiframe-window + (global-set-key (kbd "") 'toggle-frame-fullscreen) -#+END_SRC + (global-set-key (kbd "s-f") 'projectile-find-file) -#+BEGIN_SRC emacs-lisp :tangle yes :results silent - ;; ;; allow for export=>beamer by placing + (global-set-key (kbd "s-`") 'mode-line-other-buffer) - ;; 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" + (global-set-key (kbd "s-n") 'persp-next) + (global-set-key (kbd "s-p") 'persp-prev) - ("\\section{%s}" . "\\section*{%s}") - - ("\\begin{frame}[fragile]\\frametitle{%s}" - "\\end{frame}" - "\\begin{frame}[fragile]\\frametitle{%s}" - "\\end{frame}"))) + (global-set-key (kbd "s-=") 'text-scale-increase) + (global-set-key (kbd "s--") 'text-scale-decrease) - ;; letter class, for formal letters + ;; (global-set-key (kbd "s-u") 'undo-tree-visualize) - (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}"))) + ;; someothers default mapping on super (command) key + ;; s-s save-buffer + ;; s-k kill-this-buffer - (require 'ox-md) - (require 'ox-beamer) + ;; 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 + - (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")) + ;; 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 + - (setq TeX-parse-self t) + ;; s-0 --> undefined + ;; s-9 --> undefined + ;; s-8 --> undefined + ;; s-7 --> undefined + ;; s-6 --> undefined + ;; s-- --> center-line + ;; s-= --> undefined - (setq TeX-PDF-mode t) - (add-hook 'LaTeX-mode-hook - (lambda () - (LaTeX-math-mode) - (setq TeX-master t))) + ;; s-n --> make-frame + ;; s-m --> iconify-frame + ;; s-b --> undefined + ;; s-, --> customize + ;; s-. --> undefined + ;; s-/ --> undefined -#+END_SRC + ;; s-g --> isearch-repeat-forward + ;; s-f --> projectile-find-file + + ;; s-d --> isearch-repeat-background + ;; s-s --> save-buffer + ;; s-a --> make-whole-buffer -** others + ;; s-b --> undefined + ;; s-v --> yank + ;; s-c --> ns-copy-including-secondary -extend org-mode's easy templates, refer to [[http://coldnew.github.io/coldnew-emacs/#orgheadline94][Extend org-modes' esay templates]] + ;; s-t --> ns-popup-font-panel + ;; s-r --> undefined + ;; s-e --> isearch-yanqk-kill + ;; s-w --> delete-frame + ;; s-q --> same-buffers-kill-emacs -#+BEGIN_SRC emacs-lisp :tangle yes :results silent + ;; s-` --> other-frame +#+END_SRC - (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")) +** Search Replace and highlight +*** Occur +Occur search key bindings +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (add-hook 'occur-hook (lambda () + (switch-to-buffer-other-window "*Occur*") + (define-key occur-mode-map (kbd "C-o") nil))) + ;; auto select occur window -#+END_SRC + (define-key occur-mode-map (kbd "C-n") + (lambda () + (interactive) + (occur-next) + (occur-mode-goto-occurrence-other-window) + (recenter) + (other-window 1))) -* Magit + (define-key occur-mode-map (kbd "C-p") + (lambda () + (interactive) + (occur-prev) + (occur-mode-goto-occurrence-other-window) + (recenter) + (other-window 1))) -[[https://github.com/magit/magit][Magit]] is a very cool git interface on Emacs. + (use-package color-moccur + :ensure t + :commands (isearch-moccur isearch-all) + :init + (setq isearch-lazy-highlight t) + :config + (use-package moccur-edit)) +#+END_SRC +*** swiper #+BEGIN_SRC emacs-lisp :tangle yes :results silent + (use-package swiper + :ensure t) - (use-package magit - :ensure t - :commands magit-status magit-blame) + (ivy-mode 1) + (setq ivy-use-virtual-buffers t) + (global-set-key (kbd "s-/") 'swiper) + ;;* + ;; (global-set-key "\C-s" 'swiper) + ;; (global-set-key (kbd "C-c C-r") 'ivy-resume) + ;; (global-set-key (kbd "") 'ivy-resume) + ;; ;; (global-set-key (kbd "M-x") 'counsel-M-x) + ;; ;; (global-set-key (kbd "C-x C-f") 'counsel-find-file) + ;; (global-set-key (kbd " f") 'counsel-describe-function) + ;; (global-set-key (kbd " v") 'counsel-describe-variable) + ;; (global-set-key (kbd " l") 'counsel-load-library) + ;; (global-set-key (kbd " i") 'counsel-info-lookup-symbol) + ;; (global-set-key (kbd " u") 'counsel-unicode-char) + ;; (global-set-key (kbd "C-c g") 'counsel-git) + ;; (global-set-key (kbd "C-c j") 'counsel-git-grep) + ;; (global-set-key (kbd "C-c k") 'counsel-ag) + ;; (global-set-key (kbd "C-x l") 'counsel-locate) + ;; (global-set-key (kbd "C-S-o") 'counsel-rhythmbox) + ;; ;; (define-key read-expression-map (kbd "C-r") 'counsel-expression-history) #+END_SRC -* IDO & SMEX +*** =M-s= prefix +use the prefix =M-s= for searching in buffers +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (defun sd/make-keymap (key bindings) + (setq keymap (make-sparse-keymap)) + (dolist (binding bindings) + (define-key keymap (car binding) (cdr binding))) + (global-set-key key keymap)) -** IDO + (use-package highlight-symbol + :ensure t) -#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (sd/make-keymap "\M-s" + '(("w" . save-buffer) + ;; ("\M-w" . save-buffer) + ("e" . revert-buffer) + ("s" . isearch-forward-regexp) + ("r" . isearch-backward-regexp) + ("." . isearch-forward-symbol-at-point) + ("o" . occur) + ;; ("h" . highlight-symbol-at-point) + ("h" . highlight-symbol) + ("m" . highlight-regexp) + ("l" . highlight-lines-matching-regexp) + ("M" . unhighlight-regexp) + ("f" . keyboard-quit) + ("q" . keyboard-quit))) + + ;; search and replace and highlight + (define-key isearch-mode-map (kbd "M-s") 'isearch-repeat-forward) + (define-key isearch-mode-map (kbd "M-r") 'isearch-repeat-backward) + (global-set-key (kbd "s-[") 'highlight-symbol-next) + (global-set-key (kbd "s-]") 'highlight-symbol-prev) + (global-set-key (kbd "s-\\") 'highlight-symbol-query-replace) - (use-package ido - :ensure t - :init (setq ido-enable-flex-matching t - ido-ignore-extensions t - ido-use-virtual-buffers t - ido-everywhere t) - :config - (ido-mode 1) - (ido-everywhere 1) - (add-to-list 'completion-ignored-extensions ".pyc")) - (icomplete-mode t) + (define-key minibuffer-local-map "\M-s" nil) + + (set-face-background 'ido-first-match "yellow") + ;; M-s M-w eww-search-words + + ;; M-c + ;; M-r + ;; M-t + ;; M-u, #+END_SRC -** FLX +** =M-o= as prefix key for windows -#+BEGIN_SRC emacs-lisp :tangle yes :results silent +** =M-g= as prefix key for launcher - (use-package flx-ido - :ensure t - :init (setq ido-enable-flex-matching t - ido-use-faces nil) - :config (flx-ido-mode 1)) +* Org-mode Settings -#+END_SRC +** Org-mode Basic setting -** IDO-vertically +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 ido-vertical-mode + (use-package org :ensure t :init - (setq ido-vertical-define-keys 'C-n-C-p-up-and-down) - :config - (ido-vertical-mode 1)) + (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 ) + (define-key org-mode-map (kbd "C-'") nil) #+END_SRC -** SMEX +** Org-bullets -#+BEGIN_SRC emacs-lisp :tangle yes :results silent +use [[https://github.com/sabof/org-bullets][org-bullets]] package to show utf-8 charactes - (use-package smex +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (use-package org-bullets :ensure t - :init (smex-initialize) - :bind - ("M-x" . smex) - ("M-X" . smex-major-mode-commands)) + :init + (add-hook 'org-mode-hook + (lambda () + (org-bullets-mode t)))) + + (setq org-bullets-bullet-list '("⦿" "✪" "◉" "○" "►" "◆")) + ;; increase font size when enter org-src-mode + (add-hook 'org-src-mode-hook (lambda () (text-scale-increase 2))) #+END_SRC -** Ido-ubiquitous +** Worf Mode -Use [[https://github.com/DarwinAwardWinner/ido-ubiquitous][ido-ubiquitous]] for ido everywhere. It makes =describe-function= can also use ido +[[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 ido-ubiquitous + (use-package worf :ensure t - :init - (setq magit-completing-read-function 'magit-ido-completing-read) - (setq gnus-completing-read-function 'gnus-ido-completing-read) - :config - (ido-ubiquitous-mode 1)) + :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 -** Ido-exit-target - -[[https://github.com/waymondo/ido-exit-target][ido-exit-target]] let you open file/buffer on =other-windows= when call =ido-switch-buffer= +** Get Things Done -#+BEGIN_SRC emacs-lisp :tangle yes :results silent +Refer to [[http://doc.norang.ca/org-mode.html][Organize Your Life in Plain Text]] +*** basic setup - (use-package ido-exit-target - :ensure t - :init - (define-key ido-common-completion-map (kbd "C-j") #'ido-exit-target-split-window-right) - (define-key ido-common-completion-map (kbd "C-l") #'ido-exit-target-split-window-below)) +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 -* Key bindings +*** Plain List -** Remove prefix =ESC=, refer [[http://emacs.stackexchange.com/questions/14755/how-to-remove-bindings-to-the-esc-prefix-key][here]] +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 - - ;; (define-key key-translation-map (kbd "ESC") (kbd "C-g")) - + ;; (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 -** Esc on Minibuffer +refer to [[http://coldnew.github.io/coldnew-emacs/#orgheadline94][fancy todo states]], -Use =ESC= to exit minibuffer. Also I map =Super-h= the same as =C-g= +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)))) - (define-key minibuffer-local-map [escape] 'keyboard-escape-quit) - (define-key minibuffer-local-map [escape] 'keyboard-escape-quit) - (define-key minibuffer-local-ns-map [escape] 'keyboard-escape-quit) - (define-key minibuffer-local-isearch-map [escape] 'keyboard-escape-quit) - (define-key minibuffer-local-completion-map [escape] 'keyboard-escape-quit) - (define-key minibuffer-local-must-match-map [escape] 'keyboard-escape-quit) - (define-key minibuffer-local-must-match-filename-map [escape] 'keyboard-escape-quit) - (define-key minibuffer-local-filename-completion-map [escape] 'keyboard-escape-quit) - (define-key minibuffer-local-filename-must-match-map [escape] 'keyboard-escape-quit) - ;; Also map s-h same as C-g - (define-key minibuffer-local-map (kbd "s-h") 'keyboard-escape-quit) + (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 -** =Ctrl= key bindings +Fast todo selections #+BEGIN_SRC emacs-lisp :tangle yes :results silent - ;; - - ;; C-h help - ;; C-j newline and indent - ;; C-k kill line - ;; C-l recenter-top-bottom - ;; (global-set-key (kbd "C-;") 'ido-switch-buffer) - ;; C-; - ;; C-' - ;; C-ret - - ;; C-n next-line - ;; C-m - ;; C-, - ;; C-. - ;; C-/ - - ;; C-y - ;; C-u - ;; C-i - ;; C-o - ;; C-p - ;; C-[ - ;; C-] - ;; C-\ + (setq org-use-fast-todo-selection t) + (setq org-treat-S-cursor-todo-selection-as-state-change nil) +#+END_SRC - ;; C-= - ;; C-- - ;; C-0 - ;; C-9 - ;; C-8 - ;; C-7 +TODO state triggers and tags, [[http://doc.norang.ca/org-mode.html][Organize Your Life in Plain Text]] - ;; C-Space +- 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 +*** Capture - Refile - Archive +Capture lets you quickly store notes with little interruption of your work flow. -#+END_SRC +**** Capture Templates -** =Super= bindings for file, buffer and windows +When a new taks needs to be added, categorize it as -Some global bindings on =Super=, on Mac, it is =Command= +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 "s-h") 'keyboard-quit) - (global-set-key (kbd "s-j") 'ido-switch-buffer) - (global-set-key (kbd "s-k") 'ido-find-file) - ;; s-k --> kill-this-buffer - (global-set-key (kbd "s-l") (lambda () - (interactive) - (if (> (length (window-list)) 1) - (delete-window) - (message "Only one Windows now!")))) - ;; s-l --> goto-line - (global-set-key (kbd "s-;") 'swiper) - ;; s-; --> - ;; s-' --> 'next-multiframe-window - (global-set-key (kbd "") 'toggle-frame-fullscreen) + (global-set-key (kbd "C-c c") 'org-capture) - ;; (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) + (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 - (global-set-key (kbd "s-`") 'mode-line-other-buffer) +**** Refiling Tasks - (global-set-key (kbd "s-n") 'persp-next) - (global-set-key (kbd "s-p") 'persp-prev) +#+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 - ;; someothers default mapping on super (command) key - ;; s-s save-buffer - ;; s-k kill-this-buffer +*** 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) - ;; 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 + + ;; show all feature entries for repeating tasks, + ;; this is already setting by default + (setq org-agenda-repeating-timestamp-show-all t) - ;; 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 + + ;; Show all agenda dates - even if they are empty + (setq org-agenda-show-all-dates t) +#+END_SRC - ;; s-0 --> undefined - ;; s-9 --> undefined - ;; s-8 --> undefined - ;; s-7 --> undefined - ;; s-6 --> undefined - ;; s-- --> center-line - ;; s-= --> undefined +** Export PDF - ;; s-n --> make-frame - ;; s-m --> iconify-frame - ;; s-b --> undefined - ;; s-, --> customize - ;; s-. --> undefined - ;; s-/ --> undefined +Install MacTex-basic and some tex packages - ;; s-g --> isearch-repeat-forward - ;; s-f --> projectile-find-file + - ;; s-d --> isearch-repeat-background - ;; s-s --> save-buffer - ;; s-a --> make-whole-buffer +#+BEGIN_SRC bash - ;; s-b --> undefined - ;; s-v --> yank - ;; s-c --> ns-copy-including-secondary + sudo tlmgr update --self - ;; s-t --> ns-popup-font-panel - ;; s-r --> undefined - ;; s-e --> isearch-yanqk-kill - ;; s-w --> delete-frame - ;; s-q --> same-buffers-kill-emacs + 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 - ;; s-` --> other-frame #+END_SRC -** =M-s= bindings for searching - -I use the prefix =M-s= for searching in buffers - #+BEGIN_SRC emacs-lisp :tangle yes :results silent + ;; ;; 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" - (defun pl-make-keymap (key bindings) - (setq keymap (make-sparse-keymap)) - (dolist (binding bindings) - (define-key keymap (car binding) (cdr binding))) - (global-set-key key keymap)) + ("\\section{%s}" . "\\section*{%s}") + + ("\\begin{frame}[fragile]\\frametitle{%s}" + "\\end{frame}" + "\\begin{frame}[fragile]\\frametitle{%s}" + "\\end{frame}"))) - (define-key minibuffer-local-map "\M-s" nil) + ;; letter class, for formal letters - (global-set-key (kbd "M-s s") 'isearch-forward-regexp) - (define-key isearch-mode-map "\M-s" 'isearch-repeat-forward) - (global-set-key (kbd "M-s r") 'isearch-backward-regexp) - (define-key isearch-mode-map "\M-r" 'isearch-repeat-backward) + (add-to-list 'org-export-latex-classes - (global-set-key (kbd "s-/") 'isearch-forward-regexp) - (define-key isearch-mode-map (kbd "s-/") 'isearch-repeat-forward) - (define-key isearch-mode-map (kbd "C-n") 'isearch-repeat-forward) + '("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}"))) - (set-face-background 'ido-first-match "white") + (require 'ox-md) + (require 'ox-beamer) - ;; M-s o --> occur - ;; M-s s --> isearch-forward-regexp - ;; M-s r --> isearch-backward-regexp - ;; M-s w --> isearch-forward-word - ;; M-s . --> isearch-forward-symbol-at-point - ;; M-s _ --> isearch-forward-symbol + (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")) - ;; highlight bindings - ;; M-s h . --> highlight-symbol-at-point - ;; M-s h r --> highlight-regexp - ;; M-s h u --> unhighlight-regexp - ;; M-s h l --> highlight-lines-match-regexp - ;; M-s h p --> highlight-phrase - ;; M-s h f --> hi-lock-find-patterns + (setq TeX-parse-self t) - ;; - ;; (global-set-key (kbd "M-s M-r") 'isearch-backward-regexp) - ;; + (setq TeX-PDF-mode t) + (add-hook 'LaTeX-mode-hook + (lambda () + (LaTeX-math-mode) + (setq TeX-master t))) - ;; M-c - ;; M-r - ;; M-t - ;; M-u, #+END_SRC -Occur search key bindings +** others -#+BEGIN_SRC emacs-lisp :tangle yes :results silent +extend org-mode's easy templates, refer to [[http://coldnew.github.io/coldnew-emacs/#orgheadline94][Extend org-modes' esay templates]] - (define-key occur-mode-map (kbd "C-n") - (lambda () - (interactive) - (occur-next) - (occur-mode-goto-occurrence-other-window) - (recenter) - (other-window 1))) +#+BEGIN_SRC emacs-lisp :tangle yes :results silent - (define-key occur-mode-map (kbd "C-p") - (lambda () - (interactive) - (occur-prev) - (occur-mode-goto-occurrence-other-window) - (recenter) - (other-window 1))) + (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 - -** =M-o= as prefix key for windows - -** =M-g= as prefix key for launcher - -** others - +* 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 - - - ;; C-' undefined - ;; C-. undefined + (use-package magit + :ensure t + :init + ;; don't ask me to confirm the unsaved change + (setq magit-save-repository-buffers nil) + :commands magit-status magit-blame + :config + (dolist (map (list magit-status-mode-map + 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) + (define-key map "O" '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 - +*** Eshell alias #+BEGIN_SRC emacs-lisp :tangle yes :results silent - - (defalias 'e 'ido-find-file) - (defalias 'ff 'ido-find-file) - (defalias 'ee 'ido-find-file-other-window) - + (defalias 'e 'find-file) + (defalias 'ff 'find-file) + (defalias 'ee 'find-files) #+END_SRC -Quickly start eshll in split window below, refer [[http://www.howardism.org/Technical/Emacs/eshell-fun.html][eshell-here]] - +*** Eshell erase buffer #+BEGIN_SRC emacs-lisp :tangle yes :results silent + (defun sd/eshell-clear-buffer () + "Clear eshell buffer" + (interactive) + (let ((inhibit-read-only t)) + (erase-buffer) + (eshell-send-input))) - (defun eshell-x () - (insert "exit") - (eshell-send-input) - (delete-window)) + (add-hook 'eshell-mode-hook (lambda () + (local-set-key (kbd "C-l") 'sd/eshell-clear-buffer))) +#+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." +*** 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* ((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")) + (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-set-key (kbd "M-`") (lambda () - ;; (interactive) - ;; (if (buffer-name)))) - + (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 "") "zoom" ("g" text-scale-increase "in") ("l" text-scale-decrease "out")) - #+END_SRC *** Windmove Splitter @@ -1284,17 +1443,15 @@ Refer [[https://github.com/abo-abo/hydra/blob/master/hydra-examples.el][hydra-ex #+END_SRC *** hydra-window - #+BEGIN_SRC emacs-lisp :tangle yes :results silent - (winner-mode 1) (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) @@ -1303,33 +1460,61 @@ Refer [[https://github.com/abo-abo/hydra/blob/master/hydra-examples.el][hydra-ex (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" ido-switch-buffer "buf" :exit t) + ("C-k" sd/delete-current-window "del" :exit t) + ("'" other-window "other" :exit t) ("a" ace-window "ace") ("s" ace-swap-window "swap") ("d" ace-delete-window "ace-one" :exit t) ("i" ace-maximize-window "ace-one" :exit t) - ("b" ido-switch-buffer "buf") - ("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) +#+END_SRC - (defun triggle-windows-max-size () - (interactive) - (if (> (length (window-list)) 1) - (delete-other-windows) - (winner-undo))) +*** hydra misc +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (defhydra sd/hydra-misc (:color red :columns nil) + "Miscellaneous Commands" + ("e" eshell "eshell" :exit t) + ("p" (lambda () + (interactive) + (if (not (eq nil (get-buffer "*Packages*"))) + (switch-to-buffer "*Packages*") + (package-list-packages))) + "list-package" :exit t) + ("g" magit-status "git-status" :exit t) + ("'" mode-line-other-buffer "last buffer" :exit t) + ("C-'" mode-line-other-buffer "last buffer" :exit t) + ("m" man "man" :exit t) + ("d" dired-jump "dired" :exit t) + ("b" ibuffer "ibuffer" :exit t) + ("q" nil "quit") + ("f" nil "quit")) + + (global-set-key (kbd "C-'") 'sd/hydra-misc/body) +#+END_SRC +*** hydra launcher +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (defhydra sd/hydra-launcher (:color blue :columns 2) + "Launch" + ("e" emms "emms" :exit t) + ("q" nil "cancel")) #+END_SRC ** Line Number @@ -1492,11 +1677,10 @@ Type =o= to go to the link 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) @@ -1530,63 +1714,119 @@ Play Go in Emacs, gnugo xpm refert [[https://github.com/okanotor/dotemacs/blob/f #+END_SRC -** undo-tree +** Tabbar #+BEGIN_SRC emacs-lisp :tangle yes :results silent - (use-package undo-tree - :ensure t - :config - (global-undo-tree-mode 1)) + ;; (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 +** 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 -** swiper +** TODO bookmark +** TODO Calendar +** advice info #+BEGIN_SRC emacs-lisp :tangle yes :results silent + (defun sd/info-mode () + (interactive) + (unless (equal major-mode 'Info-mode) + (unless (> (length (window-list)) 1) + (split-window-right)) + (other-window 1) + ;; (info) + )) - (use-package swiper - :ensure t) + ;; (global-set-key (kbd "C-h i") 'sd/info-mode) + ;; open Info buffer in other window instead of current window + (defadvice info (before my-info (&optional file buf) activate) + (sd/info-mode)) - (ivy-mode 1) - (setq ivy-use-virtual-buffers t) - ;; (global-set-key "\C-s" 'swiper) - ;; (global-set-key (kbd "C-c C-r") 'ivy-resume) - ;; (global-set-key (kbd "") 'ivy-resume) - ;; ;; (global-set-key (kbd "M-x") 'counsel-M-x) - ;; ;; (global-set-key (kbd "C-x C-f") 'counsel-find-file) - ;; (global-set-key (kbd " f") 'counsel-describe-function) - ;; (global-set-key (kbd " v") 'counsel-describe-variable) - ;; (global-set-key (kbd " l") 'counsel-load-library) - ;; (global-set-key (kbd " i") 'counsel-info-lookup-symbol) - ;; (global-set-key (kbd " u") 'counsel-unicode-char) - ;; (global-set-key (kbd "C-c g") 'counsel-git) - ;; (global-set-key (kbd "C-c j") 'counsel-git-grep) - ;; (global-set-key (kbd "C-c k") 'counsel-ag) - ;; (global-set-key (kbd "C-x l") 'counsel-locate) - ;; (global-set-key (kbd "C-S-o") 'counsel-rhythmbox) - ;; ;; (define-key read-expression-map (kbd "C-r") 'counsel-expression-history) + (defadvice Info-exit (after my-info-exit activate) + (sd/delete-current-window)) +#+END_SRC +** TODO Man mode +Color for Man-mode +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + ;; (add-hook 'Man-mode-hook (lambda () + ;; (interactive) + ;; (setenv "GROFF_NO_SRG"))) #+END_SRC -** Tabbar +** TODO swiper to occur +** TODO UTF8 #+BEGIN_SRC emacs-lisp :tangle yes :results silent + ;; (set-language-environment "UTF-8") + ;; (set-default-coding-systems 'utf-8) +#+END_SRC - ;; (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)) +** Demo It +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + ;; (el-get-bundle howardabrams/demo-it) + + (use-package org-tree-slide + :ensure t) + + ;; (use-package yasnippet + ;; :ensure t) +#+END_SRC + +** Presentation +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (use-package org-tree-slide + :ensure + :config + ;; (define-key org-mode-map "\C-ccp" 'org-tree-slide-mode) + (define-key org-tree-slide-mode-map (kbd "") 'org-tree-slide-content) + (define-key org-tree-slide-mode-map (kbd "") 'org-tree-slide-move-next-tree) + (define-key org-tree-slide-mode-map [escape] 'org-tree-slide-move-previous-tree)) +#+END_SRC + +* dired +=C-o= is defined as a global key for window operation, here unset it in dired mode +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (use-package dired + :config + (require 'dired-x) + (setq dired-omit-mode t) + (setq dired-omit-files (concat dired-omit-files "\\|^\\..+$")) + (add-hook 'dired-mode-hook (lambda () + (define-key dired-mode-map (kbd "C-o") nil) + (define-key dired-mode-map (kbd "H") 'dired-omit-mode) + (define-key dired-mode-map (kbd "DEL") (lambda () (interactive) (find-alternate-file ".."))) + (dired-omit-mode)))) +#+END_SRC +Dired+ +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (use-package dired+ + :ensure t + :init + (setq diredp-hide-details-initially-flag nil) + :config + (define-key dired-mode-map (kbd "j") 'diredp-next-line) + (define-key dired-mode-map (kbd "k") 'diredp-previous-line) + (define-key dired-mode-map (kbd "g") 'dired-goto-file)) #+END_SRC * Programming @@ -1614,16 +1854,14 @@ In Lisp Mode, =M-o= is defined, but I use this for global hydra window. So here bindings in =lispy-mode-map= after loaded. see [[http://stackoverflow.com/questions/298048/how-to-handle-conflicting-keybindings][here]] #+BEGIN_SRC emacs-lisp :tangle yes :results silent - (use-package lispy :ensure t :init - (eval-after-load 'lispy - '(progn + (eval-after-load "lispy" + `(progn (define-key lispy-mode-map (kbd "M-o") nil))) :config (add-hook 'emacs-lisp-mode-hook (lambda () (lispy-mode 1)))) - #+END_SRC *** Perl @@ -1691,27 +1929,26 @@ to call =compilation= interactively. #+END_SRC ** Compile - Set the environments vairables in compilation mode - #+BEGIN_SRC emacs-lisp :tangle yes :results silent - (use-package compile :commands compile :config (setq compilation-environment (cons "LC_ALL=C" compilation-environment))) + ;; super-r to compile + (with-eval-after-load "compile" + (define-key compilation-mode-map (kbd "C-o") nil) + (define-key compilation-mode-map (kbd "n") 'compilation-next-error) + (define-key compilation-mode-map (kbd "p") 'compilation-previous-error) + (define-key compilation-mode-map (kbd "r") #'recompile)) #+END_SRC ** Auto-Insert - -Enable auto-insert mode - +*** Enable auto-insert mode #+BEGIN_SRC emacs-lisp :tangle yes :results silent - (auto-insert-mode t) (setq auto-insert-query nil) - #+END_SRC *** C++ Auto Insert @@ -1760,20 +1997,99 @@ Enable auto-insert mode #+END_SRC *** Perl Auto Insert - Refer [[https://www.emacswiki.org/emacs/AutoInsertMode][AutoInsertMode]] Wiki - #+BEGIN_SRC emacs-lisp :tangle yes :results silent - (eval-after-load 'autoinsert '(define-auto-insert '("\\.pl\\'" . "Perl skeleton") '( - "Description: " + "Empty" "#!/usr/bin/perl -w" \n \n - "use strict;" \n \n + "use strict;" > \n \n + > _ + ))) +#+END_SRC + +*** Python template +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (eval-after-load 'autoinsert + '(define-auto-insert '("\\.\\(py\\)\\'" . "Python skeleton") + '( + "Empty" + "#import os,sys" \n + \n \n ))) +#+END_SRC +*** Elisp +Emacs lisp auto-insert, based on the default module in =autoinsert.el=, but replace =completing-read= as +=completing-read-ido-ubiquitous= to fix the edge case of that =ido= cannot handle. +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (eval-after-load 'autoinsert + '(define-auto-insert '("\\.el\\'" . "my Emacs Lisp header") + '( + "Short description: " + ";;; " (file-name-nondirectory (buffer-file-name)) " --- " str + (make-string (max 2 (- 80 (current-column) 27)) ?\s) + "-*- lexical-binding: t; -*-" '(setq lexical-binding t) + "\n + ;; Copyright (C) " (format-time-string "%Y") " " + (getenv "ORGANIZATION") | (progn user-full-name) " + + ;; Author: " (user-full-name) + '(if (search-backward "&" (line-beginning-position) t) + (replace-match (capitalize (user-login-name)) t t)) + '(end-of-line 1) " <" (progn user-mail-address) "> + ;; Keywords: " + '(require 'finder) + ;;'(setq v1 (apply 'vector (mapcar 'car finder-known-keywords))) + '(setq v1 (mapcar (lambda (x) (list (symbol-name (car x)))) + finder-known-keywords) + v2 (mapconcat (lambda (x) (format "%12s: %s" (car x) (cdr x))) + finder-known-keywords + "\n")) + ((let ((minibuffer-help-form v2)) + (completing-read-ido-ubiquitous "Keyword, C-h: " v1 nil t)) + str ", ") & -2 " + + \;; This program is free software; you can redistribute it and/or modify + \;; it under the terms of the GNU General Public License as published by + \;; the Free Software Foundation, either version 3 of the License, or + \;; (at your option) any later version. + + \;; This program is distributed in the hope that it will be useful, + \;; but WITHOUT ANY WARRANTY; without even the implied warranty of + \;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + \;; GNU General Public License for more details. + + \;; You should have received a copy of the GNU General Public License + \;; along with this program. If not, see . + + \;;; Commentary: + + \;; " _ " + + \;;; Code: + + + \(provide '" + (file-name-base) + ") + \;;; " (file-name-nondirectory (buffer-file-name)) " ends here\n"))) +#+END_SRC + +*** Org file template +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (eval-after-load 'autoinsert + '(define-auto-insert '("\\.\\(org\\)\\'" . "Org-mode skeleton") + '( + "title: " + "#+TITLE: " str (make-string 30 ?\s) > \n + "#+AUTHOR: Peng Li\n" + "#+EMAIL: seudut@gmail.com\n" + "#+DATE: " (shell-command-to-string "echo -n $(date +%Y-%m-%d)") > \n + > \n + > _))) #+END_SRC ** Completion @@ -1802,7 +2118,158 @@ company mode #+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))) + + (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 == with your email address +and == with the password +#+BEGIN_EXAMPLE + machine imap.gmail.com login password port imaps + machine smtp.gmail.com login 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) + + ;; (with-eval-after-load 'gnus-summary-mode + ;; (define-key gnus-summary-mode-map (kbd "C-o") 'sd/hydra-window/body)) + + (add-hook 'gnus-summary-mode-hook (lambda () + (define-key gnus-summary-mode-map (kbd "C-o") nil))) + + +#+END_SRC + +** Windows layout +See [[https://www.emacswiki.org/emacs/GnusWindowLayout][GnusWindowLayout]] +#+BEGIN_SRC emacs-lisp :tangle yes :results silent + (gnus-add-configuration + '(summary + (horizontal 1.0 + (vertical 35 + (group 1.0)) + (vertical 1.0 + (summary 1.0 poine))))) + + (gnus-add-configuration + '(article + (horizontal 1.0 + (vertical 35 + (group 1.0)) + (vertical 1.0 + (summary 0.50 point) + (article 1.0))))) + + (with-eval-after-load 'gnus-group-mode + (gnus-group-select-group "INBOX")) + ;; (add-hook 'gnus-group-mode-map (lambda () + ;; (gnus-group-select-group "INBOX"))) +#+END_SRC + +* Blog +#+BEGIN_SRC emacs-lisp :tangle yes :results silent -- change M-o to trigger to delete other windows and restore previous config +#+END_SRC +* key +- passion +- vision +- mission +* TODO Convert ASCII to key +map =function-key-map= [[http://academic.evergreen.edu/projects/biophysics/technotes/program/ascii_ctrl.htm][ascii_ctrl]] +new file =C-x C-f C-f=