;;修改mac的comm按键为super按键
(setq mac-command-modifier 'super)
;;绑定alt为emta按键
(setq mac-option-modifier 'meta)
;;;绑定control为c按键
(setq mac-control-modifier 'control)
;; C-g quit
;; C-h f  function -> key
;; C-h k  key -> function
(bind-key "s-o" 'find-file global-map)
(bind-key "s-s" 'save-buffer global-map)
(bind-key "s-c" 'kill-ring-save global-map)
(bind-key "s-v" 'yank global-map)
(bind-key "s-x" 'kill-region global-map)
(bind-key "s-e" 'switch-to-buffer global-map)
(bind-key "s-w" 'kill-buffer global-map)
(bind-key "s-z" 'undo global-map)
(bind-key "<escape>" 'keyboard-escape-quit global-map)
;;绑定删除快捷键
(global-set-key (kbd "C-c D")  'delete-file-and-buffer);;默认文件编码
(prefer-coding-system 'utf-8)
;;设置各种文件编码
(setq buffer-file-coding-system 'utf-8-unix
      default-file-name-coding-system 'utf-8-unix
      default-keyboard-coding-system 'utf-8-unix
      default-process-coding-system '(utf-8-unix . utf-8-unix)
      default-sendmail-coding-system 'utf-8-unix
      default-terminal-coding-system 'utf-8-unix);;递归删除和递归拷贝
(setq dired-recursive-deletes 'always
      dired-recursive-copies 'always)
;;设置鼠标滚动
(setq mouse-wheel-scroll-amount '(1 ((shift) . 1))
      mouse-wheel-progressive-speed nil
      mouse-wheel-follow-mouse 't)
;;替换yes/no为y/n
(fset 'yes-or-no-p 'y-or-n-p)
(setq-default indent-tabs-mode nil)
;;设置行高
(setq line-spacing 3)
;;编辑下选择替换
(delete-selection-mode 1)
;;高亮当前行
(global-hl-line-mode 1)
;;状态栏
(setq ns-use-srgb-colorspace nil)
;;设置备份文件
(setq backup-directory-alist `(("." . "~/.backup")))
(setq backup-by-copying t)
(setq delete-old-versions t
      kept-new-versions 6
      kept-old-versions 2
      version-control t)
;;去除烦人的备份
(setq backup-directory-alist
      `((".*" . ,temporary-file-directory)))
(setq auto-save-file-name-transforms
      `((".*" ,temporary-file-directory t)))
(put 'dired-find-alternate-file 'disabled nil);;项目管理
(use-package projectile
  :ensure t
  :init
  (projectile-mode)
  :bind
  (("C-c p p" . projectile-switch-project)
   ("C-c p f" . projectile-find-file)
   :map projectile-mode-map
   ("C-c p s s" . counsel-projectile-ag)))(use-package counsel
  :ensure t
  :bind
  (("C-c g" . counsel-git)
   ("C-c G" . counsel-git-grep)
   ("C-s" . swiper)
   ("C-c m" . counsel-imenu)
   ("C-x b" . counsel-ibuffer)
   ("C-c A" . counsel-ag)
   :map ivy-minibuffer-map
   ("<tab>" . ivy-alt-done)
   ("<escape>" . minibuffer-keyboard-quit)
   ("C-r" . counsel-expression-history)))(use-package ivy
  :ensure t
  :init
  (ivy-mode 1))(use-package counsel-projectile
  :ensure t
  :init
  (setq projectile-completion-system 'ivy))
;;  (counsel-projectile-on));; (use-package neotree
;;   :ensure t
;;   :bind
;;   (("s-\\" . neotree-toggle)))(use-package powerline
  :ensure t
  :init
  (powerline-center-theme))(use-package exec-path-from-shell
  :ensure t
  :init
  (exec-path-from-shell-initialize))(use-package ace-window
  :ensure t
  :bind
  (("C-x C-x" . ace-window))
  :init
  (setq aw-keys '(?a ?o ?e ?u ?i ?d ?h ?t ?n)))
;;cewindowd窗口提示大小
(custom-set-faces
 '(aw-leading-char-face ((t (:foreground "green" :weight normal :height 4.5))))
 '(mode-line ((t (:foreground "#030303" :background "#bdbdbd" :box nil))))
 '(mode-line-inactive ((t (:foreground "#f9f9f9" :background "#666666" :box nil)))))(use-package rainbow-delimiters
  :ensure t
  :init
  (add-hook 'clojure-mode-hook 'rainbow-delimiters-mode));;org-mode加强
(use-package org
  :ensure t
  :init
  (setq org-src-fontify-natively t)
  (setq org-hide-leading-stars t)
  (setq org-log-into-drawer t)
  (setq org-todo-keywords '((sequence "TODO(t)" "WAIT(w@/!)" "|" "DONE(d!)" "CANCELED(c@)")))
  (add-hook 'org-mode-hook
            (lambda ()
              (setq org-src-ask-before-returning-to-edit-buffer nil)
              (org-indent-mode 1))))
(setq org-ellipsis "⤵")
(use-package org-bullets
  :ensure t
  :init
  (add-hook 'org-mode-hook 'org-bullets-mode))
(eval-after-load "org"
  '(require 'ox-md nil t))(use-package ag
  :ensure t)(use-package yasnippet
  :ensure t
  :init
  (setq yas-snippet-dirs '("~/.emacs.d/snippets"))
  :config
  (unbind-key "<tab>" yas-minor-mode-map)
  (unbind-key "TAB" yas-minor-mode-map))(use-package whitespace
  :ensure t
  :init
  (dolist (hook '(prog-mode-hook text-mode-hook))
    (add-hook hook #'whitespace-mode))
  (add-hook 'before-save-hook #'whitespace-cleanup)
  :config
  (setq whitespace-line-column 800)
  (setq whitespace-style '(face tabs empty trailing lines-tail)))(use-package highlight-parentheses
  :ensure t
  :init
  (setq hl-paren-delay 0)
  (setq hl-paren-colors '("#3988FB"))
  (setq hl-paren-background-colors '("#484848"))
  (add-hook 'clojure-mode-hook #'highlight-parentheses-mode)
  (add-hook 'emacs-lisp-mode-hook #'highlight-parentheses-mode))(with-eval-after-load "treemacs"
  (setq treemacs-icon-root (propertize "* " 'face 'treemacs-root-face)))
(defun user/toggle-treemacs ()
  (interactive)
  (if (fboundp 'treemacs-current-visibility)
      (pcase (treemacs-current-visibility)
        ('visible (treemacs-select-window))
        ('exists (treemacs-select-window))
        ('none (treemacs)))
    (treemacs)))
(use-package treemacs
  :ensure t
  :bind
  (("C-\\" . user/toggle-treemacs))
  :init
  (setq treemacs-no-png-images t)
  :config
  (treemacs-follow-mode 1))(use-package winner
  :ensure t
  :bind
  (("C-h u" . winner-undo))
  :init
  (winner-mode))(use-package avy
  :ensure t
  :bind
  (("C-x j" . avy-goto-line)))(use-package clojure-mode
  :ensure t)(use-package expand-region
  :bind
  (("C-c C-v" . er/expand-region)))| 按键 | 功能 | 
|---|---|
| M-w d | 复制顶级表达式 | 
| M-w l | 复制当前表达式 | 
| M-w w | 复制当前词 | 
| M-w s | 复制当前符号 | 
(use-package easy-kill
  :ensure t
  :init
  (global-set-key [remap kill-ring-save] 'easy-kill))(use-package cider
  :ensure t
  :bind
  (:map cider-mode-map
        ("C-c <tab>" . cider-inspect-last-result)
        ("<s-return>" .  cider-eval-last-sexp)
        ("<C-return>" .  cider-eval-defun-at-point))
  :init
  (setq cider-prompt-for-symbol nil)
  (setq cider-lein-command "/usr/local/bin/lein"))(use-package paredit
  :ensure t
  :init
  (add-hook 'clojure-mode-hook 'paredit-mode)
  (add-hook 'cider-repl-mode-hook 'paredit-mode)
  (add-hook 'emacs-lisp-mode-hook 'paredit-mode))(use-package aggressive-indent
  :ensure t
  :init
  (add-hook 'clojure-mode-hook 'aggressive-indent-mode)
  (add-hook 'clojure-repl-mode-hook 'aggressive-indent-mode)
  (add-hook 'emacs-lisp-mode-hook 'aggressive-indent-mode))(use-package monroe
  :ensure t)(use-package clj-refactor
  :ensure t
  :init
  (cljr-add-keybindings-with-prefix "C-,")
  (add-hook 'clojure-mode-hook #'clj-refactor-mode)
  (add-hook 'clojure-mode-hook #'yas-minor-mode))(use-package company
  :ensure t
  :bind
  (:map company-active-map
        ("<escape>" . company-abort)
        ("C-n" . company-select-next)
        ("C-p" . company-select-previous))
  :init
  (add-hook 'emacs-lisp-mode-hook #'user/company-elisp-init)
  (add-hook 'clojure-mode-hook #'user/company-clojure-init)
  (add-hook 'eshell-mode-hook #'user/company-eshell-init)
  (add-hook 'cider-repl-mode-hook #'user/company-cider-repl-init)
  (add-hook 'cider-repl-mode-hook #'cider-company-enable-fuzzy-completion)
  (add-hook 'cider-mode-hook #'cider-company-enable-fuzzy-completion)
  (add-hook 'cider-repl-mode-hook #'company-mode)
  (add-hook 'cider-mode-hook #'company-mode)
  (setq company-idle-delay nil)
  (global-company-mode 1));; (add-to-list 'load-path
;;              (expand-file-name "~/.emacs.d/misc"))
;; (require 'parinfer)
;; (bind-key "C-)" 'paredit-forward-slurp-sexp parinfer-mode-map)
;; (bind-key "C-}" 'paredit-forward-barf-sexp parinfer-mode-map)
;; (bind-key "M-r" 'paredit-raise-sexp parinfer-mode-map)
;; (add-hook 'clojure-mode-hook #'parinfer-mode)(use-package elpy
  :ensure t)
(setq elpy-rpc-backend "jedi")
(define-key yas-minor-mode-map (kbd "C-c k") 'yas-expand)
(elpy-enable)~* Git相关
(use-package magit
  :ensure t
  :bind
  (("C-x M-g" . magit-dispatch-popup))
  :init
  (setq magit-completing-read-function 'ivy-completing-read)
  (global-magit-file-mode t));;git修改该提示
;; (use-package git-gutter
;;   :ensure t
;;   :init
;;   (global-git-gutter-mode))(use-package diff-hl
  :ensure t
  :init
  (global-diff-hl-mode t)
  (diff-hl-dired-mode t))(setq custom-file "~/.emacs.d/custom.el")(use-package diminish
  :init
  (diminish 'highlight-parentheses-mode)
  (diminish 'highlight-symbol-mode)
  (diminish 'paredit-mode)
  (diminish 'ivy-mode)
  (diminish 'company-mode)
  (diminish 'yas-minor-mode)
  (diminish 'git-gutter-mode)
  (diminish 'eldoc-mode)
  (diminish 'auto-revert-mode)
  (diminish 'subword-mode)
  (diminish 'hs-minor-mode)
  (diminish 'hideshowvis-minor-mode)
  (diminish 'clj-refactor-mode)
  (diminish 'anzu-mode)
  (diminish 'undo-tree-mode));;去掉边框
(set-face-attribute 'fringe nil
                    :foreground nil
                    :background nil)
(set-frame-parameter nil 'internal-border-width 0)
(set-window-buffer nil (current-buffer))
;;自定义界面
(global-auto-revert-mode 1)
(scroll-bar-mode -1)
(tool-bar-mode -1)
(global-linum-mode -1)(set-default-font "IBM 3270 Narrow-18")
;; (set-default-font "MonoxExtraLight-21")
;; (set-default-font "Comic Sans MS-18")(use-package atom-one-dark-theme
  :ensure)
(use-package challenger-deep-theme
  :ensure)
(use-package zenburn-theme
  :ensure t
  :init
  (load-theme 'zenburn t))(defun user/insert-emacs-lisp-src-block ()
   (interactive)
   (insert "#+BEGIN_SRC emacs-lisp\n\n#+END_SRC\n"))
(bind-key "C-x C-'" #'user/insert-emacs-lisp-src-block)(defun delete-file-and-buffer ()
  "Kill the current buffer and deletes the file it is visiting."
  (interactive)
  (let ((filename (buffer-file-name)))
    (when filename
      (if (vc-backend filename)
          (vc-delete-file filename)
        (progn
          (delete-file filename)
          (message "Deleted file %s" filename)
          (kill-buffer))))))(defun graphic-powerline-config ()
  "powerline setting for graphic"
  (interactive)
  (progn
    (setq powerline-arrow-shape 'arrow)
    (custom-set-faces
     '(mode-line ((t (:foreground "white" :background "#0044cc" :box nil))))
     '(mode-line-inactive ((t (:foreground "white" :background "#262626" :box nil)))))
    (setq powerline-color1 "#0088cc")
    (setq powerline-color2 "white")))
;;状态栏配色
(defun terminal-powerline-config()
  " powerline setting for terminal"
  (interactive)
  (setq powerline-arrow-shape 'arrow)
  (setq powerline-color1 "grey22")
  (setq powerline-color2 "grey22")
  (custom-set-faces
   '(mode-line ((t (:foreground "grey44" :background "grey22" :box nil))))
   '(mode-line-inactive ((t (:foreground "grey22" :background "grey44" :box nil))))))
(graphic-powerline-config)(defun user/company-clojure-init ()
  (bind-key "TAB" 'company-indent-or-complete-common clojure-mode-map)
  (bind-key "<tab>" 'company-indent-or-complete-common clojure-mode-map))
(defun user/company-cider-repl-init ()
  (bind-key "<tab>" 'company-complete-common cider-repl-mode-map))
(defun user/company-eshell-init ()
  (bind-key "<tab>" 'company-complete-common eshell-mode-map))
(defun user/company-elisp-init ()
  (bind-key "TAB" 'company-indent-or-complete-common emacs-lisp-mode-map)
  (bind-key "<tab>" 'company-indent-or-complete-common emacs-lisp-mode-map))(defun loop-alpha ()
  (interactive)
  (let ((h (car alpha-list)))                ;; head value will set to
    ((lambda (a ab)
       (set-frame-parameter (selected-frame) 'alpha (list a ab))
       (add-to-list 'default-frame-alist (cons 'alpha (list a ab)))
       ) (car h) (car (cdr h)))
    (setq alpha-list (cdr (append alpha-list (list h))))))
;;透明度
(global-set-key (kbd "<f10>") 'loop-alpha)
(setq alpha-list '((100 100) (95 65) (85 55) (75 45) (65 35)))(global-set-key (kbd "C-=") 'text-scale-increase)
(global-set-key (kbd "C--") 'text-scale-decrease)(custom-set-variables
 '(eww-search-prefix "https://www.baidu.com/s?wd="));; =============================================================================
;; SQL
;; =============================================================================
(defun user/uppercase-sql-keyword ()
  (let ((init-pos (point)))
    (when (member (char-before)
                  '(41 40 44 59 32 10))
      (save-mark-and-excursion
        (backward-word)
        (if (and (not (nth 3 (syntax-ppss)))
                 (not (nth 4 (syntax-ppss)))
                 (not (let ((face-or-faces (get-text-property (point) 'face)))
                        (if (listp face-or-faces)
                            (or (member 'font-lock-constant-face face-or-faces)
                                (member 'font-lock-variable-name-face face-or-faces))
                          (or (eq 'font-lock-constant-face face-or-faces)
                              (eq 'font-lock-variable-name-face face-or-faces))))))
            (when (<= (save-mark-and-excursion
                        (forward-word 1)
                        (point))
                      init-pos)
              (upcase-word 1)))))))
(defun user/enable-sql-auto-uppercase-keyword ()
  (interactive)
  (add-hook 'post-self-insert-hook #'user/uppercase-sql-keyword t t)
  (modify-syntax-entry ?_ "w" (syntax-table))
  (modify-syntax-entry ?- "w" (syntax-table)))
(add-hook 'sql-mode-hook #'user/enable-sql-auto-uppercase-keyword)
;;; Add keywords for sql fontlock
(font-lock-add-keywords
 'sql-mode
 '(;; For Postgres
   ("\"[-a-zA-Z0-9]+\"" . font-lock-constant-face)
   ;; For MySQL
   ("`[-a-zA-z0-9]+`" . font-lock-constant-face)
   ;; For placeholder
   (":[-a-zA-Z0-9]+" . font-lock-variable-name-face)))