├── setfont.el ├── snippets └── org-mode │ ├── img │ ├── hl │ └── post ├── init.el └── README.org /setfont.el: -------------------------------------------------------------------------------- 1 | ;;(set-frame-font "Inconsolata-18") 2 | (set-frame-font "Firacode-18") 3 | -------------------------------------------------------------------------------- /snippets/org-mode/img: -------------------------------------------------------------------------------- 1 | # -*- mode: snippet -*- 2 | # name: img 3 | # key: img 4 | # expand-env: ((yas-indent-line 'fixed) (yas-wrap-around-region 'nil)) 5 | # -- 6 | #+begin_export html 7 | 8 | #+end_export 9 | -------------------------------------------------------------------------------- /snippets/org-mode/hl: -------------------------------------------------------------------------------- 1 | # -*- mode: snippet -*- 2 | # name: hl 3 | # key: hl 4 | # expand-env: ((yas-indent-line 'fixed) (yas-wrap-around-region 'nil)) 5 | # -- 6 | {{< highlight $1 >}} 7 | 8 | $0 9 | 10 | {{< /highlight >}} 11 | 12 | -------------------------------------------------------------------------------- /snippets/org-mode/post: -------------------------------------------------------------------------------- 1 | # -*- mode: snippet -*- 2 | # name: post 3 | # key: post 4 | # expand-env: ((yas-indent-line 'fixed) (yas-wrap-around-region 'nil)) 5 | # -- 6 | --- 7 | title: ${1:`(capitalize (replace-regexp-in-string "-\\|_" " " (file-name-base))))`} 8 | date: `(format-time-string "%Y-%m-%dT%H:%M:%S-04:00" (current-time))` 9 | tags: 10 | categories: 11 | draft: true 12 | --- 13 | 14 | $0 15 | -------------------------------------------------------------------------------- /init.el: -------------------------------------------------------------------------------- 1 | (require 'package) 2 | 3 | (setq package-enable-at-startup nil) 4 | (add-to-list 'package-archives 5 | '("melpa" . "https://melpa.org/packages/")) 6 | ;; (add-to-list 'package-archives 7 | ;; '("gnu" . "https://elpa.gnu.org/packages/")) 8 | (package-initialize) 9 | 10 | (unless (package-installed-p 'use-package) 11 | (package-refresh-contents) 12 | (package-install 'use-package)) 13 | 14 | (org-babel-load-file (expand-file-name "~/.emacs.d/README.org")) 15 | 16 | (custom-set-variables 17 | ;; custom-set-variables was added by Custom. 18 | ;; If you edit it by hand, you could mess it up, so be careful. 19 | ;; Your init file should contain only one such instance. 20 | ;; If there is more than one, they won't work right. 21 | '(org-confirm-babel-evaluate nil) 22 | '(org-default-notes-file (concat org-directory "/notes.org")) 23 | '(org-directory "~/Sync/orgfiles") 24 | '(org-export-html-postamble nil) 25 | '(org-export-with-toc nil) 26 | '(org-hide-leading-stars t) 27 | '(org-src-fontify-natively t) 28 | '(org-startup-folded 'overview) 29 | '(org-startup-indented t) 30 | '(package-selected-packages 31 | '(consult ctrlf selectrum org-mime zenburn-theme yasnippet-snippets yasnippet-classic-snippets which-key w3m vterm try tao-theme string-utils smartparens rg rainbow-delimiters quelpa-use-package poet-theme perspective pcre2el parchment-theme ox-reveal origami org-msg org-gcal org-bullets openwith ob-restclient ob-prolog nnreddit nnhackernews nameframe-projectile mu4e-views mu4e-alert monokai-theme moe-theme modus-vivendi-theme modus-operandi-theme lsp-ui lsp-jedi lsp-javacomp lsp-java lsp-haskell keypression jedi ivy-rich irony-eldoc iedit ibuffer-projectile hungry-delete hlinum gruvbox-theme grip-mode git-timemachine git-gutter-fringe ftable forge focus flycheck floobits fish-completion faff-theme expand-region exec-path-from-shell eshell-git-prompt elfeed-org elfeed-goodies eglot dumb-jump doom-modeline diredfl dired-recent default-text-scale counsel company-restclient color-theme-modern cloud-theme clj-refactor circe-notifications burly bufler ample-zen-theme ample-theme alect-themes aggressive-indent))) 32 | (custom-set-faces 33 | ;; custom-set-faces was added by Custom. 34 | ;; If you edit it by hand, you could mess it up, so be careful. 35 | ;; Your init file should contain only one such instance. 36 | ;; If there is more than one, they won't work right. 37 | ) 38 | -------------------------------------------------------------------------------- /README.org: -------------------------------------------------------------------------------- 1 | #+STARTUP: overview 2 | #+PROPERTY: header-args :comments yes :results silent 3 | * Packages to add or look into 4 | - embark 5 | - consult 6 | - marginalia 7 | - MU4E Views 8 | - crux 9 | - perspetctiv 10 | - tab bar 11 | - literate calc mode 12 | - org-superstar 13 | - selectrum 14 | - ctrlf 15 | - moom 16 | - telephone-line 17 | - org-download 18 | - spelling stuff 19 | - eyebrowse 20 | - smart-jump 21 | - deadgrep 22 | - rg 23 | - diff-hl 24 | - YCMD maybe for emacs and header file completions 25 | - god mode 26 | - mbsync 27 | - popup-kill-ring 28 | - discover-my-major 29 | - treemacs (treemacs-magit, projectile) 30 | - amx 31 | - mathewZM 32 | - ivy-omni-org 33 | - ivy-explorer 34 | - ivy-rich 35 | - cloud-theme 36 | - general.el 37 | - focus mode 38 | - multiple cursors again 39 | - ranger /deer 40 | * repos 41 | #+BEGIN_SRC emacs-lisp 42 | (add-to-list 'package-archives '("org" . "https://orgmode.org/elpa/") t) 43 | 44 | #+END_SRC 45 | 46 | 47 | * My Misc Functions 48 | #+BEGIN_SRC emacs-lisp 49 | 50 | (defun load-if-exists (f) 51 | "load the elisp file only if it exists and is readable" 52 | (if (file-readable-p f) 53 | (load-file f))) 54 | 55 | ;; font scaling 56 | (use-package default-text-scale 57 | :ensure t 58 | :config 59 | (global-set-key (kbd "C-M-=") 'default-text-scale-increase) 60 | (global-set-key (kbd "C-M--") 'default-text-scale-decrease)) 61 | 62 | 63 | ;; narrow/widen dwim 64 | ; if you're windened, narrow to the region, if you're narrowed, widen 65 | ; bound to C-x n 66 | (defun narrow-or-widen-dwim (p) 67 | "If the buffer is narrowed, it widens. Otherwise, it narrows intelligently. 68 | Intelligently means: region, org-src-block, org-subtree, or defun, 69 | whichever applies first. 70 | Narrowing to org-src-block actually calls `org-edit-src-code'. 71 | 72 | With prefix P, don't widen, just narrow even if buffer is already 73 | narrowed." 74 | (interactive "P") 75 | (declare (interactive-only)) 76 | (cond ((and (buffer-narrowed-p) (not p)) (widen)) 77 | ((region-active-p) 78 | (narrow-to-region (region-beginning) (region-end))) 79 | ((derived-mode-p 'org-mode) 80 | ;; `org-edit-src-code' is not a real narrowing command. 81 | ;; Remove this first conditional if you don't want it. 82 | (cond ((ignore-errors (org-edit-src-code)) 83 | (delete-other-windows)) 84 | ((org-at-block-p) 85 | (org-narrow-to-block)) 86 | (t (org-narrow-to-subtree)))) 87 | (t (narrow-to-defun)))) 88 | 89 | ;; (define-key endless/toggle-map "n" #'narrow-or-widen-dwim) 90 | ;; This line actually replaces Emacs' entire narrowing keymap, that's 91 | ;; how much I like this command. Only copy it if that's what you want. 92 | (define-key ctl-x-map "n" #'narrow-or-widen-dwim) 93 | 94 | 95 | 96 | #+END_SRC 97 | * interface tweaks 98 | #+BEGIN_SRC emacs-lisp 99 | (setq inhibit-startup-message t) 100 | (tool-bar-mode -1) 101 | (fset 'yes-or-no-p 'y-or-n-p) 102 | 103 | (setenv "BROWSER" "firefox")t 104 | 105 | (use-package parchment-theme :ensure t) 106 | (use-package cloud-theme :ensure t) 107 | (use-package moe-theme :ensure t) 108 | (use-package zenburn-theme :ensure t) 109 | (use-package monokai-theme :ensure t) 110 | (use-package gruvbox-theme :ensure t) 111 | (use-package ample-theme :ensure t) 112 | (use-package ample-zen-theme :ensure t) 113 | (use-package alect-themes :ensure t) 114 | (use-package tao-theme :ensure t) 115 | (use-package poet-theme :ensure t) 116 | (use-package modus-operandi-theme :ensure t) 117 | (use-package modus-vivendi-theme :ensure t) 118 | (use-package faff-theme :ensure t) 119 | (use-package color-theme-modern :ensure t) 120 | (load-theme 'modus-operandi t) 121 | 122 | (use-package doom-modeline 123 | :ensure t) 124 | (doom-modeline-init) 125 | 126 | 127 | ;; expand the marked region in semantic increments 128 | ;;(negative prefix to reduce region) 129 | (use-package expand-region 130 | :ensure t 131 | :config 132 | (global-set-key (kbd "C-=") 'er/expand-region)) 133 | 134 | (setq save-interprogram-paste-before-kill t) 135 | 136 | (use-package hungry-delete 137 | :ensure t 138 | :config 139 | (global-hungry-delete-mode)) 140 | 141 | (global-auto-revert-mode 1) ;; you might not want this 142 | (setq auto-revert-verbose nil) ;; or this 143 | (global-set-key (kbd "") 'revert-buffer) 144 | 145 | (use-package aggressive-indent 146 | :ensure t 147 | :config 148 | ;; (global-aggressive-indent-mode 1) 149 | ;;(add-to-list 'aggressive-indent-excluded-modes 'html-mode) 150 | ) 151 | 152 | 153 | (use-package ace-window 154 | :ensure t 155 | :config 156 | (setq aw-scope 'frame) ;; was global 157 | (global-set-key (kbd "C-x O") 'other-frame) 158 | (global-set-key [remap other-window] 'ace-window)) 159 | #+END_SRC 160 | 161 | #+BEGIN_SRC emacs-lisp 162 | 163 | (use-package try :ensure t) 164 | (use-package posframe :ensure t) 165 | (use-package iedit 166 | :ensure t) 167 | 168 | (use-package which-key 169 | :ensure t 170 | :config 171 | (which-key-mode)) 172 | 173 | #+END_SRC 174 | 175 | #+BEGIN_SRC emacs-lisp 176 | (use-package pcre2el 177 | :ensure t 178 | :config 179 | (pcre-mode) 180 | ) 181 | 182 | (add-hook 'org-mode-hook 'turn-on-flyspell) 183 | (add-hook 'org-mode-hook 'turn-on-auto-fill) 184 | (add-hook 'mu4e-compose-mode-hook 'turn-on-flyspell) 185 | (add-hook 'mu4e-compose-mode-hook 'turn-on-auto-fill) 186 | 187 | 188 | #+END_SRC 189 | 190 | #+BEGIN_SRC emacs-lisp 191 | ;; (use-package hlinum 192 | ;; :ensure t 193 | ;; :config 194 | ;; (hlinum-activate) 195 | ;; (global-linum-mode) 196 | 197 | ;; ) 198 | #+END_SRC 199 | * Selectrum / ctrlf 200 | 201 | #+begin_src emacs-lisp :tangle no 202 | (use-package selectrum 203 | :ensure t) 204 | (selectrum-mode +1) 205 | 206 | 207 | 208 | (use-package consult :ensure t) 209 | #+end_src 210 | 211 | * Swiper / Ivy / Counsel 212 | Swiper gives us a really efficient incremental search with regular expressions 213 | and Ivy / Counsel replace a lot of ido or helms completion functionality 214 | #+BEGIN_SRC emacs-lisp 215 | 216 | 217 | 218 | 219 | (use-package counsel 220 | :ensure t 221 | :bind 222 | (("M-y" . counsel-yank-pop) 223 | :map ivy-minibuffer-map 224 | ("M-y" . ivy-next-line))) 225 | 226 | (use-package ivy 227 | :ensure t 228 | :diminish (ivy-mode) 229 | :bind (("C-x b" . ivy-switch-buffer)) 230 | :config 231 | (ivy-mode 1) 232 | (setq ivy-use-virtual-buffers t) 233 | (setq ivy-count-format "%d/%d ") 234 | (setq ivy-display-style 'fancy)) 235 | 236 | 237 | ;; (use-package swiper 238 | ;; :ensure t 239 | ;; :bind (("C-s" . swiper-isearch) 240 | ;; ("C-r" . swiper-isearch) 241 | ;; ("C-c C-r" . ivy-resume) 242 | ;; ("M-x" . counsel-M-x) 243 | ;; ("C-x C-f" . counsel-find-file)) 244 | ;; :config 245 | ;; (progn 246 | ;; (ivy-mode 1) 247 | ;; (setq ivy-use-virtual-buffers t) 248 | ;; (setq ivy-display-style 'fancy) 249 | ;; (define-key read-expression-map (kbd "C-r") 'counsel-expression-history) 250 | ;; )) 251 | #+END_SRC 252 | 253 | * CTRLF 254 | #+begin_src emacs-lisp 255 | (use-package ctrlf 256 | :ensure t) 257 | (ctrlf-mode +1) 258 | 259 | #+end_src 260 | 261 | * buffer stuff 262 | 263 | #+begin_src emacs-lisp :tangle no 264 | (use-package bufler :ensure t) 265 | (defun mz/bufler-one-window (&optional force-refresh) 266 | (interactive "P") 267 | (bufler-list) 268 | (delete-other-windows) 269 | 270 | ) 271 | 272 | (global-set-key (kbd "C-x C-b") 'mz/bufler-one-window) 273 | 274 | #+end_src 275 | 276 | #+BEGIN_SRC emacs-lisp 277 | 278 | (global-set-key (kbd "C-x C-b") 'ibuffer) 279 | (setq ibuffer-saved-filter-groups 280 | (quote (("default" 281 | ("dired" (mode . dired-mode)) 282 | ("org" (name . "^.*org$")) 283 | ("magit" (mode . magit-mode)) 284 | ("IRC" (or (mode . circe-channel-mode) (mode . circe-server-mode))) 285 | ("web" (or (mode . web-mode) (mode . js2-mode))) 286 | ("shell" (or (mode . eshell-mode) (mode . shell-mode))) 287 | ("mu4e" (or 288 | 289 | (mode . mu4e-compose-mode) 290 | (name . "\*mu4e\*") 291 | )) 292 | ("programming" (or 293 | (mode . clojure-mode) 294 | (mode . clojurescript-mode) 295 | (mode . python-mode) 296 | (mode . c++-mode))) 297 | ("emacs" (or 298 | (name . "^\\*scratch\\*$") 299 | (name . "^\\*Messages\\*$"))) 300 | )))) 301 | (add-hook 'ibuffer-mode-hook 302 | (lambda () 303 | (ibuffer-auto-mode 1) 304 | (ibuffer-switch-to-saved-filter-groups "default"))) 305 | 306 | ;; don't show these 307 | ;(add-to-list 'ibuffer-never-show-predicates "zowie") 308 | ;; Don't show filter groups if there are no buffers in that group 309 | (setq ibuffer-show-empty-filter-groups nil) 310 | 311 | ;; Don't ask for confirmation to delete marked buffers 312 | (setq ibuffer-expert t) 313 | 314 | #+END_SRC 315 | * Flycheck 316 | #+BEGIN_SRC emacs-lisp 317 | (use-package flycheck 318 | :ensure t 319 | :init 320 | (global-flycheck-mode t)) 321 | 322 | #+END_SRC 323 | 324 | * Hydra 325 | #+BEGIN_SRC emacs-lisp 326 | (use-package hydra 327 | :ensure t) 328 | 329 | #+END_SRC 330 | * Folding - Origami 331 | #+BEGIN_SRC emacs-lisp 332 | (use-package origami 333 | :ensure t) 334 | #+END_SRC 335 | 336 | #+BEGIN_SRC emacs-lisp 337 | (use-package origami 338 | :ensure t) 339 | 340 | (defhydra hydra-origami (:color red) 341 | " 342 | _o_pen node _n_ext fold toggle _f_orward 343 | _c_lose node _p_revious fold toggle _a_ll 344 | " 345 | ("o" origami-open-node) 346 | ("c" origami-close-node) 347 | ("n" origami-next-fold) 348 | ("p" origami-previous-fold) 349 | ("f" origami-forward-toggle-node) 350 | ("a" origami-toggle-all-nodes)) 351 | 352 | 353 | 354 | 355 | #+END_SRC 356 | * Magit and git stuff 357 | #+BEGIN_SRC emacs-lisp 358 | 359 | ;; some ediff settings 360 | (setq ediff-diff-options "") 361 | (setq ediff-custom-diff-options "-u") 362 | (setq ediff-window-setup-function 'ediff-setup-windows-plain) 363 | (setq ediff-split-window-function 'split-window-vertically) 364 | 365 | (use-package magit 366 | :ensure t 367 | :init 368 | (progn 369 | (setq magit-section-initial-visibility-alist 370 | '((stashes . hide) (untracked . hide) (unpushed . hide))) 371 | 372 | 373 | (bind-key "C-x g" 'magit-status) 374 | )) 375 | 376 | (setq magit-status-margin 377 | '(t "%Y-%m-%d %H:%M " magit-log-margin-width t 18)) 378 | 379 | (use-package git-timemachine 380 | :ensure t 381 | ) 382 | 383 | (use-package git-gutter-fringe 384 | :ensure t 385 | :config 386 | (global-git-gutter-mode)) 387 | 388 | 389 | 390 | 391 | (use-package smerge-mode 392 | :after hydra 393 | :config 394 | (defhydra unpackaged/smerge-hydra 395 | (:color pink :hint nil :post (smerge-auto-leave)) 396 | " 397 | ^Move^ ^Keep^ ^Diff^ ^Other^ 398 | ^^-----------^^-------------------^^---------------------^^------- 399 | _n_ext _b_ase _<_: upper/base _C_ombine 400 | _p_rev _u_pper _=_: upper/lower _r_esolve 401 | ^^ _l_ower _>_: base/lower _k_ill current 402 | ^^ _a_ll _R_efine 403 | ^^ _RET_: current _E_diff 404 | " 405 | ("n" smerge-next) 406 | ("p" smerge-prev) 407 | ("b" smerge-keep-base) 408 | ("u" smerge-keep-upper) 409 | ("l" smerge-keep-lower) 410 | ("a" smerge-keep-all) 411 | ("RET" smerge-keep-current) 412 | ("\C-m" smerge-keep-current) 413 | ("<" smerge-diff-base-upper) 414 | ("=" smerge-diff-upper-lower) 415 | (">" smerge-diff-base-lower) 416 | ("R" smerge-refine) 417 | ("E" smerge-ediff) 418 | ("C" smerge-combine-with-next) 419 | ("r" smerge-resolve) 420 | ("k" smerge-kill-current) 421 | ("ZZ" (lambda () 422 | (interactive) 423 | (save-buffer) 424 | (bury-buffer)) 425 | "Save and bury buffer" :color blue) 426 | ("q" nil "cancel" :color blue)) 427 | :hook (magit-diff-visit-file . (lambda () 428 | (when smerge-mode 429 | (unpackaged/smerge-hydra/body))))) 430 | 431 | 432 | 433 | (use-package forge 434 | :ensure t) 435 | 436 | #+END_SRC 437 | 438 | * ORG-mode stuff 439 | #+BEGIN_SRC emacs-lisp 440 | (use-package ox-reveal :ensure t) 441 | (require 'org-protocol) 442 | (custom-set-variables 443 | '(org-directory "~/Sync/orgfiles") 444 | '(org-default-notes-file (concat org-directory "/notes.org")) 445 | '(org-export-html-postamble nil) 446 | '(org-hide-leading-stars t) 447 | '(org-startup-folded (quote overview)) 448 | '(org-startup-indented t) 449 | '(org-confirm-babel-evaluate nil) 450 | '(org-src-fontify-natively t) 451 | '(org-export-with-toc nil) 452 | ) 453 | 454 | 455 | (use-package org-bullets 456 | :ensure t 457 | :config 458 | (add-hook 'org-mode-hook (lambda () (org-bullets-mode 1)))) 459 | 460 | 461 | (global-set-key "\C-ca" 'org-agenda) 462 | (setq org-agenda-start-on-weekday nil) 463 | (setq org-agenda-custom-commands 464 | '(("c" "Simple agenda view" 465 | ((agenda "") 466 | (alltodo ""))))) 467 | 468 | (global-set-key (kbd "C-c c") 'org-capture) 469 | 470 | (setq org-agenda-files (list "~/opt/gcal.org" 471 | "~/opt/soe-cal.org" 472 | "~/Sync/orgfiles/i.org")) 473 | (setq org-capture-templates 474 | '(("l" "Link" entry (file+headline "~/Sync/orgfiles/links.org" "Links") 475 | "* %a %^g\n %?\n %T\n %i") 476 | ("b" "Blog idea" entry (file+headline "~/Sync/orgfiles/i.org" "POSTS:") 477 | "* %?\n%T" :prepend t) 478 | ("t" "To Do Item" entry (file+headline "~/Sync/orgfiles/i.org" "To Do and Notes") 479 | "* TODO %?\n%u" :prepend t) 480 | ("m" "Mail To Do" entry (file+headline "~/Sync/orgfiles/i.org" "To Do and Notes") 481 | "* TODO %a\n %?" :prepend t) 482 | ("n" "Note" entry (file+olp "~/Sync/orgfiles/i.org" "Notes") 483 | "* %u %? " :prepend t) 484 | ("r" "RSS" entry (file+headline "~/Sync/shared/elfeed.org" "Feeds misc") 485 | "** %A %^g\n") 486 | )) 487 | 488 | 489 | 490 | (use-package htmlize :ensure t) 491 | 492 | (setq org-ditaa-jar-path "/usr/share/ditaa/ditaa.jar") 493 | (setq org-file-apps 494 | (append '( 495 | ("\\.pdf\\'" . "evince %s") 496 | ("\\.x?html?\\'" . "/usr/bin/firefox %s") 497 | ) org-file-apps )) 498 | ;; babel stuff 499 | (require 'ob-clojure) 500 | (require 'ob-gnuplot) 501 | (require 'ob-prolog) 502 | (use-package ob-restclient :ensure t) 503 | (require 'ob-restclient) 504 | (setq org-babel-clojure-backend 'cider) 505 | 506 | (org-babel-do-load-languages 507 | 'org-babel-load-languages 508 | '((python . t) 509 | (prolog . t) 510 | (restclient . t) 511 | (emacs-lisp . t) 512 | (gnuplot . t) 513 | (shell . t) 514 | (java . t) 515 | (C . t) 516 | (clojure . t) 517 | (js . t) 518 | (ditaa . t) 519 | (dot . t) 520 | (org . t) 521 | (latex . t ) 522 | )) 523 | 524 | 525 | (setq mail-user-agent 'mu4e-user-agent) 526 | (use-package org-msg 527 | :ensure t 528 | :config 529 | (setq org-msg-options "html-postamble:nil H:5 num:nil ^:{} toc:nil tex:dvipng") 530 | (setq org-msg-startup "hidestars indent inlineimages") 531 | (setq org-msg-greeting-fmt "\n%s,\n\n") 532 | (setq org-msg-greeting-fmt-mailto t) 533 | (setq org-msg-signature " 534 | ,#+begin_signature 535 | -- *Mike* \\\\ 536 | ,#+end_signature") 537 | (org-msg-mode) 538 | ) 539 | 540 | (require 'ox-reveal) 541 | 542 | (require 'org-tempo) ;; to bring back easy templates using ") 'sp-unwrap-sexp) 613 | (define-key smartparens-mode-map (kbd "M-") 'sp-backward-unwrap-sexp) 614 | 615 | (define-key smartparens-mode-map (kbd "C-") 'sp-forward-slurp-sexp) 616 | (define-key smartparens-mode-map (kbd "C-") 'sp-forward-barf-sexp) 617 | (define-key smartparens-mode-map (kbd "C-M-") 'sp-backward-slurp-sexp) 618 | (define-key smartparens-mode-map (kbd "C-M-") 'sp-backward-barf-sexp) 619 | 620 | (define-key smartparens-mode-map (kbd "M-D") 'sp-splice-sexp) 621 | (define-key smartparens-mode-map (kbd "C-M-") 'sp-splice-sexp-killing-forward) 622 | (define-key smartparens-mode-map (kbd "C-M-") 'sp-splice-sexp-killing-backward) 623 | (define-key smartparens-mode-map (kbd "C-S-") 'sp-splice-sexp-killing-around) 624 | 625 | (define-key smartparens-mode-map (kbd "C-]") 'sp-select-next-thing-exchange) 626 | (define-key smartparens-mode-map (kbd "C-") 'sp-select-previous-thing) 627 | (define-key smartparens-mode-map (kbd "C-M-]") 'sp-select-next-thing) 628 | 629 | (define-key smartparens-mode-map (kbd "M-F") 'sp-forward-symbol) 630 | (define-key smartparens-mode-map (kbd "M-B") 'sp-backward-symbol) 631 | 632 | (define-key smartparens-mode-map (kbd "C-\"") 'sp-change-inner) 633 | (define-key smartparens-mode-map (kbd "M-i") 'sp-change-enclosing) 634 | 635 | (bind-key "C-c f" (lambda () (interactive) (sp-beginning-of-sexp 2)) smartparens-mode-map) 636 | (bind-key "C-c b" (lambda () (interactive) (sp-beginning-of-sexp -2)) smartparens-mode-map) 637 | 638 | (bind-key "C-M-s" 639 | (defhydra smartparens-hydra () 640 | "Smartparens" 641 | ("d" sp-down-sexp "Down") 642 | ("e" sp-up-sexp "Up") 643 | ("u" sp-backward-up-sexp "Up") 644 | ("a" sp-backward-down-sexp "Down") 645 | ("f" sp-forward-sexp "Forward") 646 | ("b" sp-backward-sexp "Backward") 647 | ("k" sp-kill-sexp "Kill" :color blue) 648 | ("q" nil "Quit" :color blue)) 649 | smartparens-mode-map) 650 | 651 | (bind-key "H-t" 'sp-prefix-tag-object smartparens-mode-map) 652 | (bind-key "H-p" 'sp-prefix-pair-object smartparens-mode-map) 653 | (bind-key "H-y" 'sp-prefix-symbol-object smartparens-mode-map) 654 | (bind-key "H-h" 'sp-highlight-current-sexp smartparens-mode-map) 655 | (bind-key "H-e" 'sp-prefix-save-excursion smartparens-mode-map) 656 | (bind-key "H-s c" 'sp-convolute-sexp smartparens-mode-map) 657 | (bind-key "H-s a" 'sp-absorb-sexp smartparens-mode-map) 658 | (bind-key "H-s e" 'sp-emit-sexp smartparens-mode-map) 659 | (bind-key "H-s p" 'sp-add-to-previous-sexp smartparens-mode-map) 660 | (bind-key "H-s n" 'sp-add-to-next-sexp smartparens-mode-map) 661 | (bind-key "H-s j" 'sp-join-sexp smartparens-mode-map) 662 | (bind-key "H-s s" 'sp-split-sexp smartparens-mode-map) 663 | (bind-key "H-s r" 'sp-rewrap-sexp smartparens-mode-map) 664 | (defvar hyp-s-x-map) 665 | (define-prefix-command 'hyp-s-x-map) 666 | (bind-key "H-s x" hyp-s-x-map smartparens-mode-map) 667 | (bind-key "H-s x x" 'sp-extract-before-sexp smartparens-mode-map) 668 | (bind-key "H-s x a" 'sp-extract-after-sexp smartparens-mode-map) 669 | (bind-key "H-s x s" 'sp-swap-enclosing-sexp smartparens-mode-map) 670 | 671 | (bind-key "C-x C-t" 'sp-transpose-hybrid-sexp smartparens-mode-map) 672 | 673 | (bind-key ";" 'sp-comment emacs-lisp-mode-map) 674 | 675 | (bind-key [remap c-electric-backspace] 'sp-backward-delete-char smartparens-strict-mode-map) 676 | 677 | ;;;;;;;;;;;;;;;;;; 678 | ;; pair management 679 | 680 | (sp-local-pair 'minibuffer-inactive-mode "'" nil :actions nil) 681 | (bind-key "C-(" 'sp---wrap-with-40 minibuffer-local-map) 682 | 683 | (sp-with-modes 'org-mode 684 | (sp-local-pair "=" "=" :wrap "C-=")) 685 | 686 | (sp-with-modes 'textile-mode 687 | (sp-local-pair "*" "*") 688 | (sp-local-pair "_" "_") 689 | (sp-local-pair "@" "@")) 690 | 691 | (sp-with-modes 'web-mode 692 | (sp-local-pair "{{#if" "{{/if") 693 | (sp-local-pair "{{#unless" "{{/unless")) 694 | 695 | ;;; tex-mode latex-mode 696 | (sp-with-modes '(tex-mode plain-tex-mode latex-mode) 697 | (sp-local-tag "i" "\"<" "\">")) 698 | 699 | ;;; lisp modes 700 | (sp-with-modes sp--lisp-modes 701 | (sp-local-pair "(" nil 702 | :wrap "C-(" 703 | :pre-handlers '(my-add-space-before-sexp-insertion) 704 | :post-handlers '(my-add-space-after-sexp-insertion))) 705 | 706 | (defun my-add-space-after-sexp-insertion (id action _context) 707 | (when (eq action 'insert) 708 | (save-excursion 709 | (forward-char (sp-get-pair id :cl-l)) 710 | (when (or (eq (char-syntax (following-char)) ?w) 711 | (looking-at (sp--get-opening-regexp))) 712 | (insert " "))))) 713 | 714 | (defun my-add-space-before-sexp-insertion (id action _context) 715 | (when (eq action 'insert) 716 | (save-excursion 717 | (backward-char (length id)) 718 | (when (or (eq (char-syntax (preceding-char)) ?w) 719 | (and (looking-back (sp--get-closing-regexp)) 720 | (not (eq (char-syntax (preceding-char)) ?')))) 721 | (insert " "))))) 722 | 723 | ;;; C++ 724 | (sp-with-modes '(malabar-mode c++-mode) 725 | (sp-local-pair "{" nil :post-handlers '(("||\n[i]" "RET")))) 726 | (sp-local-pair 'c++-mode "/*" "*/" :post-handlers '((" | " "SPC") 727 | ("* ||\n[i]" "RET"))) 728 | 729 | (setq-default sp-escape-quotes-after-insert nil) 730 | 731 | (sp-local-pair 'js2-mode "/**" "*/" :post-handlers '(("| " "SPC") 732 | ("* ||\n[i]" "RET"))) 733 | (smartparens-global-mode) 734 | ) 735 | 736 | 737 | (use-package rainbow-delimiters 738 | :ensure t 739 | :config 740 | (add-hook 'clojure-mode-hook #'rainbow-delimiters-mode) 741 | ) 742 | (show-paren-mode t) 743 | 744 | #+END_SRC 745 | * Snippets 746 | #+BEGIN_SRC emacs-lisp 747 | (use-package yasnippet 748 | :ensure t 749 | :init 750 | (yas-global-mode 1)) 751 | 752 | (use-package yasnippet-snippets 753 | :ensure t) 754 | (use-package yasnippet-classic-snippets 755 | :ensure t) 756 | 757 | #+END_SRC 758 | 759 | * Projectile 760 | #+BEGIN_SRC emacs-lisp 761 | 762 | (use-package projectile 763 | :ensure t 764 | :bind (:map projectile-mode-map 765 | ("s-p" . 'projectile-command-map) 766 | ("C-c p" . 'projectile-command-map) 767 | ) 768 | 769 | :config 770 | (setq projectile-completion-system 'ivy) 771 | 772 | (projectile-mode +1)) 773 | 774 | 775 | ;; (use-package ibuffer-projectile 776 | ;; :ensure t 777 | ;; :config 778 | ;; (add-hook 'ibuffer-hook 779 | ;; (lambda () 780 | ;; (ibuffer-projectile-set-filter-groups) 781 | ;; (unless (eq ibuffer-sorting-mode 'alphabetic) 782 | ;; (ibuffer-do-sort-by-alphabetic)))) 783 | ;;) 784 | #+END_SRC 785 | * Company 786 | #+BEGIN_SRC emacs-lisp 787 | (use-package company 788 | :ensure t 789 | :config 790 | (setq company-idle-delay 0) 791 | (setq company-minimum-prefix-length 3) 792 | 793 | (global-company-mode t) 794 | ) 795 | 796 | #+END_SRC 797 | 798 | * Dumb jump 799 | #+BEGIN_SRC emacs-lisp 800 | 801 | (use-package dumb-jump 802 | :bind (("M-g o" . dumb-jump-go-other-window) 803 | ("M-g j" . dumb-jump-go) 804 | ("M-g x" . dumb-jump-go-prefer-external) 805 | ("M-g z" . dumb-jump-go-prefer-external-other-window)) 806 | :config 807 | ;; (setq dumb-jump-selector 'ivy) ;; (setq dumb-jump-selector 'helm) 808 | :init 809 | (dumb-jump-mode) 810 | :ensure 811 | ) 812 | 813 | 814 | 815 | #+END_SRC 816 | * Restclient 817 | #+BEGIN_SRC emacs-lisp 818 | (use-package restclient 819 | :ensure t) 820 | (use-package company-restclient 821 | :ensure t 822 | :config 823 | (add-to-list 'company-backends 'company-restclient)) 824 | #+END_SRC 825 | 826 | * Multiple Cursors 827 | #+BEGIN_SRC emacs-lisp 828 | (use-package multiple-cursors 829 | :ensure t 830 | ) 831 | 832 | (defhydra hydra-multiple-cursors (:hint nil) 833 | " 834 | Up^^ Down^^ Miscellaneous % 2(mc/num-cursors) cursor%s(if (> (mc/num-cursors) 1) \"s\" \"\") 835 | ------------------------------------------------------------------ 836 | [_p_] Next [_n_] Next [_l_] Edit lines [_0_] Insert numbers 837 | [_P_] Skip [_N_] Skip [_a_] Mark all [_A_] Insert letters 838 | [_M-p_] Unmark [_M-n_] Unmark [_s_] Search 839 | [Click] Cursor at point [_q_] Quit" 840 | ("l" mc/edit-lines :exit t) 841 | ("a" mc/mark-all-like-this :exit t) 842 | ("n" mc/mark-next-like-this) 843 | ("N" mc/skip-to-next-like-this) 844 | ("M-n" mc/unmark-next-like-this) 845 | ("p" mc/mark-previous-like-this) 846 | ("P" mc/skip-to-previous-like-this) 847 | ("M-p" mc/unmark-previous-like-this) 848 | ("s" mc/mark-all-in-region-regexp :exit t) 849 | ("0" mc/insert-numbers :exit t) 850 | ("A" mc/insert-letters :exit t) 851 | ("" mc/add-cursor-on-click) 852 | ;; Help with click recognition in this hydra 853 | ("" ignore) 854 | ("" ignore) 855 | ("q" nil)) 856 | 857 | 858 | #+END_SRC 859 | * focus mode 860 | #+BEGIN_SRC emacs-lisp 861 | (use-package focus 862 | :ensure t 863 | ) 864 | #+END_SRC 865 | * ivy-rich 866 | #+BEGIN_SRC emacs-lisp 867 | (use-package ivy-rich 868 | :ensure t 869 | :config 870 | (ivy-rich-mode 1) 871 | ) 872 | #+END_SRC 873 | * eshell 874 | #+BEGIN_SRC emacs-lisp 875 | 876 | (use-package exec-path-from-shell 877 | :ensure t 878 | :config 879 | (exec-path-from-shell-initialize)) 880 | 881 | 882 | (use-package fish-completion 883 | :ensure t 884 | :config 885 | (global-fish-completion-mode)) 886 | ;; (use-package eshell-prompt-extras 887 | ;; :ensure t 888 | ;; :config 889 | ;; (setq epe-show-python-info nil) 890 | ;; ) 891 | 892 | (use-package eshell-git-prompt 893 | :ensure t 894 | :config 895 | (eshell-git-prompt-use-theme 'git-radar) 896 | ) 897 | 898 | 899 | (setq scroll-step 1) 900 | #+END_SRC 901 | 902 | #+BEGIN_SRC emacs-lisp 903 | (require 'cl-lib) 904 | (defun select-or-create (arg) 905 | "Commentary ARG." 906 | (if (string= arg "New eshell") 907 | (eshell t) 908 | (switch-to-buffer arg))) 909 | (defun eshell-switcher (&optional arg) 910 | "Commentary ARG." 911 | (interactive) 912 | (let* ( 913 | (buffers (cl-remove-if-not (lambda (n) (eq (buffer-local-value 'major-mode n) 'eshell-mode)) (buffer-list)) ) 914 | (names (mapcar (lambda (n) (buffer-name n)) buffers)) 915 | (num-buffers (length buffers) ) 916 | (in-eshellp (eq major-mode 'eshell-mode))) 917 | (cond ((eq num-buffers 0) (eshell (or arg t))) 918 | ((not in-eshellp) (switch-to-buffer (car buffers))) 919 | (t (select-or-create (completing-read "Select Shell:" (cons "New eshell" names))))))) 920 | 921 | 922 | 923 | (defun eshell/in-term (prog &rest args) 924 | "Run shell command in term buffer." 925 | (switch-to-buffer (apply #'make-term prog prog nil args)) 926 | (term-mode) 927 | (term-char-mode)) 928 | 929 | 930 | #+END_SRC 931 | * personal keymap 932 | #+BEGIN_SRC emacs-lisp 933 | 934 | (defun org-agenda-show-agenda-and-todo (&optional arg) 935 | (interactive "P") 936 | (org-agenda arg "c") 937 | (org-agenda-fortnight-view)) 938 | 939 | (defun z/load-iorg () 940 | (interactive ) 941 | (find-file "~/Sync/orgfiles/i.org")) 942 | 943 | ;; set up my own map 944 | (define-prefix-command 'z-map) 945 | (global-set-key (kbd "C-z") 'z-map) ;; was C-1 946 | (define-key z-map (kbd "k") 'compile) 947 | (define-key z-map (kbd "c") 'hydra-multiple-cursors/body) 948 | (define-key z-map (kbd "f") 'hydra-origami/body) 949 | (define-key z-map (kbd "m") 'mu4e) 950 | (define-key z-map (kbd "1") 'org-global-cycle) 951 | (define-key z-map (kbd "a") 'org-agenda-show-agenda-and-todo) 952 | (define-key z-map (kbd "g") 'counsel-ag) 953 | (define-key z-map (kbd "2") 'make-frame-command) 954 | (define-key z-map (kbd "0") 'delete-frame) 955 | (define-key z-map (kbd "o") 'other-frame) 956 | 957 | (define-key z-map (kbd "s") 'flyspell-correct-word-before-point) 958 | (define-key z-map (kbd "i") 'z/load-iorg) 959 | (define-key z-map (kbd "*") 'calc) 960 | (define-key z-map (kbd "e") 'eshell-switcher) 961 | 962 | (setq user-full-name "Mike Zamansky" 963 | user-mail-address "mz631@hunter.cuny.edu") 964 | ;;-------------------------------------------------------------------------- 965 | 966 | 967 | (global-set-key (kbd "\e\ei") 968 | (lambda () (interactive) (find-file "~/Sync/orgfiles/i.org"))) 969 | 970 | (global-set-key (kbd "\e\el") 971 | (lambda () (interactive) (find-file "~/Sync/orgfiles/links.org"))) 972 | 973 | (global-set-key (kbd "\e\ec") 974 | (lambda () (interactive) (find-file "~/.emacs.d/README.org"))) 975 | 976 | (global-set-key (kbd "") 'move-end-of-line) 977 | 978 | (global-set-key [mouse-3] 'flyspell-correct-word-before-point) 979 | 980 | #+END_SRC 981 | 982 | #+RESULTS: 983 | : origami-toggle-node 984 | 985 | # LocalWords: DIRED Javascript Screencasts Autocomplete 986 | * Elfeed 987 | #+BEGIN_SRC emacs-lisp 988 | (setq elfeed-db-directory "~/Sync/shared/elfeeddb") 989 | 990 | (defun mz/elfeed-browse-url (&optional use-generic-p) 991 | "Visit the current entry in your browser using `browse-url'. 992 | If there is a prefix argument, visit the current entry in the 993 | browser defined by `browse-url-generic-program'." 994 | (interactive "P") 995 | (let ((entries (elfeed-search-selected))) 996 | (cl-loop for entry in entries 997 | do (if use-generic-p 998 | (browse-url-generic (elfeed-entry-link entry)) 999 | (browse-url (elfeed-entry-link entry)))) 1000 | (mapc #'elfeed-search-update-entry entries) 1001 | (unless (or elfeed-search-remain-on-entry (use-region-p)) 1002 | ;;(forward-line) 1003 | ))) 1004 | 1005 | 1006 | 1007 | (defun elfeed-mark-all-as-read () 1008 | (interactive) 1009 | (mark-whole-buffer) 1010 | (elfeed-search-untag-all-unread)) 1011 | 1012 | 1013 | ;;functions to support syncing .elfeed between machines 1014 | ;;makes sure elfeed reads index from disk before launching 1015 | (defun bjm/elfeed-load-db-and-open () 1016 | "Wrapper to load the elfeed db from disk before opening" 1017 | (interactive) 1018 | (elfeed-db-load) 1019 | (elfeed) 1020 | (elfeed-search-update--force)) 1021 | 1022 | ;;write to disk when quiting 1023 | (defun bjm/elfeed-save-db-and-bury () 1024 | "Wrapper to save the elfeed db to disk before burying buffer" 1025 | (interactive) 1026 | (elfeed-db-save) 1027 | (quit-window)) 1028 | 1029 | 1030 | 1031 | 1032 | (use-package elfeed 1033 | :ensure t 1034 | :bind (:map elfeed-search-mode-map 1035 | ("q" . bjm/elfeed-save-db-and-bury) 1036 | ("Q" . bjm/elfeed-save-db-and-bury) 1037 | ("m" . elfeed-toggle-star) 1038 | ("M" . elfeed-toggle-star) 1039 | ("j" . mz/make-and-run-elfeed-hydra) 1040 | ("J" . mz/make-and-run-elfeed-hydra) 1041 | ("b" . mz/elfeed-browse-url) 1042 | ("B" . elfeed-search-browse-url) 1043 | ) 1044 | :config 1045 | (defalias 'elfeed-toggle-star 1046 | (elfeed-expose #'elfeed-search-toggle-all 'star)) 1047 | 1048 | ) 1049 | 1050 | (use-package elfeed-goodies 1051 | :ensure t 1052 | :config 1053 | (elfeed-goodies/setup)) 1054 | 1055 | 1056 | (use-package elfeed-org 1057 | :ensure t 1058 | :config 1059 | (elfeed-org) 1060 | (setq rmh-elfeed-org-files (list "~/Sync/shared/elfeed.org"))) 1061 | 1062 | 1063 | 1064 | 1065 | 1066 | (defun z/hasCap (s) "" 1067 | (let ((case-fold-search nil)) 1068 | (string-match-p "[[:upper:]]" s) 1069 | )) 1070 | 1071 | 1072 | (defun z/get-hydra-option-key (s) 1073 | "returns single upper case letter (converted to lower) or first" 1074 | (interactive) 1075 | (let ( (loc (z/hasCap s))) 1076 | (if loc 1077 | (downcase (substring s loc (+ loc 1))) 1078 | (substring s 0 1) 1079 | ))) 1080 | 1081 | ;; (active blogs cs eDucation emacs local misc sports star tech unread webcomics) 1082 | (defun mz/make-elfeed-cats (tags) 1083 | "Returns a list of lists. Each one is line for the hydra configuratio in the form 1084 | (c function hint)" 1085 | (interactive) 1086 | (mapcar (lambda (tag) 1087 | (let* ( 1088 | (tagstring (symbol-name tag)) 1089 | (c (z/get-hydra-option-key tagstring)) 1090 | ) 1091 | (list c (append '(elfeed-search-set-filter) (list (format "@6-months-ago +%s" tagstring) ))tagstring ))) 1092 | tags)) 1093 | 1094 | 1095 | 1096 | 1097 | 1098 | (defmacro mz/make-elfeed-hydra () 1099 | `(defhydra mz/hydra-elfeed () 1100 | "filter" 1101 | ,@(mz/make-elfeed-cats (elfeed-db-get-all-tags)) 1102 | ("*" (elfeed-search-set-filter "@6-months-ago +star") "Starred") 1103 | ("M" elfeed-toggle-star "Mark") 1104 | ("A" (elfeed-search-set-filter "@6-months-ago") "All") 1105 | ("T" (elfeed-search-set-filter "@1-day-ago") "Today") 1106 | ("Q" bjm/elfeed-save-db-and-bury "Quit Elfeed" :color blue) 1107 | ("q" nil "quit" :color blue) 1108 | )) 1109 | 1110 | 1111 | 1112 | 1113 | (defun mz/make-and-run-elfeed-hydra () 1114 | "" 1115 | (interactive) 1116 | (mz/make-elfeed-hydra) 1117 | (mz/hydra-elfeed/body)) 1118 | 1119 | 1120 | (defun my-elfeed-tag-sort (a b) 1121 | (let* ((a-tags (format "%s" (elfeed-entry-tags a))) 1122 | (b-tags (format "%s" (elfeed-entry-tags b)))) 1123 | (if (string= a-tags b-tags) 1124 | (< (elfeed-entry-date b) (elfeed-entry-date a))) 1125 | (string< a-tags b-tags))) 1126 | 1127 | 1128 | (setf elfeed-search-sort-function #'my-elfeed-tag-sort) 1129 | #+END_SRC 1130 | * dired stuff 1131 | #+BEGIN_SRC emacs-lisp 1132 | (use-package diredfl 1133 | :ensure t 1134 | :config 1135 | (diredfl-global-mode 1)) 1136 | 1137 | (setq 1138 | dired-listing-switches "-lXGh --group-directories-first" 1139 | dired-dwim-target t) 1140 | (add-hook 'dired-mode-hook 'dired-hide-details-mode) 1141 | 1142 | 1143 | 1144 | (use-package dired-recent 1145 | :ensure t 1146 | :config 1147 | 1148 | (dired-recent-mode 1) 1149 | ) 1150 | 1151 | 1152 | (defun my-dired-recent-dirs () 1153 | "Present a list of recently used directories and open the selected one in dired" 1154 | (interactive) 1155 | (let ((dir (ivy-read "Directory: " 1156 | dired-recent-directories 1157 | :re-builder #'ivy--regex 1158 | :sort nil 1159 | :initial-input nil))) 1160 | (dired dir))) 1161 | 1162 | (setq dired-guess-shell-alist-user '(("" "xdg-open"))) 1163 | 1164 | #+END_SRC 1165 | ** floobits 1166 | #+begin_src emacs-lisp 1167 | (use-package floobits :ensure t) 1168 | #+end_src 1169 | * RG - ripgrep 1170 | #+begin_src emacs-lisp 1171 | (use-package rg 1172 | :ensure t 1173 | :config 1174 | (rg-enable-default-bindings)) 1175 | ;;(rg-enable-menu)) 1176 | #+end_src 1177 | * open alternative from Xah Lee 1178 | #+begin_src emacs-lisp 1179 | (defun xah-open-in-external-app (&optional @fname) 1180 | "Open the current file or dired marked files in external app. 1181 | The app is chosen from your OS's preference. 1182 | 1183 | When called in emacs lisp, if @fname is given, open that. 1184 | 1185 | URL `http://ergoemacs.org/emacs/emacs_dired_open_file_in_ext_apps.html' 1186 | Version 2019-11-04" 1187 | (interactive) 1188 | (let* ( 1189 | ($file-list 1190 | (if @fname 1191 | (progn (list @fname)) 1192 | (if (string-equal major-mode "dired-mode") 1193 | (dired-get-marked-files) 1194 | (list (buffer-file-name))))) 1195 | ($do-it-p (if (<= (length $file-list) 5) 1196 | t 1197 | (y-or-n-p "Open more than 5 files? ")))) 1198 | (when $do-it-p 1199 | (cond 1200 | ((string-equal system-type "windows-nt") 1201 | (mapc 1202 | (lambda ($fpath) 1203 | (w32-shell-execute "open" $fpath)) $file-list)) 1204 | ((string-equal system-type "darwin") 1205 | (mapc 1206 | (lambda ($fpath) 1207 | (shell-command 1208 | (concat "open " (shell-quote-argument $fpath)))) $file-list)) 1209 | ((string-equal system-type "gnu/linux") 1210 | (mapc 1211 | (lambda ($fpath) (let ((process-connection-type nil)) 1212 | (start-process "" nil "xdg-open" $fpath))) $file-list)))))) 1213 | 1214 | (define-key dired-mode-map (kbd "C-") 'xah-open-in-external-app) 1215 | #+end_src 1216 | * misc 1217 | #+begin_src emacs-lisp 1218 | (setq confirm-kill-processes nil) 1219 | 1220 | 1221 | #+end_src 1222 | * Clojure 1223 | #+BEGIN_SRC emacs-lisp 1224 | (use-package cider 1225 | :ensure t 1226 | :config 1227 | (add-hook 'cider-repl-mode-hook #'company-mode) 1228 | (add-hook 'cider-mode-hook #'company-mode) 1229 | (add-hook 'cider-mode-hook #'eldoc-mode) 1230 | ;; (add-hook 'cider-mode-hook #'cider-hydra-mode) 1231 | (setq cider-repl-use-pretty-printing t) 1232 | (setq cider-repl-display-help-banner nil) 1233 | ;; (setq cider-cljs-lein-repl "(do (use 'figwheel-sidecar.repl-api) (start-figwheel!) (cljs-repl))") 1234 | 1235 | :bind (("M-r" . cider-namespace-refresh) 1236 | ("C-c r" . cider-repl-reset) 1237 | ("C-c ." . cider-reset-test-run-tests)) 1238 | ) 1239 | 1240 | (defun my-clojure-mode-hook () 1241 | (clj-refactor-mode 1) 1242 | (yas-minor-mode 1) ; for adding require/use/import statements 1243 | ;; This choice of keybinding leaves cider-macroexpand-1 unbound 1244 | (cljr-add-keybindings-with-prefix "C-c C-m")) 1245 | (use-package clj-refactor 1246 | :ensure t 1247 | :config 1248 | (add-hook 'clojure-mode-hook #'my-clojure-mode-hook)) 1249 | 1250 | #+END_SRC 1251 | * Python 1252 | #+begin_src emacs-lisp 1253 | ;; set the python interpeter 1254 | (setq python-shell-interpreter "python3") 1255 | 1256 | 1257 | #+end_src 1258 | * lsp 1259 | #+begin_src emacs-lisp :tangle no 1260 | ;; set prefix for lsp-command-keymap (few alternatives - "s-l", "C-l") 1261 | (setq lsp-keymap-prefix "C-c l") 1262 | (setq company-clang-executable "/usr/bin/clangd-10") 1263 | (setq lsp-clients-clangd-executable "/usr/bin/clangd-10") 1264 | 1265 | 1266 | 1267 | (use-package lsp-mode 1268 | :ensure t 1269 | :commands lsp 1270 | :hook ((c-mode c++-mode python-mode) . lsp) 1271 | ) 1272 | 1273 | (use-package lsp-treemacs :ensure t) 1274 | (add-hook 'c-mode-hook 'lsp) 1275 | (add-hook 'c++-mode-hook 'lsp) 1276 | (add-hook 'cpp-mode-hook 'lsp) 1277 | (setq lsp-enabled-clients '(jedi clangd)) 1278 | (use-package lsp-ui 1279 | :ensure t 1280 | :hook (lsp-mode . lsp-ui-mode) 1281 | :config 1282 | (setq lsp-ui-sideline-enable t) 1283 | (setq lsp-ui-sideline-show-hover nil) 1284 | (setq lsp-ui-doc-position 'bottom) 1285 | ;; lsp config stuff 1286 | (setq lsp-enable-links nil) 1287 | (setq lsp-signature-render-documentation nil) 1288 | (setq lsp-headerline-breadcrumb-enable nil) 1289 | (setq lsp-ui-doc-enable nil) 1290 | (setq lsp-completion-enable-additional-text-edit nil) 1291 | (setq web-mode-enable-current-element-highlight t) 1292 | (lsp-ui-doc-show)) 1293 | 1294 | 1295 | (use-package lsp-jedi 1296 | :ensure t 1297 | :config 1298 | (with-eval-after-load "lsp-mode" 1299 | (add-to-list 'lsp-disabled-clients 'pyls) 1300 | (add-to-list 'lsp-enabled-clients 'jedi))) 1301 | 1302 | (setq lsp-ui-doc-show-with-cursor nil) 1303 | 1304 | ;; (use-package dap-mode 1305 | ;; :ensure t 1306 | ;; :hook (lsp-mode . dap-mode) 1307 | ;; :config 1308 | ;; (dap-ui-mode 1) 1309 | ;; (dap-tooltip-mode 1) 1310 | ;; (require 'dap-node) 1311 | ;; (dap-node-setup)) 1312 | 1313 | ;; (dap-auto-configure-mode) 1314 | ;; (require 'dap-gdb-lldb) 1315 | ;; (require 'dap-cpptools) 1316 | ;; https://emacs-lsp.github.io/lsp-mode/tutorials/how-to-turn-off/ 1317 | 1318 | 1319 | #+end_src 1320 | * eglot - C++, Python, Java :tangle no 1321 | #+begin_src emacs-lisp 1322 | 1323 | (use-package eglot :ensure t) 1324 | (add-to-list 'eglot-server-programs '((c++-mode c-mode) "clangd-10")) 1325 | (add-hook 'c-mode-hook 'eglot-ensure) 1326 | (add-hook 'c++-mode-hook 'eglot-ensure) 1327 | 1328 | (add-hook 'python-mode-hook 'eglot-ensure) 1329 | 1330 | 1331 | (defconst my-eclipse-jdt-home "/home/zamansky/.emacs.d/.cache/lsp/eclipse.jdt.ls/plugins/org.eclipse.equinox.launcher_1.5.800.v20200727-1323.jar") 1332 | (defun my-eglot-eclipse-jdt-contact (interactive) 1333 | "Contact with the jdt server input INTERACTIVE." 1334 | (let ((cp (getenv "CLASSPATH"))) 1335 | (setenv "CLASSPATH" (concat cp ":" my-eclipse-jdt-home)) 1336 | (unwind-protect (eglot--eclipse-jdt-contact nil) 1337 | (setenv "CLASSPATH" cp)))) 1338 | (setcdr (assq 'java-mode eglot-server-programs) #'my-eglot-eclipse-jdt-contact) 1339 | 1340 | 1341 | (add-hook 'java-mode-hook 'eglot-ensure) 1342 | 1343 | #+end_src 1344 | * Load other files 1345 | #+BEGIN_SRC emacs-lisp 1346 | 1347 | (load-if-exists "~/Sync/shared/mu4econfig.el") 1348 | (load-if-exists "~/Sync/shared/not-for-github.el") 1349 | 1350 | #+END_SRC 1351 | 1352 | 1353 | * Temp testing stuff 1354 | #+begin_src emacs-lisp 1355 | ;;(set-frame-font "Inconsolata-18") 1356 | (set-frame-font "Firacode-18") 1357 | #+end_src 1358 | --------------------------------------------------------------------------------