Skip to content

Instantly share code, notes, and snippets.

@11111000000
Last active May 26, 2022 02:55
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save 11111000000/a0d3500bd2613dfa7883b70c0e59959e to your computer and use it in GitHub Desktop.
Save 11111000000/a0d3500bd2613dfa7883b70c0e59959e to your computer and use it in GitHub Desktop.

GNU OS

Deprecated branch of ORGOS, restored for the link from StackOverflow answer

**

(defvar backup-dir (expand-file-name "~/.emacs.d/backup/"))
(defvar tmp-dir (expand-file-name "~/tmp/"))


(set-language-environment 'utf-8)
(prefer-coding-system 'utf-8)
(set-default-coding-systems 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(setq locale-coding-system 'utf-8)
(setq default-file-name-coding-system 'utf-8)
(setq x-select-request-type '(UTF8_STRING COMPOUND_TEXT TEXT STRING))

(setq-default custom-file (expand-file-name "custom.el" user-emacs-directory)
              desktop-path '("~/.emacs.d/" "~")
              cursor-type 'bar
              indent-tabs-mode nil
              truncate-lines nil
              truncate-partial-width-windows t
              tab-width 2
              indent-line-function 'indent-relative
              show-trailing-whitespace nil
              default-input-method 'russian-computer
              redisplay-dont-pause t
              color-theme-is-cumulative nil
              longlines-show-hard-newlines t
              make-backup-files t
              version-control nil
              require-final-newline t
              default-tabs-width 2
              backup-by-copying t
              kept-new-versions 3
              kept-old-versions 2
              delete-old-versions t
              delete-by-moving-to-trash nil
              temporary-file-directory backup-dir
              small-temporary-file-directory backup-dir
              backup-directory-alist `((".*" . ,backup-dir))
              auto-save-file-name-transforms `((".*" ,backup-dir t))
              auto-save-list-file-prefix backup-dir
              create-lockfiles nil
              popup-use-optimized-column-computation t
              browse-url-browser-function 'browse-url-generic
              browse-url-generic-program "google-chrome-stable"
              max-specpdl-size 32000
              json-encoding-pretty-print t
              json-encoding-default-indentation " ")

Управление Xorg: XELB и EXWM

Следует расписать по разделам

(require 'xelb)
(use-package exwm
  :init

  (require 'exwm)
  (require 'exwm-config)
  (require 'exwm-systemtray)
  (require 'exwm-randr)

  ;; (require 'exwm-cm)

  (setq-default exwm-workspace-number 5
        exwm-workspace-show-all-buffers t
        exwm-layout-show-all-buffers t
        exwm-manage-force-tiling t
        debug-on-error nil
        edebug-all-forms nil
        debug-on-quit nil
        exwm-debug-on nil)

  ;; (setq debug-on-error t)
  ;; (setq debug-on-quit t)
  ;; (setq window-system-default-frame-alist '((x . ((alpha . 100)))))
  ;; (setq exwm-cm-opacity 80)
  ;; (exwm-cm-enable)

  (add-hook 'exwm-update-class-hook
            (lambda ()
              (exwm-workspace-rename-buffer exwm-class-name)))

  ;; Note: This approach does not work with Emacs 25 due to a bug of Emacs.
  (add-hook 'exwm-manage-finish-hook
            (lambda ()
              (when (and exwm-class-name
                         (string= exwm-class-name "URxvt"))
                (exwm-input-set-local-simulation-keys '(([?\C-c ?\C-c] . ?\C-c))))))

  (setq exwm-randr-workspace-output-plist '(0 "VGA1"))

  ;; (add-hook 'exwm-randr-screen-change-hook
  ;;           (lambda ()
  ;;             (start-process-shell-command
  ;;              "xrandr" nil "xrandr --output VGA1 --auto --left-of LVDS1")))

  (exwm-randr-enable)

  (setq window-system-default-frame-alist '((x . ((alpha . 100)))))
  (setq exwm-cm-opacity 80)

  (setq exwm-systemtray-height 16)
  (exwm-systemtray-enable)

  (add-hook 'exwm-update-title-hook
            (lambda ()
              (exwm-workspace-rename-buffer
               (truncate-string-to-width (format "%s : %s" exwm-class-name exwm-title)
                                         43 0 nil "..."))))


  (exwm-input-set-key (kbd "s-q") #'exwm-reset)
  (exwm-input-set-key (kbd "s-w") #'exwm-workspace-switch)
  (exwm-input-set-key (kbd "s-C-d") #'delete-window)  
  (exwm-input-set-key (kbd "s-h") 'windmove-left)
  (exwm-input-set-key (kbd "s-j") 'windmove-down)
  (exwm-input-set-key (kbd "s-k") 'windmove-up)
  (exwm-input-set-key (kbd "s-l") 'windmove-right)
  (exwm-input-set-key (kbd "s-x") 'counsel-linux-app)
  (exwm-input-set-key (kbd "s-SPC") 'exwm-floating-toggle-floating)
  (exwm-input-set-key (kbd "s-K") 'buf-move-up)
  (exwm-input-set-key (kbd "s-J") 'buf-move-down)
  (exwm-input-set-key (kbd "s-H") 'buf-move-left)
  (exwm-input-set-key (kbd "s-L") 'buf-move-right)

  (exwm-input-set-key (kbd "C-s-h") 'split-window-horizontally)
  (exwm-input-set-key (kbd "C-s-j") '(lambda () (interactive) (split-window-vertically) (windmove-down)))
  (exwm-input-set-key (kbd "C-s-k") 'split-window-vertically)
  (exwm-input-set-key (kbd "C-s-l") '(lambda () (interactive) (split-window-horizontally) (windmove-right)))
  (exwm-input-set-key (kbd "s-b") 'ivy-switch-buffer)

  (exwm-input-set-key (kbd "<XF86Back>") 'winner-undo)
  (exwm-input-set-key (kbd "<XF86Forward>") 'winner-redo)

  (exwm-input-set-key (kbd "<XF86AudioMicMute>") '(lambda () (interactive) (async-shell-command "amixer set Capture toggle" nil nil)))
  (exwm-input-set-key (kbd "<XF86AudioMute>")  '(lambda () (interactive) (async-shell-command "amixer sset Master toggle" nil nil)))
  (exwm-input-set-key (kbd "<XF86AudioRaiseVolume>") '(lambda () (interactive) (async-shell-command "pamixer --increase 5" nil nil)))
  (exwm-input-set-key (kbd "<XF86AudioLowerVolume>") '(lambda () (interactive) (async-shell-command "pamixer --decrease 10" nil nil)))

  (dotimes (i 10)
    (exwm-input-set-key (kbd (format "s-%d" i))
                        `(lambda ()
                           (interactive)
                           (exwm-workspace-switch-create ,i))))

  (exwm-input-set-key (kbd "s-r")
                      (lambda (command)
                        (interactive (list (read-shell-command "$ ")))
                        (start-process-shell-command command nil command)))

  (exwm-input-set-simulation-keys
   '(([?\C-b] . left)
     ([?\C-f] . right)
     ([?\C-p] . up)
     ([?\C-n] . down)
     ([?\C-a] . home)
     ([?\C-e] . end)
     ([?\M-v] . prior)
     ([?\C-v] . next)
     ))

  (exwm-enable)
  (exwm-config-ido))

Внешний вид

Цвет

И его отсутствие

~/.emacs.d/images/tao.png

(require 'tao-yang-theme)

(defun tao-palette ()
  (tao-theme-golden-grayscale-yang-palette))

Шрифт

(set-face-attribute 'default nil
                    :family "Iosevka"
                    :width 'normal
                    :weight 'normal)

(set-face-attribute 'mode-line nil
                    :family "Iosevka"
                    :width 'normal
                    :weight 'normal)

(custom-set-faces
 '(variable-pitch ((t (:family "Iosevka")))))

Дашборд

(use-package dashboard
  :disabled t
  :config
  (setq dashboard-items '((recents  . 5)
                          (bookmarks . 5)
                          (projects . 5)))
  (dashboard-setup-startup-hook))

Концентрация

(custom-set-variables '(ring-bell-function 'ignore))

(setq-default initial-scratch-message ""
              inhibit-startup-message t
              inhibit-startup-echo-area-message ""
              visible-bell nil)

(mapc
 (lambda (mode)
   (when (fboundp mode)
     (funcall mode -1)))
 '(menu-bar-mode tool-bar-mode scroll-bar-mode blink-cursor-mode global-hl-line-mode))


(defalias 'yes-or-no-p 'y-or-n-p)

Управление окнами

Минибуфер

Не показывать нажатые клавиши (в wm ненужно)

(setq echo-keystrokes 0)

<M-C-e> редактор для минибуфера (TODO протестировать)

(use-package miniedit
  :ensure t
  :commands minibuffer-edit
  :init (miniedit-install))

;; (defun stop-using-minibuffer ()
;;   "kill the minibuffer"
;;   (when (and (>= (recursion-depth) 1) (active-minibuffer-window))
;;     (abort-recursive-edit)))
;; (add-hook 'mouse-leave-buffer-hook 'stop-using-minibuffer)

Клавиши

(global-set-key (kbd "C-x C-b") 'ibuffer)

Машина времени

(use-package winner
  :ensure t
  :bind (("<XF86Back>" . winner-undo)
         ("<XF86Forward>" . winner-redo))

  :init
  (winner-mode t)
  (global-set-key (kbd "<XF86Back>") 'winner-undo)
  (global-set-key (kbd "<XF86Forward>") 'winner-redo))

Перемещение

(use-package buffer-move
  :ensure t
  :config
  (global-set-key (kbd "s-K") 'buf-move-up)
  (global-set-key (kbd "s-J") 'buf-move-down)
  (global-set-key (kbd "s-H") 'buf-move-left)
  (global-set-key (kbd "s-L") 'buf-move-right))

Золотое сечение

(use-package golden-ratio
  :ensure t
  :bind(("C-x +" . golden-ratio)
        ("C-x =" . balance-windows)
        ("C-x _" . maximize-window)
        ("C-x -" . minimize-window))
  :init
  (golden-ratio-mode -1))

Всплывающие окна

(use-package popwin
  :ensure t
  :bind (("C-`" . popwin:keymap)
         ("M-`" . popwin:popup-last-buffer)         
         ("C-c p m" . popwin:messages))

  :config

  (popwin-mode 1)
  (setq display-buffer-function 'popwin:display-buffer)
  (setq-default popwin:adjust-other-windows t)
  (global-set-key (kbd "C-c p") popwin:keymap)
  ;;(global-set-key (kbd "C-c C-p") popwin:keymap)
  (mapc (lambda (x) (push x popwin:special-display-config))
        '(("*undo-tree*"              :width 25 :position right)
          ("*Kill Ring*"              :height 20 :position top)
          ("*skewer-repl*"            :height 20 :position bottom)
          ("*skewer-livescript-repl*" :height 20 :position bottom :stick t)
          ("*kite-mini-console*"      :height 20 :position bottom :stick t)
          ("*livescript-compiled*"    :height 20 :position bottom :stick t)
          ("*Help*"                   :height 25 :position top)
          ("*Backtrace*"              :height 20 :position bottom)
          ("*How do I*"               :height 20 :position top)
          ("*prodigy*"                :height 20 :position bottom)
          ("*Swoop*"                  :height 20 :position bottom)
          ("*eshell*"                 :height 20 :position bottom :stick t)
          ("*ielm*"                   :height 20 :position bottom)
          ("*Packages*"               :height 20 :position bottom)
          ("*Messages*"               :height 20 :position bottom :stick t)
          ("^\*Compile\-Log\*.*$"     :height 20 :position bottom)
          ("*scratch*"                :height 20 :position bottom :stick t)
          ("^.*Developer Tools.*$"    :regexp t :height 20 :position bottom)          
          ("^\*hg.*\*$"               :regexp t :height 20 :position bottom)
          ("^\*aHg.*\*$"              :regexp t :height 20 :position bottom)
          ("^\*magit.*\*$"            :regexp t :height 20 :position bottom)
          (packages-menu-mode         :position bottom :height 20) ;don't working
          ;;(dired-mode :position left :width 30) ;working but not needed
          (magit-mode                 :position bottom :height 20)))
  :init

  )

Всплывающий scratch-буффер

(use-package scratch-pop
  :ensure t
  :bind
  (("C-c p l" . scratch-pop))
  :init
  (global-set-key (kbd "C-c p l") 'scratch-pop)
  )

Клавиша для ниндзя-ORG

Перспективы

(defun setup-windows ()
  "Organize a series of windows."
  (interactive)
  (delete-other-windows)

  (sx-tab-frontpage t nil)

  (split-window-horizontally)
  (other-window 1)
  (find-file "~/.emacs.d/config.org")

  (split-window-vertically)
  (elfeed)

  (other-window 2)
  (split-window-vertically)
  (dired "~")

  (window-configuration-to-register ?w))

Скрытые окна

(add-to-list 'display-buffer-alist (cons "\\*Async Shell Command\\*.*" (cons #'display-buffer-no-window nil)))

Строка статуса

Дата и время в 24-часовом формате

(setq display-time-day-and-date t
      display-time-24hr-format t)
(display-time-mode 1)
(display-battery-mode 1)

Уникальные имена для буферов

(use-package uniquify
  :config
  (setq uniquify-buffer-name-style 'forward))

STARTED Powerline

(use-package powerline
  :ensure t
  :bind
  (("M-m" . toggle-mode-line))
  :init
  (setq powerline-default-separator 'wave
        powerline-height 20
        powerline-default-separator-dir '(right . right))

  (powerline-default-theme)
  (display-time-mode)

  )

SOMEDAY время и дата могут отображаться в трее

CANCELLED Smart-mode-line

  • State “CANCELLED” from “DONE” [2016-11-21 Пн 16:48]
    Легче, но хуже настраивается, чем Powerline
(use-package smart-mode-line
  :disabled t
  :ensure nil
  :init
  (smart-mode-line-enable t))

Клавиатура

Сброс

(dolist (key '("C-z"
               "C-q"
               "C-h"
               "C-j"
               "C-k"
               "C-l"
               "C-M-h"
               "C-M-j"
               "C-M-k"
               "C-M-l"
               "M-h"
               "M-j"
               "M-k"
               "M-l"
               "C-d"
               "C-w"
               "<XF86Forward>"
               "<XF86Back>")) (global-unset-key (kbd key)))

Режим Бога

(use-package god-mode
  :ensure t
  :bind  (( "<escape>" . god-local-mode)
          ( "M-i" . god-local-mode)
          ( "C-j" . next-line)
          ( "C-k" . previous-line)
          ( "C-h" . backward-char)
          ( "C-l" . forward-char)
          ( "C-o" . vi-open-line-below)
          ( "M-o" . vi-open-line-above)
          ( "C-x C-1" . delete-other-windows)
          ( "C-x C-2" . split-window-below)
          ( "C-x C-3" . split-window-right)
          ( "C-x C-0" . delete-window)
          ( "C-d C-f" . delete-forward-char)
          ( "C-d C-b" . backward-delete-char-untabify)
          ( "C-d C-e" . kill-line)
          ( "C-d C-w" . delete-trailing-whitespace)
          ( "C-d C-a" . delete-to-begin))

  :init

  (god-mode-all)

  (defun my-update-cursor ()
    (setq cursor-type (if (or god-local-mode buffer-read-only) 'box 'bar)))

  (setq god-exempt-major-modes '(dired-mode
                                 wdired-mode
                                 grep-mode
                                 vc-annotate-mode
                                 eshell-mode
                                 shell-mode
                                 term-mode
                                 neotree-mode
                                 kite-mini-console-mode
                                 mu4e-main-mode
                                 mu4e-headers-mode
                                 mu4e-view-mode
                                 browse-kill-ring-mode
                                 sx-question-mode
                                 info-mode
                                 prodigy-mode)

        god-exempt-predicates (list #'god-exempt-mode-p))

  (diminish 'god-local-mode "")
  (add-hook 'god-mode-enabled-hook 'my-update-cursor)
  (add-hook 'god-mode-disabled-hook 'my-update-cursor)
  (define-keys god-local-mode-map (list
                                   "V" 'mark-current-line
                                   "i" 'god-local-mode
                                   "h" 'backward-char
                                   "j" 'next-line
                                   "k" 'previous-line
                                   "l" 'forward-char
                                   (kbd "C-h") 'backward-char
                                   (kbd "C-j") 'next-line
                                   (kbd "C-k") 'previous-line
                                   (kbd "C-l") 'forward-char
                                   "H" (lambda () (interactive) (progn (backward-char 5) (scroll-right 5)))
                                   "J" (lambda () (interactive) (progn (next-line 5) (scroll-up 5)))
                                   "K" (lambda () (interactive) (progn (previous-line 5) (scroll-down 5)))
                                   "L" (lambda () (interactive) (progn (forward-char 5) (scroll-left 5)))
                                   )))

Редактор

Курсор

Телепорт

(use-package avy
  :ensure t
  :bind   (("C-t" . avy-goto-char)
           ("C-d C-t" . avy-zap-to-char))
  :init
  (setq avy-background nil))

Подсветка перемещения

(use-package beacon
  :disabled t
  :ensure t
  :demand t
  :diminish beacon-mode
  :bind* (("C-c SPC" . beacon-blink))
  :config
  (setq beacon-blink-duration 0.2
        beacon-blink-delay 0.2
        beacon-size 7)
  (beacon-mode 1))

Отступы

Подсветка

(use-package highlight-indentation
  :ensure t)

Умное выделение

(use-package expand-region
  :ensure t
  :bind
  (("C-v" . er/expand-region)
   ("M-v" . er/contract-region)
   ("C-S-v" . mark-current-line))
  :config
  (setq expand-region-contract-fast-key "M-v"
        expand-region-reset-fast-key    "<ESC><ESC>"))

Ножницы

(global-set-keys 
 (kbd "C-d C-e") 'kill-line
 (kbd "C-d C-f") 'delete-forward-char
 (kbd "C-d C-b") 'backward-delete-char-untabify
 (kbd "C-d C-e") 'kill-line
 (kbd "C-d C-w") 'delete-trailing-whitespace
 (kbd "C-d C-a") 'delete-to-begin)

(use-package whole-line-or-region
  :ensure t
  :bind (("C-y" . whole-line-or-region-kill-ring-save)
         ("M-y" . whole-line-or-region-yank)
         ("C-M-d" . whole-line-or-region-kill-region)
         ("C-d C-d" . whole-line-or-region-kill-region)))

Скобки

Общий цвет для подсветки скобок (в EMACS не поддержан по-умолчанию):

(use-package paren-face
  :ensure t
  :init
  (global-paren-face-mode)
  :config
  (tao-with-color-variables tao-palette
                            (set-face-attribute 'parenthesis nil
                                                :weight 'normal


                                                :foreground color-6)))

Подсвечиваются уровни вложенности скобок:

(use-package highlight-parentheses
  :ensure t
  :init
  (global-highlight-parentheses-mode)
  (tao-with-color-variables tao-palette
                            (progn
                              ;; (set-face-attribute 'paren-face nil
                              ;;               :weight 'bold)
                              (setq
                               hl-paren-colors (list color-13 color-11 color-9 color-7 color-5)
                               hl-paren-background-colors (list color-4 color-4 color-4 color-4 color-4))))
  )

Умные скобки

Авто-вставка и перемещение

(use-package smartparens
  :ensure t
  :diminish "()"
  :bind  (("C-^" . sp-unwrap-sexp)
          ("M-k" . sp-backward-sexp)
          ("M-j" . sp-down-sexp)
          ("M-h" . sp-backward-up-sexp)
          ("M-l" . sp-next-sexp))
  :init

  (smartparens-global-mode 1)
  (sp-local-pair 'emacs-lisp-mode "'" nil :actions nil)
  (sp-local-pair 'scheme-mode "'" nil :actions nil)
  (sp-local-pair 'lisp-mode "'" nil :actions nil)
  (show-smartparens-global-mode 1))

Управление идентацией

(use-package parinfer
  :ensure t
  :bind (("C-c i" . parinfer-toggle-mode))
  :init
  (setq parinfer-extensions
        '(defaults       
           pretty-parens
           paredit      
           smart-tab    
           smart-yank))  
  (add-hook 'clojure-mode-hook 'parinfer-mode)
  (add-hook 'scheme-mode-hook 'parinfer-mode)
  (add-hook 'emacs-lisp-mode-hook 'parinfer-mode)
  (add-hook 'lisp-mode-hook 'parinfer-mode))

Помнить историю

(use-package savehist
  :ensure t
  :config
  (setq history-length t)
  (setq history-delete-duplicates t)
  (setq savehist-save-minibuffer-history 1)
  (setq savehist-additional-variables
        '(kill-ring
          search-ring
          regexp-search-ring))
  (setq savehist-file "~/.emacs.d/savehist")  
  :init
  (savehist-mode 1)
  )    

Помнить места

(use-package saveplace
  :ensure t
  :config (setq-default save-place t
                        save-place-file "~/.emacs.d/places"))    

Машина времени

C-M-_ - Дерево отмены

(use-package undo-tree
  :ensure t
  :diminish " U"
  :config
  (setq-default undo-tree-auto-save-history t
                undo-tree-history-directory-alist `((".*" . ,(expand-file-name "~/.emacs.d/undo/")))
                undo-tree-visualizer-timestamps t
                undo-tree-visualizer-diff nil)

  (define-keys undo-tree-map (list
                              (kbd "C-/") 'isearch-forward
                              (kbd "M-/") 'isearch-backward))
  :bind
  (("C-M--" . undo-tree-visualize)
   ("C-M-_" . undo-tree-visualize))
  :init
  (global-undo-tree-mode 1))

Перемещение блоков текста

(use-package shift-text
  :ensure t
  :bind  (("C-M-n" . shift-text-down)
          ("C-M-p" . shift-text-up)
          ("C-M-f" . shift-text-right)
          ("C-M-b" . shift-text-left)))    

Прокрутка

(setq-default scroll-conservatively 101
              scroll-step 1
              scroll-margin 12
              hscroll-step 1
              hscroll-margin 12)

Обновление изменений

  • автоматически
    • в служебных буферах
    • в файлах org, log
(setq-default global-auto-revert-non-file-buffers t
              auto-revert-verbose nil)

;; (global-auto-revert-mode t)
;; (add-to-list 'auto-mode-alist '("\\.org\\'" . auto-revert-mode))
;; (add-to-list 'auto-mode-alist '("\\.log\\'" . auto-revert-mode))
  • по нажатию C-x C-r

src_emacs-lisp{ (global-set-key (kbd “C-x C-r”) (lambda () (interactive) (revert-buffer t t))) }

Приблизить/отдалить

(global-set-key (kbd "C-+") 'text-scale-increase)
(global-set-key (kbd "C--") 'text-scale-decrease)
(global-set-key (kbd "C-=") 'text-scale-set)

Уместить в экран

(global-set-key (kbd "C-$") 'toggle-truncate-lines)

Вставка сверху/снизу

(global-set-key (kbd "C-o") 'vi-open-line-below)
(global-set-key (kbd "M-o") 'vi-open-line-above)

Перемещение по правкам

(use-package goto-last-change
  :ensure t
  :bind (("C-c u" . goto-last-change))
  :config)  

Замена

(global-set-key (kbd "C-r") 'replace-string)
(global-set-key (kbd "M-r") 'replace-regexp)

Свёртка

(use-package folding
  :ensure t
  :init)

История Copy/Paste

(use-package browse-kill-ring
  :ensure t
  :bind (("C-M-y" . browse-kill-ring))
  :config
  (setq browse-kill-ring-show-preview nil
        browse-kill-ring-highlight-inserted-item t
        browse-kill-ring-highlight-current-entry t))

Сравнение (diff)

(setq-default ediff-window-setup-function 'ediff-setup-windows-plain
              ediff-split-window-function 'split-window-horizontally
              ediff-diff-options "-w")

(defun custom-ediff-hook ()
  (ediff-setup-keymap)
  (define-key ediff-mode-map "j" 'ediff-next-difference)
  (define-key ediff-mode-map "k" 'ediff-previous-difference))

(add-hook 'ediff-mode-hook 'custom-ediff-hook)

;;(add-hook 'ediff-after-quit-hook-internal 'winner-undo)

Lispy - скобочки

(use-package lispy
  :disabled t
  :ensure nil
  :init)

Автодополнение

anything

(use-package anything :ensure t)

smex

;; (use-package smex
;;   :ensure t
;;   :bind
;;   (("M-x" . smex))
;;   :init
;;   (smex-initialize))

ido

;; (use-package ido
;;   :ensure t
;;   :bind  (("C-x C-f" . ido-find-file))
;;   :init (ido-mode 1)
;;   :config (add-hook 'ido-setup-hook
;;                     (lambda ()
;;                       (define-keys ido-completion-map (list
;;                                                        (kbd "C-n") 'ido-next-match
;;                                                        (kbd "C-p") 'ido-prev-match
;;                                                        [tab] 'ido-complete))))

;;   (setq ido-case-fold t
;;         ido-everywhere t
;;         ido-enable-prefix nil
;;         ido-enable-flex-matching t
;;         ido-create-new-buffer 'always
;;         ido-use-filename-at-point 'guess
;;         ido-max-prospects 10
;;         ido-default-buffer-method 'selected-window
;;         ido-file-extensions-order '(".lisp" ".el" ".js" ".jsx" ".styl" "json")
;;         ido-cannot-complete-command 'ido-next-match)


;;   (setq  ido-ignore-buffers
;;          '("\\` " "^\*Back" ".*Completion" "^\*Ido" "^\*trace"
;;            "^\*compilation" "^\*google" "^\*tor" "^\*urxvt")))



;; (use-package flx-ido
;;   :ensure t
;;   :init (flx-ido-mode 1)
;;   :config (setq ido-use-faces nil
;;                 flx-ido-use-faces t))

;; (use-package ido-ubiquitous
;;   :ensure t
;;   :init (ido-ubiquitous-mode 1))

;; (use-package ido-vertical-mode
;;   :ensure t
;;   :init (ido-vertical-mode t)
;;   :config (progn
;;             (setq ido-vertical-show-count t)))

Ivy

Существует новый интересный режим автодополнения минибуфера

(use-package ivy
  :ensure t
  :config
  (setq  ivy-ignore-buffers '("\\` " "^\*Back" ".*Completion" "^\*Ido" "^\*trace"
                              "^\*compilation" "^\*google" "^\*tor" "^\*urxvt")
         ivy-display-style       'fancy
         ivy-height              7
         ivy-use-virtual-buffers  t
         ivy-initial-inputs-alist  nil
         ivy-switch-buffer-show-info t
         ivy-re-builders-alist '((t . ivy--regex-ignore-order)))

  (global-set-key (kbd "C-x C-b") 'ivy-switch-buffer)
  (global-set-key (kbd "<f6>") 'ivy-resume)
  :init
  (ivy-mode t))
(use-package ivy-rich
  :ensure t
  :config
  (setq ivy-virtual-abbreviate 'full
        ivy-rich-switch-buffer-align-virtual-buffer t)
  :init
  (ivy-set-display-transformer 
   'ivy-switch-buffer 'ivy-rich-switch-buffer-transformer))
(use-package ivy-hydra
  :ensure t
  :config
  (setq ivy-virtual-abbreviate 'full
        ivy-rich-switch-buffer-align-virtual-buffer t)
  :init
  (ivy-set-display-transformer 
   'ivy-switch-buffer 'ivy-rich-switch-buffer-transformer))
(use-package swiper
  :ensure t
  :config
  (global-set-key (kbd "C-s") 'swiper)
  ;; (custom-set-faces
  ;;  '(swiper-minibuffer-match-face-1
  ;;    ((t :background "#dddddd")))
  ;;  '(swiper-minibuffer-match-face-2
  ;;    ((t :background "#bbbbbb" :weight bold)))
  ;;  '(swiper-minibuffer-match-face-3
  ;;    ((t :background "#bbbbff" :weight bold)))
  ;;  '(swiper-minibuffer-match-face-4
  ;;    ((t :background "#ffbbff" :weight bold))))

  :init
  )
(use-package counsel
  :ensure t
  :init
  (counsel-mode 1)
  (global-set-key (kbd "M-x") 'counsel-M-x)
  (global-set-key (kbd "C-x C-f") 'counsel-find-file)
  (global-set-key (kbd "C-x f") 'counsel-recentf)
  (global-set-key (kbd "<f1> f") 'counsel-describe-function)
  (global-set-key (kbd "<f1> v") 'counsel-describe-variable)
  (global-set-key (kbd "<f1> l") 'counsel-find-library)
  (global-set-key (kbd "<f1> I") 'counsel-info-lookup-symbol)
  (global-set-key (kbd "<f1> 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 "M-s a") 'counsel-ag)
  ;;(global-set-key (kbd "C-x l") 'counsel-locate)
  ;;(global-set-key (kbd "M-s r") 'counsel-rhythmbox)
  (exwm-input-set-key (kbd "s-x") 'counsel-linux-app)
  (global-set-key (kbd "s-x") 'counsel-linux-app)  
  (define-key read-expression-map (kbd "C-r") 'counsel-expression-history))

Подсказка клавиш

(use-package guide-key
  :ensure t
  :diminish " C-?"
  :init
  (setq guide-key/guide-key-sequence '("C-x" "C-c" "ESC" "C-," "C-z" "M-t" "M-g" "SPC" "M-s" "C-d")
        guide-key/popup-window-position 'bottom
        guide-key/recursive-key-sequence-flag t
        guide-key/idle-delay 1
        guide-key/text-scale-amount -1)
  (guide-key-mode t))

COMPANY

(use-package company
  :diminish (company-mode . "")
  :ensure t
  :init
  (global-company-mode)
  (global-company-mode-check-buffers)
  (add-to-list 'company-backends 'company-yasnippet)
  (add-to-list 'company-backends 'company-elisp)
  ;;(add-to-list 'company-backends 'company-shell)

  (defun check-expansion ()
    (save-excursion
      (if (looking-at "\\_>") t
        (backward-char 1)
        (if (looking-at "\\.") t
          (backward-char 1)
          (if (looking-at "->") t nil)))))

  (defun do-yas-expand ()
    (let ((yas/fallback-behavior 'return-nil))
      (yas/expand)))

  (defun tab-indent-or-complete ()
    (interactive)
    (if (minibufferp)
        (minibuffer-complete)
      (if (or (not yas/minor-mode)
              (null (do-yas-expand)))
          (if (check-expansion)
              (company-complete-common)
            (indent-for-tab-command)))))

  (defun company-complete-common-or-cycle ()
    (interactive)
    (when (company-manual-begin)
      (if (eq last-command 'company-complete-common-or-cycle)
          (let ((company-selection-wrap-around t))
            (call-interactively 'company-select-next))
        (call-interactively 'company-complete-common))))

  (global-set-key [tab] 'tab-indent-or-complete)

  (define-keys company-active-map (list
                                   [tab] 'company-complete-common-or-cycle
                                   (kbd "TAB") 'company-complete-common-or-cycle
                                   (kbd "C-n") (lambda () (interactive) (company-select-next))
                                   (kbd "C-p") (lambda () (interactive) (company-select-previous)))))


  (use-package company-quickhelp
    :ensure t
    :init
    (company-quickhelp-mode 0)
    (setq company-quickhelp-delay 0)
    (eval-after-load 'company
      '(define-key company-active-map (kbd "C-.") #'company-quickhelp-manual-begin))

    ;; (tao-with-color-variables tao-palette (progn
    ;;                                         (setq pos-tip-foreground-color color-11
    ;;                                               pos-tip-background-color color-3)
    ;;                                         ))
    )                                       

EMMET

(use-package emmet-mode
 :ensure t
 :commands emmet-mode
 :config
 (add-hook 'html-mode-hook 'emmet-mode)
 (add-hook 'css-mode-hook 'emmet-mode)) 

FLX-ISEARCH

(use-package flx-isearch
  :ensure t
  :bind (( "C-M-s" . flx-isearch-forward)))

DMENU

(use-package dmenu
  :ensure t)
           

Файлы

часто используемые

(use-package recentf
  :ensure t
  :bind (("C-x f" . my/find-file-recent)
         ("C-x C-r" . my/find-file-recent)
         ("C-c C-f" . my/find-file-recent))
  :init (recentf-mode t)
  :config (setq recentf-max-saved-items 300
                recentf-max-menu-items 35))

dired

(use-package dired
  :bind (("C-x d" . dired-jump)
         ("C-x C-d" . dired-jump))

  :init

  (setq dired-listing-switches "-aBhlv  --group-directories-first"

        dired-dwim-target t)

  (add-hook 'dired-mode-hook (lambda ()
                               (define-keys dired-mode-map (list
                                                            "I" 'wdired-change-to-wdired-mode
                                                            "i" nil
                                                            "j" 'dired-next-line
                                                            "k" 'dired-previous-line
                                                            "h" 'dired-up-directory
                                                            "l" 'dired-find-file
                                                            (kbd "M-l") nil
                                                            (kbd "C-j") 'next-line
                                                            (kbd "M-+") 'my-dired-create-file
                                                            (kbd "u") 'dired-get-sie))
                               (hl-line-mode t)))

  (add-hook 'wdired-mode-hook (lambda ()
                                (define-keys wdired-mode-map (list
                                                              (kbd "C-j") 'next-line
                                                              (kbd "C-g C-g") 'wdired-exit
                                                              )))))

(use-package dired+
  :ensure t
  :config 
  (define-keys dired-mode-map (list
                               "j" 'dired-next-line
                               "k" 'dired-previous-line
                               "h" 'dired-up-directory
                               "l" 'diredp-find-file-reuse-dir-buffer ;
                               (kbd "RET") 'diredp-find-file-reuse-dir-buffer
                               (kbd "M-l") nil
                               )))

(use-package dired-details :ensure t)

(use-package dired-details+ 
  :ensure t
  :init (setq dired-details-initially-hide t))

;;(require 'dired-visit-history)

(use-package dired-single :ensure t)

(use-package  ztree
  :ensure t)

(use-package neotree
  :ensure t
  :bind (("C-c d" . neotree-toggle) ("C-c C-d" . neotree-toggle))
  :init (setq neo-create-file-auto-open t
              neo-mode-line-type 'none
              neo-persist-show t
              neo-window-width 30
              neo-show-updir-line nil
              neo-auto-indent-point t
              neo-banner-message nil
              neo-modern-sidebar t
              neo-theme 'ascii)

  :config

  (define-keys neotree-mode-map (list
                                 [escape]  'neotree-hide
                                 "l"   'neotree-enter
                                 "j"   'neotree-next-line
                                 "k"   'neotree-previous-line
                                 "h"   'neotree-select-up-node
                                 (kbd "C-x C-d") 'neotree-toggle
                                 (kbd "C-c C-d") 'neotree-toggle
                                 (kbd "cd") 'neotree-toggle
                                 (kbd "RET")   'neotree-enter
                                 (kbd "<M-return>")   'neotree-change-root
                                 "C"   'neotree-copy-node
                                 "D"   'neotree-delete-node
                                 "R"   'neotree-delete-node
                                 "g"   'neotree-refresh
                                 "q"   'neotree-hide
                                 "r"   'neotree-rename-node
                                 "o"   'neotree-dir
                                 "I"   'neotree-hidden-file-toggle
                                 ))

  (add-hook 'neotree-mode-hook (lambda ()
                                 (hl-line-mode t))))

(use-package dired-toggle-sudo
  :ensure t
  :if (not noninteractive)
  :commands dired-toggle-sudo)

Изображения

Навигация при просмотре каталога и отдельного изображения

(use-package image-mode
  :init
  (add-hook 'image-mode-hook (lambda ()
                               (define-keys image-mode-map (list
                                                            (kbd "C-n") 'image-next-file
                                                            (kbd "C-p") 'image-previous-file
                                                            (kbd "n") 'image-next-file
                                                            (kbd "p") 'image-previous-file
                                                            (kbd "C-=") 'imagex-sticky-zoom-in
                                                            (kbd "C-+") 'imagex-sticky-zoom-in
                                                            (kbd "C--") 'imagex-sticky-zoom-out
                                                            "+" 'imagex-sticky-zoom-in
                                                            "-" 'imagex-sticky-zoom-out))

                               (imagex-global-sticky-mode t)
                               (imagex-auto-adjust-mode t)
                               )))

Поиск

(use-package ag
:ensure t)

Код

JSON

(use-package json-mode
 :mode ("\\.json$" . json-mode)
 :init (add-hook 'json-mode-hook
                 (lambda ()
                   (make-local-variable 'js-indent-level)
                   (setq js-indent-level 2))))
   

TERN

(use-package tern
  :ensure t
  :config
  (define-key tern-mode-keymap (kbd "C-c C-d") 'neotree-toggle ))
    

JS2-MODE

(use-package js2-mode
  :ensure t
  :mode (("\\.js$" . js2-mode)
         ("\\.jsx$" . js2-jsx-mode)
         ("Jakefile$" . js2-mode))

  :interpreter ("node" . js2-mode)
  :bind 
  (("C-a" . back-to-indentation-or-beginning-of-line)
   ("M-j" . nil)
   ("RET" . newline-and-indent)
   ("C-c SPC" . hs-toggle-hiding)
   ("C-; t" . js-doc-insert-file-doc)
   ("C-; f" . js-doc-insert-function-doc))

  :config

  (defface js-br-c-face
    '((((class color))
       (:foreground "#aaaaaa")))
    "Face for displaying a paren."
    :group 'faces)

  (add-to-list 'load-path "~/.emacs.d/es6-snippets")
  (require 'es6-snippets)
  (define-key js2-mode-map (kbd "M-j") nil)
  (define-key js2-mode-map (kbd "C-.") 'js2-jump-to-definition)
  ;; (defun modify-syntax-table-for-jsx ()
  ;;   (modify-syntax-entry ?< "(>")
  ;;   (modify-syntax-entry ?> ")<"))
  ;; (eval-after-load 'js2-mode
  ;; '(sp-local-pair 'js2-mode "<" ">"))
  (setq js2-strict-missing-semi-warning nil)
  (setq js2-missing-semi-one-line-override t)
  (add-hook 'js2-mode-hook (lambda ()
                             (setq js2-basic-offset 2
                                   js2-indent-level 2
                                   js2-bounce-indent-p nil)
                             (tern-mode t)
                             (company-mode t)
                             (paren-face-mode t)
                             (pretty-mode t)
                             (electric-indent-mode 0)
                             (font-lock-add-keywords nil '(("[{};]" . 'js-br-c-face )))
                             ;;(dtrt-indent-mode t)
                             ;;(hs-minor-mode 1)
                             ;;(js2-jsx-mode)
                             ;;(modify-syntax-table-for-jsx)
                             )))    

JS-DOC

(use-package js-doc :ensure t)
    

J2-REFACTOR

(use-package js2-refactor
  :ensure t
  :diminish " jsr"
  :init
  (add-hook 'js2-mode-hook (lambda () (js2-refactor-mode)))
  :config
  (js2r-add-keybindings-with-prefix "C-,"))

(use-package discover-js2-refactor
  :ensure t
  :init)

STYLUS

(use-package stylus-mode
  :ensure t
  :init
  (add-hook 'stylus-mode-hook
            (lambda ()
              (set 'tab-width 2)
              (pretty-mode t)
              (highlight-indentation-current-column-mode t)
              (highlight-parentheses-mode t))))    

SASS

(use-package sass-mode
  :ensure t
  :init
  (add-hook 'sass-mode-hook
            (lambda ()
              (set 'tab-width 2)
              (pretty-mode t)
              (highlight-indentation-current-column-mode t)
              (highlight-parentheses-mode t))))

RAINBOW

(use-package rainbow-mode
  :ensure t
  :init
  (add-hook 'css-mode-hook 'rainbow-mode)
  (add-hook 'sass-mode-hook 'rainbow-mode)
  (add-hook 'less-css-mode-hook 'rainbow-mode))

PRETTY

(use-package pretty-mode
  :ensure t
  :config
  (add-to-list 'pretty-modes-aliases '(js2-jsx-mode . javascript-mode) )
  (pretty-activate-groups '(:greek :greek-capitals :greek-lowercase) '(emacs-lisp-mode))
  (pretty-activate-groups '(:greek :greek-capitals :greek-lowercase) '(lisp-mode))
  (pretty-activate-groups '(:greek :greek-capitals :greek-lowercase) '(javascript-mode))
  (add-hook 'emacs-lisp-mode-hook
            (lambda ()
              (pretty-mode t)))
  (add-hook 'js2-jsx-mode-hook
            (lambda ()
              (pretty-mode t))))

FLYCHECK

(use-package flycheck
  :ensure t
  :init
  :config
  (setq-default flycheck-disabled-checkers '(emacs-lisp-checkdoc javascript-jshint)))

WEB-MODE

;; (use-package web-mode
;;   :init
;;   (add-to-list 'auto-mode-alist '("\\.html?\\'" . web-mode))
;;   (add-to-list 'auto-mode-alist '("\\.phtml\\'" . web-mode))
;;   (add-to-list 'auto-mode-alist '("\\.tpl\\.php\\'" . web-mode))
;;   (add-to-list 'auto-mode-alist '("\\.jsp\\'" . web-mode))
;;   (add-to-list 'auto-mode-alist '("\\.as[cp]x\\'" . web-mode))
;;   (add-to-list 'auto-mode-alist '("\\.erb\\'" . web-mode))
;;   (add-to-list 'auto-mode-alist '("\\.mustache\\'" . web-mode))
;;   (add-to-list 'auto-mode-alist '("\\.djhtml\\'" . web-mode))
;;   :config
;;   (setq web-mode-disable-auto-pairing t
;;         web-mode-markup-indent-offset 2
;;         web-mode-css-indent-offset 2
;;         web-mode-code-indent-offset 2
;;         web-mode-enable-current-element-highlight nil))









MARKDOWN

(use-package markdown-mode
  :ensure t
  :commands (markdown-mode gfm-mode)
  :mode (("README\\.md\\'" . gfm-mode)
         ("\\.md\\'" . markdown-mode)
         ("\\.markdown\\'" . markdown-mode))
  :init (setq markdown-command "multimarkdown"))

(use-package markdown-preview-mode
  :ensure t)

Org

Файлы

(setq org-directory (expand-file-name "~/org"))
(setq org-agenda-files '("~/org/agenda"))
(setq org-default-notes-file (concat org-directory "/agenda/notes.org"))

Разметка

(setq org-hide-emphasis-markers t)
(setq org-ellipsis "...")
(add-hook 'org-mode-hook 'turn-on-visual-line-mode)

Изображения

(setq org-startup-with-inline-images t)
(setq org-image-actual-width '(400))

Диаграммы

Шпаргалка GraphViz

Подсветка состояний

;; (setq org-todo-keyword-faces
;;     '(("TODO" . (:foreground "blue" :weight bold))
;;       ("DONE" . (:foreground "cyan" :weight bold))
;;       ("WAITING" . (:foreground "red" :weight bold))
;;       ("SOMEDAY" . (:foreground "gray" :weight bold))))  

tao-with-color-variables

Клавиши

(global-set-keys 
    (kbd "C-c l")  'org-store-link
    (kbd "C-c a")  'org-agenda
    (kbd "C-c c")  'org-capture
    (kbd "C-c b")  'org-iswitchb)

(define-keys org-mode-map (list
                           (kbd "<M-return>") 'w3m-browse-url
                           (kbd "<M-S-return>") 'browse-url-at-point
                           (kbd "C-j") 'next-line
                           (kbd "C-k") 'previous-line
                           (kbd "M-N") 'org-shiftright
                           (kbd "M-P") 'org-shiftleft
                           (kbd "M-F") 'org-shiftmetaright
                           (kbd "M-B") 'org-shiftmetaleft
                           (kbd "C-y") 'whole-line-or-region-kill-ring-save
                           (kbd "M-y") 'whole-line-or-region-yank
                           (kbd "C-c s") 'org-insert-src-block
                           (kbd "C-c t") 'org-set-tag
                           ))

Возможные состояния тасков

(setq org-todo-keywords
      '((sequence
         "TODO(t)"
         "TOFIX(f)"
         "TOCODE(c)"         
         "TOBLOG(b)"  
         "STARTED(s)"
         "WAITING(w@/!)"
         "SOMEDAY(.)" "|" "DONE(x!)" "CANCELLED(c@)")
        (sequence "LEARN" "TRY" "TEACH" "|" "COMPLETE(x)")
        (sequence "TOSKETCH" "SKETCHED" "|" "POSTED")
        (sequence "TODELEGATE(-)" "DELEGATED(d)" "|" "COMPLETE(x)")))

Иконки для уровней списков

(setq org-startup-indented nil
      org-hide-leading-stars nil)

(use-package org-bullets
  :ensure t
  :init
    (add-hook 'org-mode-hook (lambda () (org-bullets-mode 1)))
    (setq org-bullets-bullet-list '("" "" "" "" "" "" "" "")))

Блоки кода

digraph architecture {
  graph [rankdir=LR];        
  splines=true;
  node [shape=box, style="filled", color=black,fillcolor="#dfd2f9"];

  A [label="A", fillcolor="#dfd2f9", shape=box3d];
  B [label="B", fillcolor="#d2dff9", shape=components];
  C [label="C", fillcolor="#f9a7a8", shape=cds];

  A -> B [label="AB"];
  B -> C [label="BC"];
  C -> A [style=dotted]
}

автообновление результатов (live-reloading)

(defun my-fix-inline-images ()
  (when org-inline-image-overlays
    (org-redisplay-inline-images)))

(add-hook 'org-babel-after-execute-hook 'my-fix-inline-images)

не cворачивать блоки кода по-умолчанию

(setq org-hide-block-startup nil)    

Подсвечивать код внутри блоков

(setq org-src-fontify-natively t)

TOFIX и внутри inline блоков

(font-lock-add-keywords 'org-mode
            '(("\\(src_\\)\\([^[{]+\\)\\(\\[:.*\\]\\){\\([^}]*\\)}"
               (1 '(:foreground "black" :weight 'normal :height 10)) ; src_ part
               (2 '(:foreground "cyan" :weight 'bold :height 75 :underline "red")) ; "lang" part.
               (3 '(:foreground "#555555" :height 70)) ; [:header arguments] part.
               (4 'org-code) ; "code..." part.
               )))

src_xml{ <div> ok </div> }

Клавиши орг не должны работать в блоках

Автодополнение режима внутри блоков

(setq org-support-shift-select 'always)

Вставка блока, автодополнение языка

     
(defun org-insert-src-block (src-code-type)
  "Insert a `SRC-CODE-TYPE' type source code block in org-mode."
  (interactive
   (let ((src-code-types
          '("emacs-lisp" "python" "C" "sh" "java" "js" "clojure" "C++" "css"
            "calc" "asymptote" "dot" "gnuplot" "ledger" "lilypond" "mscgen"
            "octave" "oz" "plantuml" "R" "sass" "screen" "sql" "awk" "ditaa"
            "haskell" "latex" "lisp" "matlab" "ocaml" "org" "perl" "ruby"
            "scheme" "sqlite")))
     (list (ido-completing-read "Source code type: " src-code-types))))
  (progn
    (newline-and-indent)
    (insert (format "#+BEGIN_SRC %s\n" src-code-type))
    (newline-and-indent)
    (insert "#+END_SRC\n")
    (previous-line 2)
    (org-edit-src-code)))
     

hint: http://orgmode.org/manual/Easy-Templates.html#Easy-Templates - достаточно `<sTAB`

Идентация и клавиша TAB

(setq org-src-tab-acts-natively t
      org-src-preserve-indentation nil
      org-edit-src-content-indentation 2)

Экспорт

настройки экспорта

(add-to-list 'org-modules 'exp-blocks)

(setq org-export-with-smart-quotes t
      org-confirm-babel-evaluate nil
      org-html-html5-fancy t
      org-ascii-links-to-notes nil
      org-html-doctype "xhtml5"
      org-export-backends '(beamer html latex md))

Стили и скрипты в html настраиваются в проекте

(setq org-html-head-include-default-style nil)
(setq org-html-head-include-scripts nil)

Лучше полагаться на CSS в стилизации таблиц, соотв. атрибуты уже не поддерживаются HTML5

(setq org-html-table-default-attributes
      '(:border "0" :cellspacing "0" :cellpadding "6" :rules "none" :frame "none"))

языки для babel

(org-babel-do-load-languages
 'org-babel-load-languages
 '((dot . t) 
   (ditaa . t)
   (emacs-lisp . t)
   (plantuml . t)
   (css . t)
   (R . t)
   (shell . t)))

Экспорт в Reveal.JS

(use-package ox-reveal
  :config
  (setq org-reveal-root "file:///home/az/code/reveal.js/"))

HTML движки: org-page, org-webpage

(use-package org-page
  :ensure t
  :config
  )

(use-package org-webpage
  :ensure t
  :config
  )

htmlize и adaptive-wrap

(use-package htmlize :ensure t)
(use-package adaptive-wrap :ensure t)

Tangle при сохранении

(defun tangle-on-save-org-mode-file()
  (when (string= (message "%s" major-mode) "org-mode")
    (org-babel-tangle)))

(add-hook 'after-save-hook 'tangle-on-save-org-mode-file)



(defun to-agenda-on-save-org-mode-file()
  (when (string= (message "%s" major-mode) "org-mode")
    (org-agenda-file-to-front)))

(add-hook 'after-save-hook 'to-agenda-on-save-org-mode-file)
(global-auto-revert-mode)  
    

Синхронизация

(use-package org-gcal
  :ensure t
  :init
  (setq org-gcal-client-id ""
        org-gcal-client-secret ""
        org-gcal-file-alist '(("" .  "")))
)

(use-package calfw
  :ensure t
  :init
  (require 'calfw-org)
  )

(use-package calfw-gcal
  :ensure t
  :init)

Интернет

Текстовый браузер

(use-package w3m

  :ensure t

  :bind (("C-c o" . w3m-goto-url)
         ("M-RET" . w3m-goto-url)
         ("C-c C-o" . browse-url-at-point)
         ("C-c M-o" . browse-url-at-point)         
         ("M-S-RET" . browse-url-at-point )
         ("C-c p w" . w3m)
         )

  :config

  (autoload 'w3m-browse-url "w3m" ">" t)

  (setq w3m-use-cookies t
        browse-url-new-window-flag t
        w3m-show-graphic-icons-in-header-line t
        w3m-display-inline-images t
        w3m-show-graphic-icons-in-mode-line t
        w3m-user-agent "Mozilla/5.0 (Linux; U; Android 2.3.3; zh-tw; HTC_Pyramid Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533."
        w3m-session-load-always t
        w3m-session-autosave t
        w3m-session-load-last-sessions t)

  (defadvice browse-url-url-at-point (after w3m-anchor-at-point activate)
    "Browse the url at point. If w3m-anchor finds a url, use it."
    (setq ad-return-value 
          (or
           (w3m-anchor)
           ad-return-value)))

  (defun w3m-browse-url-other-window (url &optional newwin)
    (let ((w3m-pop-up-windows t))
      (if (one-window-p) (split-window))
      (other-window 1)
      (w3m-browse-url url newwin)))

  (defun w3m-copy-url-at-point ()
    (interactive)
    (let ((url (w3m-anchor)))
      (if (w3m-url-valid url)
      (kill-new (w3m-anchor))
      (message "No URL at point!"))))


  (require 'popwin-w3m)

  (add-hook 'w3m-mode-hook (lambda ()
                             (w3m-lnum-mode 1)
                             (local-unset-key (kbd "C-d"))
                             (local-unset-key (kbd "d"))
                             (define-keys w3m-mode-map (list
                                                        (kbd "M-n") 'w3m-tab-next-buffer
                                                        (kbd "M-p") 'w3m-tab-previous-buffer
                                                        (kbd "<M-return>") 'w3m-goto-url-new-session
                                                        (kbd "<M-S-return>") 'browse-url-at-point
                                                        (kbd "M-o") 'w3m-goto-url-new-session
                                                        (kbd "O") 'w3m-goto-url-new-session
                                                        (kbd "o") 'w3m-goto-url
                                                        (kbd "C-o") 'w3m-goto-url
                                                        "d" nil
                                                        (kbd "dd") 'w3m-delete-buffer
                                                        (kbd "C-d") nil
                                                        (kbd "C-d C-d") 'w3m-delete-buffer
                                                        (kbd "C-x k") 'w3m-delete-buffer
                                                        (kbd "B") 'w3m-view-previous-page
                                                        (kbd "F") 'w3m-view-next-page                                                        
                                                        (kbd "M-B") 'w3m-view-previous-page
                                                        (kbd "M-F") 'w3m-view-next-page
                                                        (kbd "C-b") 'w3m-select-buffer
                                                        (kbd "C-r") 'w3m-reload-this-page
                                                        (kbd "M-Y") '(lambda () (interactive) (w3m-goto-url (x-get-clipboard)))
                                                        (kbd "M-<left>") 'w3m-view-previous-page
                                                        (kbd "M-<right>") 'w3m-view-next-page))))

  (add-hook 'w3m-lnum-mode-hook
            (lambda ()
              (define-keys w3m-lnum-mode-map (list
                                              (kbd "C-d") nil
                                              "d" nil
                                              (kbd "dd") 'w3m-delete-buffer
                                              (kbd "C-d C-d") 'w3m-delete-buffer
                                              (kbd "C-x k") 'w3m-delete-buffer
                                              (kbd "C-x C-k") 'w3m-delete-buffer
                                              (kbd "t") 'w3m-lnum-follow
                                              (kbd "C-t") 'w3m-lnum-follow
                                              (kbd "M-t") 'w3m-lnum-universal
                                              (kbd "C-M-t") 'w3m-lnum-universal)))))

Надмозг Chrome

(use-package kite-mini
  :ensure t
  :bind (("C-c p j" . kite-mini-console))
  :init
  (require 'kite-mini-console)
  (add-hook 'js-mode-hook (lambda () (kite-mini-mode t)))
  (add-hook 'css-mode-hook (lambda () (kite-mini-mode t))))

Поисковые движки

(use-package engine-mode

  :ensure t
  :config

  (setq engine/browser-function 'w3m-goto-url-new-session)
   
  (engine/set-keymap-prefix (kbd "C-c e"))

  (defengine amazon
    "http://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Daps&field-keywords=%s")

  (defengine aliexpress
    "https://ru.aliexpress.com/af/%s.html"
    :browser 'browse-url-generic
    :keybinding "ali")

  (defengine duckduckgo
    "https://duckduckgo.com/?q=%s"
    :keybinding "dg")

  (defengine github
    "https://github.com/search?ref=simplesearch&q=%s"
    :keybinding "gh")

  (defengine google
    "http://www.google.com/search?ie=utf-8&oe=utf-8&q=%s"
    :keybinding "go")

  (defengine google-images
    "http://www.google.com/images?hl=en&source=hp&biw=1440&bih=795&gbv=2&aq=f&aqi=&aql=&oq=&q=%s"
    :keybinding "gi")

  (defengine google-maps
    "http://maps.google.com/maps?q=%s"
    :keybinding "gm"    
    :docstring "Mappin' it up.")

  (defengine project-gutenberg
    "http://www.gutenberg.org/ebooks/search.html/?format=html&default_prefix=all&sort_order=&query=%s")

  (defengine rfcs
    "http://pretty-rfc.herokuapp.com/search?q=%s")

  (defengine so
    "https://stackoverflow.com/search?q=%s"
    :keybinding "so"    )

  (defengine ru-so
    "https://ru.stackoverflow.com/search?q=%s"
    :keybinding "rso"    )

  (defengine twitter
    "https://twitter.com/search?q=%s"
    :keybinding "tw"    )

  (defengine wikipedia
    "http://www.wikipedia.org/search-redirect.php?language=ru&go=Go&search=%s"
    :keybinding "wi"
    :docstring "Searchin' the wikis.")

  (defengine wiktionary
    "https://www.wikipedia.org/search-redirect.php?family=wiktionary&language=en&go=Go&search=%s")

  (defengine wolfram-alpha
    "http://www.wolframalpha.com/input/?i=%s")

  (defengine youtube
    "http://www.youtube.com/results?aq=f&oq=&search_query=%s"
    :keybinding "yo")

  (engine-mode))

Поисковый движок aliexpress

  • State “DONE” from “TODO” [2016-11-25 Пт 01:24]

Ленты новостей

(use-package elfeed
  :ensure t
  :config
  (define-keys elfeed-search-mode-map (list
                                       (kbd "C-j") 'next-line
                                       (kbd "C-k") 'previous-line
                                       (kbd "C-l") 'elfeed-search-show-entry
                                       (kbd "j") 'next-line
                                       (kbd "k") 'previous-line
                                       (kbd "l") 'elfeed-search-show-entry))
  (define-keys elfeed-show-mode-map (list
                                     (kbd "h") 'elfeed-kill-buffer ))  
  (setq elfeed-feeds
   
        '(("https://lenta.ru/rss" news russia)
          ("https://actualidad.rt.com/feed" news russia)
          ("http://static.feed.rbc.ru/rbc/logical/footer/news.rss" news)
          ("https://meduza.io/rss/all" news russia)
          ("http://newsbabr.com/rss/news.xml" news irkutsk angarsk)
          ("https://www.irk.ru/news.rss" news irkutsk angarsk)
          ("https://postnauka.ru/feed" science)
          ("https://gorky.media/feed/" science)
          ("http://liveangarsk.ru/doska/rss" board))

        elfeed-search-filter "@2-days-ago +unread"))

Добавить rss

Арзамас

Дока

(use-package zeal-at-point
   :ensure t
   :init
   (global-set-key (kbd "<f1> z") 'zeal-at-point))

             (define-keys Info-mode-map (list
                                    "h" 'backward-char
                                    "j" 'next-line
                                    "k" 'previous-line
                                    "l" 'forward-char
                                    (kbd "C-h") 'backward-char
                                    (kbd "C-j") 'next-line
                                    (kbd "C-k") 'previous-line
                                    (kbd "C-l") 'forward-char
                                    "H" (lambda () (interactive) (progn (backward-char 5) (scroll-right 5)))
                                    "J" (lambda () (interactive) (progn (next-line 5) (scroll-up 5)))
                                    "K" (lambda () (interactive) (progn (previous-line 5) (scroll-down 5)))
                                    "L" (lambda () (interactive) (progn (forward-char 5) (scroll-left 5)))
                                    ))

полнотекстовый поиск по документации

Переводы

(use-package sdcv
  :ensure t
  :init
  (global-set-key (kbd "<f1> s") 'sdcv-search-pointer))

(use-package google-translate

  :ensure t

  :bind (("<f1> t" . google-translate-at-point))

  :config

  (setq google-translate-default-source-language "en"
        google-translate-default-target-language "ru"))
   
   

Контроль версий

(use-package magit
  :ensure t
  :config
  (setq magit-last-seen-setup-instructions "1.4.0"))

(use-package ahg
  :ensure t)

(use-package git-gutter
  :ensure t
  :diminish "gut"
  :config
  (custom-set-variables
   '(git-gutter:handled-backends '(git hg))
   '(git-gutter:window-width 2)
   '(git-gutter:unchanged-sign "  "))
  (add-to-list 'git-gutter:update-hooks 'focus-in-hook)
  :init
  (global-git-gutter-mode t))

(use-package git-timemachine
  :ensure t
  :commands git-timemachine)

(use-package gist
  :ensure t
  :bind (("C-c gg" . gist-region-or-buffer)
         ("C-c gp" . gist-region-or-buffer-private)
         ("C-c gl" . gist-list)))      
    

Почта

   
(add-to-list 'load-path "/usr/share/emacs/site-lisp/mu4e")

(require 'mu4e-contrib)

(use-package mu4e

  :init

  (define-keys mu4e-headers-mode-map
    (list
     (kbd "C-%") 'mu4e-headers-change-sorting
     "%" 'mu4e-headers-change-sorting
     "j" 'mu4e-headers-next
     "k" 'mu4e-headers-prev
     ))

  (define-keys mu4e-view-mode-map
    (list
     (kbd "C-n") 'mu4e-view-headers-next
     (kbd "C-p") 'mu4e-view-headers-prev
     ))


  (setq mu4e-html2text-command 'mu4e-shr2text)

  ;;(setq mu4e-html2text-command
  ;;     "html2text | grep -v '&nbsp_place_holder;'")

  ;;(setq mu4e-html2text-command "html2text -utf8 -width 72 -style pretty")

  (setq message-send-mail-function   'smtpmail-send-it
        smtpmail-default-smtp-server ""
        smtpmail-smtp-server         ""
        smtpmail-smtp-user           ""
        mu4e-view-prefer-html        nil
        mu4e-view-show-images        nil
        )


  (setq shr-color-visible-luminance-min 80))

   

Redmine

(use-package org-redmine
   :ensure t
   :config
   (setq org-redmine-uri "")
   (setq org-redmine-auth-username "")
   (setq org-redmine-auth-password "")
   (setq org-redmine-auth-api-key "")
   :init)

Процессы

(use-package list-processes+
  :ensure t
  :init)

(use-package prodigy
  :ensure t
  :bind (( "C-M-`" . prodigy)
         ( "C-c p p" . prodigy))

  :config

  (define-keys prodigy-mode-map (list
                                 "j" 'prodigy-next
                                 "k" 'prodigy-prev))

  (prodigy-define-tag
    :name 'webpack
    :ready-message "webpack: bundle is now VALID."
    :kill-process-buffer-on-stop t)

  (prodigy-define-tag
    :name 'openvpn
    :ready-message "Initialization Sequence Completed"))

Разное

Погода

(use-package wttrin
  :ensure t
  :commands (wttrin)
  :init
  (setq wttrin-default-cities '("Angarsk"
                                "Irkutsk"
                                "Kemerovo"
                                "Voronezh")))

StackOverflow

(use-package howdoi
  :ensure t
  :bind* (("C-c h d q" . howdoi-query)
          ("C-c h d p" . howdoi-query-line-at-point)
          ("C-c h d s" . howdoi-query-insert-code-snippet-at-point)))
(use-package sx
  :ensure t)

Emacs Edit Server

; TEST
(use-package edit-server
  :ensure t
  :init
  ;;(edit-server-start)
  :config
  (setq edit-server-default-major-mode 'markdown-mode))

Синхронизация

;; test diff
(let ((default-directory "~/.emacs.d/"))
  (async-shell-command "")
  (ahg-do-command "pull")
  (ahg-do-command "update")
  (ahg-do-command "merge"))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment