rename old emacs folder
[dotfiles.git] / emacs.d_2 / config.org
1 #+TITLE: Emacs Configuration file
2 #+AUTHOR: Peng Li
3 #+EMAIL: seudut@gmail.com
4
5 * Introduction
6
7 Most config are just copied from [[https://github.com/howardabrams/dot-files][howardabrams]]'s and [[https://github.com/abo-abo/oremacs][abo-abo's]] dotfiles
8
9 * Basic Settings
10
11 ** Setting loading Path
12
13 Set system PATH and emacs exec path
14
15 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
16
17   (setenv "PATH" (concat (getenv "PATH")
18                          ":" "/usr/local/bin"
19                          ":" "/Library/TeX/texbin"))
20   (setq exec-path (append exec-path '("/usr/local/bin")))
21   (setq exec-path (append exec-path '("/Library/TeX/texbin/")))
22
23 #+END_SRC
24
25 Set the emacs load path
26
27 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
28
29   (add-to-list 'load-path "~/.emacs.d/elisp")
30
31 #+END_SRC
32
33 ** Package Initialization
34
35 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
36
37   (require 'package)
38
39   (setq package-archives '(("mepla" . "http://melpa.milkbox.net/packages/")
40                            ("gnu" . "http://elpa.gnu.org/packages/")
41                            ("org" . "http://orgmode.org/elpa/")))
42
43   (package-initialize)
44
45 #+END_SRC       
46
47 ** General Setting
48
49 Disable scroll bar, tool-bar and menu-bar
50
51 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
52
53   (scroll-bar-mode 0)
54   (tool-bar-mode 0)
55   (menu-bar-mode 1)
56
57   (setq debug-on-error t)
58   (setq inhibit-startup-message t)
59
60   (defalias 'yes-or-no-p 'y-or-n-p)
61   (show-paren-mode 1)
62
63
64
65 #+END_SRC
66
67 set custom file 
68
69 #+BEGIN_SRC emacs-lisp :tangle yes :results silent 
70
71   (setq custom-file "~/.emacs.d/custom.el")
72   (load custom-file)
73
74 #+END_SRC
75
76 Switch the focus to help window when it appears
77
78 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
79
80   (setq help-window-select t)
81
82 #+END_SRC
83
84 * Package Management Tools
85
86 ** Use-package
87
88 Using [[https://github.com/jwiegley/use-package][use-package]] to manage emacs packages
89
90 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
91
92   (unless (package-installed-p 'use-package)
93     (package-refresh-contents)
94     (package-install 'use-package))
95
96   (require 'use-package)
97
98 #+END_SRC
99
100 ** El-get
101
102 [[https://github.com/dimitri/el-get][El-get]] is package management tool, whicl allows to install external elisp package from any git repository not in mepla. 
103 Check out [[http://tapoueh.org/emacs/el-get.html][el-get]].
104
105 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
106
107   (use-package el-get
108     :ensure t
109     :init
110     (add-to-list 'load-path "~/.emacs.d/el-get"))
111
112 #+END_SRC
113
114 * Color and Fonts Settings
115
116 ** highlight current line
117
118 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
119
120   (global-hl-line-mode)
121
122 #+END_SRC
123
124 ** Smart Comments
125
126 [[https://github.com/paldepind/smart-comment][smart-comments]]
127
128 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
129
130   (use-package smart-comment
131     :ensure t
132     :bind ("M-;" . smart-conmment))
133
134 #+END_SRC
135
136 ** Font Setting
137
138 syntax highlighting
139
140 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
141
142   (global-font-lock-mode 1)
143
144 #+END_SRC
145
146 [[https://github.com/i-tu/Hasklig][Hasklig]] and Source Code Pro, defined fonts family
147
148 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
149
150   (if window-system
151       (defvar sd/fixed-font-family
152         (cond ((x-list-fonts "Hasklig")         "Hasklig")
153               ((x-list-fonts "Source Code Pro") "Source Code Pro")
154               ((x-list-fonts "Anonymous Pro")   "Anonymous Pro")
155               ((x-list-fonts "M+ 1mn")          "M+ 1mn"))
156         "The fixed width font based on what is installed, `nil' if not defined."))
157
158 #+END_SRC
159
160 Setting the fonts 
161
162 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
163
164   (if window-system
165       (when sd/fixed-font-family
166         (set-frame-font sd/fixed-font-family)
167         (set-face-attribute 'default nil :font sd/fixed-font-family :height 120)
168         (set-face-font 'default sd/fixed-font-family)))
169
170 #+END_SRC
171
172 ** Color Theme
173
174 Loading theme should be after all required loaded, refere [[https://github.com/jwiegley/use-package][:defer]] in =use-package=
175
176 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
177
178   (setq vc-follow-symlinks t)
179
180   (use-package color-theme
181     :ensure t
182     :init (require 'color-theme)
183     :config (use-package color-theme-sanityinc-tomorrow
184               :ensure t
185               :no-require t
186               :config
187               (load-theme 'sanityinc-tomorrow-bright t)))
188
189   ;(eval-after-load 'color-theme
190   ;  (load-theme 'sanityinc-tomorrow-bright t))
191
192 #+END_SRC
193
194 Change the Org-mode colors 
195
196 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
197
198   (defun org-src-color-blocks-light ()
199     "Colors the block headers and footers to make them stand out more for lighter themes"
200     (interactive)
201     (custom-set-faces
202      '(org-block-begin-line
203       ((t (:underline "#A7A6AA" :foreground "#008ED1" :background "#EAEAFF"))))
204      '(org-block-background
205        ((t (:background "#FFFFEA"))))
206      '(org-block
207        ((t (:background "#FFFFEA"))))
208      '(org-block-end-line
209        ((t (:overline "#A7A6AA" :foreground "#008ED1" :background "#EAEAFF"))))
210
211      '(mode-line-buffer-id ((t (:foreground "#005000" :bold t))))
212      '(which-func ((t (:foreground "#008000"))))))
213
214   (defun org-src-color-blocks-dark ()
215     "Colors the block headers and footers to make them stand out more for dark themes"
216     (interactive)
217     (custom-set-faces
218      '(org-block-begin-line
219        ((t (:foreground "#008ED1" :background "#002E41"))))
220      '(org-block-background
221        ((t (:background "#000000"))))
222      '(org-block
223        ((t (:background "#000000"))))
224      '(org-block-end-line
225        ((t (:foreground "#008ED1" :background "#002E41"))))
226
227      '(mode-line-buffer-id ((t (:foreground "black" :bold t))))
228      '(which-func ((t (:foreground "green"))))))
229
230   (org-src-color-blocks-dark)
231
232 #+END_SRC
233
234 improve color for org-mode
235 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
236   (deftheme ha/org-theme "Sub-theme to beautify org mode")
237
238   (if window-system
239       (defvar sd/variable-font-tuple
240         (cond ((x-list-fonts "Source Sans Pro") '(:font "Source Sans Pro"))
241               ((x-list-fonts "Lucida Grande")   '(:font "Lucida Grande"))
242               ((x-list-fonts "Verdana")         '(:font "Verdana"))
243               ((x-family-fonts "Sans Serif")    '(:family "Sans Serif"))
244               (nil (warn "Cannot find a Sans Serif Font.  Install Source Sans Pro.")))
245         "My variable width font available to org-mode files and whatnot."))
246
247   (defun sd/org-color ()
248     (let* ((sd/fixed-font-tuple (list :font sd/fixed-font-family))
249            (base-font-color     (face-foreground 'default nil 'default))
250            (background-color    (face-background 'default nil 'default))
251            (primary-color       (face-foreground 'mode-line nil))
252            (secondary-color     (face-background 'secondary-selection nil 'region))
253            (base-height         (face-attribute 'default :height))
254            (headline           `(:inherit default :weight bold :foreground ,base-font-color)))
255       (custom-theme-set-faces 'ha/org-theme
256                               `(org-agenda-structure ((t (:inherit default :height 2.0 :underline nil))))
257                               `(org-verbatim ((t (:inherit 'fixed-pitched :foreground "#aef"))))
258                               `(org-table ((t (:inherit 'fixed-pitched))))
259                               `(org-block ((t (:inherit 'fixed-pitched))))
260                               `(org-block-background ((t (:inherit 'fixed-pitched))))
261                               `(org-block-begin-line ((t (:inherit 'fixed-pitched))))
262                               `(org-block-end-line ((t (:inherit 'fixed-pitched))))
263                               `(org-level-8 ((t (,@headline ,@sd/variable-font-tuple))))
264                               `(org-level-7 ((t (,@headline ,@sd/variable-font-tuple))))
265                               `(org-level-6 ((t (,@headline ,@sd/variable-font-tuple))))
266                               `(org-level-5 ((t (,@headline ,@sd/variable-font-tuple))))
267                               `(org-level-4 ((t (,@headline ,@sd/variable-font-tuple
268                                                             :height ,(round (* 1.1 base-height))))))
269                               `(org-level-3 ((t (,@headline ,@sd/variable-font-tuple
270                                                             :height ,(round (* 1.25 base-height))))))
271                               `(org-level-2 ((t (,@headline ,@sd/variable-font-tuple
272                                                             :height ,(round (* 1.5 base-height))))))
273                               `(org-level-1 ((t (,@headline ,@sd/variable-font-tuple
274                                                             :height ,(round (* 1.75 base-height))))))
275                               `(org-document-title ((t (,@headline ,@sd/variable-font-tuple :height 1.5 :underline nil)))))))
276
277
278 #+END_SRC
279
280 ** Rainbow-delimiter
281
282 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
283
284   (use-package rainbow-delimiters
285     :ensure t
286     :init
287     (add-hook 'prog-mode-hook #'rainbow-delimiters-mode))
288
289 #+END_SRC
290
291 ** page-break-lines
292
293 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
294
295   (use-package page-break-lines
296     :ensure t
297     :config
298     (turn-on-page-break-lines-mode))
299
300 #+END_SRC
301
302 * Org-mode Settings
303
304 ** Org-mode Basic setting
305
306 Always indents header, and hide header leading starts so that no need type =#+STATUP: indent= 
307
308 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
309
310   (use-package org
311     :ensure t
312     :init
313     (setq org-startup-indented t)
314     (setq org-hide-leading-starts t)
315     (setq org-src-fontify-natively t)
316     (setq org-src-tab-acts-natively t)
317     (setq org-confirm-babel-evaluate nil)
318     (setq org-use-speed-commands t)
319     (setq org-completion-use-ido t))
320
321   (org-babel-do-load-languages
322    'org-babel-load-languages
323    '((python . t)
324      (C . t)
325      (perl . t)
326      (calc . t)
327      (latex . t)
328      (java . t)
329      (ruby . t)
330      (lisp . t)
331      (scheme . t)
332      (sh . t)
333      (sqlite . t)
334      (js . t)))
335
336   ;; use current window for org source buffer editting
337   (setq org-src-window-setup 'current-window )
338
339 #+END_SRC
340
341 ** Org-bullets
342
343 use [[https://github.com/sabof/org-bullets][org-bullets]] package to show utf-8 charactes
344
345 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
346
347   (use-package org-bullets
348     :ensure t
349     :init
350     (add-hook 'org-mode-hook
351               (lambda ()
352                 (org-bullets-mode t))))
353
354 #+END_SRC
355
356 ** Worf Mode
357
358 [[https://github.com/abo-abo/worf][worf]] mode is an extension of vi-like binding for org-mode. 
359 In =worf-mode=, it is mapping =[=, =]= as =worf-backward= and =worf-forward= in global, wich
360 cause we cannot input =[= and =]=, so here I unset this mappings. And redifined this two to
361 =M-[= and =M-]=. see this [[https://github.com/abo-abo/worf/issues/19#issuecomment-223756599][issue]]
362
363 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
364
365   (use-package worf
366     :ensure t
367     :commands worf-mode
368     :init (add-hook 'org-mode-hook 'worf-mode)
369     ;; :config
370     ;; (define-key worf-mode-map "[" nil)
371     ;; (define-key worf-mode-map "]" nil)
372     ;; (define-key worf-mode-map (kbd "M-[") 'worf-backward)
373     ;; (define-key worf-mode-map (kbd "M-]") 'worf-forward)
374     )
375
376 #+END_SRC
377
378 ** Task Management
379
380 ** Capture
381
382 ** Export PDF
383
384 Install MacTex-basic and some tex packages
385
386 #+BEGIN_SRC bash 
387
388   sudo tlmgr update --self
389
390   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
391
392 #+END_SRC
393
394 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
395   ;; ;; allow for export=>beamer by placing
396
397   ;; http://emacs-fu.blogspot.com/2011/04/nice-looking-pdfs-with-org-mode-and.html
398   ;; #+LaTeX_CLASS: beamer in org files
399   (unless (boundp 'org-export-latex-classes)
400     (setq org-export-latex-classes nil))
401   (add-to-list 'org-export-latex-classes
402     ;; beamer class, for presentations
403     '("beamer"
404        "\\documentclass[11pt]{beamer}\n
405         \\mode<{{{beamermode}}}>\n
406         \\usetheme{{{{beamertheme}}}}\n
407         \\usecolortheme{{{{beamercolortheme}}}}\n
408         \\beamertemplateballitem\n
409         \\setbeameroption{show notes}
410         \\usepackage[utf8]{inputenc}\n
411         \\usepackage[T1]{fontenc}\n
412         \\usepackage{hyperref}\n
413         \\usepackage{color}
414         \\usepackage{listings}
415         \\lstset{numbers=none,language=[ISO]C++,tabsize=4,
416     frame=single,
417     basicstyle=\\small,
418     showspaces=false,showstringspaces=false,
419     showtabs=false,
420     keywordstyle=\\color{blue}\\bfseries,
421     commentstyle=\\color{red},
422     }\n
423         \\usepackage{verbatim}\n
424         \\institute{{{{beamerinstitute}}}}\n          
425          \\subject{{{{beamersubject}}}}\n"
426
427        ("\\section{%s}" . "\\section*{%s}")
428  
429        ("\\begin{frame}[fragile]\\frametitle{%s}"
430          "\\end{frame}"
431          "\\begin{frame}[fragile]\\frametitle{%s}"
432          "\\end{frame}")))
433
434     ;; letter class, for formal letters
435
436     (add-to-list 'org-export-latex-classes
437
438     '("letter"
439        "\\documentclass[11pt]{letter}\n
440         \\usepackage[utf8]{inputenc}\n
441         \\usepackage[T1]{fontenc}\n
442         \\usepackage{color}"
443  
444        ("\\section{%s}" . "\\section*{%s}")
445        ("\\subsection{%s}" . "\\subsection*{%s}")
446        ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
447        ("\\paragraph{%s}" . "\\paragraph*{%s}")
448        ("\\subparagraph{%s}" . "\\subparagraph*{%s}")))
449
450
451   (require 'ox-md)
452   (require 'ox-beamer)
453
454   (setq org-latex-pdf-process
455         '("pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"
456           "pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"
457           "pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"))
458
459   (setq TeX-parse-self t)
460
461   (setq TeX-PDF-mode t)
462   (add-hook 'LaTeX-mode-hook
463             (lambda ()
464               (LaTeX-math-mode)
465               (setq TeX-master t)))
466
467 #+END_SRC
468
469 ** others
470
471 refer to [[http://coldnew.github.io/coldnew-emacs/#orgheadline94][fancy todo states]]
472
473 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
474
475   (setq org-todo-keywords '((sequence "☛ TODO(t)" "|" "✔ DONE(d)")
476                             (sequence "âš‘ WAITING(w)" "|")
477                             (sequence "|" "✘ CANCELED(c)")))
478
479 #+END_SRC
480
481 extend org-mode's easy templates, refer to [[http://coldnew.github.io/coldnew-emacs/#orgheadline94][Extend org-modes' esay templates]]
482
483 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
484
485   (add-to-list 'org-structure-template-alist
486                '("E" "#+BEGIN_SRC emacs-lisp\n?\n#+END_SRC"))
487   (add-to-list 'org-structure-template-alist
488                '("S" "#+BEGIN_SRC sh\n?\n#+END_SRC"))
489   (add-to-list 'org-structure-template-alist
490                '("p" "#+BEGIN_SRC plantuml :file uml.png \n?\n#+END_SRC"))
491
492 #+END_SRC
493
494 * Magit
495
496 [[https://github.com/magit/magit][Magit]] is a very cool git interface on Emacs.
497
498 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
499
500   (use-package magit
501     :ensure t
502     :commands magit-status magit-blame)
503
504
505 #+END_SRC
506
507 * IDO & SMEX
508
509 ** IDO
510
511 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
512
513   (use-package ido
514     :ensure t
515     :init (setq ido-enable-flex-matching t
516                 ido-ignore-extensions t
517                 ido-use-virtual-buffers t
518                 ido-everywhere t)
519     :config
520     (ido-mode 1)
521     (ido-everywhere 1)
522     (add-to-list 'completion-ignored-extensions ".pyc"))
523
524   (icomplete-mode t)
525
526 #+END_SRC
527
528 ** FLX
529
530 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
531
532   (use-package flx-ido
533     :ensure t
534     :init (setq ido-enable-flex-matching t
535                 ido-use-faces nil)
536     :config (flx-ido-mode 1))
537
538 #+END_SRC
539
540 ** IDO-vertically
541
542 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
543
544   (use-package ido-vertical-mode
545     :ensure t
546     :init
547     (setq ido-vertical-define-keys 'C-n-C-p-up-and-down)
548     :config
549     (ido-vertical-mode 1))
550
551 #+END_SRC
552
553 ** SMEX
554
555 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
556
557   (use-package smex
558     :ensure t
559     :init (smex-initialize)
560     :bind
561     ("M-x" . smex)
562     ("M-X" . smex-major-mode-commands))
563
564 #+END_SRC
565
566 ** Ido-ubiquitous
567
568 Use [[https://github.com/DarwinAwardWinner/ido-ubiquitous][ido-ubiquitous]] for ido everywhere. It makes =describe-function= can also use ido
569
570 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
571
572   (use-package ido-ubiquitous
573     :ensure t
574     :init
575     (setq magit-completing-read-function 'magit-ido-completing-read)
576     (setq gnus-completing-read-function 'gnus-ido-completing-read)
577     :config
578     (ido-ubiquitous-mode 1))
579
580 #+END_SRC
581
582 ** Ido-exit-target
583
584 [[https://github.com/waymondo/ido-exit-target][ido-exit-target]] let you open file/buffer on =other-windows= when call =ido-switch-buffer=
585
586 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
587
588   (use-package ido-exit-target
589     :ensure t
590     :init
591     (define-key ido-common-completion-map (kbd "C-j") #'ido-exit-target-split-window-right)
592     (define-key ido-common-completion-map (kbd "C-l") #'ido-exit-target-split-window-below))
593
594 #+END_SRC
595
596 * Key bindings
597
598 ** Remove prefix =ESC=, refer [[http://emacs.stackexchange.com/questions/14755/how-to-remove-bindings-to-the-esc-prefix-key][here]]
599
600 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
601
602   ;; (define-key key-translation-map (kbd "ESC") (kbd "C-g"))
603
604 #+END_SRC
605
606 ** Esc on Minibuffer
607
608 Use =ESC= to exit minibuffer. Also I map =Super-h= the same as =C-g=
609
610 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
611
612   (define-key minibuffer-local-map [escape] 'keyboard-escape-quit)
613   (define-key minibuffer-local-map [escape]  'keyboard-escape-quit)
614   (define-key minibuffer-local-ns-map [escape]  'keyboard-escape-quit)
615   (define-key minibuffer-local-isearch-map [escape]  'keyboard-escape-quit)
616   (define-key minibuffer-local-completion-map [escape]  'keyboard-escape-quit)
617   (define-key minibuffer-local-must-match-map [escape]  'keyboard-escape-quit)
618   (define-key minibuffer-local-must-match-filename-map [escape]  'keyboard-escape-quit)
619   (define-key minibuffer-local-filename-completion-map [escape]  'keyboard-escape-quit)
620   (define-key minibuffer-local-filename-must-match-map [escape]  'keyboard-escape-quit)
621
622   ;; Also map s-h same as C-g
623   (define-key minibuffer-local-map (kbd "s-h") 'keyboard-escape-quit)
624
625 #+END_SRC
626
627 ** =Ctrl= key bindings
628
629 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
630   ;;
631
632   ;; C-h    help    
633   ;; C-j    newline and indent
634   ;; C-k    kill line
635   ;; C-l    recenter-top-bottom
636   ;; (global-set-key (kbd "C-;") 'ido-switch-buffer)
637   ;; C-;
638   ;; C-'   
639   ;; C-ret  
640
641   ;; C-n    next-line
642   ;; C-m
643   ;; C-,
644   ;; C-.
645   ;; C-/
646
647   ;; C-y
648   ;; C-u
649   ;; C-i
650   ;; C-o
651   ;; C-p
652   ;; C-[
653   ;; C-]
654   ;; C-\
655
656   ;; C-=
657   ;; C--
658   ;; C-0
659   ;; C-9
660   ;; C-8
661   ;; C-7
662
663   ;; C-Space
664
665
666
667
668
669
670
671 #+END_SRC
672
673 ** =Super= bindings for file, buffer and windows
674
675 Some global bindings on =Super=, on Mac, it is =Command=
676
677 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
678
679   (global-set-key (kbd "s-h") 'keyboard-quit)
680   (global-set-key (kbd "s-j") 'ido-switch-buffer)
681   (global-set-key (kbd "s-k") 'ido-find-file)
682   ;; s-k  -->  kill-this-buffer
683   (global-set-key (kbd "s-l") (lambda ()
684                                 (interactive)
685                                 (if (> (length (window-list)) 1) 
686                                     (delete-window)
687                                   (message "Only one Windows now!"))))
688   ;; s-l  -->  goto-line
689   (global-set-key (kbd "s-;") 'swiper)
690   ;; s-;  -->
691   ;; s-'  -->  'next-multiframe-window
692   (global-set-key (kbd "<s-return>") 'toggle-frame-fullscreen)
693
694   ;; (global-set-key (kbd "s-y") 'projectile-find-file)
695   (global-set-key (kbd "s-f") 'projectile-find-file)
696   (global-set-key (kbd "s-[") 'persp-next)
697   (global-set-key (kbd "s-]") 'persp-prev)
698
699   (global-set-key (kbd "s-`") 'mode-line-other-buffer)
700
701   (global-set-key (kbd "s-n") 'persp-next)
702   (global-set-key (kbd "s-p") 'persp-prev)
703
704
705
706   ;; someothers default mapping on super (command) key
707   ;; s-s save-buffer
708   ;; s-k kill-this-buffer
709
710
711   ;; s-h  -->  ns-do-hide-emacs
712   ;; s-j  -->  ido-switch-buffer  +
713   ;; s-k  -->  kill-this-buffer
714   ;; s-l  -->  goto-line
715   ;; s-;  -->  undefined
716   ;; s-'  -->  next-multiframe-window
717   ;; s-ret --> toggle-frame-fullscreen +
718
719   ;; s-y  -->  ns-paste-secondary
720   ;; s-u  -->  revert-buffer
721   ;; s-i  -->  undefined - but used for iterm globally
722   ;; s-o  -->  used for emacs globally
723   ;; s-p  -->  projectile-persp-switch-project  +  
724   ;; s-[  -->  next-buffer  +    
725   ;; s-]  -->  previous-buffer +
726
727   ;; s-0  -->  undefined
728   ;; s-9  -->  undefined
729   ;; s-8  -->  undefined
730   ;; s-7  -->  undefined
731   ;; s-6  -->  undefined
732   ;; s--  -->  center-line
733   ;; s-=  -->  undefined
734
735   ;; s-n  -->  make-frame
736   ;; s-m  -->  iconify-frame
737   ;; s-b  -->  undefined
738   ;; s-,  -->  customize
739   ;; s-.  -->  undefined
740   ;; s-/  -->  undefined
741
742   ;; s-g  -->  isearch-repeat-forward
743   ;; s-f  -->  projectile-find-file   +
744   ;; s-d  -->  isearch-repeat-background
745   ;; s-s  -->  save-buffer
746   ;; s-a  -->  make-whole-buffer
747
748   ;; s-b  -->  undefined
749   ;; s-v  -->  yank
750   ;; s-c  -->  ns-copy-including-secondary
751
752   ;; s-t  -->  ns-popup-font-panel
753   ;; s-r  -->  undefined
754   ;; s-e  -->  isearch-yanqk-kill
755   ;; s-w  -->  delete-frame
756   ;; s-q  -->  same-buffers-kill-emacs
757
758   ;; s-`  -->  other-frame
759 #+END_SRC
760
761 ** =M-s= bindings for searching
762
763 I use the prefix =M-s= for searching in buffers
764
765 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
766
767   (defun pl-make-keymap (key bindings)
768     (setq keymap (make-sparse-keymap))
769     (dolist (binding bindings)
770       (define-key keymap (car binding) (cdr binding)))
771     (global-set-key key keymap))
772
773   (define-key minibuffer-local-map "\M-s" nil)
774
775   (global-set-key (kbd "M-s s") 'isearch-forward-regexp)
776   (define-key isearch-mode-map "\M-s" 'isearch-repeat-forward)
777   (global-set-key (kbd "M-s r") 'isearch-backward-regexp)
778   (define-key isearch-mode-map "\M-r" 'isearch-repeat-backward)
779
780   (global-set-key (kbd "s-/") 'isearch-forward-regexp)
781   (define-key isearch-mode-map (kbd  "s-/") 'isearch-repeat-forward)
782   (define-key isearch-mode-map (kbd  "C-n") 'isearch-repeat-forward)
783
784
785   (set-face-background 'ido-first-match "white")
786
787   ;; M-s o  -->  occur
788   ;; M-s s  -->  isearch-forward-regexp
789   ;; M-s r  -->  isearch-backward-regexp
790   ;; M-s w  -->  isearch-forward-word
791   ;; M-s .  -->  isearch-forward-symbol-at-point
792   ;; M-s _  -->  isearch-forward-symbol
793
794   ;; highlight bindings
795   ;; M-s h .  -->  highlight-symbol-at-point
796   ;; M-s h r  -->  highlight-regexp
797   ;; M-s h u  -->  unhighlight-regexp
798   ;; M-s h l  -->  highlight-lines-match-regexp
799   ;; M-s h p  -->  highlight-phrase
800   ;; M-s h f  -->  hi-lock-find-patterns
801
802   ;; 
803   ;; (global-set-key (kbd "M-s M-r") 'isearch-backward-regexp)
804   ;;
805
806   ;; M-c
807   ;; M-r
808   ;; M-t
809   ;; M-u, 
810 #+END_SRC
811
812 Occur search key bindings
813
814 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
815
816   (define-key occur-mode-map (kbd "C-n")
817     (lambda ()
818       (interactive)
819       (occur-next)
820       (occur-mode-goto-occurrence-other-window)
821       (recenter)
822       (other-window 1)))
823
824   (define-key occur-mode-map (kbd "C-p")
825     (lambda ()
826       (interactive)
827       (occur-prev)
828       (occur-mode-goto-occurrence-other-window)
829       (recenter)
830       (other-window 1)))
831
832 #+END_SRC
833
834
835 ** =M-o= as prefix key for windows
836
837 ** =M-g= as prefix key for launcher
838
839 ** others
840
841 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
842
843
844   ;; C-'    undefined
845   ;; C-.    undefined
846 #+END_SRC
847
848 * Eshell
849
850 Eshell alias
851
852 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
853
854   (defalias 'e 'ido-find-file)
855   (defalias 'ff 'ido-find-file)
856   (defalias 'ee 'ido-find-file-other-window)
857
858 #+END_SRC
859
860 Quickly start eshll in split window below, refer [[http://www.howardism.org/Technical/Emacs/eshell-fun.html][eshell-here]]
861
862 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
863
864   (defun eshell-x ()
865     (insert "exit")
866     (eshell-send-input)
867     (delete-window))
868
869   (defun eshell-here ()
870     "Opens up a new shell in the directory associated with the
871   current buffer's file. The eshell is renamed to match that
872   directory to make multiple eshell windows easier."
873     (interactive)
874     (let* ((parent (if (buffer-file-name)
875                        (file-name-directory (buffer-file-name))
876                      default-directory))
877            (height (/ (window-total-height) 3))
878            (name   (car (last (split-string parent "/" t))))
879            (eshell-name (concat "*eshell: " name "*")))
880       (split-window-vertically (- height))
881       (other-window 1)
882       (if (get-buffer eshell-name)
883           (progn
884             (message "buffer exist")
885             (switch-to-buffer eshell-name))
886         (progn
887           (eshell "new")
888           (rename-buffer eshell-name)
889
890           (insert (concat "ls"))
891           (eshell-send-input)))))
892
893   ;; (global-set-key (kbd "M-`") (lambda ()
894   ;;                               (interactive)
895   ;;                               (if (buffer-name))))
896
897 #+END_SRC
898
899 * Misc Settings
900
901 ** [[https://github.com/abo-abo/hydra][Hydra]]
902
903 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
904
905   (use-package hydra
906     :ensure t)
907
908 #+END_SRC
909
910 *** Font Zoom
911
912 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
913
914   (defhydra sd/font-zoom (global-map "<f2>")
915     "zoom"
916     ("g" text-scale-increase "in")
917     ("l" text-scale-decrease "out"))
918
919 #+END_SRC
920
921 *** Windmove Splitter
922
923 Refer [[https://github.com/abo-abo/hydra/blob/master/hydra-examples.el][hydra-example]], to enlarge or shrink the windows splitter
924
925 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
926
927   (defun hydra-move-splitter-left (arg)
928     "Move window splitter left."
929     (interactive "p")
930     (if (let ((windmove-wrap-around))
931           (windmove-find-other-window 'right))
932         (shrink-window-horizontally arg)
933       (enlarge-window-horizontally arg)))
934
935   (defun hydra-move-splitter-right (arg)
936     "Move window splitter right."
937     (interactive "p")
938     (if (let ((windmove-wrap-around))
939           (windmove-find-other-window 'right))
940         (enlarge-window-horizontally arg)
941       (shrink-window-horizontally arg)))
942
943   (defun hydra-move-splitter-up (arg)
944     "Move window splitter up."
945     (interactive "p")
946     (if (let ((windmove-wrap-around))
947           (windmove-find-other-window 'up))
948         (enlarge-window arg)
949       (shrink-window arg)))
950
951   (defun hydra-move-splitter-down (arg)
952     "Move window splitter down."
953     (interactive "p")
954     (if (let ((windmove-wrap-around))
955           (windmove-find-other-window 'up))
956         (shrink-window arg)
957       (enlarge-window arg)))
958
959 #+END_SRC
960
961 *** hydra-window
962
963 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
964
965   (winner-mode 1)
966
967   (defhydra sd/hydra-window (:color red :columns nil)
968     "window"
969     ("h" windmove-left nil)
970     ("j" windmove-down nil)
971     ("k" windmove-up nil)
972     ("l" windmove-right nil)
973     ("H" hydra-move-splitter-left nil)
974     ("J" hydra-move-splitter-down nil)
975     ("K" hydra-move-splitter-up nil)
976     ("L" hydra-move-splitter-right nil)
977     ("v" (lambda ()
978            (interactive)
979            (split-window-right)
980            (windmove-right))
981      "vert")
982     ("x" (lambda ()
983            (interactive)
984            (split-window-below)
985            (windmove-down))
986      "horz")
987     ("o" delete-other-windows "one" :exit t)
988     ("a" ace-window "ace")
989     ("s" ace-swap-window "swap")
990     ("d" ace-delete-window "ace-one" :exit t)
991     ("i" ace-maximize-window "ace-one" :exit t)
992     ("b" ido-switch-buffer "buf")
993     ("m" headlong-bookmark-jump "bmk")
994     ("q" nil "cancel")
995     ("u" (progn (winner-undo) (setq this-command 'winner-undo)) "undo")
996     ("r" (progn (winner-redo) (setq this-command 'winner-redo)) "redo")
997     ("f" nil))
998
999   (global-unset-key (kbd "M-o"))
1000   (global-set-key (kbd "M-o") 'sd/hydra-window/body)
1001
1002   (defun triggle-windows-max-size ()
1003     (interactive)
1004     (if (> (length (window-list)) 1)
1005         (delete-other-windows)
1006       (winner-undo)))
1007
1008 #+END_SRC
1009
1010 ** Line Number
1011
1012 Enable linum mode on programming modes
1013
1014 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
1015
1016   (add-hook 'prog-mode-hook 'linum-mode)
1017
1018 #+END_SRC
1019
1020 Fix the font size of line number
1021
1022 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
1023
1024   (defun fix-linum-size ()
1025        (interactive)
1026        (set-face-attribute 'linum nil :height 110))
1027
1028   (add-hook 'linum-mode-hook 'fix-linum-size)
1029
1030 #+END_SRC
1031
1032 I like [[https://github.com/coldnew/linum-relative][linum-relative]], just like the =set relativenumber= on =vim=
1033
1034 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
1035
1036   (use-package linum-relative
1037     :ensure t
1038     :config
1039     (defun linum-new-mode ()
1040       "If line numbers aren't displayed, then display them.
1041   Otherwise, toggle between absolute and relative numbers."
1042       (interactive)
1043       (if linum-mode
1044           (linum-relative-toggle)
1045         (linum-mode 1)))
1046
1047     :bind
1048     ("A-k" . linum-new-mode))
1049
1050   ;; auto enable linum-new-mode in programming modes
1051   (add-hook 'prog-mode-hook 'linum-relative-mode)
1052
1053 #+END_SRC
1054
1055 ** Save File Position
1056
1057 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
1058
1059   (require 'saveplace)
1060   (setq-default save-place t)
1061   (setq save-place-forget-unreadable-files t)
1062   (setq save-place-skip-check-regexp "\\`/\\(?:cdrom\\|floppy\\|mnt\\|/[0-9]\\|\\(?:[^@/:]*@\\)?[^@/:]*[^@/:.]:\\)")
1063
1064 #+END_SRC
1065
1066 ** Multi-term
1067
1068 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
1069
1070   (use-package multi-term
1071     :ensure t)
1072
1073 #+END_SRC
1074
1075 ** ace-link
1076
1077 [[https://github.com/abo-abo/ace-link][ace-link]] is a package written by [[https://github.com/abo-abo][Oleh Krehel]]. It is convenient to jump to link in help mode, info-mode, etc
1078 Type =o= to go to the link
1079
1080 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
1081
1082   (use-package ace-link
1083     :ensure t
1084     :init
1085     (ace-link-setup-default))
1086
1087 #+END_SRC
1088
1089 ** Emux
1090
1091 [[https://github.com/re5et/emux][emux]] is 
1092
1093 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
1094
1095   (el-get-bundle re5et/emux)
1096
1097 #+END_SRC
1098
1099 ** Smart Parens
1100
1101 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
1102
1103   (use-package smartparens
1104     :ensure t
1105     :config
1106     (progn
1107       (require 'smartparens-config)
1108       (add-hook 'prog-mode-hook 'smartparens-mode)))
1109
1110 #+END_SRC
1111
1112 ** Ace-Windows
1113
1114 [[https://github.com/abo-abo/ace-window][ace-window]] 
1115
1116 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
1117
1118   (use-package ace-window
1119     :ensure t
1120     :defer t
1121   ;  :init
1122   ;  (global-set-key (kbd "M-o") 'ace-window)
1123     :config
1124     (setq aw-keys '(?a ?s ?d ?f ?j ?k ?l)))
1125
1126 #+END_SRC
1127
1128 ** Projectile
1129
1130 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
1131
1132   (use-package projectile
1133     :ensure t
1134     :init
1135     (setq projectile-enable-caching t)
1136     :config
1137     (projectile-global-mode t))
1138
1139   (use-package persp-projectile
1140     :ensure t
1141     :config
1142     (persp-mode)
1143     :bind
1144     (:map projectile-mode-map
1145           ("s-t" . projectile-persp-switch-project)))
1146
1147   ;; projectile-find-file
1148   ;; projectile-switch-buffer
1149   ;; projectile-find-file-other-window
1150 #+END_SRC
1151
1152 ** Which key
1153
1154 [[https://github.com/justbur/emacs-which-key][which-key]] show the key bindings 
1155
1156 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
1157
1158   (use-package which-key
1159     :ensure t
1160     :config
1161     (which-key-mode))
1162
1163 #+END_SRC
1164
1165 ** Emms
1166
1167 We can use [[https://www.gnu.org/software/emms/quickstart.html][Emms]] for multimedia in Emacs
1168
1169 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
1170
1171   (use-package emms
1172     :ensure t
1173     :init
1174     (setq emms-source-file-default-directory "~/Music/emms/")
1175     :config
1176     (emms-standard)
1177     (emms-default-players)
1178     (define-emms-simple-player mplayer '(file url)
1179       (regexp-opt '(".ogg" ".mp3" ".mgp" ".wav" ".wmv" ".wma" ".ape"
1180                     ".mov" ".avi" ".ogm" ".asf" ".mkv" ".divx" ".mpeg"
1181                     "http://" "mms://" ".rm" ".rmvb" ".mp4" ".flac" ".vob"
1182                     ".m4a" ".flv" ".ogv" ".pls"))
1183       "mplayer" "-slave" "-quiet" "-really-quiet" "-fullscreen")
1184     (emms-history-load))
1185
1186 #+END_SRC
1187
1188 ** GnoGo
1189
1190 Play Go in Emacs, gnugo xpm refert [[https://github.com/okanotor/dotemacs/blob/f95b774cb292d1169748bc0a62ba647bbd8c0652/etc/my-inits/my-inits-gnugo.el][to here]]. start at image display mode and grid mode
1191
1192 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
1193
1194   (use-package gnugo
1195     :ensure t
1196     :defer t
1197     :init
1198     (require 'gnugo-imgen)
1199     (setq gnugo-xpms 'gnugo-imgen-create-xpms)
1200     (add-hook 'gnugo-start-game-hook '(lambda ()
1201                                         (gnugo-image-display-mode)
1202                                         (gnugo-grid-mode)))
1203       :config
1204     (add-to-list 'gnugo-option-history (format "--boardsize 19 --color black --level 1")))
1205
1206 #+END_SRC
1207
1208 ** undo-tree
1209
1210 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
1211
1212   (use-package undo-tree
1213     :ensure t
1214     :config
1215     (global-undo-tree-mode 1))
1216
1217 #+END_SRC
1218
1219 ** swiper
1220
1221 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
1222
1223   (use-package swiper
1224     :ensure t)
1225
1226
1227   (ivy-mode 1)
1228   (setq ivy-use-virtual-buffers t)
1229   (global-set-key "\C-s" 'swiper)
1230   (global-set-key (kbd "C-c C-r") 'ivy-resume)
1231   (global-set-key (kbd "<f6>") 'ivy-resume)
1232   ;; (global-set-key (kbd "M-x") 'counsel-M-x)
1233   ;; (global-set-key (kbd "C-x C-f") 'counsel-find-file)
1234   (global-set-key (kbd "<f1> f") 'counsel-describe-function)
1235   (global-set-key (kbd "<f1> v") 'counsel-describe-variable)
1236   (global-set-key (kbd "<f1> l") 'counsel-load-library)
1237   (global-set-key (kbd "<f2> i") 'counsel-info-lookup-symbol)
1238   (global-set-key (kbd "<f2> u") 'counsel-unicode-char)
1239   (global-set-key (kbd "C-c g") 'counsel-git)
1240   (global-set-key (kbd "C-c j") 'counsel-git-grep)
1241   (global-set-key (kbd "C-c k") 'counsel-ag)
1242   (global-set-key (kbd "C-x l") 'counsel-locate)
1243   (global-set-key (kbd "C-S-o") 'counsel-rhythmbox)
1244   ;; (define-key read-expression-map (kbd "C-r") 'counsel-expression-history)
1245
1246 #+END_SRC
1247
1248 ** Tabbar
1249
1250 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
1251
1252   ;; (use-package tabbar-ruler
1253   ;;   :ensure t
1254   ;;   :init
1255   ;;   (setq tabbar-ruler-global-tabbar t)
1256   ;;   (setq tabbar-ruler-global-ruler t)
1257   ;;   (setq tabbar-ruler-popu-menu t)
1258   ;;   (setq tabbar-ruler-popu-toolbar t)
1259   ;;   (setq tabbar-use-images t)
1260   ;;   :config
1261   ;;   (tabbar-ruler-group-by-projectile-project)
1262   ;;   (global-set-key (kbd "s-1") 'tabbar-forward-group)
1263   ;;   (global-set-key (kbd "s-2") 'tabbar-ruler-forward))
1264
1265 #+END_SRC
1266
1267 * Programming
1268
1269 ** Languages
1270
1271 *** Emacs Lisp
1272
1273 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
1274
1275   (use-package color-identifiers-mode
1276     :ensure t
1277     :init
1278     (add-hook 'emacs-lisp-mode-hook 'color-identifiers-mode)
1279
1280     :diminish color-identifiers-mode)
1281
1282   (global-prettify-symbols-mode t)
1283
1284 #+END_SRC
1285
1286 **** Lispy Mode
1287
1288 In Lisp Mode, =M-o= is defined, but I use this for global hydra window. So here disable this key
1289 bindings in =lispy-mode-map= after loaded. see [[http://stackoverflow.com/questions/298048/how-to-handle-conflicting-keybindings][here]]
1290
1291 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
1292
1293   (use-package lispy
1294     :ensure t
1295     :init
1296     (eval-after-load 'lispy
1297       '(progn
1298          (define-key lispy-mode-map (kbd "M-o") nil)))
1299     :config
1300     (add-hook 'emacs-lisp-mode-hook (lambda () (lispy-mode 1))))
1301
1302 #+END_SRC
1303
1304 *** Perl
1305
1306 [[https://www.emacswiki.org/emacs/CPerlMode][CPerl mode]] has more features than =PerlMode= for perl programming. Alias this to =CPerlMode=
1307
1308 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
1309
1310   (defalias 'perl-mode 'cperl-mode)
1311
1312   ;(setq cperl-hairy t) ;; Turns on most of the CPerlMode options
1313   (setq cperl-auto-newline t)
1314   (setq cperl-highlight-variables-indiscriminately t)
1315   ;(setq cperl-indent-level 4)
1316   ;(setq cperl-continued-statement-offset 4)
1317   (setq cperl-close-paren-offset -4)
1318   (setq cperl-indent-parents-as-block t)
1319   (setq cperl-tab-always-indent t)
1320   ;(setq cperl-brace-offset  0)
1321
1322   (add-hook 'cperl-mode-hook
1323             '(lambda ()
1324                (cperl-set-style "C++")))
1325
1326   ;(require 'template)
1327   ;(template-initialize)
1328   ;(require 'perlnow)
1329
1330 #+END_SRC
1331
1332 - auto insert
1333 - run script 
1334
1335 Change the compile-command to set the default command run when call =compile=
1336 Mapping =s-r= (on Mac, it's =Command + R= to run the script. Here =current-prefix-arg= is set
1337 to call =compilation=  interactively.
1338
1339 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
1340
1341   (defun my-perl-hook ()
1342     (progn
1343       (setq-local compilation-read-command nil)
1344       (set (make-local-variable 'compile-command)
1345            (concat "/usr/bin/perl "
1346                    (if buffer-file-name
1347                        (shell-quote-argument buffer-file-name))))
1348       (local-set-key (kbd "s-r")
1349                        (lambda ()
1350                          (interactive)
1351   ;                       (setq current-prefix-arg '(4)) ; C-u
1352                          (call-interactively 'compile)))))
1353
1354   (add-hook 'cperl-mode-hook 'my-perl-hook)
1355
1356
1357 #+END_SRC
1358
1359 *** C & C++
1360
1361 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
1362
1363   (setq c-default-style "stroustrup"
1364         c-basic-offset 4)
1365
1366 #+END_SRC
1367
1368 ** Compile
1369
1370 Set the environments vairables in compilation mode
1371
1372 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
1373
1374   (use-package compile
1375     :commands compile
1376     :config
1377     (setq compilation-environment (cons "LC_ALL=C" compilation-environment)))
1378
1379 #+END_SRC
1380
1381 ** Auto-Insert
1382
1383 Enable auto-insert mode
1384
1385 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
1386
1387   (auto-insert-mode t)
1388   (setq auto-insert-query nil)
1389
1390 #+END_SRC
1391
1392 *** C++ Auto Insert
1393
1394 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
1395
1396   (eval-after-load 'autoinsert
1397     '(define-auto-insert '("\\.cpp\\'" . "C++ skeleton")
1398        '(
1399          "Short description:"
1400          "/*"
1401          "\n * " (file-name-nondirectory (buffer-file-name))
1402          "\n */" > \n \n
1403          "#include <iostream>" \n
1404          "#include \""
1405          (file-name-sans-extension
1406           (file-name-nondirectory (buffer-file-name)))
1407          ".hpp\"" \n \n
1408          "using namespace std;" \n \n
1409          "int main ()"
1410          "\n{" \n 
1411          > _ \n
1412          "return 1;"
1413          "\n}" > \n
1414          )))
1415
1416   (eval-after-load 'autoinsert
1417     '(define-auto-insert '("\\.c\\'" . "C skeleton")
1418        '(
1419          "Short description:"
1420          "/*\n"
1421          " * " (file-name-nondirectory (buffer-file-name)) "\n"
1422          " */" > \n \n
1423          "#include <stdio.h>" \n
1424          "#include \""
1425          (file-name-sans-extension
1426           (file-name-nondirectory (buffer-file-name)))
1427          ".h\"" \n \n
1428          "int main ()\n"
1429          "{" \n
1430          > _ \n
1431          "return 1;\n"
1432          "}" > \n
1433          )))
1434        
1435 #+END_SRC
1436
1437 *** Perl Auto Insert
1438
1439 Refer [[https://www.emacswiki.org/emacs/AutoInsertMode][AutoInsertMode]] Wiki
1440
1441 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
1442
1443   (eval-after-load 'autoinsert
1444     '(define-auto-insert '("\\.pl\\'" . "Perl skeleton")
1445        '(
1446          "Description: "
1447          "#!/usr/bin/perl -w" \n
1448          \n
1449          "use strict;" \n \n
1450          )))
1451
1452 #+END_SRC
1453
1454 ** Completion
1455
1456 company mode
1457
1458 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
1459
1460   (use-package company
1461     :ensure t
1462     :diminish company-mode
1463     :init (setq company-idle-delay 0.1)
1464     :config
1465     (global-company-mode))
1466
1467 #+END_SRC
1468
1469 [[https://github.com/company-mode/company-statistics][company-statistics]]
1470
1471 #+BEGIN_SRC emacs-lisp :tangle yes :results silent
1472
1473   (use-package company-statistics
1474     :ensure t
1475     :config
1476     (company-statistics-mode))
1477
1478 #+END_SRC
1479
1480 * Todo 
1481
1482 - change M-o to trigger to delete other windows and restore previous config
1483