Advertisement
froleyks

spacemacs.org

Dec 21st, 2020
239
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 80.71 KB | None | 0 0
  1. * Start
  2. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  3. (require 'helm)
  4. #+END_SRC
  5. * Bugfixes
  6. ** disable which-key slow due to lsp
  7. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  8. (spacemacs/toggle-which-key-off)
  9. #+END_SRC
  10. ** Allways open new window/frame/why...
  11. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  12. ;; (setq pop-up-frames t)
  13. #+END_SRC
  14. ** helm doesn't find new files
  15. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  16. (advice-add
  17. 'spacemacs/helm-find-files ; function to be advised
  18. :before ; advice runs first
  19. (lambda (&rest r) (helm-ff-refresh-cache)) ; advising function, this must have the same argument list as the main function, in this case all absorbed into a list "r"
  20. )
  21. #+END_SRC
  22. ** zero always is a numeric prefix
  23. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  24. (general-def 'operator "0" 'digit-argument)
  25. #+END_SRC
  26. * General
  27. ** Keybindings
  28. *** help
  29. normal insert visual motion emacs operator outer-text-objects inner-text-objects replace
  30. (spacemacs/set-leader-keys "key" 'command)
  31. (spacemacs/set-leader-keys-for-major-mode 'foo-mode "key" 'command)
  32.  
  33. (general-def 'normal "key" 'command)
  34.  
  35. *** WASD
  36. **** Windows
  37. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  38. (evil-leader/set-key
  39. "wl" 'evil-window-up
  40. "wa" 'evil-window-down
  41. "wi" 'evil-window-left
  42. "we" 'evil-window-right
  43. )
  44. #+END_SRC
  45. *** jump to register with j
  46. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  47. (general-def 'motion "j" 'evil-goto-mark)
  48. #+END_SRC
  49. *** jump to same indent
  50. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  51. (defun jump-to-same-indent-down (direction)
  52. (interactive "P")
  53. (let ((start-indent (current-indentation)))
  54. (while
  55. (and (not (bobp))
  56. (zerop (forward-line (or direction 1)))
  57. (or (= (current-indentation) 0)
  58. (> (current-indentation) start-indent)))))
  59. (back-to-indentation)
  60. )
  61.  
  62. (defun jump-to-same-indent-up ()
  63. (interactive)
  64. (jump-to-same-indent-down -1)
  65. )
  66.  
  67. (general-def 'motion "M-}" 'jump-to-same-indent-down)
  68. (general-def 'motion "M-{" 'jump-to-same-indent-up)
  69. #+END_SRC
  70. **** J and K jump between whitespaces
  71. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  72. (defun next-whitespace()
  73. (interactive)
  74. (forward-char)
  75. (setq found (search-forward " \n" nil t nil))
  76. (when found (backward-char))
  77. )
  78.  
  79. (defun previous-whitespace()
  80. (interactive)
  81. (setq found (search-backward " \n" nil t nil))
  82. )
  83.  
  84. (general-define-key
  85. :states 'normal
  86. :keymaps'override
  87. "M-k" 'previous-whitespace
  88. "M-j" 'next-whitespace)
  89. #+END_SRC
  90. *** gedankenstrich move up
  91. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  92. (general-def 'normal "−" 'evil-previous-line-first-non-blank)
  93. #+END_SRC
  94. *** delete last word
  95. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  96. (general-def "M-v" 'clean-aindent--bsunindent)
  97. (use-package helm
  98. :defer t
  99. :init
  100. :general (:keymaps 'helm-map "M-v" 'clean-aindent--bsunindent))
  101. #+END_SRC
  102. *** insert lines
  103. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  104. (general-def 'normal "C-a" 'spacemacs/insert-line-above-no-indent)
  105. (general-def 'normal "C-j" 'spacemacs/insert-line-below-no-indent)
  106. #+END_SRC
  107. *** jump forward
  108. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  109. (general-def 'normal "C-s" 'evil-jump-orward)
  110. #+END_SRC
  111. *** last macro
  112. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  113. (general-def 'normal "Q" (kbd"@@"))
  114. #+END_SRC
  115. *** undo
  116. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  117. (general-def '(normal insert) "C-n" 'undo-tree-undo)
  118. #+END_SRC
  119. *** Redo
  120. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  121. (general-def 'normal "U" 'undo-tree-redo)
  122. #+END_SRC
  123. *** helm completion
  124. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  125. (general-def "C-<SPC>" 'helm-company)
  126. #+END_SRC
  127. *** smart parents dont escape
  128. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  129. (setq-default sp-escape-quotes-after-insert nil)
  130. #+END_SRC
  131. *** open frame other buffer
  132. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  133. (evil-leader/set-key "bo" 'display-buffer-other-frame)
  134. #+END_SRC
  135. *** save with escape
  136. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  137. (defun froleyks-save-if-bufferfilename (&rest args)
  138. (when (buffer-file-name)
  139. (save-buffer))
  140. (when (string-match-p (regexp-quote "Org Src") (buffer-name) )
  141. (save-buffer))
  142. )
  143.  
  144. (defadvice evil-force-normal-state
  145. (after evil-force-normal-state-after activate)
  146. (froleyks-save-if-bufferfilename))
  147. #+END_SRC
  148. *** global help
  149. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  150. (global-set-key [C-f1] 'help-command)
  151. #+END_SRC
  152. *** Scrolling
  153. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  154. (general-def 'motion "C-M-u" 'scroll-up-line)
  155. (general-def 'motion "C-M-d" 'scroll-down-line)
  156. #+END_SRC
  157. ** open with
  158. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  159. (require 'openwith)
  160. (openwith-mode t)
  161. (setq openwith-associations '(
  162. ("\\.mp3\\'" "xmms" (file))
  163. ("\\.\\(?:mpe?g\\|avi\\|wmv\\)\\'" "mplayer" ("-idx" file))
  164. ;; ("\\.\\(?:jp?g\\|png\\)\\'" "display" (file))
  165. ("\\.pdf\\'" "evince" (file))
  166. ("\\.doc\\'" "libreoffice" (file))
  167. ("\\.docx\\'" "libreoffice" (file))
  168. ("\\.mp4\\'" "vlc" (file))
  169. ("\\.mkv\\'" "vlc" (file))
  170. ))
  171. #+END_SRC
  172. ** popup windows
  173. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  174. (setq popwin:special-display-config '(
  175. ("*compilation*" :dedicated nil :position bottom :stick nil :noselect t :height 0.1)
  176. ("*lsp-help*" :dedicated nil :position bottom :stick t :noselect t :height 0.4)
  177. ("^\\*Flycheck.+\\*$" :regexp t :dedicated nil :position bottom :stick t :noselect t)
  178. ("*Google Translate*" :dedicated nil :position bottom :stick t :noselect t :height 0.4)
  179. ("^*WoMan.+*$" :regexp t :position bottom)
  180. ("*nosetests*" :dedicated nil :position bottom :stick t :noselect nil)
  181. ("*grep*" :dedicated nil :position bottom :stick t :noselect nil)
  182. ("*ert*" :dedicated nil :position bottom :stick t :noselect nil)
  183. ("*undo-tree Diff*" :dedicated nil :position bottom :stick t :noselect nil :height 0.3)
  184. ("*undo-tree*" :dedicated nil :position right :stick t :noselect nil :width 60)
  185. ("*Async Shell Command*" :dedicated nil :position bottom :stick t :noselect nil)
  186. ("*Shell Command Output*" :dedicated nil :position bottom :stick t :noselect nil)
  187. (dap-server-log-mode :dedicated nil :position bottom :stick t :noselect t :height 0.4)
  188. (compilation-mode :dedicated nil :position bottom :stick t :noselect t :height 0.4)
  189. ("*Process List*" :dedicated nil :position bottom :stick t :noselect nil :height 0.4)
  190. ("*Help*" :dedicated nil :position bottom :stick t :noselect t :height 0.4)
  191. ))
  192. #+END_SRC
  193. * Utility
  194. ** temp files
  195. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  196. (defun my-temp-file()
  197. (interactive)
  198. (helm-find-files-1 "~/temp/temp")
  199. )
  200. (evil-leader/set-key "D" 'my-temp-file)
  201. #+END_SRC
  202. ** Snippets
  203. *** hippie expand
  204. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  205. (defun froleyks-expand-lines ()
  206. (interactive)
  207. (let ((hippie-expand-try-functions-list '(try-expand-line)))
  208. (call-interactively 'hippie-expand)))
  209.  
  210. (general-def '(normal insert)
  211. "C-e" 'hippie-expand
  212. "C-S-e" 'froleyks-expand-lines
  213. )
  214. #+END_SRC
  215. *** Save them under VC
  216. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  217. (use-package yasnippet
  218. :defer t
  219. :init
  220. (setq yas-snippet-dirs '("/home/froleyks/.config/spacemacs/snippets"))
  221. )
  222. #+END_SRC
  223. *** create snippet quickly
  224. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  225. (use-package yasnippet
  226. :defer t
  227. :config
  228. (evil-leader/set-key
  229. "Sr" 'helm-yas-create-snippet-on-region
  230. "Se" 'helm-yas-visit-snippet-file
  231. )
  232. )
  233. #+END_SRC
  234. ** evil narrow
  235. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  236. (evil-define-operator evil-narrow-op (beg end type)
  237. "Evil indirect *narrow* operator."
  238. (interactive "<R>")
  239. (deactivate-mark)
  240. (let ((buf (clone-indirect-buffer nil nil)))
  241. (with-current-buffer buf
  242. (narrow-to-region beg end))
  243. (switch-to-buffer buf)))
  244.  
  245. (general-def '(normal visual) "h" 'evil-narrow-op)
  246. #+END_SRC
  247. ** Search Engine
  248. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  249. (spacemacs/set-leader-keys
  250. "af" 'engine/search-google
  251. "al" 'engine/search-scholar
  252. "ax" 'engine/search-arxiv
  253. "aq" 'engine/search-cpp
  254. "ae" 'engine/search-linguee
  255. "aE" 'engine/search-deepl
  256. "ag" 'engine/search-github
  257. "aC" 'engine/search-corpus
  258. )
  259.  
  260. (use-package engine-mode
  261. :defer t
  262. :commands (engine/search-google
  263. engine/search-scholar
  264. engine/search-arxiv
  265. engine/search-cpp
  266. engine/search-linguee
  267. engine/search-github
  268. engine/search-deepl
  269. )
  270. ;; engines
  271. :config
  272. (defengine google
  273. "https://www.google.com/search?q=%s")
  274. (defengine scholar
  275. "https://scholar.google.de/scholar?hl=de&q=%s&btnG=&lr=")
  276. (defengine arxiv
  277. "https://arxiv.org/search/?query=%s&searchtype=all&source=header")
  278. (defengine cpp
  279. "https://en.cppreference.com/mwiki/index.php?title=Special%%3ASearch&search=%s")
  280. (defengine linguee
  281. "http://www.linguee.de/deutsch-englisch/search?source=auto&query=%s")
  282. (defengine github
  283. "https://github.com/search?utf8=✓&q=%s&ref=simplesearch")
  284. (defengine deepl
  285. "https://www.deepl.com/en/translator#de/en/%s")
  286. (defengine corpus
  287. "https://books.google.com/ngrams/graph?content=%s&year_start=1970&year_end=2018&corpus=17&smoothing=3")
  288. )
  289. #+END_SRC
  290. ** cycle text
  291. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  292. (general-def 'normal
  293. "ö" 'froleyks-search-rotate-backward
  294. "ä" 'froleyks-search-rotate
  295. )
  296. (use-package rotate-text
  297. :defer t
  298. :commands (froleyks-search-rotate froleyks-search-rotate-backward)
  299. :init
  300. (add-to-list 'load-path "~/.config/spacemacs/local/rotate-text")
  301. :config
  302. (defun froleyks-search-rotate()
  303. (interactive)
  304. ;; ( search-backward-regexp "\s")
  305. ;; (evil-forward-char)
  306. (search-forward-regexp "\\(\\+\\|-\\)?[0-9]+\\(\\.[0-9]+\\)?\\|true\\|false\\|first\\|second\\|scheduled\\|deadline\\|yes\\|no" nil t)
  307. (call-interactively 'rotate-text)
  308. (evil-backward-WORD-begin)
  309. )
  310.  
  311. (defun froleyks-search-rotate-backward()
  312. (interactive)
  313. ;; ( search-backward-regexp "\s")
  314. ;; (evil-forward-char)
  315. (search-forward-regexp "\\(\\+\\|-\\)?[0-9]+\\(\\.[0-9]+\\)?\\|true\\|false\\|first\\|second\\|scheduled\\|deadline\\|yes\\|no" nil t)
  316. (call-interactively 'rotate-text-backward)
  317. (evil-backward-WORD-begin)
  318. )
  319.  
  320. (setq rotate-text-words (append rotate-text-words '(
  321. ("True" "False")
  322. ("nil" "t")
  323. ("true" "false")
  324. ("first" "second")
  325. ("scheduled" "deadline")
  326. ("deadline" "scheduled")
  327. ("yes" "no")
  328. ))))
  329. #+END_SRC
  330. ** pastebin
  331. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  332. (evil-leader/set-key
  333. "BB" 'pastebin-new
  334. "BL" 'pastebin-list-buffer-refresh
  335. )
  336.  
  337. (use-package neopastebin
  338. :defer t
  339. :commands
  340. pastebin-new
  341. pastebin-list-buffer-refresh
  342. :init
  343. :config
  344. (pastebin-create-login :dev-key "b05fe24db6a4bca168b463b3fa777bfa"
  345. :username "froleyks"
  346. :password "shinigami"
  347. ))
  348. #+END_SRC
  349. ** spell checking
  350. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  351. (setq-default ispell-dictionary "english")
  352. (defun my-lang-german()
  353. (interactive)
  354. (ispell-change-dictionary "de_DE"))
  355.  
  356. (defun my-lang-english()
  357. (interactive)
  358. (ispell-change-dictionary "en_US"))
  359.  
  360. (evil-leader/set-key
  361. "SD" 'my-lang-german
  362. "SS" 'my-lang-english
  363. )
  364. #+END_SRC
  365. ** open emacs
  366. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  367. (setq froleyks-resume-buffer "*spacemacs*")
  368.  
  369. (add-hook 'switch-buffer-functions
  370. (lambda (prev curr)
  371. (setq froleyks-resume-buffer curr)
  372. ))
  373.  
  374. (add-hook 'find-file-hook
  375. (lambda ()
  376. (setq froleyks-resume-buffer (current-buffer))))
  377.  
  378. (defun froleyks-create-frame-resume ()
  379. (interactive)
  380. (select-frame (make-frame '((window-system . x))))
  381. (switch-to-buffer froleyks-resume-buffer))
  382.  
  383. (defun froleyks-term ()
  384. (interactive)
  385. (select-frame (make-frame '((window-system . x))))
  386. (setq current-prefix-arg '(4)) ; C-u
  387. (ansi-term "/bin/zsh"))
  388.  
  389. (defun froleyks-find-file (file)
  390. (interactive)
  391. (select-frame (make-frame '((window-system . x))))
  392. (find-file file))
  393.  
  394. ;; (defun froleyks-term ()
  395. ;; (interactive)
  396. ;; (setq current-dir default-directory)
  397. ;; (select-frame (make-frame '((window-system . x))))
  398. ;; (setq current-prefix-arg '(4)) ; C-u
  399. ;; (let ((default-directory current-dir))
  400. ;; (set-buffer (call-interactively '(ansi-term "/bin/zsh")))))
  401. ;; ;; (set-buffer (call-interactively 'spacemacs/shell-pop-ansi-term))))
  402. #+END_SRC
  403. ** multiple cursors
  404. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  405. (use-package evil-mc
  406. :defer t
  407. :general (
  408. :states '(normal visual)
  409. :keymaps 'evil-mc-key-map
  410. "C-n" 'undo
  411. "C-p" 'evil-paste-pop
  412. "C-S-p" 'evil-paste-pop-next
  413. ))
  414. #+END_SRC
  415. ** insert relative path helm
  416. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  417. (use-package helm
  418. :defer t
  419. :init
  420. (defun froleyks-insert-relative-path-helm ()
  421. (interactive)
  422. (setq current-prefix-arg '(16)) ; C-u
  423. (call-interactively 'helm-ff-run-complete-fn-at-point))
  424. :bind (:map helm-map
  425. ("C-e" . froleyks-insert-relative-path-helm)))
  426. #+END_SRC
  427. ** open explorer
  428. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  429. (defun open-explorer ()
  430. (interactive)
  431. (save-window-excursion (shell-command "nautilus .&")))
  432.  
  433. (evil-leader/set-key (kbd "fd") 'open-explorer)
  434. #+END_SRC
  435. ** jumping sets history
  436. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  437. (defun my-jump-advice (oldfun &rest args)
  438. (let ((old-pos (point)))
  439. (apply oldfun args)
  440. (when (> (abs (- (line-number-at-pos old-pos)
  441. (line-number-at-pos (point)))) 5)
  442. (save-excursion
  443. (goto-char old-pos)
  444. (evil-set-jump)))))
  445.  
  446. (advice-add 'evil-next-line :around #'my-jump-advice)
  447. (advice-add 'evil-previous-line :around #'my-jump-advice)
  448. #+END_SRC
  449. ** backup
  450. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  451. ;; Backups
  452. (setq make-backup-files t)
  453. (setq version-control t ;; Use version numbers for backups.
  454. kept-new-versions 500 ;; Number of newest versions to keep.
  455. kept-old-versions 0 ;; Number of oldest versions to keep.
  456. delete-old-versions t ;; Don't ask to delete excess backup versions.
  457. backup-by-copying t) ;; Copy all files, don't rename them.
  458. (setq vc-make-backup-files t)
  459. ;; Default and per-save backups go here:
  460. (setq backup-directory-alist '(("" . "~/emacs/backup/per-save")))
  461.  
  462. (defun force-backup-of-buffer ()
  463. ;; Make a special "per session" backup at the first save of each
  464. ;; emacs session.
  465. (when (not buffer-backed-up)
  466. ;; Override the default parameters for per-session backups.
  467. (let ((backup-directory-alist '(("" . "~/Emacs/backup/per-session")))
  468. (kept-new-versions 500))
  469. (backup-buffer)))
  470. ;; Make a "per save" backup on each save. The first save results in
  471. ;; both a per-session and a per-save backup, to keep the numbering
  472. ;; of per-save backups consistent.
  473. (let ((buffer-backed-up nil))
  474. (backup-buffer)))
  475.  
  476. (add-hook 'before-save-hook 'force-backup-of-buffer)
  477.  
  478. (evil-leader/set-key "go" 'backup-walker-start)
  479. (use-package backup-walker
  480. :defer t
  481. :commands backup-walker-start
  482. :general (
  483. :states 'normal
  484. :keymaps 'backup-walker-mode-map
  485. "b" 'backup-walker-blame
  486. "a" 'backup-walker-previous
  487. "e" 'backup-walker-next
  488. "q" 'backup-walker-quit
  489. "<RET>" 'backup-walker-show-file-in-other-window
  490. )
  491. )
  492. #+END_SRC
  493. ** evil snipe
  494. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  495. (use-package evil-snipe
  496. :defer t
  497. :bind (
  498. :map evil-motion-state-map
  499. ("f" . evil-snipe-f)
  500. ("F" . evil-snipe-F)
  501. ("t" . evil-snipe-t)
  502. ("T" . evil-snipe-T)
  503. ("l" . evil-snipe-s)
  504. ("L" . evil-snipe-S)
  505. :map evil-snipe-mode-map ("," . nil) ("n" . evil-snipe-repeat) ("N" . evil-snipe-repeat-reverse)
  506. :map evil-snipe-local-mode-map ("," . nil) ("n" . evil-snipe-repeat) ("N" . evil-snipe-repeat-reverse)
  507. :map evil-snipe-override-mode-map ("," . nil) ("n" . evil-snipe-repeat) ("N" . evil-snipe-repeat-reverse)
  508. :map evil-snipe-override-local-mode-map ("," . nil) ("n" . evil-snipe-repeat) ("N" . evil-snipe-repeat-reverse)
  509. :map evil-snipe-parent-transient-map ("," . nil) ("n" . evil-snipe-repeat) ("N" . evil-snipe-repeat-reverse)
  510. )
  511. :config
  512. (setq evil-snipe-scope 'buffer)
  513. (setq evil-snipe-enable-highlight nil)
  514. (setq evil-snipe-enable-incremental-highlight nil)
  515. (define-key evil-normal-state-map (kbd "s") 'evil-substitute)
  516. (evil-define-key* '(motion normal) evil-snipe-local-mode-map
  517. "s" nil
  518. "S" nil)
  519. )
  520. #+END_SRC
  521. ** create body
  522. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  523. (defun my-create-body()
  524. (interactive)
  525. (end-of-line)
  526. (backward-char)
  527. (newline-and-indent)
  528. (evil-open-above 1)
  529. )
  530.  
  531. (evil-define-key '(normal visual insert) 'global (kbd "M-o") 'my-create-body)
  532. #+END_SRC
  533. ** Line manipulation
  534. *** flush empty lines
  535. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  536. (defun flush-empty-lines ()
  537. "removes empty lines from files"
  538. (interactive)
  539. (flush-lines "^$")
  540. )
  541. #+END_SRC
  542. *** remove duplicate lines
  543. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  544. (defun remove-dubplicate-lines ()
  545. "removes duplicate lines form file"
  546. (interactive)
  547. (replace-regexp "\\([^\n]+\n\\)\\1+" "\\1")
  548. )
  549. #+END_SRC
  550. *** keybindings
  551. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  552. (evil-leader/set-key
  553. "Le" 'flush-empty-lines
  554. "Lf" 'flush-lines
  555. "Lk" 'keep-lines
  556. "Ld" 'remove-dubplicate-lines
  557. )
  558. #+END_SRC
  559. * Modes
  560. ** Org
  561. *** visual
  562. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  563. (use-package org
  564. :defer t
  565. :hook (org-mode . org-indent-mode)
  566. :custom
  567. (org-pretty-entities t)
  568. (org-ellipsis " ▾")
  569. (org-hide-leading-stars t)
  570. (org-superstar-headline-bullets-list '("◉" "○" "●" "○" "●" "○" "●"))
  571. (org-superstar-item-bullet-alist
  572. '((?+ . ?➤)
  573. (?* . ?⏭)
  574. (?- . ?•)))
  575. )
  576. #+END_SRC
  577. *** Export
  578. **** make = export textsc
  579. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  580. (setq org-latex-text-markup-alist
  581. '((bold . "\\textbf{%s}")
  582. (code . protectedtexttt)
  583. (italic . "\\emph{%s}")
  584. (strike-through . "\\sout{%s}")
  585. (underline . "\\uline{%s}")
  586. (verbatim . "\\textsc{%s}")) )
  587. #+END_SRC
  588. **** compile org-beamer
  589. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  590. (use-package ox-beamer
  591. :defer t
  592. :config
  593. (add-to-list 'org-beamer-environments-extra
  594. '("onlyenv" "O" "\\begin{onlyenv}%a" "\\end{onlyenv}"))
  595. (add-to-list 'org-beamer-environments-extra
  596. '("visibleenv" "V" "\\begin{visibleenv}%a" "\\end{visibleenv}"))
  597. (add-to-list 'org-beamer-environments-extra
  598. '("overlayarea" "S" "\\begin{overlayarea}%a" "\\end{overlayarea}"))
  599. )
  600. #+END_SRC
  601. **** babel lang
  602. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  603. (use-package ob-eval
  604. :defer t
  605. :custom
  606. (org-babel-default-header-args '(
  607. (:eval . "never-export")
  608. (:noweb . "yes")
  609. (:session . "none")
  610. (:results . "replace")
  611. (:exports . "code")
  612. (:cache . "no")
  613. (:hlines . "no")
  614. (:tangle . "no")
  615. ))
  616. :config
  617. (setq org-confirm-babel-evaluate nil)
  618. (add-hook 'org-export-before-processing-hook #'org-babel-tangle)
  619. (org-babel-do-load-languages
  620. 'org-babel-load-languages
  621. '(
  622. (emacs-lisp . t)
  623. (latex . t)
  624. (shell . t)
  625. (python . t)
  626. (dot . t)
  627. ))
  628. ;; (setq org-babel-default-header-args
  629. ;; (cons '(:noweb . "yes")
  630. ;; (assq-delete-all :noweb org-babel-default-header-args)
  631. ;; )
  632. ;; )
  633.  
  634. ;; (setq org-babel-default-header-args
  635. ;; (cons '(:eval . "never-export")
  636. ;; (assq-delete-all :eval org-babel-default-header-args)
  637. ;; )
  638. ;; )
  639.  
  640. )
  641. #+END_SRC
  642.  
  643. #+RESULTS:
  644. : t
  645.  
  646. **** find last org property "key"
  647. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  648. (defun key (keyString)
  649. (save-excursion
  650. (search-backward (concat "#+" keyString ":"))
  651. (evil-forward-WORD-begin)
  652. (buffer-substring-no-properties (point) (point-at-eol))
  653. )
  654. )
  655. #+END_SRC
  656. **** find last org link
  657. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  658. (defun link (linkString)
  659. (save-excursion
  660. (search-backward (concat "[" linkString "]]"))
  661. (search-backward "[")
  662. (search-forward ":")
  663. (let ((begin (point)))
  664. (search-forward "]")
  665. (forward-char -1)
  666. (buffer-substring-no-properties begin (point))
  667. )))
  668. #+END_SRC
  669. **** find last heading
  670. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  671. (defun head () (save-excursion
  672. (search-backward-regexp "^\\* ")
  673. (evil-forward-word-begin)
  674. (buffer-substring-no-properties (point) (point-at-eol))
  675. ))
  676. #+END_SRC
  677. **** get from table
  678. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  679. (defun from (table key)
  680. (mapconcat (lambda (x) (if (string= (pop x) key) (mapconcat 'identity x " | ") "")) table ""))
  681. #+END_SRC
  682. **** export to multiple pdfs
  683. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  684. (defun org-export-headlines-to-pdf ()
  685. "Export all subtrees that are *not* tagged with :noexport: to
  686. separate files.
  687.  
  688. Subtrees that do not have the :EXPORT_FILE_NAME: property set
  689. are exported to a filename derived from the headline text."
  690. (interactive)
  691. (save-buffer)
  692. (let (
  693. (modifiedp (buffer-modified-p))
  694. ;; (pdfs "pdfs")
  695. (pdfs "")
  696. )
  697. (unless (or (string= pdfs "") (file-exists-p pdfs))
  698. (make-directory pdfs))
  699. (save-excursion
  700. (goto-char (point-min))
  701. (goto-char (re-search-forward "^*"))
  702. (set-mark (line-beginning-position))
  703. (goto-char (point-max))
  704. (org-map-entries
  705. (lambda ()
  706. (let ((export-file (org-entry-get (point) "EXPORT_FILE_NAME")))
  707. (unless export-file
  708. (org-set-property
  709. "EXPORT_FILE_NAME"
  710. (concat pdfs (if (string= pdfs "") "" "/") (replace-regexp-in-string "," ""
  711. (replace-regexp-in-string " " "_" (nth 4 (org-heading-components)))))
  712. ))
  713. (deactivate-mark)
  714. (org-latex-export-to-pdf nil t)
  715. (unless export-file (org-delete-property "EXPORT_FILE_NAME"))
  716. (set-buffer-modified-p modifiedp)))
  717. "-noexport" 'region-start-level))
  718. (shell-command (concat "find " pdfs " -type f -name \"*.tex\" -delete"))
  719. ))
  720. (evil-leader/set-key-for-mode 'org-mode
  721. "ep" 'org-export-headlines-to-pdf)
  722. #+END_SRC
  723. **** align tables after executing code blocs
  724. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  725. (advice-add
  726. 'org-babel-execute-buffer ; function to be advised
  727. :after
  728. (lambda (&rest r) (org-table-map-tables 'org-table-align)) ; advising function, this must have the same argument list as the main function, in this case all absorbed into a list "r"
  729. )
  730. #+END_SRC
  731. **** pick due date
  732. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  733. (defun pick-due-date ()
  734. (setq system-time-locale "C")
  735. (org-format-time-string "%Y-%m-%d %A"
  736. (org-read-date nil t)
  737. ))
  738. #+END_SRC
  739. **** view org pdf
  740. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  741. (defun org-pdf-view ()
  742. (interactive)
  743. (let ((pdf (replace-regexp-in-string ".org" ".pdf" (buffer-file-name)) ))
  744. (find-file pdf)
  745. ))
  746.  
  747. (evil-leader/set-key-for-mode 'org-mode "v" 'org-pdf-view)
  748. #+END_SRC
  749. **** evalBlock
  750. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  751. (defun evalBlock (name) (save-excursion (org-babel-goto-named-src-block name) (org-babel-execute-src-block)))
  752. #+END_SRC
  753. *** open links in new frame
  754. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  755.  
  756. ;; '(org-link-frame-setup
  757. ;; '(
  758. ;; (file . (lambda (file)
  759. ;; (select-frame (make-frame '((window-system . x))))
  760. ;; (find-file file)
  761. ;; ))
  762. ;; ))
  763.  
  764. (use-package ol
  765. :defer t
  766. :config
  767. (setq org-link-frame-setup
  768. '((vm . vm-visit-folder-other-frame)
  769. (vm-imap . vm-visit-imap-folder-other-frame)
  770. (gnus . org-gnus-no-new-news)
  771. (file . (lambda (file)
  772. (select-frame (make-frame '((window-system . x))))
  773. (find-file file)
  774. ))
  775. (wl . wl-other-frame)))
  776. )
  777. #+END_SRC
  778. *** agenda
  779. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  780. (use-package org
  781. :defer t
  782. :general (
  783. :keymaps 'org-agenda-keymap
  784. "ö" 'org-agenda-earlier
  785. "ä" 'org-agenda-later
  786. )
  787. :custom
  788. (org-agenda-window-setup 'switch-to-buffer-other-frame)
  789. (org-agenda-files
  790. '(
  791. "~/org/brain.org"
  792. "~/org/daily.org"
  793. "~/org/einkauf.org"
  794. "~/org/jku.org"
  795. "~/org/todo.org"
  796. "~/org/rare/schulden.org"
  797. "~/org/rare/feiertage.org"
  798. "~/JKU/MC/mcex/ws20/grading/project2/project2.org"
  799. ))
  800. (org-agenda-todo-ignore-scheduled t)
  801. )
  802.  
  803. (spacemacs/set-leader-keys "aa" 'org-agenda-list)
  804. (spacemacs/set-leader-keys "at" 'org-todo-list)
  805. #+END_SRC
  806.  
  807. *** brain capture
  808. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  809. (use-package org
  810. :defer t
  811. :custom
  812. (org-capture-templates
  813. '(("b" "brain" entry (file "~/org/brain.org")
  814. "* %?%i\n %U %a")
  815. ))
  816. )
  817. (defun brainCapture ()
  818. (interactive)
  819. (org-capture nil "b")
  820. (evil-insert 1)
  821. )
  822. (spacemacs/set-leader-keys "ab" 'brainCapture)
  823. #+END_SRC
  824. *** Movement
  825. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  826. (use-package org
  827. :defer t
  828. :general (
  829. :states 'normal
  830. :keymaps 'org-mode-map
  831. "M-k" 'org-previous-visible-heading
  832. "S-C-k" 'org-backward-heading-same-level
  833. "M-j" 'org-next-visible-heading
  834. "S-C-j" 'org-forward-heading-same-level
  835. ))
  836. #+END_SRC
  837. *** open scrc block in other window
  838. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  839. (setq-default org-src-window-setup 'other-frame)
  840. (advice-add
  841. 'org-edit-special
  842. :before ; advice runs first
  843. (lambda (&rest r) (make-frame '((window-system . x)))) ; advising function, this must have the same argument list as the main function, in this case all absorbed into a list "r"
  844. )
  845. #+END_SRC
  846. *** archive
  847. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  848. (use-package org
  849. :defer t
  850. :config
  851. (setq org-archive-location "~/org/rare/archive.org::datetree/* Finished Tasks")
  852. (evil-leader/set-key-for-mode 'org-mode "m" 'org-archive-subtree)
  853. )
  854. #+END_SRC
  855. *** notifications
  856. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  857. (require 'appt)
  858. (appt-activate t)
  859.  
  860. (setq appt-message-warning-time 5) ; Show notification 5 minutes before event
  861. (setq appt-display-interval appt-message-warning-time) ; Disable multiple reminders
  862. (setq appt-display-mode-line nil)
  863.  
  864. ; Use appointment data from org-mode
  865. (defun my-org-agenda-to-appt ()
  866. (interactive)
  867. (setq appt-time-msg-list nil)
  868. (org-agenda-to-appt))
  869.  
  870. ; Update alarms when...
  871. ; (1) ... Starting Emacs
  872. (my-org-agenda-to-appt)
  873.  
  874. ; (2) ... Everyday at 12:05am (useful in case you keep Emacs always on)
  875. ;; (run-at-time "12:05am" (* 24 3600) 'my-org-agenda-to-appt)
  876.  
  877. ; (3) ... When TODO.txt is saved
  878. (add-hook 'after-save-hook
  879. '(lambda ()
  880. (if (or
  881. (string= (buffer-file-name) (concat (getenv "HOME") "/org/brain.org"))
  882. (string= (buffer-file-name) (concat (getenv "HOME") "/org/daily.org"))
  883. (string= (buffer-file-name) (concat (getenv "HOME") "/org/einkauf.org"))
  884. (string= (buffer-file-name) (concat (getenv "HOME") "/org/jku.org"))
  885. (string= (buffer-file-name) (concat (getenv "HOME") "/org/todo.org"))
  886. )
  887. (my-org-agenda-to-appt))))
  888.  
  889. ; Display appointments as a window manager notification
  890. (setq appt-disp-window-function 'my-appt-display)
  891. (setq appt-delete-window-function (lambda () t))
  892.  
  893. (setq my-appt-notification-app (concat (getenv "HOME") "/bin/appt-notification"))
  894.  
  895. (defun my-appt-display (min-to-app new-time msg)
  896. (if (atom min-to-app)
  897. (start-process "my-appt-notification-app" nil my-appt-notification-app min-to-app msg)
  898. (dolist (i (number-sequence 0 (1- (length min-to-app))))
  899. (start-process "my-appt-notification-app" nil my-appt-notification-app (nth i min-to-app) (nth i msg)))))
  900. #+END_SRC
  901. *** refile
  902. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  903. (use-package org
  904. :defer t
  905. :custom
  906. (org-refile-targets
  907. '((nil :maxlevel . 1)
  908. (org-agenda-files :maxlevel . 1)))
  909. (org-refile-use-outline-path 'file)
  910. )
  911. #+END_SRC
  912. *** edit ipe
  913. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  914. (use-package org
  915. :defer t
  916. :config
  917. (defun editIpe()
  918. (interactive)
  919. (save-excursion
  920. (forward-char 1)
  921. (search-backward "[")
  922. (search-forward ":")
  923. (shell-command (concat "ipe " (let ((a (point)))
  924. (search-forward "]")
  925. (backward-char 1)
  926. (buffer-substring-no-properties a (point))
  927. ) ) )
  928. )))
  929. (spacemacs/set-leader-keys-for-major-mode 'org-mode "xe" 'editIpe)
  930. #+END_SRC
  931. *** open file: pdfs
  932. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  933. (use-package org
  934. :defer t
  935. :config
  936. (push '("\\.pdf\\'" . "evince %s") org-file-apps))
  937. #+END_SRC
  938. *** goto definition
  939. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  940. (defun gotoBlock ()
  941. (interactive)
  942. (search-forward (concat "#+name: "(thing-at-point 'word t)) )
  943. ;; (evil-scroll-line-to-top (line-number-at-pos))
  944. )
  945. (spacemacs/set-leader-keys-for-major-mode 'org-mode "g" 'gotoBlock)
  946. #+END_SRC
  947. ** Prog
  948. *** insert semicolon
  949. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  950. (use-package prog-mode
  951. :defer t
  952. :config
  953. (defun electric-semicolon ()
  954. (interactive)
  955. (save-excursion
  956. (evil-normal-state)
  957. (end-of-line)
  958. (when (looking-back " ")
  959. (delete-backward-char 1))
  960. (when (not (looking-back ";"))
  961. (insert ";")))
  962. (when (buffer-file-name)
  963. (save-buffer))
  964. )
  965.  
  966. (defun compilation-window ()
  967. (interactive)
  968. (let ((current (buffer-name)))
  969. (display-buffer-other-frame "*compilation*")
  970. (switch-to-buffer current)
  971. ))
  972. (spacemacs/set-leader-keys-for-major-mode 'prog-mode "w" 'compilation-window)
  973. :general
  974. (:keymaps 'prog-mode-map
  975. "M-i" 'electric-semicolon
  976. )
  977. )
  978. #+END_SRC
  979. ** eshell
  980. *** config
  981. **** alias file
  982. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  983. (use-package eshell
  984. :defer t
  985. :config
  986. (setq-default eshell-aliases-file "/home/froleyks/emacs/aliases")
  987. )
  988. #+END_SRC
  989. **** enter in normal mode
  990. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  991. (use-package eshell
  992. :defer t
  993. :config
  994. (evil-define-minor-mode-key 'normal
  995. 'eshell-mode
  996. (kbd "RET")
  997. 'eshell-send-input)
  998. )
  999. #+END_SRC
  1000. *** old
  1001. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  1002. (use-package helm
  1003. :defer t
  1004. :config
  1005. (define-key helm-map (kbd "M-t") 'froleyks-helm-ff-new-eshell-here)
  1006. )
  1007.  
  1008. (evil-leader/set-key "'" 'froleyks-open-eshell-new-frame-here)
  1009.  
  1010. (use-package esh-autosuggest
  1011. :hook (eshell-mode . esh-autosuggest-mode):ensure
  1012. t)
  1013.  
  1014. (setq tramp-default-method "ssh")
  1015. (setq eshell-banner-message "")
  1016. ;; helm history in same frame
  1017. (setq helm-show-completion-display-function
  1018. #'helm-show-completion-default-display-function)
  1019. (when (and (executable-find "fish")
  1020. (require 'fish-completion nil t))
  1021. (global-fish-completion-mode))
  1022.  
  1023. ;; shared history
  1024. (setq eshell-history-file-name "~/emacs/historyMain")
  1025.  
  1026. ;; completion after sudo
  1027. (defun pcomplete/sudo ()
  1028. (let ((prec (pcomplete-arg 'last -2)))
  1029. (cond
  1030. ((string= "sudo" prec)
  1031. (while (pcomplete-here* (funcall pcomplete-command-completion-function)
  1032. (pcomplete-arg 'last)
  1033. t))))))
  1034.  
  1035. (defadvice eshell-send-input
  1036. (after eshell-send-input-after activate)
  1037. (eshell-write-history))
  1038.  
  1039.  
  1040.  
  1041.  
  1042.  
  1043. (defun froleyks-eshell-clear-line ()
  1044. (interactive)
  1045. (evil-delete-line (point-at-bol)
  1046. (point-at-eol)))
  1047.  
  1048.  
  1049. (add-hook 'eshell-mode-hook
  1050. (lambda ()
  1051. (company-mode -1)
  1052. (spacemacs/toggle-smartparens-on)
  1053. (eshell-cmpl-initialize)
  1054. (define-key eshell-mode-map [remap eshell-pcomplete] 'completion-at-point)
  1055. (evil-define-minor-mode-key 'normal
  1056. 'eshell-mode
  1057. (kbd "RET")
  1058. 'eshell-send-input)
  1059. (evil-define-minor-mode-key 'normal
  1060. 'eshell-mode
  1061. (kbd "h")
  1062. 'spacemacs/helm-eshell-history)
  1063. (evil-define-minor-mode-key 'insert
  1064. 'eshell-mode
  1065. (kbd "M-h")
  1066. 'spacemacs/helm-eshell-history)
  1067. (evil-define-minor-mode-key 'normal
  1068. 'eshell-mode
  1069. (kbd "l")
  1070. 'eshell-previous-matching-input-from-input)
  1071. (evil-define-minor-mode-key 'normal
  1072. 'eshell-mode
  1073. (kbd "C-k")
  1074. 'froleyks-eshell-clear-line)
  1075. (evil-define-minor-mode-key 'insert
  1076. 'eshell-mode
  1077. (kbd "C-d")
  1078. 'froleyks-eshell-clear-line)
  1079. (evil-define-minor-mode-key 'insert
  1080. 'eshell-mode
  1081. (kbd "<up>")
  1082. 'previous-line)
  1083. (evil-define-minor-mode-key 'insert
  1084. 'eshell-mode
  1085. (kbd "<down>")
  1086. 'next-line)
  1087. (evil-define-minor-mode-key 'insert
  1088. 'eshell-mode
  1089. (kbd "C-j")
  1090. 'spacemacs/insert-line-below-no-indent)
  1091. (evil-define-minor-mode-key 'insert
  1092. 'eshell-mode
  1093. (kbd "C-a")
  1094. 'spacemacs/insert-line-above-no-indent)))
  1095.  
  1096.  
  1097.  
  1098.  
  1099. (global-set-key (kbd "M-!") 'eshell-command)
  1100.  
  1101. ;;alias
  1102. (setq eshell-aliases-file "/home/froleyks/emacs/aliasesMain")
  1103.  
  1104. (defun froleyks-open-eshell-new-frame ()
  1105. (interactive)
  1106. (select-frame (make-frame '((window-system . x))))
  1107. (setq current-prefix-arg '(4)) ; C-u
  1108. (let ((default-directory "~/"))
  1109. (set-buffer (call-interactively 'eshell)))
  1110. )
  1111.  
  1112. (defun froleyks-helm-ff-new-eshell-here ()
  1113. (interactive)
  1114. (setq current-prefix-arg '(1)) ; C-u
  1115. (set-buffer (call-interactively 'helm-ff-run-switch-to-eshell))
  1116. )
  1117.  
  1118. (defun froleyks-open-eshell-new-frame-here ()
  1119. (interactive)
  1120. (setq current-dir default-directory)
  1121. (select-frame (make-frame '((window-system . x))))
  1122. (setq current-prefix-arg '(4)) ; C-u
  1123. (let ((default-directory current-dir))
  1124. (set-buffer (call-interactively 'eshell))))
  1125.  
  1126.  
  1127.  
  1128. #+END_SRC
  1129. *** functions
  1130. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  1131. (use-package eshell
  1132. :defer t
  1133. :config
  1134. (defalias 'ff 'find-file)
  1135.  
  1136. (defun eshell/ll ()
  1137. (find-file ".")
  1138. )
  1139.  
  1140. (defun sq (a &optional b)
  1141. (if b
  1142. (number-sequence a
  1143. (- b 1))
  1144. (number-sequence 0
  1145. (- a 1))))
  1146.  
  1147. (defun eshell/take (&rest args)
  1148. (let ((dir (pop args)))
  1149. (mkdir dir)
  1150. (cd dir)))
  1151.  
  1152. (defun eshell/extract (&rest args)
  1153. (eshell-command (concat "zsh -i -c \"extract "
  1154. (car args)
  1155. "\" > #<*extract*>")))
  1156.  
  1157. (defun eshell/lsp (&rest args)
  1158. (mkdir "build" t)
  1159. (cd "build")
  1160. (eshell-command "cmake ..")
  1161. (eshell-command "cmake -H. -BDebug -DCMAKE_BUILD_TYPE=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS=YES ..")
  1162. ;; (eshell-command "make")
  1163. (cd "..")
  1164. (eshell-command "ln -s build/Debug/compile_commands.json .")
  1165. )
  1166.  
  1167. (defun eshell/lspmake (&rest args)
  1168. (eshell-command "bear -- make")
  1169. )
  1170.  
  1171. (defun eshell/list (&rest args)
  1172. (eshell-command-result (concat
  1173. "find " (pop args) " -name " (pop args) " -exec readlink -f {} \\; | sort"
  1174. )))
  1175.  
  1176. (defun eshell/c (&rest args)
  1177. (eshell-command (concat
  1178. "tar cfJ "
  1179. (replace-regexp-in-string (regexp-quote "/") "" (car args) nil 'literal)
  1180. ".tar.xz "
  1181. (car args)
  1182. )))
  1183.  
  1184. (defun eshell/uc (&rest args)
  1185. (eshell-command (concat
  1186. "tar xf "
  1187. (car args)
  1188. )))
  1189.  
  1190. (defun eshell/lspwd (&rest args)
  1191. (eshell-command-result "ls -d $PWD/*"))
  1192.  
  1193. )
  1194. #+END_SRC
  1195. *** export tags bf
  1196. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  1197. (use-package ox-latex
  1198. :defer t
  1199. :config
  1200. (defun org-latex-format-headline-default-function
  1201. (todo _todo-type priority text tags _info)
  1202. "Default format function for a headline.
  1203. See `org-latex-format-headline-function' for details."
  1204. (concat
  1205. (and todo (format "{\\bfseries\\sffamily %s} " todo))
  1206. (and priority (format "\\framebox{\\#%c} " priority))
  1207. text
  1208. (and tags
  1209. (format "\\hfill{}\\textbf{%s}"
  1210. (mapconcat #'org-latex--protect-text tags ":")))))
  1211. )
  1212. #+END_SRC
  1213. ** C
  1214. *** lsp
  1215. **** watch all files in directory
  1216. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  1217. (setq-default lsp-file-watch-threshold nil)
  1218. #+END_SRC
  1219. **** doc mode
  1220. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  1221. (use-package lsp-ui-mode
  1222. :defer t
  1223. :init
  1224. (setq lsp-ui-doc-enable nil)
  1225. (evil-leader/set-key-for-mode 'c-mode "hg" 'lsp-ui-doc-glance)
  1226. (evil-leader/set-key-for-mode 'c++-mode "hg" 'lsp-ui-doc-glance)
  1227. )
  1228. #+END_SRC
  1229. *** function text objects
  1230. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  1231. (evil-define-text-object rsb/textobj-inner-c-defun (count &optional beg end type)
  1232. (save-excursion
  1233. (mark-defun)
  1234. (re-search-forward "{")
  1235. (exchange-point-and-mark)
  1236. (re-search-backward "}")
  1237. (evil-range (region-beginning) (region-end) type :expanded t)))
  1238.  
  1239. (evil-define-text-object rsb/textobj-outer-c-defun
  1240. (count &optional beg end type)
  1241. :type line
  1242. (save-excursion
  1243. (mark-defun)
  1244. (if (looking-at "[:space:]*$")
  1245. (forward-line))
  1246. (exchange-point-and-mark)
  1247. (unless (save-excursion
  1248. (forward-line)
  1249. (looking-at "[:space:]*$"))
  1250. (forward-line))
  1251. (evil-range (region-beginning)
  1252. (region-end)
  1253. type
  1254. :expanded t)))
  1255.  
  1256. (define-key evil-inner-text-objects-map "f"
  1257. 'rsb/textobj-inner-c-defun)
  1258. (define-key evil-outer-text-objects-map "f"
  1259. 'rsb/textobj-outer-c-defun)
  1260. #+END_SRC
  1261. *** bindings format compile
  1262. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  1263. (evil-leader/set-key-for-mode 'c-mode "." 'lsp-format-buffer)
  1264. (evil-leader/set-key-for-mode 'c++-mode "." 'lsp-format-buffer)
  1265. (evil-leader/set-key-for-mode 'c-mode "," 'recompile)
  1266. (evil-leader/set-key-for-mode 'c++-mode "," 'recompile)
  1267. #+END_SRC
  1268. *** disable auto indent
  1269. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  1270. ;; I want to disable pasting with formatting on C/C++ buffers
  1271. (add-to-list 'spacemacs-indent-sensitive-modes 'c-mode)
  1272. (add-to-list 'spacemacs-indent-sensitive-modes 'c++-mode)
  1273. #+END_SRC
  1274. *** dap
  1275. **** floaty window
  1276. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  1277. (use-package c++-mode
  1278. :defer t
  1279. :hook (c++-mode . spacemacs/toggle-dap-ui-controls-off)
  1280. :config
  1281. (evil-leader/set-key-for-mode 'c++-mode "dt" 'spacemacs/toggle-dap-ui-controls)
  1282. )
  1283. #+END_SRC
  1284. **** switch stack frame
  1285. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  1286. (evil-leader/set-key-for-mode 'c-mode "df" 'dap-switch-stack-frame)
  1287. (evil-leader/set-key-for-mode 'c++-mode "df" 'dap-switch-stack-frame)
  1288. (evil-leader/set-key "df" 'dap-switch-stack-frame)
  1289. #+END_SRC
  1290. *** supress saving promt whent compiling
  1291. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  1292. (setq compilation-ask-about-save nil)
  1293. #+END_SRC
  1294. *** bindings in compilation window
  1295. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  1296. (general-define-key
  1297. :keymaps 'compilation-mode-map
  1298. (kbd "?") 'evil-ex-search-backward
  1299. (kbd "m") 'evil-set-marker
  1300. (kbd "j") 'evil-goto-mark
  1301. (kbd "C-o") 'evil-jump-backward
  1302. (kbd "C-s") 'evil-jump-forward
  1303. )
  1304. #+END_SRC
  1305. *** replace int with size t
  1306. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  1307. (defun froleyks-int-to-size_t ()
  1308. (interactive)
  1309. (save-excursion
  1310. (beginning-of-line)
  1311. (search-forward "int"
  1312. (point-at-eol))
  1313. (evil-delete-backward-word)
  1314. (insert "size_t")))
  1315.  
  1316. (evil-leader/set-key-for-mode 'c++-mode "z"
  1317. 'froleyks-int-to-size_t)
  1318. #+END_SRC
  1319. *** select build dir
  1320. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  1321. (defun select-build-dir ()
  1322. (interactive)
  1323. (add-dir-local-variable 'c++-mode 'projectile-project-root (read-file-name "build dir: "))
  1324. (save-buffer)
  1325. (kill-buffer)
  1326. (hack-local-variables)
  1327. )
  1328. (spacemacs/set-leader-keys-for-major-mode 'c++-mode (kbd "s") 'select-build-dir)
  1329. #+END_SRC
  1330. *** modern c++
  1331. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  1332. (use-package flycheck
  1333. :defer t
  1334. :custom
  1335. (flycheck-gcc-language-standard "c++17")
  1336. (flycheck-clang-language-standard "c++17")
  1337. )
  1338. #+END_SRC
  1339. ** dired
  1340. *** human -h
  1341. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  1342. (setq dired-listing-switches "-halt --group-directories-first")
  1343. #+END_SRC
  1344. *** details
  1345. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  1346. (add-hook 'dired-mode-hook
  1347. (lambda ()
  1348. (dired-hide-details-mode)))
  1349.  
  1350.  
  1351. (evil-define-key 'normal dired-mode-map (kbd "s") 'dired-hide-details-mode)
  1352. #+END_SRC
  1353. *** keybindings
  1354. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  1355. (evil-define-key 'normal dired-mode-map "%" 'dired-mark-files-regexp)
  1356. (evil-define-key 'normal dired-mode-map "M" 'dired-mark-files-regexp)
  1357. (evil-define-key 'normal dired-mode-map "R" 'revert-buffer)
  1358. (evil-define-key 'normal dired-mode-map "U" 'dired-unmark-all-marks)
  1359. (evil-define-key 'normal dired-mode-map "c" 'dired-do-copy)
  1360. (evil-define-key 'normal dired-mode-map "d" 'dired-do-delete)
  1361. (evil-define-key 'normal dired-mode-map "e" 'dired-toggle-read-only)
  1362. (evil-define-key 'normal dired-mode-map "s" 'dired-mark)
  1363. (evil-define-key 'normal dired-mode-map "m" 'evil-set-marker)
  1364. (evil-define-key 'normal dired-mode-map "j" 'evil-goto-mark)
  1365. (evil-define-key 'normal dired-mode-map "r" 'dired-do-rename)
  1366. (evil-define-key 'normal dired-mode-map "t" 'dired-toggle-marks)
  1367. (evil-define-key 'normal dired-mode-map "u" 'dired-unmark)
  1368. (evil-define-key 'normal dired-mode-map "x" 'dired-do-chmod)
  1369. (evil-define-key 'normal dired-mode-map "y" 'dired-copy-filename-as-kill)
  1370. (evil-define-key 'normal dired-mode-map "q" 'evil-record-macro)
  1371. (evil-define-key 'normal dired-mode-map "Q" (kbd"@@"))
  1372. (evil-define-key 'normal dired-mode-map (kbd "<RET>") 'dired-find-file)
  1373. (evil-define-key 'normal dired-mode-map (kbd "l") 'dired-hide-details-mode)
  1374.  
  1375. ;; (evil-define-key 'normal dired-mode-map [mouse-2] 'dired-mouse-find-file-other-window)
  1376. ;; (evil-define-key 'normal dired-mode-map [follow-link] 'mouse-face)
  1377. ;; ;; Commands to mark or flag certain categories of files
  1378. ;; (evil-define-key 'normal dired-mode-map "#" 'dired-flag-auto-save-files)
  1379. ;; (evil-define-key 'normal dired-mode-map "." 'dired-clean-directory)
  1380. ;; (evil-define-key 'normal dired-mode-map "~" 'dired-flag-backup-files)
  1381. ;; ;; Upper case keys (except !) for operating on the marked files
  1382. ;; (evil-define-key 'normal dired-mode-map "A" 'dired-do-find-regexp)
  1383. ;; (evil-define-key 'normal dired-mode-map "C" 'dired-do-copy)
  1384. ;; (evil-define-key 'normal dired-mode-map "B" 'dired-do-byte-compile)
  1385. ;; (evil-define-key 'normal dired-mode-map "D" 'dired-do-delete)
  1386. ;; (evil-define-key 'normal dired-mode-map "G" 'dired-do-chgrp)
  1387. ;; (evil-define-key 'normal dired-mode-map "H" 'dired-do-hardlink)
  1388. ;; (evil-define-key 'normal dired-mode-map "L" 'dired-do-load)
  1389. ;; (evil-define-key 'normal dired-mode-map "M" 'dired-do-chmod)
  1390. ;; (evil-define-key 'normal dired-mode-map "O" 'dired-do-chown)
  1391. ;; (evil-define-key 'normal dired-mode-map "P" 'dired-do-print)
  1392. ;; (evil-define-key 'normal dired-mode-map "Q" 'dired-do-find-regexp-and-replace)
  1393. ;; (evil-define-key 'normal dired-mode-map "R" 'dired-do-rename)
  1394. ;; (evil-define-key 'normal dired-mode-map "S" 'dired-do-symlink)
  1395. ;; (evil-define-key 'normal dired-mode-map "T" 'dired-do-touch)
  1396. ;; (evil-define-key 'normal dired-mode-map "X" 'dired-do-shell-command)
  1397. ;; (evil-define-key 'normal dired-mode-map "Z" 'dired-do-compress)
  1398. ;; (evil-define-key 'normal dired-mode-map "c" 'dired-do-compress-to)
  1399. ;; (evil-define-key 'normal dired-mode-map "!" 'dired-do-shell-command)
  1400. ;; (evil-define-key 'normal dired-mode-map "&" 'dired-do-async-shell-command)
  1401. ;; ;; Comparison commands
  1402. ;; (evil-define-key 'normal dired-mode-map "=" 'dired-diff)
  1403. ;; ;; Tree Dired commands
  1404. ;; (evil-define-key 'normal dired-mode-map "\M-\C-?" 'dired-unmark-all-files)
  1405.  
  1406. ;; (evil-define-key 'normal dired-mode-map "\M-\C-d" 'dired-tree-down)
  1407. ;; (evil-define-key 'normal dired-mode-map "\M-\C-u" 'dired-tree-up)
  1408. ;; (evil-define-key 'normal dired-mode-map "\M-\C-n" 'dired-next-subdir)
  1409. ;; (evil-define-key 'normal dired-mode-map "\M-\C-p" 'dired-prev-subdir)
  1410. ;; ;; move to marked files
  1411. ;; (evil-define-key 'normal dired-mode-map "\M-{" 'dired-prev-marked-file)
  1412. ;; (evil-define-key 'normal dired-mode-map "\M-}" 'dired-next-marked-file)
  1413. ;; ;; Make all regexp commands share a `%' prefix:
  1414. ;; ;; We used to get to the submap via a symbol dired-regexp-prefix,
  1415. ;; ;; but that seems to serve little purpose, and copy-keymap
  1416. ;; ;; does a better job without it.
  1417. ;; (evil-define-key 'normal dired-mode-map "%" nil)
  1418. ;; (evil-define-key 'normal dired-mode-map "%u" 'dired-upcase)
  1419. ;; (evil-define-key 'normal dired-mode-map "%l" 'dired-downcase)
  1420. ;; (evil-define-key 'normal dired-mode-map "%d" 'dired-flag-files-regexp)
  1421. ;; (evil-define-key 'normal dired-mode-map "%g" 'dired-mark-files-containing-regexp)
  1422. ;; (evil-define-key 'normal dired-mode-map "%m" 'dired-mark-files-regexp)
  1423. ;; (evil-define-key 'normal dired-mode-map "%r" 'dired-do-rename-regexp)
  1424. ;; (evil-define-key 'normal dired-mode-map "%C" 'dired-do-copy-regexp)
  1425. ;; (evil-define-key 'normal dired-mode-map "%H" 'dired-do-hardlink-regexp)
  1426. ;; (evil-define-key 'normal dired-mode-map "%R" 'dired-do-rename-regexp)
  1427. ;; (evil-define-key 'normal dired-mode-map "%S" 'dired-do-symlink-regexp)
  1428. ;; (evil-define-key 'normal dired-mode-map "%&" 'dired-flag-garbage-files)
  1429. ;; ;; Commands for marking and unmarking.
  1430. ;; (evil-define-key 'normal dired-mode-map "*" nil)
  1431. ;; (evil-define-key 'normal dired-mode-map "**" 'dired-mark-executables)
  1432. ;; (evil-define-key 'normal dired-mode-map "*/" 'dired-mark-directories)
  1433. ;; (evil-define-key 'normal dired-mode-map "*@" 'dired-mark-symlinks)
  1434. ;; (evil-define-key 'normal dired-mode-map "*%" 'dired-mark-files-regexp)
  1435. ;; (evil-define-key 'normal dired-mode-map "*c" 'dired-change-marks)
  1436. ;; (evil-define-key 'normal dired-mode-map "*s" 'dired-mark-subdir-files)
  1437. ;; (evil-define-key 'normal dired-mode-map "*m" 'dired-mark)
  1438. ;; (evil-define-key 'normal dired-mode-map "*u" 'dired-unmark)
  1439. ;; (evil-define-key 'normal dired-mode-map "*?" 'dired-unmark-all-files)
  1440. ;; (evil-define-key 'normal dired-mode-map "*!" 'dired-unmark-all-marks)
  1441. ;; (evil-define-key 'normal dired-mode-map "U" 'dired-unmark-all-marks)
  1442. ;; (evil-define-key 'normal dired-mode-map "*\177" 'dired-unmark-backward)
  1443. ;; (evil-define-key 'normal dired-mode-map "*\C-n" 'dired-next-marked-file)
  1444. ;; (evil-define-key 'normal dired-mode-map "*\C-p" 'dired-prev-marked-file)
  1445. ;; (evil-define-key 'normal dired-mode-map "*t" 'dired-toggle-marks)
  1446. ;; ;; Lower keys for commands not operating on all the marked files
  1447. ;; (evil-define-key 'normal dired-mode-map "a" 'dired-find-alternate-file)
  1448. ;; (evil-define-key 'normal dired-mode-map "d" 'dired-flag-file-deletion)
  1449. ;; (evil-define-key 'normal dired-mode-map "e" 'dired-find-file)
  1450. ;; (evil-define-key 'normal dired-mode-map "f" 'dired-find-file)
  1451. ;; (evil-define-key 'normal dired-mode-map "\C-m" 'dired-find-file)
  1452. ;; (put 'dired-find-file :advertised-binding "\C-m")
  1453. ;; (evil-define-key 'normal dired-mode-map "g" 'revert-buffer)
  1454. ;; (evil-define-key 'normal dired-mode-map "i" 'dired-maybe-insert-subdir)
  1455. ;; (evil-define-key 'normal dired-mode-map "j" 'dired-goto-file)
  1456. ;; (evil-define-key 'normal dired-mode-map "k" 'dired-do-kill-lines)
  1457. ;; (evil-define-key 'normal dired-mode-map "l" 'dired-do-redisplay)
  1458. ;; (evil-define-key 'normal dired-mode-map "m" 'dired-mark)
  1459. ;; (evil-define-key 'normal dired-mode-map "n" 'dired-next-line)
  1460. ;; (evil-define-key 'normal dired-mode-map "o" 'dired-find-file-other-window)
  1461. ;; (evil-define-key 'normal dired-mode-map "\C-o" 'dired-display-file)
  1462. ;; (evil-define-key 'normal dired-mode-map "p" 'dired-previous-line)
  1463. ;; (evil-define-key 'normal dired-mode-map "s" 'dired-sort-toggle-or-edit)
  1464. ;; (evil-define-key 'normal dired-mode-map "t" 'dired-toggle-marks)
  1465. ;; (evil-define-key 'normal dired-mode-map "u" 'dired-unmark)
  1466. ;; (evil-define-key 'normal dired-mode-map "v" 'dired-view-file)
  1467. ;; (evil-define-key 'normal dired-mode-map "w" 'dired-copy-filename-as-kill)
  1468. ;; (evil-define-key 'normal dired-mode-map "W" 'browse-url-of-dired-file)
  1469. ;; (evil-define-key 'normal dired-mode-map "x" 'dired-do-flagged-delete)
  1470. ;; (evil-define-key 'normal dired-mode-map "y" 'dired-show-file-type)
  1471. ;; (evil-define-key 'normal dired-mode-map "+" 'dired-create-directory)
  1472. ;; ;; moving
  1473. ;; (evil-define-key 'normal dired-mode-map "<" 'dired-prev-dirline)
  1474. ;; (evil-define-key 'normal dired-mode-map ">" 'dired-next-dirline)
  1475. ;; (evil-define-key 'normal dired-mode-map "^" 'dired-up-directory)
  1476. ;; (evil-define-key 'normal dired-mode-map " " 'dired-next-line)
  1477. ;; (evil-define-key 'normal dired-mode-map [?\S-\ ] 'dired-previous-line)
  1478. ;; (evil-define-key 'normal dired-mode-map [remap next-line] 'dired-next-line)
  1479. ;; (evil-define-key 'normal dired-mode-map [remap previous-line] 'dired-previous-line)
  1480. ;; ;; hiding
  1481. ;; (evil-define-key 'normal dired-mode-map "$" 'dired-hide-subdir)
  1482. ;; (evil-define-key 'normal dired-mode-map "\M-$" 'dired-hide-all)
  1483. ;; (evil-define-key 'normal dired-mode-map "(" 'dired-hide-details-mode)
  1484. ;; ;; isearch
  1485. ;; (evil-define-key 'normal dired-mode-map (kbd "M-s a C-s") 'dired-do-isearch)
  1486. ;; (evil-define-key 'normal dired-mode-map (kbd "M-s a M-C-s") 'dired-do-isearch-regexp)
  1487. ;; (evil-define-key 'normal dired-mode-map (kbd "M-s f C-s") 'dired-isearch-filenames)
  1488. ;; (evil-define-key 'normal dired-mode-map (kbd "M-s f M-C-s") 'dired-isearch-filenames-regexp)
  1489. ;; ;; misc
  1490. ;; (evil-define-key 'normal dired-mode-map [remap read-only-mode] 'dired-toggle-read-only)
  1491. ;; ;; `toggle-read-only' is an obsolete alias for `read-only-mode'
  1492. ;; (evil-define-key 'normal dired-mode-map [remap toggle-read-only] 'dired-toggle-read-only)
  1493. ;; (evil-define-key 'normal dired-mode-map "?" 'dired-summary)
  1494. ;; (evil-define-key 'normal dired-mode-map "\177" 'dired-unmark-backward)
  1495. ;; (evil-define-key 'normal dired-mode-map [remap undo] 'dired-undo)
  1496. ;; (evil-define-key 'normal dired-mode-map [remap advertised-undo] 'dired-undo)
  1497. ;; ;; thumbnail manipulation (image-dired)
  1498. ;; (evil-define-key 'normal dired-mode-map "\C-td" 'image-dired-display-thumbs)
  1499. ;; (evil-define-key 'normal dired-mode-map "\C-tt" 'image-dired-tag-files)
  1500. ;; (evil-define-key 'normal dired-mode-map "\C-tr" 'image-dired-delete-tag)
  1501. ;; (evil-define-key 'normal dired-mode-map "\C-tj" 'image-dired-jump-thumbnail-buffer)
  1502. ;; (evil-define-key 'normal dired-mode-map "\C-ti" 'image-dired-dired-display-image)
  1503. ;; (evil-define-key 'normal dired-mode-map "\C-tx" 'image-dired-dired-display-external)
  1504. ;; (evil-define-key 'normal dired-mode-map "\C-ta" 'image-dired-display-thumbs-append)
  1505. ;; (evil-define-key 'normal dired-mode-map "\C-t." 'image-dired-display-thumb)
  1506. ;; (evil-define-key 'normal dired-mode-map "\C-tc" 'image-dired-dired-comment-files)
  1507. ;; (evil-define-key 'normal dired-mode-map "\C-tf" 'image-dired-mark-tagged-files)
  1508. ;; (evil-define-key 'normal dired-mode-map "\C-t\C-t" 'image-dired-dired-toggle-marked-thumbs)
  1509. ;; (evil-define-key 'normal dired-mode-map "\C-te" 'image-dired-dired-edit-comment-and-tags)
  1510. ;; ;; encryption and decryption (epa-dired)
  1511. ;; (evil-define-key 'normal dired-mode-map ":d" 'epa-dired-do-decrypt)
  1512. ;; (evil-define-key 'normal dired-mode-map ":v" 'epa-dired-do-verify)
  1513. ;; (evil-define-key 'normal dired-mode-map ":s" 'epa-dired-do-sign)
  1514. ;; (evil-define-key 'normal dired-mode-map ":e" 'epa-dired-do-encrypt)
  1515. #+END_SRC
  1516. *** create parentdir on copy
  1517. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  1518. (require 'dired-aux)
  1519.  
  1520. (defalias 'dired-do-create-files 'lawlist-dired-do-create-files)
  1521.  
  1522. (defun lawlist-dired-do-create-files (op-symbol file-creator operation arg
  1523. &optional marker-char op1 how-to)
  1524. "(1) If the path entered by the user in the mini-buffer ends in a trailing
  1525. forward slash /, then the code assumes the path is a directory -- to be
  1526. created if it does not already exist.; (2) if the trailing forward slash
  1527. is omitted, the code prompts the user to specify whether that path is a
  1528. directory."
  1529. (or op1 (setq op1 operation))
  1530. (let* (
  1531. skip-overwrite-confirmation
  1532. (fn-list (dired-get-marked-files nil arg))
  1533. (rfn-list (mapcar (function dired-make-relative) fn-list))
  1534. (dired-one-file ; fluid variable inside dired-create-files
  1535. (and (consp fn-list) (null (cdr fn-list)) (car fn-list)))
  1536. (target-dir
  1537. (if dired-one-file
  1538. (dired-get-file-for-visit) ;; filename if one file
  1539. (dired-dwim-target-directory))) ;; directory of multiple files
  1540. (default (and dired-one-file
  1541. (expand-file-name (file-name-nondirectory (car fn-list))
  1542. target-dir)) )
  1543. (defaults (dired-dwim-target-defaults fn-list target-dir))
  1544. (target (expand-file-name ; fluid variable inside dired-create-files
  1545. (minibuffer-with-setup-hook (lambda ()
  1546. (set (make-local-variable 'minibuffer-default-add-function) nil)
  1547. (setq minibuffer-default defaults))
  1548. (dired-mark-read-file-name
  1549. (concat (if dired-one-file op1 operation) " %s to: ")
  1550. target-dir op-symbol arg rfn-list default))))
  1551. (unmodified-initial-target target)
  1552. (into-dir (cond ((null how-to)
  1553. (if (and (memq system-type '(ms-dos windows-nt cygwin))
  1554. (eq op-symbol 'move)
  1555. dired-one-file
  1556. (string= (downcase
  1557. (expand-file-name (car fn-list)))
  1558. (downcase
  1559. (expand-file-name target)))
  1560. (not (string=
  1561. (file-name-nondirectory (car fn-list))
  1562. (file-name-nondirectory target))))
  1563. nil
  1564. (file-directory-p target)))
  1565. ((eq how-to t) nil)
  1566. (t (funcall how-to target)))))
  1567. (if (and (consp into-dir) (functionp (car into-dir)))
  1568. (apply (car into-dir) operation rfn-list fn-list target (cdr into-dir))
  1569. (or into-dir (setq target (directory-file-name target)))
  1570. ;; create new directories if they do not exist.
  1571. (when
  1572. (and
  1573. (not (file-directory-p (file-name-directory target)))
  1574. (file-exists-p (directory-file-name (file-name-directory target))))
  1575. (let ((debug-on-quit nil))
  1576. (signal 'quit `(
  1577. "A file with the same name as the proposed directory already exists."))))
  1578. (when
  1579. (and
  1580. (not (file-exists-p (directory-file-name (expand-file-name target))))
  1581. (or
  1582. (and
  1583. (null dired-one-file)
  1584. (not (string-match "\\(.*\\)\\(/$\\)" unmodified-initial-target)))
  1585. (not (file-directory-p (file-name-directory target)))
  1586. (string-match "\\(.*\\)\\(/$\\)" unmodified-initial-target)) )
  1587. (let* (
  1588. new
  1589. list-of-directories
  1590. list-of-shortened-directories
  1591. string-of-directories-a
  1592. string-of-directories-b
  1593. (max-mini-window-height 3)
  1594. (expanded (directory-file-name (expand-file-name target)))
  1595. (try expanded) )
  1596. ;; Find the topmost nonexistent parent dir (variable `new')
  1597. (while (and try (not (file-exists-p try)) (not (equal new try)))
  1598. (push try list-of-directories)
  1599. (setq new try
  1600. try (directory-file-name (file-name-directory try))))
  1601. (setq list-of-shortened-directories
  1602. (mapcar
  1603. (lambda (x) (concat "..." (car (cdr (split-string x try)))))
  1604. list-of-directories))
  1605. (setq string-of-directories-a
  1606. (combine-and-quote-strings list-of-shortened-directories))
  1607. (setq string-of-directories-b (combine-and-quote-strings
  1608. (delete (car (last list-of-shortened-directories))
  1609. list-of-shortened-directories)))
  1610. (if
  1611. (and
  1612. (not (string-match "\\(.*\\)\\(/$\\)" unmodified-initial-target))
  1613. ;; (cdr list-of-directories)
  1614. dired-one-file
  1615. (file-exists-p dired-one-file)
  1616. (not (file-directory-p dired-one-file)))
  1617. (if (y-or-n-p
  1618. (format "Is `%s` a directory?" (car (last list-of-directories))))
  1619. (progn
  1620. (or (y-or-n-p (format "@ `%s`, create: %s" try string-of-directories-a))
  1621. (let ((debug-on-quit nil))
  1622. (signal 'quit `("You have exited the function."))))
  1623. (make-directory expanded t)
  1624. (setq into-dir t))
  1625. (if (equal (file-name-directory target) (file-name-directory dired-one-file))
  1626. (setq new nil)
  1627. (or (y-or-n-p
  1628. (format "@ `%s`, create: %s" try string-of-directories-b))
  1629. (let ((debug-on-quit nil))
  1630. (signal 'quit `("You have exited the function."))))
  1631. (make-directory (car (split-string
  1632. (car (last list-of-directories))
  1633. (concat "/" (file-name-nondirectory target)))) t)
  1634. (setq target (file-name-directory target))
  1635. (setq into-dir t) ))
  1636. (or (y-or-n-p (format "@ `%s`, create: %s" try string-of-directories-a))
  1637. (let ((debug-on-quit nil))
  1638. (signal 'quit `("You have exited the function."))))
  1639. (make-directory expanded t)
  1640. (setq into-dir t) )
  1641. (when new
  1642. (dired-add-file new)
  1643. (dired-move-to-filename))
  1644. (setq skip-overwrite-confirmation t) ))
  1645. (lawlist-dired-create-files file-creator operation fn-list
  1646. (if into-dir ; target is a directory
  1647. (function (lambda (from)
  1648. (expand-file-name (file-name-nondirectory from) target)))
  1649. (function (lambda (_from) target)))
  1650. marker-char skip-overwrite-confirmation ))))
  1651.  
  1652. (defun lawlist-dired-create-files (file-creator operation fn-list name-constructor
  1653. &optional marker-char skip-overwrite-confirmation)
  1654. (let (dired-create-files-failures failures
  1655. skipped (success-count 0) (total (length fn-list)))
  1656. (let (to overwrite-query overwrite-backup-query)
  1657. (dolist (from fn-list)
  1658. (setq to (funcall name-constructor from))
  1659. (if (equal to from)
  1660. (progn
  1661. (setq to nil)
  1662. (dired-log "Cannot %s to same file: %s\n"
  1663. (downcase operation) from)))
  1664. (if (not to)
  1665. (setq skipped (cons (dired-make-relative from) skipped))
  1666. (let* ((overwrite (file-exists-p to))
  1667. (dired-overwrite-confirmed ; for dired-handle-overwrite
  1668. (and overwrite (not skip-overwrite-confirmation)
  1669. (let ((help-form '(format "\
  1670. Type SPC or `y' to overwrite file `%s',
  1671. DEL or `n' to skip to next,
  1672. ESC or `q' to not overwrite any of the remaining files,
  1673. `!' to overwrite all remaining files with no more questions." to)))
  1674. (dired-query 'overwrite-query
  1675. "Overwrite `%s'?" to))))
  1676. ;; must determine if FROM is marked before file-creator
  1677. ;; gets a chance to delete it (in case of a move).
  1678. (actual-marker-char
  1679. (cond ((integerp marker-char) marker-char)
  1680. (marker-char (dired-file-marker from)) ; slow
  1681. (t nil))))
  1682. (let ((destname (file-name-directory to)))
  1683. (when (and (file-directory-p from)
  1684. (file-directory-p to)
  1685. (eq file-creator 'dired-copy-file))
  1686. (setq to destname))
  1687. ;; If DESTNAME is a subdirectory of FROM, not a symlink,
  1688. ;; and the method in use is copying, signal an error.
  1689. (and (eq t (car (file-attributes destname)))
  1690. (eq file-creator 'dired-copy-file)
  1691. (file-in-directory-p destname from)
  1692. (error "Cannot copy `%s' into its subdirectory `%s'"
  1693. from to)))
  1694. (condition-case err
  1695. (progn
  1696. (funcall file-creator from to dired-overwrite-confirmed)
  1697. (if overwrite
  1698. ;; If we get here, file-creator hasn't been aborted
  1699. ;; and the old entry (if any) has to be deleted
  1700. ;; before adding the new entry.
  1701. (dired-remove-file to))
  1702. (setq success-count (1+ success-count))
  1703. (message "%s: %d of %d" operation success-count total)
  1704. (dired-add-file to actual-marker-char))
  1705. (file-error ; FILE-CREATOR aborted
  1706. (progn
  1707. (push (dired-make-relative from)
  1708. failures)
  1709. (dired-log "%s `%s' to `%s' failed:\n%s\n"
  1710. operation from to err))))))))
  1711. (cond
  1712. (dired-create-files-failures
  1713. (setq failures (nconc failures dired-create-files-failures))
  1714. (dired-log-summary
  1715. (format "%s failed for %d file%s in %d requests"
  1716. operation (length failures)
  1717. (dired-plural-s (length failures))
  1718. total)
  1719. failures))
  1720. (failures
  1721. (dired-log-summary
  1722. (format "%s failed for %d of %d file%s"
  1723. operation (length failures)
  1724. total (dired-plural-s total))
  1725. failures))
  1726. (skipped
  1727. (dired-log-summary
  1728. (format "%s: %d of %d file%s skipped"
  1729. operation (length skipped) total
  1730. (dired-plural-s total))
  1731. skipped))
  1732. (t
  1733. (message "%s: %s file%s"
  1734. operation success-count (dired-plural-s success-count)))))
  1735. (dired-move-to-filename))
  1736.  
  1737. #+END_SRC
  1738. ** python
  1739. *** compile format bindings
  1740. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  1741. (evil-leader/set-key-for-mode 'python-mode "," 'spacemacs/python-execute-file)
  1742. (evil-leader/set-key-for-mode 'python-mode "." 'spacemacs/python-format-buffer)
  1743. #+END_SRC
  1744. ** Git
  1745. *** unbind numbers
  1746. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  1747. (use-package magit
  1748. :defer t
  1749. :config
  1750. (define-key magit-status-mode-map (kbd "0") 'nil)
  1751. (define-key magit-status-mode-map (kbd "1") 'nil)
  1752. (define-key magit-status-mode-map (kbd "2") 'nil)
  1753. (define-key magit-status-mode-map (kbd "3") 'nil)
  1754. (define-key magit-status-mode-map (kbd "4") 'nil)
  1755. )
  1756. #+END_SRC
  1757. ** Latex
  1758. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  1759. (use-package latex
  1760. :defer t
  1761. :config
  1762. (evil-leader/set-key-for-mode 'latex-mode
  1763. "fb" 'LaTeX-fill-buffer)
  1764. (evil-leader/set-key-for-mode 'latex-mode
  1765. "," 'latex/build)
  1766. (evil-leader/set-key-for-mode 'latex-mode
  1767. "." 'LaTeX-fill-paragraph)
  1768. (evil-leader/set-key-for-mode 'latex-mode
  1769. "o" 'TeX-error-overview)
  1770. )
  1771. (add-hook 'LaTeX-mode-hook #'evil-tex-mode)
  1772. #+END_SRC
  1773. ** elisp
  1774. *** eval and replace
  1775. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  1776. (defun eval-and-replace ()
  1777. (interactive)
  1778. (search-forward ")")
  1779. (let ((value (eval (preceding-sexp))))
  1780. (kill-sexp -1)
  1781. (if (stringp value)
  1782. (insert (substring (format "%S" value) 1 -1 ))
  1783. (insert (format "%S" value))
  1784. )
  1785. ))
  1786. (evil-leader/set-key
  1787. "er" 'eval-and-replace
  1788. )
  1789. #+END_SRC
  1790. *** macro to lisp
  1791. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  1792. (defun macroToLisp()
  1793. (interactive)
  1794. (name-last-kbd-macro (intern "tolisp"))
  1795. (evil-open-below 1)
  1796. (insert (concat "(execute-kbd-macro "
  1797. (with-temp-buffer
  1798. ;; (switch-to-buffer "try")
  1799. (insert-kbd-macro (intern-soft "tolisp"))
  1800. (goto-char (point-min))
  1801. (search-forward "[")
  1802. (let ((a (- (point) 1)))
  1803. (search-forward "]")
  1804. (buffer-substring-no-properties a (point))
  1805. )
  1806. )")" ))
  1807. (evil-normal-state)
  1808. (evil-first-non-blank)
  1809. )
  1810. (evil-leader/set-key
  1811. "em" 'macroToLisp
  1812. )
  1813.  
  1814. #+END_SRC
  1815. *** run on buffer copy
  1816. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  1817. (defun run (macro &optional try)
  1818. "Edits string and returns it"
  1819. (clipboard-kill-ring-save (point-min) (point))
  1820. (let ((this-buffer (buffer-name))
  1821. (buffy "*edit-string*"))
  1822. (save-excursion
  1823. (switch-to-buffer buffy)
  1824. (set-buffer buffy)
  1825. (erase-buffer)
  1826. (yank)
  1827. (funcall macro)
  1828. ;; (setq new-value (buffer-substring-no-properties (point-min) (point-max)))
  1829. (setq new-value (thing-at-point 'line t))
  1830. (unless try
  1831. (kill-buffer buffy)
  1832. (switch-to-buffer this-buffer)
  1833. )
  1834. new-value)))
  1835. #+END_SRC
  1836. *** insert command from keybinding
  1837. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  1838. (defun insertCommandByKey ()
  1839. (interactive)
  1840. (insert (replace-regexp-in-string ".*runs the command " ""
  1841. (call-interactively 'describe-key-briefly))
  1842. ))
  1843. (evil-leader/set-key
  1844. "hc" 'insertCommandByKey
  1845. )
  1846. #+END_SRC
  1847. ** typit
  1848. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  1849. (spacemacs/set-leader-keys "a1" 'typit-basic-test)
  1850. #+END_SRC
  1851. * temp
  1852. ** exwm
  1853. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  1854. (use-package exwm
  1855. :config
  1856. (general-def "s-l" 'evil-window-up)
  1857. (general-def "s-a" 'evil-window-down)
  1858. (general-def "s-i" 'evil-window-left)
  1859. (general-def "s-e" 'evil-window-right)
  1860. (general-def "s-ö" 'spacemacs/kill-this-buffer)
  1861. (general-def "s-m" '(lambda nil (interactive) (exwm-workspace-switch 0)))
  1862. (general-def "s-," '(lambda nil (interactive) (exwm-workspace-switch 1)))
  1863. (general-def "s-." '(lambda nil (interactive) (exwm-workspace-switch 2)))
  1864. (general-def "s-n" '(lambda nil (interactive) (exwm-workspace-switch 3)))
  1865. (general-def "s-r" '(lambda nil (interactive) (exwm-workspace-switch 4)))
  1866. (general-def "s-t" '(lambda nil (interactive) (exwm-workspace-switch 5)))
  1867. (general-def "s-h" '(lambda nil (interactive) (exwm-workspace-switch 6)))
  1868. (general-def "s-g" '(lambda nil (interactive) (exwm-workspace-switch 7)))
  1869. (general-def "s-f" '(lambda nil (interactive) (exwm-workspace-switch 8)))
  1870. (general-def "s-q" '(lambda nil (interactive) (exwm-workspace-switch 9)))
  1871. )
  1872.  
  1873.  
  1874. #+END_SRC
  1875. #+BEGIN_SRC emacs-lisp
  1876.  
  1877. (use-package exwm
  1878. :init
  1879. (setq mouse-autoselect-window nil
  1880. focus-follows-mouse t
  1881. exwm-workspace-warp-cursor t
  1882. exwm-workspace-number 5)
  1883. ;exwm-workspace-display-echo-area-timeout 5
  1884. ;exwm-workspace-minibuffer-position 'bottom) ;; Annoying focus issues
  1885. :config
  1886. ;; Make class name the buffer name
  1887. (add-hook 'exwm-update-class-hook
  1888. (lambda ()
  1889. (exwm-workspace-rename-buffer exwm-class-name)))
  1890. (add-hook 'exwm-update-title-hook
  1891. (lambda ()
  1892. (pcase exwm-class-name
  1893. ("Vimb" (exwm-workspace-rename-buffer (format "vimb: %s" exwm-title)))
  1894. ("qutebrowser" (exwm-workspace-rename-buffer (format "Qutebrowser: %s" exwm-title))))))
  1895.  
  1896. (exwm-enable))
  1897.  
  1898. ;; Enable exwm-randr before exwm-init gets called
  1899. (use-package exwm-randr
  1900. :if dw/exwm-enabled
  1901. :after (exwm)
  1902. :config
  1903. (exwm-randr-enable)
  1904. (setq exwm-randr-workspace-monitor-plist '(4 "eDP-1")))
  1905.  
  1906. (defun exwm/run-in-background (command)
  1907. (let ((command-parts (split-string command "[ ]+")))
  1908. (apply #'call-process `(,(car command-parts) nil 0 nil ,@(cdr command-parts)))))
  1909.  
  1910. (defun exwm/bind-function (key invocation &rest bindings)
  1911. "Bind KEYs to FUNCTIONs globally"
  1912. (while key
  1913. (exwm-input-set-key (kbd key)
  1914. `(lambda ()
  1915. (interactive)
  1916. (funcall ',invocation)))
  1917. (setq key (pop bindings)
  1918. invocation (pop bindings))))
  1919.  
  1920. (defun exwm/bind-command (key command &rest bindings)
  1921. "Bind KEYs to COMMANDs globally"
  1922. (while key
  1923. (exwm-input-set-key (kbd key)
  1924. `(lambda ()
  1925. (interactive)
  1926. (exwm/run-in-background ,command)))
  1927. (setq key (pop bindings)
  1928. command (pop bindings))))
  1929.  
  1930. (defun dw/exwm-init-hook ()
  1931. ;; Launch Telega in workspace 0 if we've logged in before
  1932. (when (file-exists-p "~/.telega/db.sqlite")
  1933. (telega nil))
  1934.  
  1935. ;; Make workspace 1 be the one where we land at startup
  1936. (exwm-workspace-switch-create 1)
  1937.  
  1938. ;; Open eshell by default
  1939. (eshell)
  1940.  
  1941. ;; Launch apps that will run in the background
  1942. (exwm/run-in-background "dunst")
  1943. (exwm/run-in-background "nm-applet")
  1944. (exwm/run-in-background "syncthing-gtk --minimized")
  1945. (exwm/run-in-background "redshift -l 47.675510:-122.203362 -t 6500:3500"))
  1946.  
  1947. (use-package exwm
  1948. :if dw/exwm-enabled
  1949. :config
  1950. ;(display-time-mode 1) ;; Not needed for now since we have a panel
  1951.  
  1952. (add-hook 'exwm-mode-hook
  1953. (lambda ()
  1954. (evil-local-set-key 'motion (kbd "C-u") nil)))
  1955.  
  1956. (require 'dw-exwm)
  1957.  
  1958. (defun dw/setup-window-by-class ()
  1959. (interactive)
  1960. (pcase exwm-class-name
  1961. ("Pidgin" (exwm-workspace-move-window 0))
  1962. ("Pidgin<2>" (exwm-workspace-move-window 0))
  1963. ("teams-for-linux" (exwm-workspace-move-window 3))
  1964. ("Microsoft Teams - Preview" (exwm-workspace-move-window 3))
  1965. ("Spotify" (exwm-workspace-move-window 4))
  1966. ("Vimb" (exwm-workspace-move-window 2))
  1967. ("qutebrowser" (exwm-workspace-move-window 2))
  1968. ("qjackctl" (exwm-floating-toggle-floating))
  1969. ("mpv" (exwm-floating-toggle-floating)
  1970. (dw/exwm-floating-toggle-pinned))))
  1971.  
  1972. ;; Do some post-init setup
  1973. (add-hook 'exwm-init-hook #'dw/exwm-init-hook)
  1974.  
  1975. ;; Manipulate windows as they're created
  1976. (add-hook 'exwm-manage-finish-hook
  1977. (lambda ()
  1978. ;; Send the window where it belongs
  1979. (dw/setup-window-by-class)))
  1980.  
  1981. ;; Hide the modeline on all X windows
  1982. ;(exwm-layout-hide-mode-line)))
  1983.  
  1984. ;; Hide the modeline on all X windows
  1985. (add-hook 'exwm-floating-setup-hook
  1986. (lambda ()
  1987. (exwm-layout-hide-mode-line))))
  1988.  
  1989. (use-package exwm-systemtray
  1990. :disabled
  1991. :if dw/exwm-enabled
  1992. :after (exwm)
  1993. :config
  1994. (exwm-systemtray-enable)
  1995. (setq exwm-systemtray-height 35))
  1996.  
  1997. (defun dw/run-xmodmap ()
  1998. (interactive)
  1999. (start-process-shell-command "xmodmap" nil "xmodmap ~/.dotfiles/.config/i3/Xmodmap"))
  2000.  
  2001. (defun dw/update-wallpapers ()
  2002. (interactive)
  2003. (start-process-shell-command
  2004. "feh" nil
  2005. (format "feh --bg-scale ~/.dotfiles/backgrounds/%s" (alist-get 'desktop/background dw/system-settings))))
  2006.  
  2007. (setq dw/panel-process nil)
  2008. (defun dw/kill-panel ()
  2009. (interactive)
  2010. (when dw/panel-process
  2011. (ignore-errors
  2012. (kill-process dw/panel-process)))
  2013. (setq dw/panel-process nil))
  2014.  
  2015. (defun dw/start-panel ()
  2016. (interactive)
  2017. (dw/kill-panel)
  2018. (setq dw/panel-process (start-process-shell-command "polybar" nil "polybar panel")))
  2019.  
  2020. (defun dw/update-screen-layout ()
  2021. (interactive)
  2022. (let ((layout-script "~/.bin/update-screens"))
  2023. (message "Running screen layout script: %s" layout-script)
  2024. (start-process-shell-command "xrandr" nil layout-script)))
  2025.  
  2026. (defun dw/configure-desktop ()
  2027. (interactive)
  2028. (dw/run-xmodmap)
  2029. (dw/update-screen-layout)
  2030. (run-at-time "2 sec" nil (lambda () (dw/update-wallpapers))))
  2031.  
  2032. (defun dw/on-exwm-init ()
  2033. (dw/configure-desktop)
  2034. (dw/start-panel))
  2035.  
  2036. (when dw/exwm-enabled
  2037. ;; Configure the desktop for first load
  2038. (add-hook 'exwm-init-hook #'dw/on-exwm-init))
  2039.  
  2040. (defalias 'switch-to-buffer-original 'exwm-workspace-switch-to-buffer)
  2041. ;; (defalias 'switch-to-buffer 'exwm-workspace-switch-to-buffer)
  2042.  
  2043. ;; (defun dw/counsel-switch-buffer ()
  2044. ;; "Switch to another buffer.
  2045. ;; Display a preview of the selected ivy completion candidate buffer
  2046. ;; in the current window."
  2047. ;; (interactive)
  2048. ;; (ivy-read "Switch to buffer: " 'internal-complete-buffer
  2049. ;; :preselect (buffer-name (other-buffer (current-buffer)))
  2050. ;; :keymap ivy-switch-buffer-map
  2051. ;; :action #'ivy--switch-buffer-action
  2052. ;; :matcher #'ivy--switch-buffer-matcher
  2053. ;; :caller 'counsel-switch-buffer
  2054. ;; :unwind #'counsel--switch-buffer-unwind
  2055. ;; :update-fn 'counsel--switch-buffer-update-fn)
  2056. ;; )
  2057.  
  2058. (defun dw/send-polybar-hook (name number)
  2059. (start-process-shell-command "polybar-msg" nil (format "polybar-msg hook %s %s" name number)))
  2060.  
  2061. (defun dw/update-polybar-exwm (&optional path)
  2062. (dw/send-polybar-hook "exwm" 1)
  2063. (dw/send-polybar-hook "exwm-path" 1))
  2064.  
  2065. (defun dw/update-polybar-telegram ()
  2066. (dw/send-polybar-hook "telegram" 1))
  2067.  
  2068. (defun dw/polybar-exwm-workspace ()
  2069. (pcase exwm-workspace-current-index
  2070. (0 "")
  2071. (1 "")
  2072. (2 "")
  2073. (3 "")
  2074. (4 "")))
  2075.  
  2076. (defun dw/polybar-exwm-workspace-path ()
  2077. (let ((workspace-path (frame-parameter nil 'bufler-workspace-path-formatted)))
  2078. (if workspace-path
  2079. (substring-no-properties workspace-path)
  2080. "")))
  2081.  
  2082. (defun dw/polybar-mail-count (max-count)
  2083. (if dw/mail-enabled
  2084. (let* ((mail-count (shell-command-to-string
  2085. (format "mu find --nocolor -n %s \"%s\" | wc -l" max-count dw/mu4e-inbox-query))))
  2086. (format " %s" (string-trim mail-count)))
  2087. ""))
  2088.  
  2089. (defun dw/telega-normalize-name (chat-name)
  2090. (let* ((trimmed-name (string-trim-left (string-trim-right chat-name "}") "◀{"))
  2091. (first-name (nth 0 (split-string trimmed-name " "))))
  2092. first-name))
  2093.  
  2094. (defun dw/propertized-to-polybar (buffer-name)
  2095. (if-let* ((text (substring-no-properties buffer-name))
  2096. (fg-face (get-text-property 0 'face buffer-name))
  2097. (fg-color (face-attribute fg-face :foreground)))
  2098. (format "%%{F%s}%s%%{F-}" fg-color (dw/telega-normalize-name text))
  2099. text))
  2100.  
  2101. (defun dw/polybar-telegram-chats ()
  2102. (if (> (length tracking-buffers) 0)
  2103. (format " %s" (string-join (mapcar 'dw/propertized-to-polybar tracking-buffers) ", "))
  2104. ""))
  2105.  
  2106. (add-hook 'exwm-workspace-switch-hook #'dw/update-polybar-exwm)
  2107. (add-hook 'bufler-workspace-set-hook #'dw/update-polybar-exwm)
  2108.  
  2109. (when dw/exwm-enabled
  2110. ;; These keys should always pass through to Emacs
  2111. (setq exwm-input-prefix-keys
  2112. '(?\C-x
  2113. ?\C-h
  2114. ?\M-x
  2115. ?\M-`
  2116. ?\M-&
  2117. ?\M-:
  2118. ?\C-\M-j ;; Buffer list
  2119. ?\C-\M-k ;; Browser list
  2120. ?\C-\ ;; Ctrl+Space
  2121. ?\C-\;))
  2122.  
  2123. ;; Ctrl+Q will enable the next key to be sent directly
  2124. (define-key exwm-mode-map [?\C-q] 'exwm-input-send-next-key)
  2125.  
  2126. (defun exwm/run-vimb ()
  2127. (exwm/run-in-background "vimb")
  2128. (exwm-workspace-switch-create 2))
  2129.  
  2130. (defun exwm/run-qute ()
  2131. (exwm/run-in-background "qutebrowser")
  2132. (exwm-workspace-switch-create 2))
  2133.  
  2134. (exwm/bind-function
  2135. "s-o" 'exwm/run-qute)
  2136.  
  2137. (exwm/bind-command
  2138. "s-p" "playerctl play-pause"
  2139. "s-[" "playerctl previous"
  2140. "s-]" "playerctl next")
  2141.  
  2142. (use-package desktop-environment
  2143. :after exwm
  2144. :config (desktop-environment-mode)
  2145. :custom
  2146. (desktop-environment-brightness-small-increment "2%+")
  2147. (desktop-environment-brightness-small-decrement "2%-")
  2148. (desktop-environment-brightness-normal-increment "5%+")
  2149. (desktop-environment-brightness-normal-decrement "5%-"))
  2150.  
  2151. ;; This needs a more elegant ASCII banner
  2152. (defhydra hydra-exwm-move-resize (:timeout 4)
  2153. "Move/Resize Window (Shift is bigger steps, Ctrl moves window)"
  2154. ("j" (lambda () (interactive) (exwm-layout-enlarge-window 10)) "V 10")
  2155. ("J" (lambda () (interactive) (exwm-layout-enlarge-window 30)) "V 30")
  2156. ("k" (lambda () (interactive) (exwm-layout-shrink-window 10)) "^ 10")
  2157. ("K" (lambda () (interactive) (exwm-layout-shrink-window 30)) "^ 30")
  2158. ("h" (lambda () (interactive) (exwm-layout-shrink-window-horizontally 10)) "< 10")
  2159. ("H" (lambda () (interactive) (exwm-layout-shrink-window-horizontally 30)) "< 30")
  2160. ("l" (lambda () (interactive) (exwm-layout-enlarge-window-horizontally 10)) "> 10")
  2161. ("L" (lambda () (interactive) (exwm-layout-enlarge-window-horizontally 30)) "> 30")
  2162. ("C-j" (lambda () (interactive) (exwm-floating-move 0 10)) "V 10")
  2163. ("C-S-j" (lambda () (interactive) (exwm-floating-move 0 30)) "V 30")
  2164. ("C-k" (lambda () (interactive) (exwm-floating-move 0 -10)) "^ 10")
  2165. ("C-S-k" (lambda () (interactive) (exwm-floating-move 0 -30)) "^ 30")
  2166. ("C-h" (lambda () (interactive) (exwm-floating-move -10 0)) "< 10")
  2167. ("C-S-h" (lambda () (interactive) (exwm-floating-move -30 0)) "< 30")
  2168. ("C-l" (lambda () (interactive) (exwm-floating-move 10 0)) "> 10")
  2169. ("C-S-l" (lambda () (interactive) (exwm-floating-move 30 0)) "> 30")
  2170. ("f" nil "finished" :exit t))
  2171.  
  2172. ;; Workspace switching
  2173. (setq exwm-input-global-keys
  2174. `(([?\s-\C-r] . exwm-reset)
  2175. ([?\s-w] . exwm-workspace-switch)
  2176. ([?\s-r] . hydra-exwm-move-resize/body)
  2177. ([?\s-e] . dired-jump)
  2178. ([?\s-E] . (lambda () (interactive) (dired "~")))
  2179. ([?\s-Q] . (lambda () (interactive) (kill-buffer)))
  2180. ([?\s-`] . (lambda () (interactive) (exwm-workspace-switch-create 0)))
  2181. ,@(mapcar (lambda (i)
  2182. `(,(kbd (format "s-%d" i)) .
  2183. (lambda ()
  2184. (interactive)
  2185. (exwm-workspace-switch-create ,i))))
  2186. (number-sequence 0 9))))
  2187.  
  2188. (exwm-input-set-key (kbd "<s-return>") 'vterm)
  2189. (exwm-input-set-key (kbd "s-SPC") 'counsel-linux-app)
  2190. (exwm-input-set-key (kbd "s-f") 'exwm-layout-toggle-fullscreen))
  2191.  
  2192. #+END_SRC
  2193. ** abc debugging
  2194. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  2195. (use-package dap-mode
  2196. :defer t
  2197. :config
  2198. (dap-register-debug-template
  2199. "abc::Run"
  2200. (list :type "gdb"
  2201. :request "launch"
  2202. :name "abc::Run"
  2203. :target "./abc"
  2204. :arguments "-F script"
  2205. :cwd "/home/froleyks/JKU/abc")))
  2206. #+END_SRC
  2207. ** mobical debugging
  2208. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  2209. (use-package dap-mode
  2210. :defer t
  2211. :config
  2212. (defun get-red ()
  2213. (with-temp-buffer
  2214. (insert-file-contents "/home/froleyks/JKU/cadical/makefile")
  2215. (search-forward-regexp "./build/mobical -l .*build/" nil t)
  2216. (concat " -l " (buffer-substring (point) (point-at-eol)))
  2217. ))
  2218. (dap-register-debug-template
  2219. "abc::mobical"
  2220. (list :type "gdb"
  2221. :request "launch"
  2222. :name "abc::mobical"
  2223. :target "./mobical"
  2224. :arguments (get-red)
  2225. :cwd "/home/froleyks/JKU/cadical/build"))
  2226. (general-def 'motion "ß" (lambda ()
  2227. (interactive)
  2228. (save-some-buffers 'no-confirm)
  2229. (async-shell-command "cd /home/froleyks/JKU/cadical && make run")
  2230. ))
  2231.  
  2232. (defun latest-bug (path)
  2233. "Get latest file (including directory) in PATH."
  2234. ;; (car (seq-filter (directory-files path 'full nil #'file-newer-than-file-p))))
  2235. (car (seq-filter (lambda (x) (string-match-p (regexp-quote "red-") x)) (directory-files path 'full nil #'file-newer-than-file-p))))
  2236.  
  2237. (defun debug-latest ()
  2238. (interactive)
  2239. (find-file "/home/froleyks/JKU/abc/src/sat/cadical/makefile")
  2240. (beginning-of-buffer)
  2241. (search-forward "run:")
  2242. (evil-open-below 1)
  2243. (insert (concat " ./build/mobical -l " (latest-bug "/home/froleyks/JKU/abc/src/sat/cadical/build")))
  2244. (normal-mode)
  2245. (evil-next-line-first-non-blank)
  2246. (evilnc-comment-operator (point) (point-max))
  2247. (evil-previous-line-first-non-blank)
  2248. )
  2249. (spacemacs/set-leader-keys (kbd "dl") 'debug-latest)
  2250.  
  2251. )
  2252. #+END_SRC
  2253. #+STARTUP: fold
  2254. ** por debugging
  2255. #+BEGIN_SRC emacs-lisp :tangle user-config.el
  2256. (use-package dap-mode
  2257. :defer t
  2258. :config
  2259. (dap-register-debug-template
  2260. "abc::por"
  2261. (list :type "gdb"
  2262. :request "launch"
  2263. :target "./build/bin/por"
  2264. :arguments "examples/A.txt examples/B.txt examples/C.txt"
  2265. :cwd "/home/froleyks/JKU/MC/mcex/ws20/projects/project3/por/."))
  2266. )
  2267. #+END_SRC
  2268.  
  2269.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement