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
* Basic Settings
-
** Setting loading Path
Set system PATH and emacs exec path
#+END_SRC
-** Window Setting
-
-Disable scroll bar, tool-bar and menu-bar
-
+** 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)
(setq make-backup-files nil)
#+END_SRC
-set custom file
-
+*** Custom file
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
(setq custom-file "~/.emacs.d/custom.el")
(if (file-exists-p custom-file)
(load custom-file))
-
#+END_SRC
-Switch the focus to help window when it appears
-
+*** Switch the focus to help window when it appears
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
-
(setq help-window-select t)
-
-#+END_SRC
-
-Setting scroll right/left
-#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- ; (global-set-key (kbd "C-,") 'scoll-left)
- ; (global-set-key (kbd "C-.") 'scoll-right)
#+END_SRC
-Set default window size
+*** Set default window size
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
(setq initial-frame-alist
'((width . 120)
(height . 50)))
#+END_SRC
-Stop auto save
+*** Stop auto save
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
(setq auto-save-default nil)
;; (desktop-save-mode t)
#+END_SRC
+*** Save minibuffer history
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (savehist-mode 1)
+ (setq history-length 1000)
+#+END_SRC
+
+*** temp folder
+Make a temp directory for all cache/history files
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (defconst sd-temp-directory
+ (file-name-as-directory "~/.emacs.d/temp"))
+
+ (unless (file-exists-p sd-temp-directory)
+ (mkdir sd-temp-directory))
+#+END_SRC
+
* Package Management Tools
** Use-package
(delete-window)
(message "Only one Windows now!")))
- (global-set-key (kbd "s-h") 'keyboard-quit)
- (global-set-key (kbd "s-j") 'ido-switch-buffer)
- (global-set-key (kbd "s-k") 'ido-find-file)
- (global-set-key (kbd "s-l") 'sd/delete-current-window)
+ ;; (global-set-key (kbd "s-h") 'keyboard-quit)
+ ;; (global-set-key (kbd "s-j") 'ido-switch-buffer)
+ ;; (global-set-key (kbd "s-k") 'ido-find-file)
+ ;; (global-set-key (kbd "s-l") 'sd/delete-current-window)
;; s-l --> goto-line
;; (global-set-key (kbd "s-/") 'swiper)
;; s-; -->
** Search Replace and highlight
*** swiper
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- (use-package swiper
- :ensure t)
+ ;; (use-package swiper
+ ;; :ensure t)
- (ivy-mode 1)
- (setq ivy-use-virtual-buffers t)
- (global-set-key (kbd "s-/") 'swiper)
+ ;; (ivy-mode 1)
+ ;; (setq ivy-use-virtual-buffers t)
+ ;; (global-set-key (kbd "s-/") 'swiper)
(use-package counsel
:ensure t
;; (global-set-key (kbd "C-S-o") 'counsel-rhythmbox)
;; ;; (define-key read-expression-map (kbd "C-r") 'counsel-expression-history)
- (set-face-attribute
- 'ivy-current-match nil
- :background "Orange"
- :foreground "black")
+ ;; (set-face-attribute
+ ;; 'ivy-current-match nil
+ ;; :background "Orange"
+ ;; :foreground "black")
+
+ ;; ivy-resume
+ ;; (define-key swiper-map (kbd "M-%") 'swiper-aa-replace)
#+END_SRC
*** =M-s= prefix
(defalias 'ee 'find-files)
#+END_SRC
+*** eshell temp directory
+set default eshell history folder
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (setq eshell-directory-name (concat sd-temp-directory "eshell"))
+#+END_SRC
+
*** Eshell erase buffer
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
(defun sd/eshell-clear-buffer ()
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
(winner-mode 1)
+ (defun sd/toggle-max-windows ()
+ "Set maximize current if there are multiple windows, if only
+ one window, window undo"
+ (interactive)
+ (if (equal (length (window-list)) 1)
+ (winner-undo)
+ (delete-other-windows)))
+
(defhydra sd/hydra-window (:color red :columns nil)
"window"
("h" windmove-left nil :exit t)
(split-window-below)
(windmove-down))
"horz" :exit t)
- ("o" delete-other-windows "one" :exit t)
+ ;; ("o" delete-other-windows "one" :exit t)
+ ("o" sd/toggle-max-windows "one" :exit t)
("C-o" ido-switch-buffer "buf" :exit t)
("C-k" sd/delete-current-window "del" :exit t)
("'" other-window "other" :exit t)
(global-set-key (kbd "C-o") 'sd/hydra-window/body)
#+END_SRC
-** Edit
-- cut, yank, =C-w=, =C-y=
-- save, revert
-- undo, redo - undo-tree
-- select, expand-region
-- spell check, flyspell
+** Motion
+- =C-M-=
+[[https://www.masteringemacs.org/article/effective-editing-movement][effective-editing-movement]]
+*** Command Arguments, numeric argumens
+=C-u 4= same as =C-4=, =M-4=
+*** Basic movement
+moving by line / word /
+=C-f=, =C-b=, =C-p=, =C-n=, =M-f=, =M-b=
+=C-a=, =C-e=
+=M-m= (move first non-whitespace on this line)
+=M-}=, =M-{=, Move forward end of paragraph
+=M-a=, =M-e=, beginning / end of sentence
+=C-M-a=, =C-M-e=, move begining of defun
+=C-x ]=, =C-x [=, forward/backward one page
+=C-v=, =M-v=, =C-M-v=, =C-M-S-v= scroll down/up
+=M-<=, =M->=, beginning/end of buffer
+=M-r=, Repositiong point
+
+*** Moving by S-expression / List
+*** Marks
+=C-<SPC>= set marks toggle the region
+=C-u C-<SPC>= Jump to the mark, repeated calls go further back the mark ring
+=C-x C-x= Exchanges the point and mark.
+
+Stolen [[https://www.masteringemacs.org/article/fixing-mark-commands-transient-mark-mode][fixing-mark-commands-transient-mark-mode]]
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (defun push-mark-no-activate ()
+ "Pushes `point' to `mark-ring' and does not activate the region
+ Equivalent to \\[set-mark-command] when \\[transient-mark-mode] is disabled"
+ (interactive)
+ (push-mark (point) t nil)
+ (message "Pushed mark to ring"))
+
+ ;; (global-set-key (kbd "C-`") 'push-mark-no-activate)
+
+ (defun jump-to-mark ()
+ "Jumps to the local mark, respecting the `mark-ring' order.
+ This is the same as using \\[set-mark-command] with the prefix argument."
+ (interactive)
+ (set-mark-command 1))
+
+ ;; (global-set-key (kbd "M-`") 'jump-to-mark)
+
+ (defun exchange-point-and-mark-no-activate ()
+ "Identical to \\[exchange-point-and-mark] but will not activate the region."
+ (interactive)
+ (exchange-point-and-mark)
+ (deactivate-mark nil))
+
+ ;; (define-key global-map [remap exchange-point-and-mark] 'exchange-point-and-mark-no-activate)
+#+END_SRC
-** Motion - =C-M-=
-Use =Avy= for motion
+Show the mark ring using =helm-mark-ring=, also mapping =M-`= to quit minibuffer. so that =M-`= can
+toggle the mark ring. the best way is add a new action and mapping to =helm-source-mark-ring=, but
+since there is no map such as =helm-mark-ring=map=, so I cannot binding a key to the quit action.
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ ;; (defun sd/helm-quit-mark-ring (key)
+ ;; "exit"
+ ;; (keyboard-quit))
+
+ ;; (helm-add-action-to-source "Exit helm" 'sd/helm-quit-mark-ring helm-source-mark-ring 1)
+ (global-set-key (kbd "M-`") #'helm-mark-ring)
+
+ (define-key minibuffer-local-map (kbd "M-`") 'keyboard-escape-quit)
+#+END_SRC
+
+=M-h= marks the next paragraph
+=C-x h= marks the whole buffer
+=C-M-h= marks the next defun
+=C-x C-p= marks the next page
+**** DONE Mapping toggle mark ring=
+:LOGBOOK:
+- State "DONE" from "TODO" [2016-07-22 Fri 23:18]
+:END:
+*** Registers
+Registers can save text, position, rectangles, file and configuration and other things.
+Here for movement, we can use register to save/jump position
+=C-x r SPC= store point in register
+=C-x r j= jump to register
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (use-package list-register
+ :ensure t)
+#+END_SRC
+
+*** Bookmarks
+As I would like use bookmakr for different buffer/files. to help to swith
+different buffer/file quickly. this setting is in Windows/buffer node
+=C-x r m= set a bookmarks
+=C-x r l= list bookmarks
+=C-x r b= jump to bookmarks
+
+*** Search
+Search, replace and hightlight will in later paragraph
+*** =Avy= for easy motion
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
(use-package avy
:ensure t
(global-set-key (kbd "C-M-w") 'avy-goto-char-timer)
(global-set-key (kbd "C-M-l") 'avy-goto-char-in-line)
- ;; will delete above
- (global-set-key (kbd "M-g j") 'avy-goto-line-below)
- (global-set-key (kbd "M-g k") 'avy-goto-line-above)
- (global-set-key (kbd "M-g w") 'avy-goto-word-1-below)
- (global-set-key (kbd "M-g b") 'avy-goto-word-1-above)
- (global-set-key (kbd "M-g e") 'avy-goto-word-0)
- (global-set-key (kbd "M-g f") 'avy-goto-char-timer)
- (global-set-key (kbd "M-g c") 'avy-goto-char-in-line)
+ ;; ;; will delete above
+ ;; (global-set-key (kbd "M-g j") 'avy-goto-line-below)
+ ;; (global-set-key (kbd "M-g k") 'avy-goto-line-above)
+ ;; (global-set-key (kbd "M-g w") 'avy-goto-word-1-below)
+ ;; (global-set-key (kbd "M-g b") 'avy-goto-word-1-above)
+ ;; (global-set-key (kbd "M-g e") 'avy-goto-word-0)
+ ;; (global-set-key (kbd "M-g f") 'avy-goto-char-timer)
+ ;; (global-set-key (kbd "M-g c") 'avy-goto-char-in-line)
+#+END_SRC
- ;; M-g TAB move-to-column
- ;; M-g ESC Prefix Command
- ;; M-g c goto-char
- ;; M-g g goto-line
- ;; M-g n next-error
- ;; M-g p previous-error
+*** =Imenu= goto tag
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ ;; (global-set-key (kbd "M-i") #'counsel-imenu)
+ (global-set-key (kbd "M-i") #'imenu)
- ;; M-g M-g goto-line
- ;; M-g M-n next-error
- ;; M-g M-p previous-error
+ ;; (global-set-key (kbd "M-l") 'goto-line)
#+END_SRC
-=imenu=, mapping =C-M-i= to =counsel-imenu=
+*** Go-to line
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- (global-unset-key (kbd "C-M-i"))
- (global-set-key (kbd "C-M-i") #'counsel-imenu)
+ (global-set-key (kbd "M-l") 'goto-line)
#+END_SRC
+*** Movement effective
+**** isearch
+=C-s=, =C-r=
+=C-w=, put the word into search minibuffer, =M-y=
+=M-c=, toggle case sensitivity
+=M-n=, =M-p=, history
+**** tagss
+** Edit
+- cut, yank, =C-w=, =C-y=
+- save, revert
+- undo, redo - undo-tree
+- select, expand-region
+- spell check, flyspell
** Search & Replace / hightlight =M-s=
*** search
*** replace
(use-package moccur-edit))
#+END_SRC
+*** Swiper
+stolen from [[https://github.com/mariolong/emacs.d/blob/f6a061594ef1b5d1f4750e9dad9dc97d6e122840/emacs-init.org][here]]
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (use-package swiper
+ :ensure t
+ :init
+ (setq ivy-use-virtual-buffers t)
+ (set-face-attribute 'ivy-current-match nil :background "Orange" :foreground "black")
+ :config
+ (ivy-mode)
+ (global-set-key (kbd "s-/") 'swiper)
+ (define-key swiper-map (kbd "M-r") 'swiper-query-replace)
+ (define-key swiper-map (kbd "C-.") (lambda ()
+ (interactive)
+ (insert (format "%s" (with-ivy-window (thing-at-point 'word))))))
+ (define-key swiper-map (kbd "M-.") (lambda ()
+ (interactive)
+ (insert (format "%s" (with-ivy-window (thing-at-point 'symbol)))))))
+#+END_SRC
+
+* Dictionary
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (use-package bing-dict
+ :ensure t
+ :commands (bing-dict-brief)
+ :config
+ (global-set-key (kbd "s-d") 'bing-dict-brief))
+#+END_SRC
+
+* TODO Temp directory for cached/history/temp files
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (use-package recentf
+ :config
+ (setq recentf-save-file (concat sd-temp-directory "recentf")))
+
+ (use-package projectile
+ :config
+ (setq projectile-cache-file (concat sd-temp-directory "projectile.cache")))
+
+ (use-package ido
+ :config
+ (setq ido-save-directory-list-file (concat sd-temp-directory "ido.last")))
+
+ (use-package savehist
+ :config
+ (setq savehist-file (concat sd-temp-directory "history")))
+
+ (use-package emms
+ :config
+ (setq emms-directory (concat sd-temp-directory "emms")))
+
+ (setq auto-save-list-file-prefix (concat sd-temp-directory "auto-save-list/.saves-"))
+
+ (use-package smex
+ :config
+ (setq smex-save-file (concat sd-temp-directory "smex-items")))
+#+END_SRC
+
* test
#+BEGIN_SRC ditaa :file temp/hello-world.png :cmdline -r
+--------------+
#+RESULTS:
[[file:temp/hello-world.png]]
+#+BEGIN_SRC ditaa :file temp/hello.png
+ +------------+
+ | |
+ | hello |
+ | |
+ +------------+
+
+
+#+END_SRC
+
+#+RESULTS:
+[[file:temp/hello.png]]
* =C-u C-h a= search funtions
=apropos-command=
+
+* TODO Questions
+- interactive for anonymous function
+When define a key to a anonymous function, the lambda function should be interactive
+
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ ;; (require 'saveplace)
+ ;; (setq-default save-place t)
+ ;; (delete-selection-mode 1)
+#+END_SRC
+
+
+* M prefix
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+
+ ;; M-h - mark-paragraph
+ ;; M-j - new line indent
+ ;; M-k - kill-sentence
+ ;; M-l - downcase words ====== goto-line
+ ;; M-; - comments
+ ;; M-'- abbrev-prefix-mark =======
+ ;; M-RET none ======
+
+ ;; M-y - yank
+ ;; M-u - upcase word
+ ;; M-i - ====== imenu
+ ;; M-o ====== prefix
+ ;; M-p
+ ;; M-[ =====
+ ;; M-] ========
+ ;; M-\ deleter horizontal space =====
+
+ ;; M-n
+ ;; M-m ---- indent
+ ;; M-, --- mark stack====== =
+ ;; M-. lisp-goto-symboo, find definitation
+
+ ;; M-a
+ ;; M-s =====
+ ;; M-d
+ ;; M-f
+ ;; M-g - prefix
+
+ ;; M-q - lisp fill, fill paragraph
+ ;; M-w
+ ;; M-e
+ ;; M-r - rePositioning
+ ;; M-t transpose word
+
+ ;; M-z zap-to-char
+ ;; M-x
+ ;; M-c capitalize-word
+ ;; M-v
+ ;; M-b
+#+END_SRC
+