** 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)
-
- (if window-system
- (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)
'("%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
+ (defconst sd/mode-line-font-heigh 100
+ "Defaulet the fontsize on mode line.")
+
(with-eval-after-load "powerline"
- (if window-system
- (progn
- (let* ((base-font-size (face-attribute 'default :height)))
- ;; 100/140;0.8
- (set-variable 'powerline-height (/ base-font-size 10))
- (set-variable 'powerline-text-scale-factor (/ (float 100) base-font-size)))
- (set-face-attribute 'mode-line nil :height 100)
- (set-face-attribute 'mode-line-inactive nil :height 100))))
+ (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-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)
(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
** 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))
+ ;; (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
: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
(define-key company-active-map [tab] #'company-complete-selection)
(global-company-mode)
;; magig-commit is text-modeh
- (setq company-global-modes '(not org-mode magit-status-mode text-mode eshell-mode)))
+ (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
("\\.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-or-to . 22)
- (:mailing-list . 20)
- (:thread-subject . 70)
- (: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-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))
- )
+ ;; (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 ()
(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-t" projectile-persp-switch-project nil :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)
+ ("q" nil nil)
+ ("<ESC>" nil nil)
("C-h" windmove-left nil :exit t)
("C-j" windmove-down nil :exit t)
- ("C-k" windmove-up :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)
(global-set-key (kbd "C-w") 'sd/kill-region-or-backward-kill-word)
#+END_SRC
+* 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
** player video on iphone for
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