#+BEGIN_SRC emacs-lisp :tangle yes :results silent
(defconst my-name "Peng Li")
(defconst my-email "seudut@gmail.com")
+ (defconst MY-EMACS-DIR (concat (getenv "HOME") "/.emacs.d"))
+ (defconst MY-EMACS-TMP (concat MY-EMACS-DIR "/temp"))
+ (unless (file-exists-p MY-EMACS-TMP)
+ (mkdir MY-EMACS-TMP))
#+END_SRC
** General Setting
(when (display-graphic-p)
(fringe-mode '(0 . 0)))
+
+ (blink-cursor-mode 0)
;; (setq-default indicate-empty-lines t)
;; (setq-default indicate-abuffer-boundaries 'right)
#+END_SRC
;; set temp file path for recentf and auto-save
(setq recentf-save-file (concat sd-temp-directory "recentf"))
+ (setq recentf-max-saved-items 1000)
(setq auto-save-list-file-prefix (concat sd-temp-directory "auto-save-list/.saves-"))
#+END_SRC
(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 140)
+ (set-face-attribute 'default nil :font sd/fixed-font-family :height 120)
(set-face-font 'default sd/fixed-font-family)))
#+END_SRC
(use-package ivy :ensure t)
(ivy-mode 1)
(setq ivy-use-virtual-buffers nil
- ivy-wrap t)
+ ivy-wrap t
+ ivy-count-format "%d/%d ")
(set-face-attribute 'ivy-current-match nil :background "Orange" :foreground "black")
(global-set-key (kbd "M-x") 'counsel-M-x)
- (global-set-key (kbd "C-h f") 'counsel-describe-function)
- (global-set-key (kbd "C-h v") 'counsel-describe-variable)
+ ;; (global-set-key (kbd "C-h f") 'counsel-describe-function)
+ ;; (global-set-key (kbd "C-h v") 'counsel-describe-variable)
(global-set-key (kbd "C-x C-f") 'counsel-find-file)
(define-key read-expression-map (kbd "C-r") 'counsel-expression-history)
(global-set-key (kbd "C-c C-r") 'ivy-resume))
- (use-package counsel-projectile
- :ensure t
- :defer t)
+ ;; (use-package counsel-projectile
+ ;; :ensure t
+ ;; :defer t)
+
+ (add-to-list 'load-path "~/project/counsel-projectile/")
+ (require 'counsel-projectile)
+ (setq counsel-projectile-use-buffer-preselect t)
+ (setq projectile-completion-system 'ivy)
#+END_SRC
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
'ivy--switch-buffer-other-window-action)
((eq (ivy-state-caller ivy-last) 'counsel-recentf)
'find-file-other-window)
+ ((eq (ivy-state-caller ivy-last) 'projectile-find-file)
+ 'projectile-find-file-other-window)
((eq (ivy-state-caller ivy-last) 'counsel-projectile-find-file)
'counsel-projectile-find-file-action-other-window)
(t
(ivy-done)
(ivy-shrink-after-dispatching))
+ (defun sd/exit-ivy-and-swith-to-buffer ()
+ "exit ivy complete, and call swith to buffer"
+ (interactive)
+ (ivy--exhibit)
+ (ivy-set-action (lambda (buf)
+ (ivy-switch-buffer)))
+ (when (ivy-read-action)
+ (ivy-done))
+ (ivy-shrink-after-dispatching))
+
(with-eval-after-load "ivy"
(define-key ivy-minibuffer-map (kbd "C-o") 'ivy-dispatching-done)
- (define-key ivy-minibuffer-map (kbd "C-k") #'sd/swith-buffer-other-window))
+ (define-key ivy-minibuffer-map (kbd "C-k") #'sd/swith-buffer-other-window)
+ ;; (define-key ivy-minibuffer-map (kbd "M-o") nil)
+ (define-key ivy-minibuffer-map (kbd "C-o") #'sd/exit-ivy-and-swith-to-buffer))
#+END_SRC
stolen from [[https://github.com/mariolong/emacs.d/blob/f6a061594ef1b5d1f4750e9dad9dc97d6e122840/emacs-init.org][here]]
;; 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
- ;; 'org-block-begin-line
- ;; 'org-block-end-line))
- ;; (set-face-attribute 'org-table nil :family "Ubuntu Mono" :height 140)
- ;; (set-face-attribute 'org-formula 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))
- ;; (set-face-attribute 'org-block-begin-line nil :inherit 'shadow :slant 'italic :foreground nil)
- ;; (set-face-attribute 'org-block-end-line nil :inherit 'shadow :slant 'italic :foreground nil)
+ (with-eval-after-load "org"
+ (mapc (lambda (face)
+ (set-face-attribute face nil :inherit 'fixed-pitch))
+ (list
+ 'org-code
+ 'org-block
+ 'org-block-background
+ 'org-block-begin-line
+ 'org-block-end-line))
+ (set-face-attribute 'org-table nil :family "Ubuntu Mono" :height 100)
+ (set-face-attribute 'org-formula nil :family "Ubuntu Mono" :height 100)
+ ;; 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))
+ (set-face-attribute 'org-block-begin-line nil :inherit 'shadow :slant 'italic :foreground nil)
+ (set-face-attribute 'org-block-end-line nil :inherit 'shadow :slant 'italic :foreground nil)
- ;; ;; 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)))
+ ;; 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)))
;; (with-eval-after-load "org"
;; (let ((default-font-size (- (face-attribute 'default :height) (if (display-graphic-p) 20 0))))
*** hydra install
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
(use-package hydra
- :ensure t)
- ;; disable new line in minibuffer when hint hydra
- (setq hydra-lv nil)
+ :ensure t
+ ;; disable new line in minibuffer when hint hydra
+ :init
+ (setq hydra-lv nil))
#+END_SRC
*** Windmove Splitter
("u" winner-undo "window-Undo" :exit t)
("r" winner-redo "window-Redo" :exit t))
- (with-eval-after-load "evil"
- (define-key evil-normal-state-map (kbd ";t") 'sd/hydra-window-layout/body))
+ (defhydra sd/hydra-gtags (:color red :colums nil)
+ "ggtags - global"
+ ("d" sd/ggtags-find-definition "Definition" :exit t)
+ ("r" ggtags-find-reference "Reference" :exit t)
+ ("s" sd/ggtags-find-symbol "Symbol" :exit t))
+ (defhydra sd/hydra-projectile (:color red :column nil)
+ "Projectile: "
+ ("s" projectile-switch-open-project "Switch" :exit t)
+ ("f" projectile-find-file "File" :exit t)
+ ("b" projectile-switch-to-buffer "Buffer" :exit t)
+ ("p" projectile-switch-project "Project" :exit t))
#+END_SRC
*** hydra launcher
** goto-last-change
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- (use-package goto-last-change
- :ensure t)
+ ;; (use-package goto-last-change
+ ;; :ensure t)
#+END_SRC
** Ag
("\\.csv\\'" "libreoffice")
("\\.tex\\'" "pdflatex" "latex")
("\\.\\(?:mp4\\|mkv\\|avi\\|rmvb\\|flv\\|ogv\\)\\(?:\\.part\\)?\\'" "mplayer")
- ("\\.\\(?:mp3\\|flac\\)\\'" "rhythmbox")
+ ("\\.\\(?:mp3\\|flac\\|wav\\)\\'" "mplayer")
("\\.html?\\'" "open")
("\\.dmg\\'" "open")
("\\.cue?\\'" "audacious")))
(defun sd/dired-start-process (cmd &optional file-list)
(interactive
- (let ((files (dired-get-marked-files
- t current-prefix-arg)))
+ (let ((files (dired-get-marked-files t current-prefix-arg)))
(list
- (unless (eq system-type 'windows-nt)
- (dired-read-shell-command "& on %s: "
- current-prefix-arg files))
+ (dired-read-shell-command "& on %s: " current-prefix-arg files)
files)))
- (if (eq system-type 'windows-nt)
- (dolist (file file-list)
- (w32-shell-execute "open" (expand-file-name file)))
- (let (list-switch)
- (start-process
- cmd nil shell-file-name
- shell-command-switch
- (format
- "nohup 1>/dev/null 2>/dev/null %s \"%s\""
- cmd
- ;; (if (and (> (length file-list) 1)
- ;; (setq list-switch
- ;; (cadr (assoc cmd ora-dired-filelist-cmd))))
- ;; (format "%s %s" cmd list-switch)
- ;; cmd)
- (mapconcat #'expand-file-name file-list "\" \""))))))
+ ;; (let (list-switch))
+ (start-process
+ cmd nil shell-file-name
+ shell-command-switch
+ (format
+ "nohup 1>/dev/null 2>/dev/null %s \"%s\""
+ cmd
+ ;; (if (and (> (length file-list) 1)
+ ;; (setq list-switch
+ ;; (cadr (assoc cmd ora-dired-filelist-cmd))))
+ ;; (format "%s %s" cmd list-switch)
+ ;; cmd)
+ (mapconcat #'expand-file-name file-list "\" \""))))
+
+
+
#+END_SRC
** dired-hacks
(use-package company-statistics
:ensure t
+ :init
+ (setq company-statistics-file (concat MY-EMACS-TMP "/company-statistics-cache.el"))
:config
(company-statistics-mode))
(yas-reload-all))
#+END_SRC
+** YouCompleteMe
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (use-package ycmd
+ :ensure t
+ :init
+ (use-package company-ycmd
+ :ensure t
+ :init
+ (setq company-ycmd-enable-fuzzy-matching nil)
+ :config
+ (company-ycmd-setup))
+ (setq ycmd-force-semantic-completion t)
+ (add-hook 'c++-mode-hook 'ycmd-mode)
+ (add-hook 'c-mode-hook 'ycmd-mode)
+ (set-variable 'ycmd-server-command '("python" "/Users/peng/project/ycmd/ycmd"))
+ (set-variable 'ycmd-global-config "/Users/peng/project/ycmd/cpp/ycm/.ycm_extra_conf.py"))
+#+END_SRC
+
** company and yasnippet
Add yasnippet as the company candidates
(set-face-attribute 'font-lock-function-name-face nil :foreground "#A6E22E" :weight 'normal :slant 'normal)
(set-face-attribute 'font-lock-variable-name-face nil :foreground "#00FF00")
- (font-lock-add-keywords 'c-mode
- ;; highlight %s \n
- '(("\\([%\\][a-zA-Z]\\)" (1 font-lock-keyword-face prepend))
- ("[^[:alpha:]]\\([[:digit:]]*\\)[^[:alpha:]]" (1 font-lock-constant-face append))
- ;; hex number
- ("[^[:alpha:]]\\(0[x\\|X][0-9a-fA-F]*\\)[^[:alpha:]]" (1 font-lock-constant-face append))
- ;; hightlight the function call
- ("\\s\"?\\(\\(\\sw\\|\\s_\\)+\\(<-\\)?\\)\\s\"?*\\s-*(" (1 font-lock-function-name-face))) t)
+ (dolist (mode '(c-mode
+ c++-mode))
+ (font-lock-add-keywords mode
+ ;; highlight %s \n
+ '(("\\([%\\][a-zA-Z]\\)" (1 font-lock-keyword-face prepend))
+ ("[^[:alpha:]]\\([[:digit:]]*\\)[^[:alpha:]]" (1 font-lock-constant-face append))
+ ;; hex number
+ ("[^[:alpha:]]\\(0[x\\|X][0-9a-fA-F]*\\)[^[:alpha:]]" (1 font-lock-constant-face append))
+ ;; hightlight the function call
+ ("\\s\"?\\(\\(\\sw\\|\\s_\\)+\\(<-\\)?\\)\\s\"?*\\s-*(" (1 font-lock-function-name-face))) t))
+
+ (font-lock-add-keywords 'c++-mode
+ '(
+ ("[\s\\|::]\\(cin\\|cout\\|endl\\)[^[:alpha:][:digit:]]" (1 font-lock-constant-face append))
+ ) t)
#+END_SRC
** Emacs Lisp
;; (setq c-default-style "stroustrup"
;; c-basic-offset 4)
- ;; "C-M-j" is my global binding for avy goto line below
- ;; disable it in c mode
- (mapcar #'(lambda (map)
- (define-key map (kbd "C-M-j") nil))
- (list c-mode-map
- c++-mode-map
- objc-mode-map))
+ ;; ;; "C-M-j" is my global binding for avy goto line below
+ ;; ;; disable it in c mode
+ ;; (mapcar #'(lambda (map)
+ ;; (define-key map (kbd "C-M-j") nil))
+ ;; (list c-mode-map
+ ;; c++-mode-map
+ ;; objc-mode-map))
;; objective c
(add-to-list 'auto-mode-alist '("\\.mm\\'" . objc-mode))
- (setq c-hungry-delete-key t)
+ (setq-default c-hungry-delete-key t)
;; Looks `c-hanging-braces-alist' doesn't work as expected when `electric-pair-mode' is enabled.
;; (advice-add 'c-electric-brace :after (lambda (arg) "Add new line after insert {}" (newline-and-indent)))
#+END_SRC
-
*** irony
**** install irony server
Install clang, on mac, it has =libclang.dylib=, but no develop headers. Install by =brew=
**** irony config
irony-mode-hook, copied from [[https://github.com/Sarcasm/irony-mode][irony-mode]] github
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- (use-package irony
- :ensure t
- :config
- (add-hook 'c++-mode-hook 'irony-mode)
- (add-hook 'c-mode-hook 'irony-mode)
- (add-hook 'objc-mode-hook 'irony-mode))
+ ;; (use-package irony
+ ;; :ensure t
+ ;; :init
+ ;; (add-hook 'c++-mode-hook 'irony-mode)
+ ;; (add-hook 'c-mode-hook 'irony-mode)
+ ;; (add-hook 'objc-mode-hook 'irony-mode))
;; replace the `completion-at-point' and `complete-symbol' bindings in
;; irony-mode's buffers by irony-mode's function
(define-key irony-mode-map [remap complete-symbol]
'irony-completion-at-point-async))
- (add-hook 'irony-mode-hook 'my-irony-mode-hook)
- (add-hook 'irony-mode-hook 'irony-cdb-autosetup-compile-options)
+ ;; (add-hook 'irony-mode-hook 'my-irony-mode-hook)
+ ;; (add-hook 'irony-mode-hook 'irony-cdb-autosetup-compile-options)
- (add-hook 'c++-mode-local-vars-hook #'sd/c++-mode-local-vars)
+ ;; (add-hook 'c++-mode-local-vars-hook #'sd/c++-mode-local-vars)
;; add C++ completions, because by default c++ file can not complete
;; c++ std functions, another method is create .dir-local.el file, for p
irony-company
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- (use-package company-irony
- :ensure t)
+ ;; (use-package company-irony
+ ;; :ensure t)
- (use-package flycheck-irony
- :ensure t)
+ ;; (use-package flycheck-irony
+ ;; :ensure t)
- (use-package company-c-headers
- :ensure t
- :config
- (add-to-list 'company-c-headers-path-system "/usr/include/c++/4.2.1/")
- (add-to-list 'company-c-headers-path-system "/usr/local/include/"))
+ ;; (use-package company-c-headers
+ ;; :ensure t
+ ;; :config
+ ;; (add-to-list 'company-c-headers-path-system "/usr/include/c++/4.2.1/")
+ ;; (add-to-list 'company-c-headers-path-system "/usr/local/include/"))
;; (with-eval-after-load 'company
;; (add-to-list 'company-backends 'company-irony)
;; (add-to-list 'company-backends 'company-c-headers))
- (with-eval-after-load 'company
- (push '(company-irony :with company-yasnippet) company-backends)
- (push '(company-c-headers :with company-yasnippet) company-backends))
+ ;; (with-eval-after-load 'company
+ ;; (push '(company-irony :with company-yasnippet) company-backends)
+ ;; (push '(company-c-headers :with company-yasnippet) company-backends))
- (with-eval-after-load 'flycheck
- (add-hook 'flycheck-mode-hook #'flycheck-irony-setup))
+ ;; (with-eval-after-load 'flycheck
+ ;; (add-hook 'flycheck-mode-hook #'flycheck-irony-setup))
#+END_SRC
*** flycheck
(when (derived-mode-p 'c-mode 'c++-mode 'java-mode)
(ggtags-mode 1))))
+ (defun sd/ggtags-find-definition ()
+ "Find the definition with current name completing."
+ (interactive)
+ (setq current-prefix-arg '(4))
+ (call-interactively 'ggtags-find-definition))
+
+ (defun sd/ggtags-find-symbol ()
+ "Find symbol"
+ (interactive)
+ (setq current-prefix-arg '(4))
+ (call-interactively 'ggtags-find-other-symbol))
+
(require 'cc-mode)
(require 'semantic)
+ (setq semanticdb-default-save-directory (concat MY-EMACS-TMP "/semantic/"))
+ (unless (file-exists-p semanticdb-default-save-directory)
+ (make-directory semanticdb-default-save-directory))
(global-semanticdb-minor-mode 1)
(global-semantic-idle-scheduler-mode 1)
(setq out-file-name (shell-quote-argument (concat (file-name-sans-extension buffer-file-name) ".out"))))
(setq-local compilation-read-command t)
(set (make-local-variable 'compile-command)
- (concat "g++ -Wall "
+ (concat "g++ -Wall -std=c++11 "
current-file-name
" -o "
out-file-name
(add-to-list 'auto-mode-alist '("\\.rkt\\'" . racket-mode))
#+END_SRC
-
* Compile
Set the environments vairables in compilation mode
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
:ensure t)
#+END_SRC
+* Iedit
+#+BEGIN_SRC emacs-lisp :tangle yes :results silent
+ (use-package iedit
+ :ensure t
+ :init
+ (global-set-key (kbd "C-;") #'iedit-mode))
+#+END_SRC
* Gnus
** Gmail setting
Refer [[https://www.emacswiki.org/emacs/GnusGmail][GnusGmail]]
#+BEGIN_SRC emacs-lisp :tangle yes :results silent
(global-set-key (kbd "C-h") 'delete-backward-char)
(global-set-key (kbd "s-m") 'man)
+ (global-set-key (kbd "<s-return>") 'toggle-frame-fullscreen)
+ (global-set-key (kbd "s-f") 'projectile-find-file)
+ (global-set-key (kbd "s-=") 'text-scale-increase)
+ (global-set-key (kbd "s--") 'text-scale-decrease)
#+END_SRC
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]]
(setq projectile-cache-file (concat sd-temp-directory "projectile.cache"))
:config
(add-to-list 'projectile-globally-ignored-files "GTAGS")
- (projectile-global-mode t))
+ (projectile-global-mode t)
+ (global-set-key (kbd "C-M-p") 'projectile-switch-project))
;; change default-directory of scratch buffer to projectile-project-root
(defun sd/project-switch-action ()
(message "rg is not found"))
#+END_SRC
-*** project config =super= keybindings
-#+BEGIN_SRC emacs-lisp :tangle yes :results silent
- ;; (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-; -->
- ;; s-' --> 'next-multiframe-window
- (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-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)
-#+END_SRC
-
** Windown & Buffer - =C-o=
Defind a =hydra= function for windows, buffer & bookmark operations. And map it to =C-o= globally.
Most use =C-o C-o= to switch buffers; =C-o x, v= to split window; =C-o o= to delete other windows
:config
(avy-setup-default))
- (global-set-key (kbd "C-M-j") 'avy-goto-line-below)
- (global-set-key (kbd "C-M-n") 'avy-goto-line-below)
- (global-set-key (kbd "C-M-k") 'avy-goto-line-above)
- (global-set-key (kbd "C-M-p") 'avy-goto-line-above)
+ ;; (global-set-key (kbd "C-M-j") 'avy-goto-line-below)
+ ;; (global-set-key (kbd "C-M-n") 'avy-goto-line-below)
+ ;; (global-set-key (kbd "C-M-k") 'avy-goto-line-above)
+ ;; (global-set-key (kbd "C-M-p") 'avy-goto-line-above)
- (global-set-key (kbd "C-M-f") 'avy-goto-word-1-below)
- (global-set-key (kbd "C-M-b") 'avy-goto-word-1-above)
+ ;; (global-set-key (kbd "C-M-f") 'avy-goto-word-1-below)
+ ;; (global-set-key (kbd "C-M-b") 'avy-goto-word-1-above)
;; (global-set-key (kbd "M-g e") 'avy-goto-word-0)
- (global-set-key (kbd "C-M-w") 'avy-goto-char-timer)
- (global-set-key (kbd "C-M-l") 'avy-goto-char-in-line)
+ ;; (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 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)
+ (global-set-key (kbd "M-g c") 'avy-goto-char)
+ (global-set-key (kbd "M-g b") 'avy-goto-word-0-above)
+ (global-set-key (kbd "M-g w") 'avy-goto-word-0-below)
#+END_SRC
*** =Imenu= goto tag
(el-get-bundle seudut/perspeen
:features perspeen
(setq perspeen-use-tab nil)
- (perspeen-mode))
+ ;; (perspeen-mode)
+ )
;; super-i to switch to ith workspace