Advertisement
Guest User

Untitled

a guest
May 9th, 2017
380
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 20.70 KB | None | 0 0
  1. ;; Packages
  2. (require 'package)
  3. (add-to-list 'package-archives
  4.              '("melpa" . "https://melpa.org/packages/"))
  5. (when (< emacs-major-version 24)
  6.     ;; For important compatibility libraries like cl-lib
  7.     (add-to-list 'package-archives '("gnu" . "http://elpa.gnu.org/packages/")))
  8. (package-initialize) ;; You might already have this line
  9.  
  10.  
  11. ;; define system
  12. (defun system-is-linux()
  13.     (string-equal system-type "gnu/linux"))
  14.  
  15. ;; Start Emacs as server
  16. (when (system-is-linux)
  17.     (require 'server)
  18.     (unless (server-running-p)
  19.         (server-start)))
  20.  
  21. ;; Disable backup
  22. (setq make-backup-files nil)
  23.  
  24. ;; Dired
  25. (require 'dired)
  26. (setq dired-recursive-deletes 'top)
  27.  
  28. ;; Imenu
  29. (require 'imenu)
  30. (setq imenu-autorescan t)
  31. (setq imenu-use-popup-menu t)
  32.  
  33. (global-set-key (kbd "<f4>") 'imenu)
  34.  
  35. ;; Display name of teh buffer
  36. (setq frame-title-format "GNU Emacs: %b")
  37.  
  38. ;; Disable startup screen
  39. (setq inhibit-splash-screen   t)
  40. (setq inhibit-startup-message t)
  41.  
  42. ;; Show-paren-mode settings
  43. (show-paren-mode t)
  44. (setq show-paren-style 'expression)
  45.  
  46. ;; Electric-modes settings
  47. (electric-pair-mode 1)
  48. (electric-indent-mode 1)
  49.  
  50. ;; Delete selection
  51. (delete-selection-mode t)
  52.  
  53. (add-hook 'after-init-hook #'global-flycheck-mode)
  54. ;; (require 'autopair)
  55. ;; (autopair-global-mode)
  56.  
  57. ;; Regexp search
  58. (global-set-key (kbd "C-s") #'isearch-forward-regexp)
  59. (global-set-key (kbd "C-r") #'isearch-backward-regexp)
  60. (global-set-key (kbd "C-M-s") #'isearch-forward)
  61. (global-set-key (kbd "C-M-r") #'isearch-backward)
  62.  
  63. ;; Disable GUI
  64. (tooltip-mode -1)
  65. (menu-bar-mode -1)
  66. (tool-bar-mode -1)
  67. (scroll-bar-mode -1)
  68. (setq use-dialog-box nil)
  69. ;; (setq redisplay-dont-pause t)
  70. (setq ring-bell-function 'ignore)
  71.  
  72. ;; Set cursor
  73. (setq cursor-type 'bar)
  74. (beacon-mode 1)
  75.  
  76. ;; Scrolling
  77. (setq scroll-step               1)
  78. (setq scroll-margin            10)
  79. (setq scroll-conservatively 10000)
  80.  
  81. ;; Fill column indicator
  82. (require 'fill-column-indicator)
  83. (setq-default fill-column 99)
  84. (setq fci-rule-width 1)
  85. (setq fci-rule-color "#696969")
  86. (define-globalized-minor-mode global-fci-mode fci-mode (lambda () (fci-mode 1)))
  87.  
  88. ;; (global-fci-mode 1)
  89.  
  90.  
  91. ;; ibuffer settings
  92.  
  93. ;; Buffers selectin and ibuffer settings
  94. (require 'bs)
  95. (require 'ibuffer)
  96. ;; (defalias 'list-buffers 'ibuffer-list-buffers)
  97.  
  98. (setq ibuffer-saved-filter-groups
  99.       (quote (("default"
  100.                ("python" (mode . python-mode))
  101.                ("Go" (mode . go-mode))
  102.                ("Slack" (mode . erc-mode))
  103.                ("RPM" (mode . rpm-spec-mode))
  104.                ("planner" (or
  105.                            (name . "^\\*Calendar\\*$")
  106.                            (name . "^diary$")
  107.                            (mode . muse-mode)))
  108.                ("emacs" (or
  109.                          (name . "^\\*scratch\\*$")
  110.                          (name . "^\\*Messages\\*$")))
  111.                ("shell" (name . "^\\*shell*"))
  112.                ))))
  113.  
  114. (setq ibuffer-show-empty-filter-groups nil)
  115.  
  116. (add-hook 'ibuffer-mode-hook
  117.           (lambda ()
  118.               (ibuffer-switch-to-saved-filter-groups "default")
  119.               ;; (ibuffer-filter-by-name "^[^*]")
  120.               ))
  121.  
  122. (add-hook 'ibuffer-hook
  123.           (lambda ()
  124.               (ibuffer-projectile-set-filter-groups)
  125.               (unless (eq ibuffer-sorting-mode 'alphabetic)
  126.                   (ibuffer-do-sort-by-alphabetic))))
  127.  
  128. (global-set-key (kbd "<f2>") 'ibuffer)
  129. (global-set-key (kbd "<f5>") 'buffer-menu)
  130.  
  131. ;; Linum plugin
  132. (require 'linum)
  133. (line-number-mode t)
  134. (global-linum-mode t)
  135. (column-number-mode t)
  136. (setq linum-format " %d ")
  137.  
  138. ;; Fringe settings
  139. (fringe-mode '(4 . 0))
  140. (setq-default indicate-empty-lines t)
  141. (setq-default indicate-buffer-boundaries 'left)
  142. ;; (global-fringe-mode t)            
  143.  
  144. ;; Display file size in mode-line
  145. (setq display-time-24hr-format t)
  146. (display-time-mode             t)
  147. (size-indication-mode          t)
  148.  
  149. ;; Indent settings
  150. (setq-default indent-tabs-mode nil)
  151. (setq-default tab-width 4)
  152. (setq-default c-basic-offset 4)
  153. (setq-default standart-indent 4)
  154. (setq-default lisp-body-indent 4)
  155. (global-set-key (kbd "RET") 'newline-and-indent)
  156. (add-hook 'go-mode-hook (lambda () (my-setup-indent 2)))
  157.  
  158. ;; Clipboard settings
  159. (setq x-select-enable-clipboard t)
  160.  
  161. ;; EOF newlines
  162. (setq require-final-newline t)
  163. (setq next-line-add-newlines nil)
  164.  
  165. ;; Highlight search results
  166. (setq search-highlight t)
  167. (setq query-replace-highlight t)
  168.  
  169. ;; Undo & Redo
  170. (global-unset-key "\C-z")
  171. (global-set-key "\C-z" 'advertised-undo)
  172.  
  173. ;; Comment block
  174. (defun comment-dwim-line (&optional arg)
  175.     "Replacement for comment-dwim"
  176.     (interactive "*P")
  177.     (comment-normalize-vars)
  178.     (if (and (not (region-active-p)) (not (looking-at "[ \t]*$")))
  179.             (comment-or-uncomment-region (line-beginning-position) (line-end-position))
  180.         (comment-dwim arg)))
  181. (global-set-key "\M-;" 'comment-dwim-line)
  182.  
  183. ;; Python settings
  184. ;; ;;;;;;;;;;;;;;;
  185. ;; Python mode hook
  186. (defun my-python-mode-hook ()
  187.     (setq-default py-shell-name "ipython")
  188.     (setq-default py-which-bufname "IPython")
  189.  
  190.     (require 'flymake-python-pyflakes)
  191.     (setq flymake-python-pyflakes-executable "flake8")
  192.     (setq flymake-python-pyflakes-extra-arguments '("--max-line-length=99"))
  193.  
  194.     ;; Jedi
  195.     (setq jedi:complete-on-dot t)
  196.     (require 'company)
  197.     (add-to-list 'company-backends 'company-jedi)
  198.    
  199.     (fci-mode)
  200.     (flymake-python-pyflakes-load)
  201.     (jedi:setup)
  202.     (setq py-autopep8-options '("--max-line-length=99"))
  203.     (py-autopep8-enable-on-save)
  204.     ;; Enable rainbow
  205.     (rainbow-delimiters-mode-enable)
  206.  
  207.     ;; Refactoring
  208.     (add-to-list 'load-path "/usr/share/emacs/site-lisp/pymacs")
  209.     (require 'pymacs)
  210.     (pymacs-load "ropemacs" "rope-")
  211.     )
  212.  
  213. (add-hook 'python-mode-hook 'my-python-mode-hook)
  214.  
  215. ;; End of python settings
  216. ;; ;;;;;;;;;;;;;;;;;;;;;;
  217.  
  218. ;; Enable rainbow
  219. ;; (add-hook 'lisp-mode-hook #'rainbow-delimiters-mode)
  220.  
  221. ;; Close all buffers
  222. (defun close-all-buffers ()
  223.     (interactive)
  224.     (mapc 'kill-buffer (buffer-list)))
  225.  
  226. ;; Copy and Cut whole lines
  227. (put 'kill-ring-save 'interactive-form
  228.      '(interactive
  229.        (if (use-region-p)
  230.                (list (region-beginning) (region-end))
  231.            (list (line-beginning-position) (line-beginning-position 2)))))
  232.  
  233. ;; Projectile + Neotree
  234. (setq neo-smart-open t)
  235. (setq projectile-switch-project-action 'neotree-projectile-action)
  236.  
  237. (defun neotree-project-dir ()
  238.     "Open NeoTree using the git root."
  239.     (interactive)
  240.     (let ((project-dir (projectile-project-root))
  241.           (file-name (buffer-file-name)))
  242.         (neotree-toggle)
  243.         (if project-dir
  244.                 (if (neo-global--window-exists-p)
  245.                         (progn
  246.                             (neotree-dir project-dir)
  247.                             (neotree-find file-name)))
  248.             (message "Could not find git project root."))))
  249.  
  250. (global-set-key "\M-e" 'neotree-project-dir)
  251. (projectile-mode)
  252. (setq projectile-indexing-method 'native)
  253.  
  254. ; Autocomplete
  255. (defun ac-init()
  256.     (require 'auto-complete-config)
  257.     (ac-config-default)
  258.     (setq ac-auto-start 1)
  259.     (setq ac-auto-show-menu t)
  260.     (global-auto-complete-mode t)
  261.     (add-to-list 'ac-modes 'lisp-mode)
  262.     (add-to-list 'ac-sources 'ac-source-variables)
  263.     (add-to-list 'ac-sources 'ac-source-functions)
  264.     (add-to-list 'ac-sources 'ac-source-dictionary))
  265. (ac-init)
  266.  
  267. ;; dirty fix for having AC everywhere
  268. (define-globalized-minor-mode real-global-auto-complete-mode
  269.     auto-complete-mode (lambda ()
  270.                            (if (not (minibufferp (current-buffer)))
  271.                                    (auto-complete-mode 1))
  272.                            ))
  273. (real-global-auto-complete-mode t)
  274.  
  275. ;; Fonts
  276. (add-to-list 'default-frame-alist '(font . "Hack 15"))
  277. (set-face-attribute 'default t :font "Hack 15")
  278.  
  279. ;; Calendar localization
  280. (setq calendar-week-start-day 1
  281.       calendar-day-name-array ["Вс" "Пн" "Вт" "Ср" "Чт" "Пт" "Сб"]
  282.       calendar-month-name-array ["Январь" "Февраль" "Март" "Апрель" "Май"
  283.                                  "Июнь" "Июль" "Август" "Сентябрь"
  284.                                  "Октябрь" "Ноябрь" "Декабрь"])
  285.  
  286. ;; golang
  287. ;; (add-to-list 'load-path "/usr/share/emacs/site-lisp/golang-mode")
  288. (setenv "GOPATH" "/home/difrex/.local")
  289. (require 'go-mode)
  290. (require 'go-complete)
  291. (add-hook 'completion-at-point-functions 'go-complete-at-point)
  292.  
  293. (defun set-exec-path-from-shell-PATH ()
  294.     (let ((path-from-shell (replace-regexp-in-string
  295.                             "[ \t\n]*$"
  296.                             ""
  297.                             (shell-command-to-string "$SHELL --login -i -c 'echo $PATH'"))))
  298.         (setenv "PATH" path-from-shell)
  299.         (setq eshell-path-env path-from-shell) ; for eshell users
  300.         (setq exec-path (split-string path-from-shell path-separator))))
  301.  
  302. (when window-system (set-exec-path-from-shell-PATH))
  303.  
  304. (defun my-go-mode-hook ()
  305.     "My Golang hook."
  306.     ;; Call Gofmt before saving
  307.     (add-hook 'before-save-hook 'gofmt-before-save)
  308.     (if (not (string-match "go" compile-command))
  309.             (set (make-local-variable 'compile-command)
  310.                  "go build -v && go test -v && go vet"))
  311.     ;; Oracle
  312.     (load-file "$GOPATH/src/golang.org/x/tools/cmd/oracle/oracle.el")
  313.     ;; Godef jump key binding                                
  314.     (local-set-key (kbd "M-.") 'godef-jump)
  315.     (local-set-key (kbd "M-*") 'pop-tag-mark)
  316.     ;; Enable rainbow
  317.     (rainbow-delimiters-mode-enable)
  318.     (auto-complete-for-go)
  319.     )
  320. (add-hook 'go-mode-hook 'my-go-mode-hook)
  321.  
  322. ;; Go autocomplete
  323. (defun auto-complete-for-go ()
  324.     "Enable golang autocomple."
  325.     (auto-complete-mode 1))
  326. ;; (add-hook 'go-mode-hook 'auto-complete-for-go)
  327.  
  328. (add-hook 'go-mode-hook #'rainbow-delimiters-mode)
  329.  
  330. (with-eval-after-load 'go-mode
  331.    (require 'go-autocomplete))
  332.  
  333. ;; END OF GOLANG
  334.  
  335.  
  336. ;; Powerline
  337. (setq powerline-default-separator 'bar)
  338. (defun my-powerline-hook()
  339.     (require 'powerline)
  340.     (powerline-default-theme)
  341.  
  342.     (require 'spaceline-config)
  343.     (spaceline-spacemacs-theme)
  344.  
  345.     ;; Battery
  346.     (add-hook 'after-init-hook #'fancy-battery-mode)
  347.     (fancy-battery-mode 1)
  348. )
  349. (add-hook 'after-init-hook 'my-powerline-hook)
  350. ;; End of powerline
  351.  
  352. ;; Short messages
  353. (defalias 'yes-or-no-p 'y-or-n-p)
  354.  
  355. ;; HELM
  356. (require 'helm-config)
  357. (global-set-key (kbd "M-x") 'helm-M-x)
  358. (global-set-key (kbd "C-x r b") #'helm-filtered-bookmarks)
  359. (global-set-key (kbd "C-x C-f") #'helm-find-files)
  360. (helm-mode 1)
  361.  
  362.  
  363. (require 'helm-swoop)
  364.  
  365. ;; Change keybinds to whatever you like :)
  366. (global-set-key (kbd "M-i") 'helm-swoop)
  367. (global-set-key (kbd "M-I") 'helm-swoop-back-to-last-point)
  368. (global-set-key (kbd "C-c M-i") 'helm-multi-swoop)
  369. (global-set-key (kbd "C-x M-i") 'helm-multi-swoop-all)
  370.  
  371. ;; HELM TAB completion
  372. (define-key helm-find-files-map "\t" 'helm-execute-persistent-action)
  373.  
  374. ;; Helm fuzy match
  375. (setq helm-mode-fuzzy-match t)
  376. (setq helm-M-x-fuzzy-match t)
  377.  
  378. ;; When doing isearch, hand the word over to helm-swoop
  379. (define-key isearch-mode-map (kbd "M-i") 'helm-swoop-from-isearch)
  380. (define-key helm-swoop-map (kbd "M-i") 'helm-multi-swoop-all-from-helm-swoop)
  381.  
  382. ;; Save buffer when helm-multi-swoop-edit complete
  383. (setq helm-multi-swoop-edit-save t)
  384.  
  385. ;; If this value is t, split window inside the current window
  386. (setq helm-swoop-split-with-multiple-windows nil)
  387.  
  388. ;; Split direction. 'split-window-vertically or 'split-window-horizontally
  389. (setq helm-swoop-split-direction 'split-window-vertically)
  390.  
  391. ;; If nil, you can slightly boost invoke speed in exchange for text color
  392. (setq helm-swoop-speed-or-color nil)
  393.  
  394. ;; Go to the opposite side of line from the end or beginning of line
  395. (setq helm-swoop-move-to-line-cycle t)
  396.  
  397. ;; Optional face for line numbers
  398. ;; Face name is `helm-swoop-line-number-face`
  399. (setq helm-swoop-use-line-number-face t)
  400.  
  401. ;; END OF HELM
  402.  
  403. ;; Yasnippet
  404. (require 'yasnippet)
  405. (yas-global-mode 1)
  406.  
  407. ;; git-messenger
  408. (global-set-key (kbd "C-x v p") 'git-messenger:popup-message)
  409.  
  410. ;; Multiple cursors
  411. (require 'multiple-cursors)
  412. (global-set-key (kbd "C-S-c C-S-c") 'mc/edit-lines)
  413. (global-set-key (kbd "C->") 'mc/mark-next-like-this)
  414. (global-set-key (kbd "C-<") 'mc/mark-previous-like-this)
  415. (global-set-key (kbd "C-c C-<") 'mc/mark-all-like-this)
  416.  
  417. ;; Minimap
  418. (add-hook 'minimap-sb-mode-hook (lambda () (setq mode-line-format nil)))
  419.  
  420. ;; Diminish
  421. (require 'diminish)
  422. (eval-after-load "filladapt" '(diminish 'filladapt-mode))
  423.  
  424. (defun diminished-modes ()
  425.     "Echo all active diminished or minor modes as if they were minor.
  426. The display goes in the echo area; if it's too long even for that,
  427. you can see the whole thing in the *Messages* buffer.
  428. This doesn't change the status of any modes; it just lets you see
  429. what diminished modes would be on the mode-line if they were still minor."
  430.     (interactive)
  431.     (let ((minor-modes minor-mode-alist)
  432.           message)
  433.         (while minor-modes
  434.             (when (symbol-value (caar minor-modes))
  435.                 ;; This minor mode is active in this buffer
  436.                 (let* ((mode-pair (car minor-modes))
  437.                        (mode (car mode-pair))
  438.                        (minor-pair (or (assq mode diminished-mode-alist) mode-pair))
  439.                        (minor-name (cadr minor-pair)))
  440.                     (when (symbolp minor-name)
  441.                         ;; This minor mode uses symbol indirection in the cdr
  442.                         (let ((symbols-seen (list minor-name)))
  443.                             (while (and (symbolp (callf symbol-value minor-name))
  444.                                         (not (memq minor-name symbols-seen)))
  445.                                 (push minor-name symbols-seen))))
  446.                     (push minor-name message)))
  447.             (callf cdr minor-modes))
  448.         ;; Handle :eval forms
  449.         (setq message (mapconcat
  450.                        (lambda (form)
  451.                            (if (and (listp form) (eq (car form) :eval))
  452.                                    (apply 'eval (cdr form))
  453.                                form))
  454.                        (nreverse message) ""))
  455.         (when (= (string-to-char message) ?\ )
  456.             (callf substring message 1))
  457.         (message "%s" message)))
  458.  
  459. ;; Hide modeline
  460. (defvar-local hidden-mode-line-mode nil)
  461.  
  462. (define-minor-mode hidden-mode-line-mode
  463.     "Minor mode to hide the mode-line in the current buffer."
  464.     :init-value nil
  465.     :global t
  466.     :variable hidden-mode-line-mode
  467.     :group 'editing-basics
  468.     (if hidden-mode-line-mode
  469.             (setq hide-mode-line mode-line-format
  470.                   mode-line-format nil)
  471.         (setq mode-line-format hide-mode-line
  472.               hide-mode-line nil))
  473.     (force-mode-line-update)
  474.     ;; Apparently force-mode-line-update is not always enough to
  475.     ;; redisplay the mode-line
  476.     (redraw-display)
  477.     (when (and (called-interactively-p 'interactive)
  478.                hidden-mode-line-mode)
  479.         (run-with-idle-timer
  480.          0 nil 'message
  481.          (concat "Hidden Mode Line Mode enabled.  "
  482.                  "Use M-x hidden-mode-line-mode to make the mode-line appear."))))
  483.  
  484. ;; If you want to hide the mode-line in every buffer by default
  485. (add-hook 'after-change-major-mode-hook 'hidden-mode-line-mode)
  486.  
  487. ;; Pomidor technique
  488. (require 'pomidor)
  489. (global-set-key (kbd "<f12>") #'pomidor)
  490.  
  491. ;; SELinux
  492. (add-to-list 'load-path "~/.emacs.d/lisp")
  493. (require 'selinuxpolicy-mode)
  494.  
  495. ;; Find file with sudo
  496. (defun sudo-edit (&optional arg)
  497.     "Edit currently visited file as root.
  498. With a prefix ARG prompt for a file to visit.
  499. Will also prompt for a file to visit if current
  500. buffer is not visiting a file."
  501.     (interactive "P")
  502.     (if (or arg (not buffer-file-name))
  503.             (find-file (concat "/sudo:d_zleztsov@localhost:"
  504.                                (ido-read-file-name "Find file(as root): ")))
  505.         (find-alternate-file (concat "/sudo:d_zheleztsov@localhost:" buffer-file-name))))
  506. (global-set-key (kbd "C-x C-a") 'sudo-edit)
  507.  
  508. ;; Vala mode
  509. (require 'flymake-vala)
  510. (add-hook 'vala-mode-hook 'flymake-vala-load)
  511.  
  512. ;; Clojure
  513. (eval-after-load 'clojure-mode
  514.     '(progn
  515.          (define-key clojure-mode-map (kbd "C-c C-h") #'clojure-cheatsheet)))
  516.  
  517. ;; Puppet
  518. (require 'flymake-puppet)
  519. (add-to-list 'load-path "~/.emacs.d/lisp")
  520. ;; (require 'eruby-mode)
  521.  
  522. ;; ERC settings
  523. (require 'tls)
  524. ; M-x start-slack
  525. (defun start-slack ()
  526.     "Connect to IRC."
  527.     (interactive)
  528.     (erc-tls :server "XXX.irc.slack.com" :port 6697
  529.              :nick "difrex" :full-name "Denis Zheleztsov"
  530.              :password "XXX")
  531.     (setq erc-autojoin-channels-alist '(
  532.                                         ("#general" "#random" "#XXX" "#operations"))))
  533. ;; M-x stop-slack
  534. (defun stop-slack ()
  535.   "Disconnects from all irc servers."
  536.   (interactive)
  537.   (dolist (buffer (filter-server-buffers))
  538.     (message "Server buffer: %s" (buffer-name buffer))
  539.     (with-current-buffer buffer
  540.       (erc-quit-server "Asta la vista"))))
  541.  
  542.  
  543. (defun my-erc-modules ()
  544.     "Provide ERC modules."
  545.     (require 'erc-image)
  546.     (add-to-list 'erc-modules 'image)
  547.     (erc-update-modules)
  548.  
  549.     ;; Interpret mIRC-style color commands in IRC chats
  550.     (setq erc-interpret-mirc-color t)
  551.  
  552.     ;; open query buffers in the current window
  553.     (setq erc-query-display 'buffer)
  554.  
  555.     ;; exclude boring stuff from tracking
  556.     (erc-track-mode t)
  557.     (setq erc-track-exclude-types '("JOIN" "NICK" "PART" "QUIT" "MODE"
  558.                                     "324" "329" "332" "333" "353" "477"))
  559.  
  560.     ;; logging
  561.     (setq erc-log-channels-directory "~/.erc/logs/")
  562.     (if (not (file-exists-p erc-log-channels-directory))
  563.             (mkdir erc-log-channels-directory t))
  564.  
  565.     (setq erc-save-buffer-on-part t)
  566.     (defadvice save-buffers-kill-emacs (before save-logs (arg) activate)
  567.         (save-some-buffers t (lambda () (when (eq major-mode 'erc-mode) t))))
  568.  
  569.     ;; truncate long irc buffers
  570.     (erc-truncate-mode +1)
  571.  
  572.     ;; enable spell checking
  573.     (erc-spelling-mode 1)
  574.     ;; TODO - replace this with use of notify.el
  575.     ;; Notify my when someone mentions my nick.
  576.     (defun call-libnotify (matched-type nick msg)
  577.         (let* ((cmsg  (split-string (clean-message msg)))
  578.                (nick   (first (split-string nick "!")))
  579.                (msg    (mapconcat 'identity (rest cmsg) " ")))
  580.             (shell-command-to-string
  581.              (format "notify-send -u critical '%s says:' '%s'" nick msg))))
  582.  
  583.     (add-hook 'erc-text-matched-hook 'call-libnotify)
  584.  
  585.     (defvar erc-notify-nick-alist nil
  586.         "Alist of nicks and the last time they tried to trigger a
  587. notification")
  588.  
  589.     (defvar erc-notify-timeout 10
  590.         "Number of seconds that must elapse between notifications from
  591. the same person.")
  592.  
  593.     (defun erc-notify-allowed-p (nick &optional delay)
  594.   "Return non-nil if a notification should be made for NICK.
  595. If DELAY is specified, it will be the minimum time in seconds
  596. that can occur between two notifications.  The default is
  597. `erc-notify-timeout'."
  598.   (unless delay (setq delay erc-notify-timeout))
  599.   (let ((cur-time (time-to-seconds (current-time)))
  600.         (cur-assoc (assoc nick erc-notify-nick-alist))
  601.         (last-time nil))
  602.     (if cur-assoc
  603.         (progn
  604.           (setq last-time (cdr cur-assoc))
  605.           (setcdr cur-assoc cur-time)
  606.           (> (abs (- cur-time last-time)) delay))
  607.       (push (cons nick cur-time) erc-notify-nick-alist)
  608.       t)))
  609.  
  610.     ;; private message notification
  611.     (defun erc-notify-on-private-msg (proc parsed)
  612.         (let ((nick (car (erc-parse-user (erc-response.sender parsed))))
  613.               (target (car (erc-response.command-args parsed)))
  614.               (msg (erc-response.contents parsed)))
  615.             (when (and (erc-current-nick-p target)
  616.                        (not (erc-is-message-ctcp-and-not-action-p msg))
  617.                        (erc-notify-allowed-p nick))
  618.                 (shell-command-to-string
  619.                  (format "notify-send -u critical '%s says:' '%s'" nick msg))
  620.                 nil)))
  621.  
  622.     (add-hook 'erc-server-PRIVMSG-functions 'erc-notify-on-private-msg)
  623.  
  624.     ;; utf-8 always and forever
  625.     (setq erc-server-coding-system '(utf-8 . utf-8)))
  626.  
  627. (defun filter-server-buffers ()
  628.     (delq nil
  629.           (mapcar
  630.            (lambda (x) (and (erc-server-buffer-p x) x))
  631.            (buffer-list))))
  632.  
  633. (my-erc-modules)
  634.  
  635. ;; SPEC
  636. (autoload 'rpm-spec-mode "rpm-spec-mode.el" "RPM spec mode." t)
  637. (setq auto-mode-alist (append '(("\\.spec" . rpm-spec-mode))
  638.                               auto-mode-alist))
  639.  
  640.  
  641. ;; Temporary maximize buffer
  642. (defun toggle-maximize-buffer ()
  643.     "Maximize buffer."
  644.     (interactive)
  645.     (if (= 1 (length (window-list)))
  646.             (jump-to-register '_)
  647.         (progn
  648.             (window-configuration-to-register '_)
  649.             (delete-other-windows))))
  650. (global-set-key [(super shift return)] 'toggle-maximize-buffer)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement