(setq exec-path (append exec-path '("/Library/TeX/texbin/")))
#+END_SRC
-Set the emacs load path
-#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- ;; (add-to-list 'load-path "~/.emacs.d/elisp")
-#+END_SRC
-
** Package Initialization
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
(require 'package)
(package-initialize)
#+END_SRC
+** My constant
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (defconst my-name "Peng Li")
+ (defconst my-email "seudut@gmail.com")
+#+END_SRC
+
** General Setting
*** scroll bar, tool-bar and menu-bar
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- (scroll-bar-mode 0)
- (tool-bar-mode 0)
- (menu-bar-mode 1)
+ (if (display-graphic-p)
+ (progn
+ (scroll-bar-mode 0)
+ (tool-bar-mode 0)
+ (menu-bar-mode 1))
+ (menu-bar-mode 0))
- ;; (setq debug-on-error t)
+ (setq debug-on-error t)
(setq inhibit-startup-message t)
(defalias 'yes-or-no-p 'y-or-n-p)
:ensure t)
#+END_SRC
-* Mac Specific
-#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- ;; (defconst *is-a-mac* (eq system-type 'darwin))
- ;; (setq mouse-wheel-scroll-amount '(1
- ;; ((shift) . 5)
- ;; ((control))))
-
-
- ;; (setq-default indicate-empty-lines t)
-#+END_SRC
-
* Color and Fonts Settings
** highlight current line
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
#+END_SRC
** Smart Comments
-
[[https://github.com/paldepind/smart-comment][smart-comments]]
-
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
(use-package smart-comment
:ensure t
:bind ("M-;" . smart-conmment))
-
#+END_SRC
** Font Setting
-syntax highlighting
+*** syntax highlighting
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
(global-font-lock-mode 1)
#+END_SRC
-[[https://github.com/i-tu/Hasklig][Hasklig]] and Source Code Pro, defined fonts family
+*** [[https://github.com/i-tu/Hasklig][Hasklig]] and Source Code Pro, defined fonts family
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
(if window-system
(defvar sd/fixed-font-family
(cond ((x-list-fonts "Hasklig") "Hasklig")
- ((x-list-fonts "Source Code Pro") "Source Code Pro:weight")
+ ((x-list-fonts "Source Code Pro") "Source Code Pro:weight") ;; weigth=light
((x-list-fonts "Anonymous Pro") "Anonymous Pro")
((x-list-fonts "M+ 1mn") "M+ 1mn"))
"The fixed width font based on what is installed, `nil' if not defined."))
#+END_SRC
-Setting the fonts
+Setting the fonts alignment issue
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
(if window-system
(when sd/fixed-font-family
(set-frame-font sd/fixed-font-family)
- (set-face-attribute 'default nil :font sd/fixed-font-family :height 130)
+ (set-face-attribute 'default nil :font sd/fixed-font-family :height 140)
(set-face-font 'default sd/fixed-font-family)))
#+END_SRC
+*** Chinese fonts
+Fix the font alignment issue when both Chinese and English hybird in org-mode table. Refer [[http://coldnew.github.io/blog/2013/11-16_d2f3a/][解決 org-mode 表格內中英文對齊的問題]]
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (defvar emacs-english-font "Source Code Pro" "The font name of English.")
+
+ (defvar emacs-cjk-font "STHeiti" "The font name for CJK.")
+
+ (defvar emacs-font-size-pair '(13 . 16) "Default font size pair for (english . chinese)")
+
+ (defvar emacs-font-size-pair-list
+ '(( 5 . 6) (10 . 12)
+ (11 . 14) (12 . 14)
+ (13 . 16) (14 . 16) (15 . 18) (16 . 20) (17 . 20)
+ (18 . 22) (19 . 22) (20 . 24) (21 . 26)
+ (24 . 28) (26 . 32) (28 . 34)
+ (30 . 36) (34 . 40) (36 . 44))
+ "This list is used to store matching (englis . chinese) font-size.")
+
+ (defun font-exist-p (fontname)
+ "Test if this font is exist or not."
+ (if (or (not fontname) (string= fontname ""))
+ nil
+ (if (not (x-list-fonts fontname)) nil t)))
+
+ (defun set-font (english chinese size-pair)
+ "Setup emacs English and Chinese font on x window-system."
+ (if (font-exist-p english)
+ (set-frame-font (format "%s:pixelsize=%d" english (car size-pair)) t))
+ (if (font-exist-p chinese)
+ (dolist (charset '(han cjk-misc) ;; '(kana han symbol cjk-misc bopomofo)
+ )
+ (set-fontset-font (frame-parameter nil 'font) charset
+ (font-spec :family chinese :size (cdr size-pair))))))
+
+ (defun emacs-step-font-size (step)
+ "Increase/Decrease emacs's font size."
+ (let ((scale-steps emacs-font-size-pair-list))
+ (if (< step 0) (setq scale-steps (reverse scale-steps)))
+ (setq emacs-font-size-pair
+ (or (cadr (member emacs-font-size-pair scale-steps))
+ emacs-font-size-pair))
+ (when emacs-font-size-pair
+ (message "emacs font size set to %.1f" (car emacs-font-size-pair))
+ (set-font emacs-english-font emacs-cjk-font emacs-font-size-pair))))
+
+ (defun increase-emacs-font-size ()
+ "Decrease emacs's font-size acording emacs-font-size-pair-list."
+ (interactive) (emacs-step-font-size 1))
+
+ (defun decrease-emacs-font-size ()
+ "Increase emacs's font-size acording emacs-font-size-pair-list."
+ (interactive) (emacs-step-font-size -1))
+#+END_SRC
+
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ ;; Setup font size based on emacs-font-size-pair
+ ;; (if window-system
+ ;; (set-font emacs-english-font emacs-cjk-font '(13 . 16)))
+
+
+ ;; (global-set-key (kbd "s-=") 'increase-emacs-font-size)
+ ;; (global-set-key (kbd "s--") 'decrease-emacs-font-size)
+
+ ;; set different fonts (chinese) size for org-mode.
+ (defun sd/org-buffer-font ()
+ "My font setting for org-mode"
+ (interactive)
+ (setq buffer-face-mode-face '(:family "Source Sans Code" :height 160))
+ (buffer-face-mode))
+
+ ;; (add-hook 'org-mode-hook 'sd/org-buffer-font)
+#+END_SRC
+
** Color Theme
Loading theme should be after all required loaded, refere [[https://github.com/jwiegley/use-package][:defer]] in =use-package=
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
(setq vc-follow-symlinks t)
+ (use-package molokai-theme
+ :ensure t)
(use-package color-theme
:ensure t
** cusor color
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- (set-cursor-color 'red)
+ (if (display-graphic-p)
+ (set-cursor-color 'red))
#+END_SRC
* Mode-line
'("%e"
(:eval
(let* ((active (powerline-selected-window-active))
- (mode-line-buffer-id (if active 'sd/mode-line-buffer-id 'mode-line-buffer-id-inactive))
+ ;; (mode-line-buffer-id (if active 'sd/mode-line-buffer-id 'mode-line-buffer-id-inactive))
+ (mode-line-buffer-id (if active 'sd/mode-line-buffer-id 'powerline-inactive1))
(mode-line (if active 'mode-line 'mode-line-inactive))
(my-face1 (if active 'sd/powerline-active1 'powerline-inactive1))
(my-face-buffer-modified (if (and (sd/buffer-is-eshel-or-scratch) (buffer-modified-p) (not buffer-read-only))
set height in mode line
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- (set-variable 'powerline-height 14)
- (set-variable 'powerline-text-scale-factor (/ (float 100) 140))
- ;; (custom-set-variables
- ;; '(powerline-height 14)
- ;; '(powerline-text-scale-factor (/ (float 100) 140)))
- ;; 100/140;0.8
- (set-face-attribute 'mode-line nil :height 100)
+ (defconst sd/mode-line-font-heigh 100
+ "Defaulet the fontsize on mode line.")
+
+ (with-eval-after-load "powerline"
+ (when (display-graphic-p)
+ (set-face-attribute 'mode-line-inactive nil :height sd/mode-line-font-heigh)
+ (set-face-attribute 'mode-line nil :height sd/mode-line-font-heigh)
+ (let* ((base-font-size (face-attribute 'default :height)))
+ ;; 100/140;0.8
+ (set-variable 'powerline-height (/ base-font-size 10))
+ (set-variable 'powerline-text-scale-factor (/ (float sd/mode-line-font-heigh) base-font-size)))))
#+END_SRC
* IDO & SMEX
;; (set-face-attribute 'ivy-current-match nil :background "Orange" :foreground "black")
(define-key read-expression-map (kbd "C-r") 'counsel-expression-history)
(global-set-key (kbd "C-c C-r") 'ivy-resume))
-
-
-
- ;; (global-set-key "\C-s" 'swiper)
- ;; (global-set-key (kbd "<f6>") 'ivy-resume)
- ;; ;; (global-set-key (kbd "C-x C-f") 'counsel-find-file)
- ;; (global-set-key (kbd "<f1> l") 'counsel-load-library)
- ;; (global-set-key (kbd "<f2> i") 'counsel-info-lookup-symbol)
- ;; (global-set-key (kbd "<f2> 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)
-
- ;; (set-face-attribute
- ;; 'ivy-current-match nil
- ;; :background "Orange"
- ;; :foreground "black")
-
- ;; ivy-resume
- ;; (define-key swiper-map (kbd "M-%") 'swiper-aa-replace)
#+END_SRC
** helm
(setq org-confirm-babel-evaluate nil)
(setq org-use-speed-commands t)
(setq org-completion-use-ido t)
- (setq org-startup-with-inline-images t))
-
- (org-babel-do-load-languages
- 'org-babel-load-languages
- '((python . t)
- (C . t)
- (perl . t)
- (calc . t)
- (latex . t)
- (java . t)
- (ruby . t)
- (lua . t)
- (lisp . t)
- (scheme . t)
- (sh . t)
- (sqlite . t)
- (js . t)
- (gnuplot . t)
- (ditaa . t)))
+ (setq org-startup-with-inline-images t)
+ ;; latex preview
+ ;; (setq org-startup-with-latex-preview t)
+ ;; (setq org-format-latex-options (plist-put org-format-latex-options :scale 1.2))
+ (require 'org-habit)
+ (add-to-list 'org-modules 'org-habit)
+ (setq org-habit-graph-column 50)
+ (setq org-hide-emphasis-markers t)
+ (setq org-html-validation-link nil)
+ ;; open link when return clicked
+ (setq org-return-follows-link t)
+ ;; open the ppt file by external open instead of emacs
+ (add-to-list 'org-file-apps '("\\.pptx" . "open %s"))
+ (add-to-list 'org-file-apps '("\\.doc" . "open %s"))
+ (setq org-image-actual-width nil))
+#+END_SRC
+
+
+** Org babel
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (el-get-bundle hasu/emacs-ob-racket
+ :features ob-racket)
+
+ ;; Lua support
+ ;(use-package ob-lua
+ ; :ensure t)
;; use current window for org source buffer editting
- (setq org-src-window-setup 'current-window )
+ (setq org-src-window-setup 'current-window )
(define-key org-mode-map (kbd "C-'") nil)
;; C-M-i is mapped to imenu globally
(define-key org-mode-map (kbd "C-M-i") nil)
-
;; set the ditta.jar path
+
(setq org-ditaa-jar-path "/usr/local/Cellar/ditaa/0.9/libexec/ditaa0_9.jar")
(unless
(file-exists-p org-ditaa-jar-path)
- (error "seudut: ditaa.jar not found at %s " org-ditaa-jar-path))
+ (warn "seudut: ditaa.jar not found at %s " org-ditaa-jar-path))
+
+ (org-babel-do-load-languages 'org-babel-load-languages
+ '((python . t)
+ (C . t)
+ (perl . t)
+ (calc . t)
+ (latex . t)
+ (java . t)
+ (ruby . t)
+ ; (lua . t)
+ (lisp . t)
+ (scheme . t)
+ (racket . t)
+ (sh . t)
+ (sqlite . t)
+ (js . t)
+ (gnuplot . t)
+ (ditaa . t)
+ (plantuml . t)))
+
+
+ ;; toggle image preview
+ (add-hook 'org-babel-after-execute-hook 'sd/display-inline-images 'append)
+
+ (defun sd/display-inline-images ()
+ (condition-case nil
+ (org-display-inline-images)
+ (error nil)))
+
+ ;; ditaa artist mode
+ (with-eval-after-load "artist"
+ (define-key artist-mode-map [down-mouse-3] 'artist-mouse-choose-operation))
+#+END_SRC
+*** plantUML
+[[http://eschulte.github.io/babel-dev/DONE-integrate-plantuml-support.html][DONE-integrate-plantuml-support]]
+#+BEGIN_SRC sh
+ ## support plantuml
+ brew install plantuml
+#+END_SRC
- ;; Lua support
- (use-package ob-lua
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (use-package plantuml-mode
:ensure t)
+
+ (setq org-plantuml-jar-path
+ (expand-file-name "/usr/local/Cellar/plantuml/8041/plantuml.8041.jar"))
+
+ (set-variable 'plantuml-jar-path
+ (expand-file-name "/usr/local/Cellar/plantuml/8041/plantuml.8041.jar"))
#+END_SRC
** Org-bullets
(setq org-bullets-bullet-list '("⦿" "✪" "◉" "○" "►" "◆"))
;; increase font size when enter org-src-mode
- (add-hook 'org-src-mode-hook (lambda () (text-scale-increase 2)))
+ ;; (add-hook 'org-src-mode-hook (lambda () (text-scale-increase 2)))
+
+ ;; define a face for org-bullets
+ (defface org-bullet-face
+ '((t (:foreground "green yellow")))
+ "Face used for the org-bullets.")
+ (setq org-bullets-face-name (quote org-bullet-face))
+ (set-face-attribute 'org-bullet-face t :foreground "burlywood" :weight 'normal :height 1.6)
#+END_SRC
** Worf Mode
(use-package worf
:ensure t
:commands worf-mode
- :init (add-hook 'org-mode-hook 'worf-mode))
+ :init
+ (require 'ivy)
+ (add-hook 'org-mode-hook 'worf-mode))
#+END_SRC
** Get Things Done
"~/org/work.org")))
;; only show today's tasks in agenda view
- (setq org-agenda-span 'day)
+ ;; (setq org-agenda-span 'day)
;; Use current windows for agenda view
- (setq org-agenda-window-setup 'current-window)
+ ;; (setq org-agenda-window-setup 'current-window)
;; show all feature entries for repeating tasks,
;; this is already setting by default
#+END_SRC
+** Export Html
+Color higlight the source code block in exported html, [[http://stackoverflow.com/questions/24082430/org-mode-no-syntax-highlighting-in-exported-html-page][org-mode-no-syntax-highlighting-in-exported-html-page]]
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (use-package htmlize
+ :ensure t)
+#+END_SRC
+
** Org structure template
extend org-mode's easy templates, refer to [[http://coldnew.github.io/coldnew-emacs/#orgheadline94][Extend org-modes' esay templates]]
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- (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 :results output replace\n?\n#+END_SRC"))
- (add-to-list 'org-structure-template-alist
- '("p" "#+BEGIN_SRC plantuml :file uml.png \n?\n#+END_SRC"))
- (add-to-list 'org-structure-template-alist
- '("P" "#+BEGIN_SRC perl \n?\n#+END_SRC"))
- (add-to-list 'org-structure-template-alist
- '("f" "#+BEGIN_SRC fundamental :tangle ?\n\n#+END_SRC"))
+ ;; ‘s’ ‘#+BEGIN_SRC ... #+END_SRC’
+ ;; ‘e’ ‘#+BEGIN_EXAMPLE ... #+END_EXAMPLE’
+ ;; ‘q’ ‘#+BEGIN_QUOTE ... #+END_QUOTE’
+ ;; ‘v’ ‘#+BEGIN_VERSE ... #+END_VERSE’
+ ;; ‘c’ ‘#+BEGIN_CENTER ... #+END_CENTER’
+ ;; ‘l’ ‘#+BEGIN_LaTeX ... #+END_LaTeX’
+ ;; ‘L’ ‘#+LaTeX:’
+ ;; ‘h’ ‘#+BEGIN_HTML ... #+END_HTML’
+ ;; ‘H’ ‘#+HTML:’
+ ;; ‘a’ ‘#+BEGIN_ASCII ... #+END_ASCII’
+ ;; ‘A’ ‘#+ASCII:’
+ ;; ‘i’ ‘#+INDEX:’ line
+ ;; ‘I’ ‘#+INCLUDE:’ line
+
+
+ (add-to-list 'org-structure-template-alist
+ '("E" "#+BEGIN_SRC emacs-lisp :tangle yes :results silent\n?\n#+END_SRC"))
+ (add-to-list 'org-structure-template-alist
+ '("R" "#+BEGIN_SRC racket :tangle no :results output replace\n?\n#+END_SRC"))
+ (add-to-list 'org-structure-template-alist
+ '("S" "#+BEGIN_SRC sh :results output replace\n?\n#+END_SRC"))
+ (add-to-list 'org-structure-template-alist
+ '("p" "#+BEGIN_SRC plantuml :file uml.png \n?\n#+END_SRC"))
+ (add-to-list 'org-structure-template-alist
+ '("P" "#+BEGIN_SRC perl \n?\n#+END_SRC"))
+ (add-to-list 'org-structure-template-alist
+ '("f" "#+BEGIN_SRC fundamental :tangle ?\n\n#+END_SRC"))
+ (add-to-list 'org-structure-template-alist
+ '("C" "#+BEGIN_SRC c :tangle ?\n\n#+END_SRC"))
+ (add-to-list 'org-structure-template-alist
+ '("m" "\\begin{equation}\n?\n\\end{equation}"))
+ (add-to-list 'org-structure-template-alist
+ '("b" "#+STARTUP: showall
+ ,#+STARTUP: inlineimages
+ ,#+OPTIONS: toc:nil\n"))
+ (add-to-list 'org-structure-template-alist
+ '("d" "#+BEGIN_SRC ditaa :file ? :cmdline -r -s 0.8 :cache yes \n\n#+END_SRC"))
+ (add-to-list 'org-structure-template-alist
+ '("u" "#+BEGIN_SRC plantuml :file ? \n\n#+END_SRC"))
+
+#+END_SRC
+
+** Org theme
+*** variable-pitch-mode and fixed-pitch-mode
+[[https://yoo2080.wordpress.com/2013/05/30/monospace-font-in-tables-and-source-code-blocks-in-org-mode-proportional-font-in-other-parts/][monospace font in tables and source code blocks in org-mode, proportional font in other parts]]
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ ;; check if the fonts are available
+ (unless (find-font (font-spec :name "Ubuntu Mono"))
+ (warn "Font not found Ubuntu Mono"))
+ (unless (find-font (font-spec :name "Source Code Pro"))
+ (warn "Font not found Source Code Pro"))
+ (unless (find-font (font-spec :name "Source Sans Pro"))
+ (warn "Font not found Source Sans Pro"))
+
+ (set-face-attribute 'variable-pitch nil :font "Source Sans Pro" :height 160)
+ (set-face-attribute 'fixed-pitch nil :font "Source Code Pro" :height (face-attribute 'default :height))
+
+ (add-hook 'text-mode-hook 'variable-pitch-mode)
+
+ ;; Install Ubuntu Mono fonts and apply it in org-table to align Chinese fonts
+ (with-eval-after-load "org"
+ (mapc (lambda (face)
+ (set-face-attribute face nil :inherit 'fixed-pitch))
+ (list 'org-code 'org-block 'org-block-background))
+ (set-face-attribute 'org-table nil :family "Ubuntu Mono" :height 140)
+ ;; org-special-keyword inherited from font-lock-keywork originally; as org is changed to variable-pitch, it cause
+ ;; the font in special-keywords are not monospace
+ (set-face-attribute 'org-special-keyword nil :inherit '(font-lock-keyword-face fixed-pitch))
+ ;; same as above
+ (set-face-attribute 'org-verbatim nil :inherit '(shadow fixed-pitch))
+
+ ;; fix indent broken by variable-pitch-mode
+ ;; http://emacs.stackexchange.com/questions/26864/variable-pitch-face-breaking-indentation-in-org-mode
+ (require 'org-indent)
+ (set-face-attribute 'org-indent nil :inherit '(org-hide fixed-pitch)))
+#+END_SRC
+
+Also correct the face of =org-meta-line= in =org-table=
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (with-eval-after-load "org"
+ (set-face-attribute 'org-meta-line nil :font "Source Code Pro" :height 120 :slant 'italic :inherit 'font-lock-comment-face))
#+END_SRC
+*** Org-head face
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (with-eval-after-load "org"
+ (let* ((base-height (face-attribute 'variable-pitch :height))
+ (base-font-color (face-foreground 'default nil 'default)))
+ (set-face-attribute 'org-document-title nil :weight 'bold :height (+ 60 base-height))
+ (set-face-attribute 'org-level-1 nil :weight 'bold :height (+ 40 base-height))
+ (set-face-attribute 'org-level-2 nil :weight 'bold :height (+ 30 base-height))
+ (set-face-attribute 'org-level-3 nil :weight 'bold :height (+ 20 base-height))
+ (set-face-attribute 'org-level-4 nil :weight 'bold :height (+ 10 base-height))
+ (set-face-attribute 'org-level-5 nil :weight 'bold)
+ (set-face-attribute 'org-level-6 nil :weight 'bold)
+ (set-face-attribute 'org-level-7 nil :weight 'bold)
+ (set-face-attribute 'org-level-8 nil :weight 'bold)))
+#+END_SRC
+
+** Org Blog
+Fetch dependencies file, which is not in this repository.
+#+BEGIN_SRC perl :results silent :tangle yes
+ print `curl https://raw.githubusercontent.com/seudut/blog/master/my-publish.el -o ./elisp/my-publish.el`;
+#+END_SRC
+
+Load
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (add-to-list 'load-path "~/.emacs.d/elisp")
+
+ (when (file-exists-p "~/.emacs.d/elisp/my-publish.el")
+ (require 'my-publish)
+ (blog-setup-project-alist "~/Private/blog/"))
+#+END_SRC
+
+
+Refer to [[http://orgmode.org/worg/org-tutorials/org-publish-html-tutorial.html][org-publish-html-tutorial]], and [[https://ogbe.net/blog/blogging_with_org.html][blogging_with_org]]
+
* 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]]
;; don't ask me to confirm the unsaved change
(setq magit-save-repository-buffers nil)
;; default is 50
- (setq git-commit-summary-max-length 80)
+ (setq git-commit-summary-max-length 100)
:commands magit-status magit-blame
:config
(dolist (map (list magit-status-mode-map
(defun sd/eshell-clear-buffer ()
"Clear eshell buffer"
(interactive)
- (let ((inhibit-read-only t))
- (erase-buffer)
- (eshell-send-input)))
+ (let ((inhibit-read-only t)
+ (current-point (- (point-max) (point))))
+ (beginning-of-line)
+ (delete-region (point-min) (point))
+ (goto-char (- (point-max) current-point))
+ ;; (eshell-send-input)
+ ))
+
(add-hook 'eshell-mode-hook (lambda ()
(local-set-key (kbd "C-l") 'sd/eshell-clear-buffer)))
(other-window 1)
(if (projectile-project-p)
(projectile-run-eshell)
- (eshell))
- ;; (let ((dir default-directory))
-
- ;; (split-window-vertically (- (/ (window-total-height) 3)))
- ;; (other-window 1)
- ;; (unless (and (boundp 'eshell-buffer-name) (get-buffer eshell-buffer-name))
- ;; (eshell))
- ;; (switch-to-buffer eshell-buffer-name)
- ;; (goto-char (point-max))
- ;; (eshell-kill-input)
- ;; (insert (format "cd %s" dir))
- ;; (eshell-send-input))
- )))
-
- ;; (global-unset-key (kbd "M-`"))
+ (eshell)))))
+
(global-set-key (kbd "s-e") 'sd/toggle-project-eshell)
#+END_SRC
#+END_SRC
** Line Number
-
Enable linum mode on programming modes
-
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
(add-hook 'prog-mode-hook 'linum-mode)
- ;; (add-hook 'prog-mode-hook (lambda ()
- ;; (setq-default indicate-empty-lines t)))
#+END_SRC
Fix the font size of line number
-
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
(defun fix-linum-size ()
- (interactive)
- (set-face-attribute 'linum nil :height 110))
+ (interactive)
+ (set-face-attribute 'linum nil :height 110))
(add-hook 'linum-mode-hook 'fix-linum-size)
-
#+END_SRC
I like [[https://github.com/coldnew/linum-relative][linum-relative]], just like the =set relativenumber= on =vim=
-
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
(use-package linum-relative
:ensure t
#+END_SRC
** Save File Position
-
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
(require 'saveplace)
(setq-default save-place t)
(setq save-place-forget-unreadable-files t)
(setq save-place-skip-check-regexp "\\`/\\(?:cdrom\\|floppy\\|mnt\\|/[0-9]\\|\\(?:[^@/:]*@\\)?[^@/:]*[^@/:.]:\\)")
-
#+END_SRC
** Multi-term
(unless (equal major-mode 'Info-mode)
(unless (> (length (window-list)) 1)
(split-window-right))
- (other-window 1)
- ;; (info)
- ))
-
- ;; (global-set-key (kbd "C-h i") 'sd/info-mode)
+ (other-window 1)))
;; open Info buffer in other window instead of current window
(defadvice info (before my-info (&optional file buf) activate)
** 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
** pdf-tools
#+BEGIN_SRC sh
- brew install poppler
+ #brew install poppler
#+END_SRC
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- (use-package pdf-tools
- :ensure t
- :init
- ;; run to complete the installation
- (pdf-tools-install)
- :config
- (add-to-list 'auto-mode-alist '("\.pdf$" . pdf-view-mode))
- (add-hook 'pdf-outline-buffer-mode-hook #'sd/pdf-outline-map))
+ ;(use-package pdf-tools
+ ; :ensure t
+ ; :init
+ ; ;; run to complete the installation
+ ; (pdf-tools-install)
+ ; :config
+ ; (add-to-list 'auto-mode-alist '("\.pdf$" . pdf-view-mode))
+ ; (add-hook 'pdf-outline-buffer-mode-hook #'sd/pdf-outline-map))
- (defun sd/pdf-outline-map ()
- "My keybindings in pdf-outline-map"
- (interactive)
- (define-key pdf-outline-buffer-mode-map (kbd "C-o") nil)
- (define-key pdf-outline-buffer-mode-map (kbd "i") 'outline-toggle-children)
- (define-key pdf-outline-buffer-mode-map (kbd "j") 'next-line)
- (define-key pdf-outline-buffer-mode-map (kbd "k") 'previous-line))
+ ;(defun sd/pdf-outline-map ()
+ ; "My keybindings in pdf-outline-map"
+ ; (interactive)
+ ; (define-key pdf-outline-buffer-mode-map (kbd "C-o") nil)
+ ; (define-key pdf-outline-buffer-mode-map (kbd "i") 'outline-toggle-children)
+ ; (define-key pdf-outline-buffer-mode-map (kbd "j") 'next-line)
+ ; (define-key pdf-outline-buffer-mode-map (kbd "k") 'previous-line))
#+END_SRC
** help-mode
(add-hook 'help-mode-hook 'sd/help-mode-hook)
#+END_SRC
+Wiki [[http://stackoverflow.com/questions/3480173/show-keys-in-emacs-keymap-value][show-keys-in-emacs-keymap-value]], Helpplus mode can show keymap as human-readable, use ~describe-keymap~ or =C-h M-k=
+
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (el-get-bundle help-macro+
+ :url "https://raw.githubusercontent.com/emacsmirror/emacswiki.org/master/help-macro+.el"
+ :features help-macro+)
+ (el-get-bundle help+
+ :url "https://raw.githubusercontent.com/emacsmirror/emacswiki.org/master/help+.el"
+ :features help+)
+ (el-get-bundle help-fns+
+ :url "https://raw.githubusercontent.com/emacsmirror/emacswiki.org/master/help-fns+.el"
+ :features help-fns+)
+ (el-get-bundle help-mode+
+ :url "https://raw.githubusercontent.com/emacsmirror/emacswiki.org/master/help-mode+.el"
+ :features help-mode+)
+#+END_SRC
+
** goto-last-change
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
(use-package goto-last-change
(car (last (split-string url "/" t))))))))))
#+END_SRC
+** Elscreen
+Fix one elscreen issue when startup emacs https://github.com/knu/elscreen/issues/6
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ ;; (use-package elscreen
+ ;; :ensure t
+ ;; :init
+ ;; (setq elscreen-tab-display-control nil)
+ ;; :config
+ ;; ;; (elscreen-start)
+ ;; (set-face-attribute 'elscreen-tab-current-screen-face nil :foreground "black" :background "yellow")
+ ;; (set-face-attribute 'elscreen-tab-other-screen-face nil :foreground "black" :background "disabledControlTextColor" :underline nil)
+ ;; ;; (global-unset-key (kbd)); M-TAB switch screen
+ ;; ;; (global-set-key (kbd "s-`") '(lambda () (interactive) (elscreen-goto 0)))
+ ;; ;; (dotimes (i 8)
+ ;; ;; (global-set-key (kbd (concat "s-" (number-to-string (+ i 1))))
+ ;; ;; `(lambda () (interactive) (elscreen-goto ,(+ i 1)))))
+ ;; ;; (global-set-key (kbd "s-t") 'elscreen-create)
+ ;; ;; (global-set-key (kbd "s-n") 'elscreen-next)
+ ;; ;; (global-set-key (kbd "s-p") 'elscreen-previous)
+ ;; )
+#+END_SRC
+
* Dired
** Dired bindings
=C-o= is defined as a global key for window operation, here unset it in dired mode
#+END_SRC
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- (defun sd/dired-new-file ()
+ (defun sd/dired-new-file-and-open ()
"Create a new file in dired mode"
(interactive)
(call-interactively 'find-file))
+ (defun sd/dired-new-file (file)
+ "Create a new file called FILE.
+ If FILE already exists, signal an error."
+ (interactive
+ (list (read-file-name "Create file: " (dired-current-directory))))
+ (let* ((expanded (expand-file-name file)))
+ (if (file-exists-p expanded)
+ (error "Cannot create file %s: file exists" expanded))
+ (write-region "" nil expanded t)
+ (when expanded
+ (dired-add-file expanded)
+ (dired-move-to-filename))))
+
;; copied from abo-abo's config
(defun sd/dired-get-size ()
(interactive)
(defun mk-anti-ido-advice (func &rest args)
"Temporarily disable IDO and call function FUNC with arguments ARGS."
(interactive)
- (let ((read-file-name-function #'read-file-name-default))
+ (let ((read-file-name-function #'read-file-name-default)
+ (completing-read-function #'completing-read-default))
(if (called-interactively-p 'any)
(call-interactively func)
(apply func args))))
(defun mk-disable-ido (command)
"Disable IDO when command COMMAND is called."
(advice-add command :around #'mk-anti-ido-advice))
+
+ (defun mk-anti-ido-no-completing-advice (func &rest args)
+ "Temporarily disable IDO and call function FUNC with arguments ARGS."
+ (interactive)
+ (let ((read-file-name-function #'read-file-name-default)
+ ;; (completing-read-function #'completing-read-default)
+ )
+ (if (called-interactively-p 'any)
+ (call-interactively func)
+ (apply func args))))
+
+ (defun mk-disable-ido-no-completing (command)
+ "Disable IDO when command COMMAND is called."
+ (advice-add command :around #'mk-anti-ido-no-completing-advice))
#+END_SRC
Disalble =ido= when new a directory or file in =dired= mode
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
;; call the function which you want to disable ido
(mk-disable-ido 'dired-create-directory)
+ (mk-disable-ido 'sd/dired-new-file-and-open)
(mk-disable-ido 'sd/dired-new-file)
- (mk-disable-ido 'dired-goto-file)
+ (mk-disable-ido-no-completing 'dired-goto-file)
#+END_SRC
** Dired open with
("\\.\\(?:xcf\\)\\'" "gimp")
("\\.csv\\'" "libreoffice")
("\\.tex\\'" "pdflatex" "latex")
- ("\\.\\(?:mp4\\|mkv\\|avi\\|flv\\|ogv\\)\\(?:\\.part\\)?\\'" "mplayer")
+ ("\\.\\(?:mp4\\|mkv\\|avi\\|rmvb\\|flv\\|ogv\\)\\(?:\\.part\\)?\\'" "mplayer")
("\\.\\(?:mp3\\|flac\\)\\'" "rhythmbox")
("\\.html?\\'" "open")
("\\.dmg\\'" "open")
:config
(define-key company-active-map (kbd "M-n") nil)
(define-key company-active-map (kbd "M-p") nil)
+ (define-key company-active-map (kbd "SPC") #'sd/company-stop-input-space)
(define-key company-active-map (kbd "C-n") #'company-select-next)
(define-key company-active-map (kbd "C-p") #'company-select-previous)
- ;; should map both (kbd "TAB") and [tab],https://github.com/company-mode/company-mode/issues/75
+ ;; should map both (kbd "TAB") and [tab],https://github.com/company-mode/company-mode/issues/75
(define-key company-active-map (kbd "TAB") #'company-complete-selection)
(define-key company-active-map [tab] #'company-complete-selection)
(global-company-mode)
- (setq company-global-modes '(not org-mode)))
+ ;; magig-commit is text-modeh
+ (setq company-global-modes '(not org-mode magit-status-mode text-mode eshell-mode gfm-mode markdown-mode)))
(use-package company-statistics
:ensure t
:config
(company-statistics-mode))
+
+ (defun sd/company-stop-input-space ()
+ "Stop completing and input a space,a workaround of a semantic issue `https://github.com/company-mode/company-mode/issues/614'"
+ (interactive)
+ (company-abort)
+ (insert " "))
#+END_SRC
** YASnippet
(use-package lispy
:ensure t
:init
- (eval-after-load "lispy"
- `(progn
- (define-key lispy-mode-map (kbd "M-o") nil)))
+ (with-eval-after-load "lispy"
+ (define-key lispy-mode-map (kbd "M-o") nil)
+ (define-key lispy-mode-map (kbd "g") 'special-lispy-goto-local)
+ (define-key lispy-mode-map (kbd "G") 'special-lispy-goto)
+ (define-key lispy-mode-map (kbd "M-m") 'back-to-indentation))
:config
(add-hook 'emacs-lisp-mode-hook (lambda () (lispy-mode 1))))
+
+
#+END_SRC
** Perl
** 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
- > _)))
+ ;; (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
* Markdown mode
("\\.md\\'" . markdown-mode)
("\\.markdown\\'" . markdown-mode))
:init (setq markdown-command "multimarkdown"))
+
+ (add-hook 'gfm-mode-hook (lambda ()
+ (set-face-attribute 'markdown-inline-code-face nil :inherit 'fixed-pitch)
+ (set-face-attribute 'markdown-pre-face nil :inherit 'fixed-pitch)))
+ (with-eval-after-load "gfm-mode"
+ (set-face-attribute 'markdown-inline-code-face nil :inherit 'fixed-pitch)
+ (set-face-attribute 'markdown-pre-face nil :inherit 'fixed-pitch))
#+END_SRC
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
** 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)))))
+ ;; (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
** Mu4e - Emacs frontend of Mu
config from [[http://www.kirang.in/2014/11/13/emacs-as-email-client-with-offlineimap-and-mu4e-on-osx/][emacs-as-email-client-with-offlineimap-and-mu4e-on-osx]]
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- (require 'mu4e)
- (setq mu4e-maildir "~/.Mail")
- (setq mu4e-drafts-folder "/[Gmail].Drafts")
- (setq mu4e-sent-folder "/[Gmail].Sent Mail")
- ;; don't save message to Sent Messages, Gmail/IMAP takes care of this
- (setq mu4e-sent-messages-behavior 'delete)
- ;; allow for updating mail using 'U' in the main view:
- (setq mu4e-get-mail-command "offlineimap")
-
- ;; shortcuts
- (setq mu4e-maildir-shortcuts
- '( ("/INBOX" . ?i)
- ("/[Gmail].Sent Mail" . ?s)))
-
- ;; something about ourselves
- (setq
- user-mail-address "seudut@gmail.com"
- user-full-name "Peng Li"
- mu4e-compose-signature
- (concat
- "Thanks,\n"
- "Peng\n"))
-
- ;; show images
- (setq mu4e-show-images t)
-
- ;; use imagemagick, if available
- (when (fboundp 'imagemagick-register-types)
- (imagemagick-register-types))
-
- ;; convert html emails properly
- ;; Possible options:
- ;; - html2text -utf8 -width 72
- ;; - textutil -stdin -format html -convert txt -stdout
- ;; - html2markdown | grep -v ' _place_holder;' (Requires html2text pypi)
- ;; - w3m -dump -cols 80 -T text/html
- ;; - view in browser (provided below)
- (setq mu4e-html2text-command "textutil -stdin -format html -convert txt -stdout")
-
- ;; spell check
- (add-hook 'mu4e-compose-mode-hook
- (defun my-do-compose-stuff ()
- "My settings for message composition."
- (set-fill-column 72)
- (flyspell-mode)))
-
- ;; add option to view html message in a browser
- ;; `aV` in view to activate
- (add-to-list 'mu4e-view-actions
- '("ViewInBrowser" . mu4e-action-view-in-browser) t)
-
- ;; fetch mail every 10 mins
- (setq mu4e-update-interval 600)
-
- ;; mu4e view
- (setq-default mu4e-headers-fields '((:flags . 6)
- (:from . 22)
- (:mailing-list . 10)
- (:thread-subject . 50)
- (:human-date . 16)))
+ (if (require 'mu4e nil 'noerror)
+ (progn
+ (setq mu4e-maildir "~/.Mail")
+ (setq mu4e-drafts-folder "/[Gmail].Drafts")
+ (setq mu4e-sent-folder "/[Gmail].Sent Mail")
+ ;; don't save message to Sent Messages, Gmail/IMAP takes care of this
+ (setq mu4e-sent-messages-behavior 'delete)
+ ;; allow for updating mail using 'U' in the main view:
+ (setq mu4e-get-mail-command "offlineimap")
+
+ ;; shortcuts
+ (setq mu4e-maildir-shortcuts
+ '( ("/INBOX" . ?i)
+ ("/[Gmail].Sent Mail" . ?s)))
+
+ ;; something about ourselves
+ (setq
+ user-mail-address "seudut@gmail.com"
+ user-full-name "Peng Li"
+ mu4e-compose-signature
+ (concat
+ "Thanks,\n"
+ "Peng\n"))
+
+ ;; show images
+ (setq mu4e-show-images t)
+
+ ;; use imagemagick, if available
+ (when (fboundp 'imagemagick-register-types)
+ (imagemagick-register-types))
+
+ ;; convert html emails properly
+ ;; Possible options:
+ ;; - html2text -utf8 -width 72
+ ;; - textutil -stdin -format html -convert txt -stdout
+ ;; - html2markdown | grep -v ' _place_holder;' (Requires html2text pypi)
+ ;; - w3m -dump -cols 80 -T text/html
+ ;; - view in browser (provided below)
+ (setq mu4e-html2text-command "textutil -stdin -format html -convert txt -stdout")
+
+ ;; spell check
+ (add-hook 'mu4e-compose-mode-hook
+ (defun my-do-compose-stuff ()
+ "My settings for message composition."
+ (set-fill-column 72)
+ (flyspell-mode)))
+
+ ;; add option to view html message in a browser
+ ;; `aV` in view to activate
+ (add-to-list 'mu4e-view-actions
+ '("ViewInBrowser" . mu4e-action-view-in-browser) t)
+
+ ;; fetch mail every 10 mins
+ (setq mu4e-update-interval 600)
+
+ ;; mu4e view
+ (setq-default mu4e-headers-fields '((:flags . 6)
+ (:from-or-to . 22)
+ (:mailing-list . 20)
+ (:thread-subject . 70)
+ (:human-date . 16))))
+ (warn "seudut:mu4e not installed, it won't work."))
#+END_SRC
** Smtp - send mail
(add-hook 'ediff-suspend-hook 'ediff-toggle-wide-display))
#+END_SRC
+* Modes
+** Yaml-mode
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (use-package yaml-mode
+ :ensure t
+ :init
+ (add-to-list 'auto-mode-alist '("\\.yml\\'" . yaml-mode)))
+#+END_SRC
+
* Entertainment
** GnuGo
Play Go in Emacs, gnugo xpm refert [[https://github.com/okanotor/dotemacs/blob/f95b774cb292d1169748bc0a62ba647bbd8c0652/etc/my-inits/my-inits-gnugo.el][to here]]. start at image display mode and grid mode
(add-to-list 'projectile-globally-ignored-files "GTAGS")
(projectile-global-mode t))
- (use-package persp-projectile
- :ensure t
- :config
- (persp-mode)
- :bind
- (:map projectile-mode-map
- ("s-t" . projectile-persp-switch-project)))
-
- ;; (defun sd/change-default-directory (buffer dir)
- ;; "change defafult directory of buffer to dir"
- ;; (with-current-buffer buffer
- ;; (cd dir)))
+ ;; (use-package persp-projectile
+ ;; :ensure t
+ ;; :config
+ ;; (persp-mode)
+ ;; :bind
+ ;; ;; (:map projectile-mode-map
+ ;; ;; ("s-t" . projectile-persp-switch-project))
+ ;; )
;; change default-directory of scratch buffer to projectile-project-root
(defun sd/project-switch-action ()
(buffer-name buffer))
(let ((root (projectile-project-root)))
(with-current-buffer buffer
- (cd root)))
- ;; (sd/change-default-directory buffer (projectile-project-root))
- )))
+ (cd root))))))
#+END_SRC
*** project config =super= keybindings
(global-set-key (kbd "<s-return>") 'toggle-frame-fullscreen)
(global-set-key (kbd "s-f") 'projectile-find-file)
- (global-set-key (kbd "s-`") 'mode-line-other-buffer)
+ ;; (global-set-key (kbd "s-`") 'mode-line-other-buffer)
- (global-set-key (kbd "s-n") 'persp-next)
- (global-set-key (kbd "s-p") 'persp-prev)
- (global-set-key (kbd "s-;") 'persp-switch-last)
+ ;; (global-set-key (kbd "s-n") 'persp-next)
+ ;; (global-set-key (kbd "s-p") 'persp-prev)
+ ;; (global-set-key (kbd "s-;") 'persp-switch-last)
(global-set-key (kbd "s-=") 'text-scale-increase)
(global-set-key (kbd "s--") 'text-scale-decrease)
;; (global-set-key (kbd "s-u") 'undo-tree-visualize)
-
-
- ;; someothers default mapping on super (command) key
- ;; s-s save-buffer
- ;; s-k kill-this-buffer
-
-
- ;; s-h --> ns-do-hide-emacs
- ;; s-j --> ido-switch-buffer +
- ;; s-k --> kill-this-buffer
- ;; s-l --> goto-line
- ;; s-; --> undefined
- ;; s-' --> next-multiframe-window
- ;; s-ret --> toggle-frame-fullscreen +
-
- ;; s-y --> ns-paste-secondary
- ;; s-u --> revert-buffer
- ;; s-i --> undefined - but used for iterm globally
- ;; s-o --> used for emacs globally
- ;; s-p --> projectile-persp-switch-project +
- ;; s-[ --> next-buffer +
- ;; s-] --> previous-buffer +
-
- ;; s-0 --> undefined
- ;; s-9 --> undefined
- ;; s-8 --> undefined
- ;; s-7 --> undefined
- ;; s-6 --> undefined
- ;; s-- --> center-line
- ;; s-= --> undefined
-
- ;; s-n --> make-frame
- ;; s-m --> iconify-frame
- ;; s-b --> undefined
- ;; s-, --> customize
- ;; s-. --> undefined
- ;; s-/ --> undefined
-
- ;; s-g --> isearch-repeat-forward
- ;; s-f --> projectile-find-file +
- ;; s-d --> isearch-repeat-background
- ;; s-s --> save-buffer
- ;; s-a --> make-whole-buffer
-
- ;; s-b --> undefined
- ;; s-v --> yank
- ;; s-c --> ns-copy-including-secondary
-
- ;; s-t --> ns-popup-font-panel
- ;; s-r --> undefined
- ;; s-e --> isearch-yanqk-kill
- ;; s-w --> delete-frame
- ;; s-q --> same-buffers-kill-emacs
-
- ;; s-` --> other-frame
#+END_SRC
** Windown & Buffer - =C-o=
(delete-other-windows)))
(defhydra sd/hydra-window (:color red :columns nil)
- "Window"
+ "C-o"
;; windows switch
("h" windmove-left nil :exit t)
("j" windmove-down nil :exit t)
(interactive)
(split-window-right)
(windmove-right))
- "vert" :exit t)
+ nil :exit t)
("x" (lambda ()
(interactive)
(split-window-below)
(windmove-down))
- "horz" :exit t)
+ nil :exit t)
;; buffer / windows switch
- ("o" sd/toggle-max-windows "one" :exit t)
- ("C-k" sd/delete-current-window "del" :exit t)
+ ("o" sd/toggle-max-windows nil :exit t)
+ ("C-k" sd/delete-current-window nil :exit t)
("C-d" (lambda ()
(interactive)
(kill-buffer)
(sd/delete-current-window))
- "kill" :exit t)
+ nil :exit t)
;; ace-window
;; ("'" other-window "other" :exit t)
;; ("a" ace-window "ace")
- ("s" ace-swap-window "swap")
- ("D" ace-delete-window "ace-one" :exit t)
+ ("s" ace-swap-window nil)
+ ("D" ace-delete-window nil :exit t)
;; ("i" ace-maximize-window "ace-one" :exit t)
;; Windows undo - redo
- ("u" (progn (winner-undo) (setq this-command 'winner-undo)) "undo")
- ("r" (progn (winner-redo) (setq this-command 'winner-redo)) "redo")
-
+ ("u" (progn (winner-undo) (setq this-command 'winner-undo)) nil)
+ ("r" (progn (winner-redo) (setq this-command 'winner-redo)) nil)
+
;; ibuffer, dired, eshell, bookmarks
;; ("C-i" other-window nil :exit t)
("C-b" ido-switch-buffer nil :exit t)
("C-f" projectile-find-file nil :exit t)
- ("C-p" persp-switch :exit t)
+ ("C-r" ivy-recentf nil :exit t)
+ ;; ("C-p" persp-switch nil :exit t)
+ ;; ("C-t" projectile-persp-switch-project nil :exit t)
;; other special buffers
("d" sd/project-or-dired-jump nil :exit t)
;; ("p" paradox-list-packages nil :exit t)
;; quit
- ("q" nil "cancel")
- ("<ESC>" nil)
- ("C-h" nil nil :exit t)
- ("C-j" nil nil :exit t)
- ;; ("C-k" nil :exit t)
- ("C-l" nil nil :exit t)
+ ("q" nil nil)
+ ("<ESC>" nil nil)
+ ("C-h" windmove-left nil :exit t)
+ ("C-j" windmove-down nil :exit t)
+ ("C-k" windmove-up nil :exit t)
+ ("C-l" windmove-right nil :exit t)
("C-;" nil nil :exit t)
("n" nil nil :exit t)
("[" nil nil :exit t)
("]" nil nil :exit t)
- ("f" nil))
+ ("f" nil nil))
(global-unset-key (kbd "C-o"))
(global-set-key (kbd "C-o") 'sd/hydra-window/body)
*** TODO make expand-region hydra work with lispy selected
** =C-w= delete backward word
Refer [[https://github.com/fnwiya/dotfiles/blob/c9ca79f1b22c919d9f4c3a0f944ba8281255a594/setup/.emacs.d/loader-init/_90-kill-region-or-backward-kill-word.el][kill-region-or-backward-kill-word]]
+
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
(defun sd/kill-region-or-backward-kill-word ()
(interactive)
(global-set-key (kbd "C-w") 'sd/kill-region-or-backward-kill-word)
#+END_SRC
-* key
-- passion
-- vision
-- mission
+* Developing
+** perspeen
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (use-package perspeen
+ :ensure t
+ :init
+ (setq perspeen-use-tab nil)
+ :config
+ (perspeen-mode))
+
+ ;; super-i to switch to ith workspace
+
+ (defmacro sd/define-keys (map key func &rest args)
+ "A macro to define multi keys "
+ `(define-key ,map ,key (lambda () (interactive) (,func ,@args))))
+
+
+ (with-eval-after-load "perspeen"
+ (dotimes (ii 9)
+ (sd/define-keys perspeen-mode-map (kbd (concat "s-" (number-to-string (+ ii 1))))
+ perspeen-goto-ws (+ ii 1)))
+ (define-key perspeen-mode-map (kbd "s-c") 'perspeen-create-ws)
+ (define-key perspeen-mode-map (kbd "s-n") 'perspeen-next-ws)
+ (define-key perspeen-mode-map (kbd "s-p") 'perspeen-previous-ws)
+ (define-key perspeen-mode-map (kbd "s-'") 'perspeen-last-ws)
+ (define-key perspeen-mode-map (kbd "s-t") 'perspeen-tab-create-tab)
+ (define-key perspeen-mode-map (kbd "s-t") 'perspeen-tab-create-tab))
+#+END_SRC
* TODO todolist
-** rucket
+** Rucket
** player video on iphone for
** SICP
** music searcher
search music on some music web site
+
+
+
+** Need separate the Key-bindings and package-initialization
+* Note
+** Check if emacs is in terminal of graphic mode
+Use =display-graphic-p= instead of =window-system=
+[[info:elisp#Window%20Systems][Window Systems]]
+** =Interactive=
+** List operation
+*** add a element to list
+- ~add-to-list~ functions, append
+- ~push~ macro
+- ~(setcdr (last aa) (list element))~
+blog with modify list
+
+draw one line top of the windows