B3QJHMGNI3LMGL3L6FSTK5LSH6REO262JRPW3ZCMLTGBD66HNG5AC 65TEXEMFIEKH2ICROBGQ6MDWFDSOZUXVDNEC2CA5JQRKFLRMLJOAC QDGAQQPHUSYJ47J7XQIJLYZGYJ5H43MIYJ2GEDRVQ7OTMM2OZIUAC IDDXNQUXT2ZCRIJUDVX66JANKVFXXZ3Y7THWIZNNPXHZ56XLHSHQC YW2BLPX7JEB6NVOWB4UIDF3JOK5L3XMRQ7J4W5O2FKAFDKAI4JEQC LGT5DLCGQBKXORVTRGQQ6AGUQX2SCGK4R4PZMXEMRCFPPWAVUNSQC R5AZC3WCVHVXT2TUJKZA4I64OIWLRHQMRC6XFPYZ44PLVQHC7T5QC Z3CUQEVESWJKZG7IIONZ54YYOYNL3B4WTGAK57PPK6BXQESIYUHQC MHFTGEZMCZ3BPPPX7WGTGCCT7U6GFJPMNLG3XKMEWAB6ICDEQU6AC KLWLWPHYWZDM5JMU3JIXGIQT3MD4GWVLYAJZJOIJ3ZR3NG2XPQOQC 7NEITRZ5V5T6MCFG6YKUYOW5BQP6RIYC6SZDBZIRATDVK5LHDCSQC XHB3YH4KGHI2DD53ZW4RNIJBR2MBJDLHSBYMKTBQQWSJ6OC4EUGAC IAJQDEBM7ZEF2LOIDZUQMZOZKFVBBN5BRNEYT3JNT56TO6Q23SXQC * Functions#+begin_src emacs-lisp(defun indent-buffer ()(interactive)(indent-region (point-min) (point-max)))#+end_src#+begin_src emacs-lisp(add-hook 'clone-indirect-buffer-hook (lambda ()(progn(widen))))#+end_srcoutline-move-subtree-upoutline-move-subtree-down* Meow Modal Mode#+BEGIN_SRC elisp(use-package meow:init(defun meow-setup ()(setq meow-cheatsheet-layout meow-cheatsheet-layout-qwerty)(meow-motion-define-key'("q" . meow-quit)'("|" . split-window-right)'("-" . split-window-below)'("j" . meow-next)'("k" . meow-prev)'("<escape>" . ignore))(meow-leader-define-key;; '("?" . meow-keypad-describe-key)'("/" . indent-region)'(">" . indent-buffer)'(";" . comment-dwim);; '("." . embark-act)'("%" . recenter)'("o" . other-window)'("d" . delete-window)'("D" . delete-other-windows)'("|" . split-window-right)'("-" . split-window-below)'("?" . consult-apropos)'("," . xref-pop-marker-stack)'("." . xref-find-definitions)'("k" . kill-buffer-and-window)'("R" . hydra-rectangle/body)'("p" . project-switch-project)'("?" . meow-cheatsheet))(meow-normal-define-key'("0" . meow-expand-0)'("9" . meow-expand-9)'("8" . meow-expand-8)'("7" . meow-expand-7)'("6" . meow-expand-6)'("5" . meow-expand-5)'("4" . meow-expand-4)'("3" . meow-expand-3)'("2" . meow-expand-2)'("1" . meow-expand-1))(meow-normal-define-key'("q" . meow-quit)'("u" . meow-undo)'(";" . meow-reverse)'("0" . beginning-of-line)'("-" . negative-argument)'(":" . meow-goto-line);; thing (tree-sitter)'("," . meow-inner-of-thing)'("'" . meow-bounds-of-thing)'("[" . meow-beginning-of-thing)'("]" . meow-end-of-thing)'("i" . meow-insert)'("a" . meow-append)'("c" . meow-change)'("I" . meow-open-above)'("A" . meow-open-below)'("k" . meow-prev);; yank'("y" . meow-save);; paste'("p" . meow-yank)'("d" . meow-kill)'("f" . meow-find)'("s" . meow-search)'("/" . meow-visit)'("t" . meow-till)'("w" . meow-mark-symbol)'("x" . meow-line)'("=" . meow-grab)'("X" . meow-swap-grab)'("Y" . meow-sync-grab)'("&" . meow-query-replace-regexp)'("%" . meow-query-replace)'("z" . meow-pop-selection)'("g" . meow-cancel-selection)'("<escape>" . meow-cancel-selection))))#+END_SRC(use-package meow-tree-sitter:config(meow-tree-sitter-register-defaults))#+END_SRC#+BEGIN_SRC elisp:config(meow-setup);; does not work;; (add-to-list 'meow-mode-state-list '(Eshell . insert) )(meow-global-mode 1))(meow-define-keys 'paren'("<escape>" . meow-normal-mode)'("f" . sp-backward-sexp)'("r" . sp-forward-sexp)'("h" . sp-down-sexp)'("t" . sp-up-sexp)'("o s" . sp-wrap-square)'("o r" . sp-wrap-round)'("o c" . sp-wrap-curly)'("o g" . nt-wrap-string)'("O" . sp-unwrap-sexp)'("b" . sp-slurp-hybrid-sexp)'("x" . sp-forward-barf-sexp)'("k" . sp-backward-barf-sexp)'("j" . sp-backward-slurp-sexp)'("s" . sp-raise-sexp)'("n" . sp-absorb-sexp)'("," . sp-split-sexp)'("e" . sp-end-of-sexp)'("a" . sp-beginning-of-sexp)'("G" . sp-goto-top)'("y" . sp-transpose-sexp)'("Y" . nt-back-transpose)'("u" . meow-undo)(defun nt-wrap-string () (interactive) (sp-wrap-with-pair "\""))(defun nt-back-transpose () (interactive) (sp-transpose-sexp -1))(setq meow-cursor-type-paren 'hollow)(setq meow-paren-keymap (make-keymap))(meow-define-state paren"paren state":lighter " [P]":keymap meow-paren-keymap)'("n" . ve/narrow-toggle)'("N" . clone-indirect-buffer-other-window)'("o" . ve/hydra-outline/body);; commands'("J" . crux-top-join-line)'("j" . avy-goto-char-timer)'("T" . tab-new)'("P" . meow-paren-mode)'("e" . dired-jump-other-window)'("j" . avy-goto-char-timer)'("c" . hydra-complete/body)#+begin_src emacs-lisp(defun ve/narrow-toggle (beginning end)"Toggle widening/narrowing of the current buffer.If the buffer is narrowed, widen it.Else, narrow to region."(interactive "r")(if (buffer-narrowed-p)(widen)(if (use-region-p)(narrow-to-region beginning end)(narrow-to-defun))))#+end_src#+end_src** Useful functions from others#+begin_src emacs-lisp(require 'crux)
- avy- isearch* selections- emacs + my key-bindings- expreg (tree-sitter) or expand-region* in-buffer completion* folding- hide-show (hs-minor-mode)- outline-minor-mode* Narrowing* Documentation* Debugging* REPL* Linting- flycheck- flymake* Snippets- tempel- yasnippets* Symbol Look up- dump-jump- tags- ggtags- (semantic)* Tree-sitter#+begin_src emacs-lisp(push '(<lang>-mode . <lang>-ts-mode) major-mode-remap-alist)#+end_src* Language ServerFeature list* Konfiguration#+begin_src emacs-lisp(use-package <lang>-mode:pin gnu:config(defun ve/<lang>-mode-hook ();; (add-to-list 'completion-at-point-functions #'ggtags-completion-at-point)):bind (:map <lang>-ts-mode-map):hook(<lang>-ts-mode . ve/<lang>-mode-hook)(<lang>-ts-mode . flycheck-mode)(<lang>-ts-mode . yas-minor-mode)(<lang>-ts-mode . hs-minor-mode)(<lang>-ts-mode . outline-minor-mode))#+end_src* UI#+begin_src emacs-lisp"p" '(project-map :wk "project"))))#+end_src(major-mode-hydra-define clojure-ts-mode nil("General"(("l" flycheck-list-errors "linter window")("+" yas-insert-snippet "code snippets"))"Eval"()"REPL"()"Build/Run"()"Debug"()"Test"()"Doc"(* movement
#+begin_src emacs-lisp(push '(kotlin-mode . kotlin-ts-mode) major-mode-remap-alist)#+end_src- selections:- expreg- evil-textobj-tree-sitter* TODO Language Serverhas a bad reputation* Linting* SnippetsAdditional YaSnippets#+begin_src emacs-lisp(use-package java-snippets)#+end_src* Syntax Check#+begin_src emacs-lisp(flycheck-define-checker java-checkstyle#+end_src* Konfiguration#+begin_src emacs-lisp)#+end_src* UI#+begin_src emacs-lisp"+" '(yas-insert-snippet :wk "code snippets")"p" '(projectile-map :wk "project")"l" '(flycheck-list-errors :wk "linter window")"f" '(hydra-fold/body :wk "Folding")"m" '(hydra-tree-sitter-move/body :wk "movement hydra");; try combobulate - ts-movement mode not useful"b" '(:ignore t :which-key "TODO: build/run/debug")"d" '(:ignore t :which-key "doc")"s" '(:ignore t :which-key "mark/select");; make this a hydra"sp" '(mark-paragraph :wk "paragraph")"sf" '(mark-defun :wk "function")"sF" '((evil-textobj-tree-sitter-get-textobj "function.outer") :wk "function")"s+" '(expreg-expand :wk "expand region")"s-" '(expreg-contract :wk "unexpand region"))#+end_src:bind (:map java-ts-mode-map):hook(java-ts-mode . ve/java-mode-hook)(java-ts-mode . ggtags-mode)(java-ts-mode . flycheck-mode)(java-ts-mode . yas-minor-mode)(java-ts-mode . eldoc-mode))(use-package emacs:pin gnu:config(defun ve/java-mode-hook ()(add-to-list 'completion-at-point-functions #'ggtags-completion-at-point)" a java checker ":command ("java""-jar"(eval (concat emacsen-dir "java\\checkstyle-9.0.1-all.jar"))"-c" "sun_checks.xml""-f" "xml"source):error-parser flycheck-parse-checkstyle;; :standard-input:modes (java-mode java-ts-mode))(require 'flycheck)* Tree-sitter
* Folding#+begin_src emacs-lisp(defun get-indent-point-at-line ()"Return the column of the first non-whitespace character on current line."(save-excursion(beginning-of-line)(skip-chars-forward " \t")(current-column)))(defun get-previous-line-indent-point ()"Return the column of the first non-whitespace character on the previousline, or 0 if there is no previous line."(save-excursion(if (= (forward-line -1) 0) ; forward-line returns 0 on success(get-indent-point-at-line)0)))(defun wrycode/indent-prose ()(let ((bol (line-beginning-position))(eol (line-end-position)))(if (string-match-p "^[ \t]*$" (buffer-substring bol eol));; blank line(let ((prev-indent (get-previous-line-indent-point))(current-col (current-column)))(cond;; Case 1: Not at previous indent point - move there((not (= current-col prev-indent))(delete-region bol eol)(indent-to prev-indent));; Case 2: Already at previous indent point - add one tab(t(insert "\t"))));; line with text already(let* ((current-indent (get-indent-point-at-line ))(prev-indent (get-previous-line-indent-point))(valid-indent-1 prev-indent)(valid-indent-2 (+ prev-indent tab-width))(point-col (current-column))(point-before-indent (< point-col current-indent))(moved-something nil));; If point is before indent point, move it there(when point-before-indent(move-to-column current-indent)(setq moved-something t));; Check if current indent is already valid(if (and (not moved-something)(or (= current-indent valid-indent-1)(= current-indent valid-indent-2)))'noreturn;; Sync indent point with previous line if needed(unless (= current-indent prev-indent)(save-excursion(beginning-of-line)(delete-horizontal-space)(indent-to prev-indent))(setq moved-something t));; After syncing, if point ended up before new indent, move it(when (and moved-something (< (current-column) prev-indent))(move-to-column prev-indent));; Return 'noreturn if nothing changed(if moved-something nil 'noreturn))))))(add-hook 'text-mode-hook (lambda () (setq-local indent-line-function 'wrycode/indent-prose)) )(add-hook 'markdown-mode-hook (lambda () (setq-local indent-line-function 'wrycode/indent-prose)) )(add-hook 'org-mode-hook (lambda () (setq-local indent-line-function 'org-indent-line)) )#+end_src
(use-package flyspell:bind ( :map flyspell-mode-map("C-." . nil)):config(setq flyspell-abbrev-p tflyspell-use-global-abbrev-table-p tflyspell-issue-message-flag nilflyspell-issue-welcome-flag nil):hook ((text-mode . flyspell-mode)(prog-mode . flyspell-prog-mode)))
(use-package flyspell:bind ( :map flyspell-mode-map("C-." . nil)):config(setq flyspell-abbrev-p tflyspell-use-global-abbrev-table-p tflyspell-issue-message-flag nilflyspell-issue-welcome-flag nil):hook ((text-mode . flyspell-mode)(prog-mode . flyspell-prog-mode)))
(defun flyspell-learn-word-at-point ()"Takes the highlighted word at point -- nominally a misspelling -- and inserts it into the personal/private dictionary, such that it is known and recognized as a valid word in the future."(interactive)(let ((current-location (point))(word (flyspell-get-word)))(when (consp word)(flyspell-do-correct'save nil(car word)current-location(cadr word)(caddr word)current-location))))
(defun flyspell-learn-word-at-point ()"Takes the highlighted word at point -- nominally a misspelling -- and inserts it into the personal/private dictionary, such that it is known and recognized as a valid word in the future."(interactive)(let ((current-location (point))(word (flyspell-get-word)))(when (consp word)(flyspell-do-correct'save nil(car word)current-location(cadr word)(caddr word)current-location))))
(use-package org:bind (:map org-mode-map (("M-<left>" . nil)("M-<right>" . nil)("C-c a" . org-agenda)("C-c c" . org-mode-insert-code))):custom(org-return-follows-link t)(org-src-ask-before-returning-to-edit-buffer nil "??? org-src ???")(org-src-window-setup 'current-window)(org-directory (expand-file-name (concat (getenv "HOME") "/gtd/"))):config(setq org-time-stamp-custom-formats (quote ("<%m/%d/%y %a %H:%M>" \, "<%m/%d/%y %a>")))(setq org-read-date-prefer-future 'time)
(use-package org:bind (:map org-mode-map (("M-<left>" . nil)("M-<right>" . nil)("C-c a" . org-agenda)("C-c c" . org-mode-insert-code))):custom(org-return-follows-link t)(org-src-ask-before-returning-to-edit-buffer nil "??? org-src ???")(org-src-window-setup 'current-window)(org-directory (expand-file-name (concat (getenv "HOME") "/gtd/"))):config(setq org-cycle-emulate-tab 'exc-hl-bol)(setq org-time-stamp-custom-formats (quote ("<%m/%d/%y %a %H:%M>" \, "<%m/%d/%y %a>")))(setq org-read-date-prefer-future 'time)
:init(defun make-inserter (c) '(lambda () (interactive) (insert-char c)))(defun zero-width () (interactive) (insert ""))(defun org-mode-insert-code ()"Like markdown-insert-code, but for org instead."(interactive)(org-emphasize ?~))(defun org-fold-done-entries ()"Close/fold all entries marked DONE."(interactive)(save-excursion(goto-char (point-max))(while (outline-previous-heading)(when (org-entry-is-done-p)(hide-subtree)))))(defun ve/org-babel-indent-all ()"indent all source blocks in buffer"(interactive)(org-edit-special)(indent-buffer)(org-edit-src-exit))
:init(defun make-inserter (c) '(lambda () (interactive) (insert-char c)))(defun zero-width () (interactive) (insert ""))(defun org-mode-insert-code ()"Like markdown-insert-code, but for org instead."(interactive)(org-emphasize ?~))(defun org-fold-done-entries ()"Close/fold all entries marked DONE."(interactive)(save-excursion(goto-char (point-max))(while (outline-previous-heading)(when (org-entry-is-done-p)(hide-subtree)))))(defun my/org-babel-indent-all ()"indent all source blocks in buffer"(interactive)(org-edit-special)(indent-buffer)(org-edit-src-exit))
(defun ve/org-babel-indent ()"indent all source blocks in buffer"(interactive)(org-babel-mark-block)(indent-region (region-beginning) (region-end)))(defun ve/org-mode-hook ();; works out of the box for flyspell(add-to-list 'ispell-skip-region-alist '(org-property-re))(add-to-list 'ispell-skip-region-alist '(org-property-drawer-re))(add-to-list 'ispell-skip-region-alist '(org-clock-drawer-re))(add-to-list 'ispell-skip-region-alist '(org-logbook-drawer-re))(add-to-list 'ispell-skip-region-alist '("~" . "~"))(add-to-list 'ispell-skip-region-alist '("=" . "="))(add-to-list 'ispell-skip-region-alist '("*" . "*"))(add-to-list 'ispell-skip-region-alist '("/" . "/"))
(defun my/org-babel-indent ()"indent all source blocks in buffer"(interactive)(org-babel-mark-block)(indent-region (region-beginning) (region-end)))(defun my/org-mode-hook ();; works out of the box for flyspell(add-to-list 'ispell-skip-region-alist '(org-property-re))(add-to-list 'ispell-skip-region-alist '(org-property-drawer-re))(add-to-list 'ispell-skip-region-alist '(org-clock-drawer-re))(add-to-list 'ispell-skip-region-alist '(org-logbook-drawer-re))(add-to-list 'ispell-skip-region-alist '("~" . "~"))(add-to-list 'ispell-skip-region-alist '("=" . "="))(add-to-list 'ispell-skip-region-alist '("*" . "*"))(add-to-list 'ispell-skip-region-alist '("/" . "/")))(defun my/org-hide-done-entries-in-buffer ()(interactive)(org-map-entries #'org-fold-hide-subtree"/+DONE" 'file 'archive 'comment)):hook ((org-mode . visual-line-mode);; (org-mode . my/org-mode-hook)(org-mode . tempel-setup-capf)(org-src-mode . display-line-numbers-mode))
'((css . ("https://github.com/tree-sitter/tree-sitter-css" "v0.20.0"))(html . ("https://github.com/tree-sitter/tree-sitter-html" "v0.20.1"))
'((css . ("https://github.com/tree-sitter/tree-sitter-css" "v0.20.0"))(html . ("https://github.com/tree-sitter/tree-sitter-html" "v0.20.1"))
(toml "https://github.com/tree-sitter/tree-sitter-toml")(tsx . ("https://github.com/tree-sitter/tree-sitter-typescript" "v0.20.3" "tsx/src"))
(tcl . "https://github.com/tree-sitter-grammars/tree-sitter-tcl")(toml . "https://github.com/tree-sitter/tree-sitter-toml")(tsx . ("https://github.com/tree-sitter/tree-sitter-typescript" "v0.20.3" "tsx/src"))
(use-package rainbow-delimiters)
(use-package rainbow-delimiters);; (add-hook 'prog-mode-hook 'rainbow-delimiters-mode)(set-face-attribute 'rainbow-delimiters-unmatched-face nil:foreground "red":height 1.5:weight 'ultra-bold:inherit 'error)(set-face-attribute 'rainbow-delimiters-depth-1-face nil:foreground "black":weight 'extra-bold)(set-face-attribute 'rainbow-delimiters-depth-2-face nil:foreground "black":weight 'extra-bold)(set-face-attribute 'rainbow-delimiters-depth-3-face nil:foreground "black":weight 'extra-bold)
(use-package psvn:load-path "ve/":bind (:map svn-status-mode-map (("/ c" . svn-status-toggle-unmodified)("/ ?" . svn-status-toggle-unknown)("/ e" . svn-status-toggle-hide-externals))))
(use-package vc-fossil:defer t:init (add-to-list 'vc-handled-backends 'Fossil t))
(use-package hideshow:config(defun hs-cycle (&optional level)(interactive "p")(let (message-log-max(inhibit-message t))(if (= level 1)(pcase last-command('hs-cycle(hs-hide-level 1)(setq this-command 'hs-cycle-children))('hs-cycle-children;; TODO: Fix this case. `hs-show-block' needs to be;; called twice to open all folds of the parent;; block.(save-excursion (hs-show-block))(hs-show-block)(setq this-command 'hs-cycle-subtree))('hs-cycle-subtree(hs-hide-block))(_(if (not (hs-already-hidden-p))(hs-hide-block)(hs-hide-level 1)(setq this-command 'hs-cycle-children))))(hs-hide-level level)(setq this-command 'hs-hide-level))))
(use-package hideshow:hook(prog-mode . hs-minor-mode):config(defun my/hs-cycle (&optional level)(interactive "p")(let (message-log-max(inhibit-message t))(if (= level 1)(pcase last-command('hs-cycle(hs-hide-level 1)(setq this-command 'hs-cycle-children))('hs-cycle-children;; TODO: Fix this case. `hs-show-block' needs to be;; called twice to open all folds of the parent;; block.(save-excursion (hs-show-block))(hs-show-block)(setq this-command 'hs-cycle-subtree))('hs-cycle-subtree(hs-hide-block))(_(if (not (hs-already-hidden-p))(hs-hide-block)(hs-hide-level 1)(setq this-command 'hs-cycle-children))))(hs-hide-level level)(setq this-command 'hs-hide-level))))
(defun hs-global-cycle ()(interactive)(pcase last-command('hs-global-cycle(save-excursion (hs-show-all))(setq this-command 'hs-global-show))(_ (hs-hide-all)))))
(defun my/hs-global-cycle ()(interactive)(pcase last-command('hs-global-cycle(save-excursion (hs-show-all))(setq this-command 'hs-global-show))(_ (hs-hide-all)))))
Basically, if your cursor is at the beginning of a line where there isan opening block, tab will cycle visibility just like org modeheadings. It will also reset the global cycling state for`wrycode/prog-cycle-global' for the same intuitive feel as the org-modecycling commands."(interactive "p")(let ((current-line (line-number-at-pos))(cycled nil))(if (bolp) ; Only attempt cycling if at the beginning of the line(save-excursion;; Move to the end of line to get "inside" any block that might exist on the line(end-of-line);; Only proceed if hideshow finds a block that begins on this;; line(when (and (hs-find-block-beginning)(= current-line (line-number-at-pos (point))))(setq cycled t) ; Mark that we're cycling(setq wrycode/global-cycle-state 2) ; resets global cycling state(pcase last-command('prog-cycle-children(save-excursion (hs-show-block))(setq this-command '_))(_;; Initial press. If block is visible, hide it. If we;; already hid it, show level one(if (not (hs-already-hidden-p))(hs-hide-block)(hs-hide-level 1)(setq this-command 'prog-cycle-children)))))))(unless cycled ; fall back to default tab behavior(call-interactively 'indent-for-tab-command))))(defvar wrycode/global-cycle-state 0)(defun wrycode/prog-cycle-global ()"Org-shifttab, but in prog-mode"(interactive)(setq wrycode/global-cycle-state (mod (1+ wrycode/global-cycle-state) 3))(pcase wrycode/global-cycle-state(0 (hs-hide-all))(1 (hs-hide-level 3))(2 (hs-show-all))))(add-hook 'prog-mode-hook(lambda ()(local-set-key (kbd "TAB") 'wrycode/prog-cycle)(local-set-key (kbd "<backtab>") 'wrycode/prog-cycle-global)))#+end_src*
* Narrowing#+begin_src emacs-lisp(defun ve/narrow-to-region-indirect (start end)"Restrict editing in this buffer to the current region, indirectly."(interactive "r")(deactivate-mark)(let ((buf (clone-indirect-buffer nil nil)))(with-current-buffer buf(narrow-to-region start end))(switch-to-buffer buf)))#+end_src
(use-package tcl:mode (("\\.tcl\\'" . tcl-mode)("\\.tcons\\'" . tcl-mode)("\\.svcf\\'" . tcl-mode)("\\.exp\\'" . tcl-mode)):bind(:map tcl-mode-map("C-c C-z" . inferior-tcl)("<tab>" . hs-global-cycle)("<backtab>" . hs-toggle-hiding)("C-<return>" . ve/tcl-eval-region-or-line)("C-S-<return>" . tcl-eval-defun);; ("<tab>" . completion-at-point)("<f3>" . list-flycheck-errors)("C-c C-t" . nil)):init(env-setup "tcl")(defun ve/tcl-eval-buffer ()(interactive)(message "buffer")(tcl-eval-region (point-min) (point-max))(keyboard-quit))(defun ve/tcl-eval-region-or-line ()(interactive)(if (region-active-p)(tcl-eval-region (region-beginning) (region-end))(tcl-eval-region (progn(beginning-of-line) (point))(progn(end-of-line) (point))))(keyboard-quit))(defun ve/tcl-mode-customization ()"My customization for `tcl-mode'."(add-to-list 'completion-at-point-functions #'cape-keyword)(add-to-list 'completion-at-point-functions #'cape-dabbrev))(defun ve/outline-tcl ()"Fold only definitions for TCL buffers."(setq outline-regexp(rx (or;; Definitions(group (group (* space)) bow (or "proc" "namespace") eow)
(use-package tcl:mode (("\\.tcl\\'" . tcl-mode)("\\.tcons\\'" . tcl-mode)("\\.svcf\\'" . tcl-mode)("\\.exp\\'" . tcl-mode)):bind (:map tcl-mode-map("C-c C-z" . inferior-tcl)("C-c c" . consult-flycheck)("<f9>" . consult-flycheck)("C-=" . yas-insert-snippet)("M-SPC" . completion-at-point)("<f4>" . complete-symbol)("<f5>" . mark-paragraph)("C-<f5>" . mark-defun)("M-<f5>" . mark-whole-buffer)("<f12>" . indent-paragraph)("C-<f12>" . indent-defun)("M-<f12>" . indent-buffer)("C-<return>" . my/tcl-eval-region-or-line)("C-S-<return>" . my/tcl-eval-defun)("C-M-<return>" . my/tcl-eval-buffer)("C-c C-t" . nil)):init(env-setup "tcl")
;; Decorators(group (group (* space)) "@")))))
(defun my/tcl-eval-region-or-line ()(interactive)(if (region-active-p)(progn(tcl-eval-region (region-beginning) (region-end))(deactivate-mark))(tcl-eval-region (progn(beginning-of-line) (point))(progn(end-of-line) (point)))))(defun my/tcl-eval-defun ()(interactive)(message "buffer")(mark-defun)(my/tcl-eval-region-or-line))(defun my/tcl-eval-buffer ()(interactive)(message "buffer")(tcl-eval-region (point-min) (point-max)))(defun my/tcl-keyword-completion ()"This is the function to be used for the hook `completion-at-point-functions'."(interactive)(let ((bds (bounds-of-thing-at-point 'symbol))startend)(setq start (car bds))(setq end (cdr bds))(if start(list start end tcl-keyword-list . nil)nil)))(defun my/tcl-mode-customization ()"My customization for 'tcl-mode'."(setq-local completion-at-point-functions(list 'tempel-complete'my/tcl-keyword-completion'cape-dabbrev)))(defun my/outline-tcl ()"Fold only definitions for TCL buffers."(setq outline-regexp(rx (or;; Definitions(group (group (* space)) bow (or "proc" "namespace") eow)
:config(setq tcl-indent-level 4tcl-continued-indent-level 8)(setq tcl-application "tclsh") ;; jimsh tclsh wish(setq flycheck-check-syntax-automatically '(save mode-enabled))(setq tcl-help-directory-list '("/usr/lib/tclx8.6/help"))
;; Decorators(group (group (* space)) "@")))))(defun my/eglot-tcl-setup ()(with-eval-after-load 'eglot(add-to-list 'eglot-server-programs '(tcl-mode . ("/opt/volker/projects/tcl_lsp/lsp/lsp.tcl"))))(setq eglot-events-buffer-config (list :size 2000000 :format `lisp))(setq eglot-connect-timeout nil))
(add-hook 'tcl-mode-hook #'ve/tcl-mode-customization)(add-hook 'tcl-mode-hook #'ve/outline-tcl)(add-hook 'tcl-mode-hook #'electric-pair-mode)(add-hook 'tcl-mode-hook #'electric-indent-mode)
:config(setq tcl-indent-level 4tcl-continued-indent-level 8)
:hook (tcl-mode . yas-minor-mode)(tcl-mode . flycheck-mode)(tcl-mode . hs-minor-mode)(tcl-mode . outline-minor-mode))#+end_src
(setq tcl-interpreters (list "tclsh" "wish" "jimsh"))(setq tcl-application (nth 1 tcl-interpreters))
"s" '(:ignore t :which-key "mark/select")"sf" '(mark-function :wk "function")"sp" '(mark-paragraph :wk "paragraph")"sw" '(er/mark-word :wk "word")"sc" '(er/mark-comment :wk "comment"))
**
"t" '(:ignore t :which-key "tags")"tf" '(ggtags-find-tag :wk "find tag")"tF" '(ggtags-find-tag-dwim :wk "find tag dwim")"t$" '(ggtags-find-tag-regexp :wk "find tag regexp")"td" '(ggtags-find-definition :wk "find definition")"tr" '(ggtags-find-reference :wk "find reference")"tg" '(ggtags-grep :wk "search db")"t%" '(ggtags-query-replace :wk "replace")"tu" '(ggtags-update-tags :wk "update db")
(use-package julia-ts-mode:after eglot:init (setenv "JULIA_NUM_THREADS" "6"):bind (:map julia-ts-mode-map("C-c p" . er/mark-paragraph)("C-c f" . er/mark-defun)("C-c s" . er/mark-symbol)("C-+" . expreg-expand)("C--" . expreg-contract)("<tab>" . completion-at-point)):hook(julia-ts-mode . julia-snail-mode)(julia-ts-mode . eglot-ensure)(julia-ts-mode . eglot-jl-init);; (julia-ts-mode . ts-movement-mode)(julia-ts-mode . yas-minor-mode))
(use-package julia-ts-mode:after eglot:init (setenv "JULIA_NUM_THREADS" "6"):bind (:map julia-ts-mode-map("C-c C-z" . julia-snail)("+" . expreg-expand)("-" . expreg-contract)("=" . yas-insert-snippet);; ("<tab>" . completion-at-point)("<f3>" . list-flycheck-errors)):hook(julia-ts-mode . julia-snail-mode)(julia-ts-mode . eglot-ensure)(julia-ts-mode . eglot-jl-init)(julia-ts-mode . yas-minor-mode))
"+" '(yas-insert-snippet :wk "code snippets")"b" '(julia-snail-send-buffer-file :wk "eval buffer")"f" '(hydra-fold/body :wk "Folding")"m" '(hydra-tree-sitter-move/body :wk "movement hydra")"s" '(:ignore t :which-key "mark/select")"sp" '(mark-paragraph :wk "paragraph")"sf" '(mark-defun :wk "function")
"t" '(:ignore t :which-key "tags")"tf" '(ggtags-find-tag :wk "find tag")"tF" '(ggtags-find-tag-dwim :wk "find tag dwim")"t$" '(ggtags-find-tag-regexp :wk "find tag regexp")"td" '(ggtags-find-definition :wk "find definition")"tr" '(ggtags-find-reference :wk "find reference")"tg" '(ggtags-grep :wk "search db")"t%" '(ggtags-query-replace :wk "replace")"tu" '(ggtags-update-tags :wk "update db")
"t" '(:ignore t :which-key "tags")"tf" '(ggtags-find-tag :wk "find tag")"tF" '(ggtags-find-tag-dwim :wk "find tag dwim")"t$" '(ggtags-find-tag-regexp :wk "find tag regexp")"td" '(ggtags-find-definition :wk "find definition")"tr" '(ggtags-find-reference :wk "find reference")"tg" '(ggtags-grep :wk "search db")"t%" '(ggtags-query-replace :wk "replace")"tu" '(ggtags-update-tags :wk "update db")
"s" '(:ignore t :which-key "mark/select");; make this a hydra"sp" '(mark-paragraph :wk "paragraph")"sf" '(er/mark-defun :wk "function")"ss" '(er/mark-symbol-with-prefix :wk "symbol")"s+" '(expreg-expand :wk "expand region")"s-" '(expreg-contract :wk "unexpand region"))
"s" '(:ignore t :which-key "mark/select");; make this a hydra"sp" '(mark-paragraph :wk "paragraph")"sf" '(er/mark-defun :wk "function")"ss" '(er/mark-symbol-with-prefix :wk "symbol")"s+" '(expreg-expand :wk "expand region")"s-" '(expreg-contract :wk "unexpand region"))
* Functions#+begin_src emacs-lisp(defun ve/desc-completion-functions ()"desc functions buffer completions."(interactive)(describe-variable 'completion-at-point-functions))(defun ve/show-value-of-variable (symbol)(message (format "The value of '%s' is %S" symbol (symbol-value symbol))))(defun ve/show-completion-functions ()"show functions buffer completions."(interactive)(ve/show-value-of-variable 'completion-at-point-functions))#+end_src#+begin_src emacs-lisp(defun switch-to-scratch-buffer ()"Switch to the current session's scratch buffer."(interactive)(switch-to-buffer "*scratch*"))#+end_src#+begin_src emacs-lisp(defun ve/indent-buffer ()"indent buffer with indent-region."(interactive)(indent-region (point-min) (point-max)))(defun my/bookmark-jump-other-tab (bookmark)"Jump to BOOKMARK in another tab. See `bookmark-jump' for more."(interactive(bookmark-jump bookmark 'switch-to-buffer-other-tab)))#+end_src~keyboard-quit~ sometimes isn't enough, especially if the minibuffer is open, so here's a beefed-up version.#+begin_src emacs-lisp(defun ve/abort ()"Remove auxiliary buffers."(interactive)(ignore-errors (exit-recursive-edit))(call-interactively #'keyboard-quit))#+end_srcCompletion systems make ~kill-buffer~ give you a list of possible results, which isn't generally what I want.#+begin_src emacs-lisp(defun kill-this-buffer ()"Kill the current buffer."(interactive)(kill-buffer nil))(defun rename-file-and-buffer ()"Rename the current buffer and file it is visiting."(interactive)(let ((filename (buffer-file-name)))(if (not (and filename (file-exists-p filename)))(message "Buffer is not visiting a file!")(let ((new-name (read-file-name "New name: " filename)))(cond((vc-backend filename) (vc-rename-file filename new-name))(t(rename-file filename new-name t)(set-visited-file-name new-name t t)))))))#+end_src
(bind-key* (kbd "<f4>") #'eshell)(bind-key* (kbd "<f5>") #'ve/desc-completion-functions)(bind-key* (kbd "M-j") #'avy-goto-char-timer)(bind-key* (kbd "M-o") 'other-window)
(bind-key* (kbd "C-+") #'er/expand-region)(bind-key* (kbd "C--") #'er/contract-region)(bind-key* (kbd "M-j") #'avy-goto-char-timer)(bind-key* (kbd "M-o") #'ace-window)
(bind-key* (kbd "C-S-k") 'kill-whole-line)(bind-key* (kbd "C-.") 'embark-act)#+end_src#+begin_src emacs-lisp(bind-key* (kbd "C-c t") #'hydra-toggle/body)(bind-key* (kbd "C-c w") #'hydra-window/body)(bind-key* (kbd "C-c T") #'hydra-tab-bar/body)(bind-key* (kbd "C-c d") #'hydra-desktop/body)(bind-key* (kbd "C-c R") #'hydra-register/body);;(bind-key* (kbd "C-c c") #'hydra-complete/body);;(bind-key* (kbd "C-c p") #'hydra-project/body)(bind-key* (kbd "C-c p") 'proced)
(bind-key* (kbd "C-S-k") 'kill-whole-line)(bind-key* (kbd "C-.") 'embark-act)
(bind-key* (kbd "C-c e") #'dired-jump-other-window)(bind-key* (kbd "C-c p") #'project-switch-project)(bind-key* (kbd "C-c C-r") #'hydra-rectangle/body)(bind-key* (kbd "C-c C-w") #'hydra-window/body)(bind-key* (kbd "C-c M-r") #'hydra-register/body)(bind-key* (kbd "C-c C-b") #'hydra-bookmarks/body)(bind-key* (kbd "C-c C-t") #'hydra-tab-bar/body)(bind-key* (kbd "C-c C-d") #'hydra-desktop/body)(bind-key* (kbd "C-c M-t") #'hydra-toggle/body)
(pretty-hydra-define hydra-dumb-jump (:color blue)("Dumb Jump"(("b" dumb-jump-back "Back")("l" dumb-jump-quick-look "Quick look")("j" dumb-jump-go "Go")("i" dumb-jump-go-prompt "Prompt")("o" dumb-jump-go-other-window "Other window")("e" dumb-jump-go-prefer-external "Go external")("x" dumb-jump-go-prefer-external-other-window "Go external other window")))
(pretty-hydra-define hydra-dumb-jump (:color blue)("Dumb Jump"(("b" dumb-jump-back "Back")("l" dumb-jump-quick-look "Quick look")("j" dumb-jump-go "Go")("i" dumb-jump-go-prompt "Prompt")("o" dumb-jump-go-other-window "Other window")("e" dumb-jump-go-prefer-external "Go external")("x" dumb-jump-go-prefer-external-other-window "Go external other window")
(pretty-hydra-define ve/hydra-outline (:title "outline: shift code blocks":pre (ve/outline-overview):post (ve/outline-reset):foreign-keys warn:quit-key "C-g")
(pretty-hydra-define my/hydra-outline (:title "outline: shift code blocks":pre (my/outline-overview):post (my/outline-reset):foreign-keys warn:quit-key "C-g")
(defhydra hydra-toggle (:color blue :exit t)"toggle features"("t" modus-themes-toggle "change theme")("c" flyspell-mode "spell check" )
(require 'viper)(pretty-hydra-define hydra-toggle (:title "toggle features":exit t)("Col 1:"(("v" toggle-viper-mode "vi-mode" )("n" my/toggle-line-numbers "line numbers (abs, rel, off)" :exit nil)
(:color amaranth :quit-key "q" :title jp-toggles--title)("Basic"(("n" linum-mode "line number" :toggle t)("w" whitespace-mode "whitespace" :toggle t)("W" whitespace-cleanup-mode "whitespace cleanup" :toggle t)("r" rainbow-mode "rainbow" :toggle t)("L" page-break-lines-mode "page break lines" :toggle t))"Highlight"(("s" symbol-overlay-mode "symbol" :toggle t)("l" hl-line-mode "line" :toggle t)("x" highlight-sexp-mode "sexp" :toggle t)("t" hl-todo-mode "todo" :toggle t))"UI"(("d" jp-themes-toggle-light-dark "dark theme" :toggle jp-current-theme-dark-p))"Coding"(("p" smartparens-mode "smartparens" :toggle t)("P" smartparens-strict-mode "smartparens strict" :toggle t)("S" show-smartparens-mode "show smartparens" :toggle t)("f" flycheck-mode "flycheck" :toggle t))"Emacs"(("D" toggle-debug-on-error "debug on error" :toggle (default-value 'debug-on-error))("X" toggle-debug-on-quit "debug on quit" :toggle (default-value 'debug-on-quit)))))
(:color amaranth :quit-key "q" :title jp-toggles--title)("Basic"(("n" linum-mode "line number" :toggle t)("w" whitespace-mode "whitespace" :toggle t)("W" whitespace-cleanup-mode "whitespace cleanup" :toggle t)("r" rainbow-mode "rainbow" :toggle t)("L" page-break-lines-mode "page break lines" :toggle t))"Highlight"(("s" symbol-overlay-mode "symbol" :toggle t)("l" hl-line-mode "line" :toggle t)("x" highlight-sexp-mode "sexp" :toggle t)("t" hl-todo-mode "todo" :toggle t))"UI"(("d" jp-themes-toggle-light-dark "dark theme" :toggle jp-current-theme-dark-p))"Coding"(("p" smartparens-mode "smartparens" :toggle t)("P" smartparens-strict-mode "smartparens strict" :toggle t)("S" show-smartparens-mode "show smartparens" :toggle t)("f" flycheck-mode "flycheck" :toggle t))"Emacs"(("D" toggle-debug-on-error "debug on error" :toggle (default-value 'debug-on-error))("X" toggle-debug-on-quit "debug on quit" :toggle (default-value 'debug-on-quit)))))
(pretty-hydra-define hydra-tab-bar (:title "Tab Bar Operations":foreign-keys warn:quit-key "q")("Creation"(("t" tab-new "Create a new tab")("d" dired-other-tab "Open Dired in another tab")("f" find-file-other-tab "Find file in another tab")("x" tab-window-detach "move window to tab")("0" tab-close "Close current tab"))"Management"(("m" tab-move "Move current tab")("r" tab-rename "Rename Tab"))"Navigation"(("<return>" tab-bar-select-tab-by-name "Select tab by name")("n" tab-next "Next Tab")("p" tab-previous "Previous Tab")))
(bind-key* (kbd "C-<right>") #'tab-next)(bind-key* (kbd "C-<left>") #'tab-previous)(defun my/bookmark-jump-other-tab (bookmark)"Jump to BOOKMARK in another tab. See `bookmark-jump' for more."(interactive(bookmark-jump bookmark 'switch-to-buffer-other-tab)))(pretty-hydra-define hydra-tab-bar (:title "Tab Bar Operations":foreign-keys warn:quit-key "q")("Creation"(("t" (switch-to-buffer-other-tab "*Bookmark List*") "Create a new tab")("d" dired-other-tab "Open Dired in another tab")("f" find-file-other-tab "Find file in another tab")("x" tab-window-detach "move window to tab")("0" tab-close "Close current tab"))"Management"(("m" tab-move "Move current tab")("r" tab-rename "Rename Tab")
(pretty-hydra-define hydra-rectangle (:title "Rectangle Editing":foreign-keys run:pre (rectangle-mark-mode 1):post (deactivate-mark):quit-key "q")("Select" (("h" rectangle-backward-char "left")("l" rectangle-forward-char "right")("k" rectangle-previous-line "up")("j" rectangle-next-line "down")("e" my/ex-point-mark "exchange mark with point")
(pretty-hydra-define hydra-rectangle (:title "Rectangle Editing":foreign-keys run:pre (rectangle-mark-mode 1):post (deactivate-mark):quit-key "q")("Select" (("h" rectangle-backward-char "left")("l" rectangle-forward-char "right")("k" rectangle-previous-line "up")("j" rectangle-next-line "down")("e" my/ex-point-mark "exchange mark with point"))"Act" (("p" kill-rectangle "kill")("c" copy-rectangle-as-kill "copy")("R" copy-rectangle-to-register "copy to register")("y" yank-rectangle "yank" :color blue)("s" string-rectangle "type to replace"))"Undo ..." (("x" my/reset-rectangle "reset and start again")("u" undo "undo")("r" redo "redo")
"Act" (("p" kill-rectangle "kill")("c" copy-rectangle-as-kill "copy")("R" copy-rectangle-to-register "copy to register")("y" yank-rectangle "yank" :color blue)("s" string-rectangle "type to replace"))"Undo ..." (("x" my/reset-rectangle "reset and start again")("u" undo "undo")("r" redo "redo"))))#+end_src
))#+end_src
("t" complete-tag "complete tag")("s" cape-lisp-symbol "symbol")("\\" cape-tex "tex symbol")("&" cape-sgml "sgml symbol")("r" cape-rfc1345 "symbol defined in RFC1345"))
("t" complete-tag "complete tag")("s" cape-lisp-symbol "symbol")("\\" cape-tex "tex symbol")("&" cape-sgml "sgml symbol")("r" cape-rfc1345 "symbol defined in RFC1345"))
(">" end-of-buffer "last line")("$" end-of-line "EOL")("}" forward-paragraph "paragraph")("v" scroll-down "page"))
(">" end-of-buffer "last line")("$" end-of-line "EOL")("}" forward-paragraph "paragraph")("s" forward-sentence "sentence")("l" next-logical-line "line")("w" viper-forward-word "word")("p" scroll-down "page"))
("<" beginning-of-buffer "first line")("0" beginning-of-line "beginning of line")("{" backward-paragraph "paragraph")("V" scroll-up "page"))
("<" beginning-of-buffer "first line")("0" beginning-of-line "beginning of line")("{" backward-paragraph "paragraph")("S" backward-sentence "sentence")("L" previous-logical-line "line")("W" viper-backward-word "word")("P" scroll-up "page"))
("|" move-to-column "→ column")("l" goto-line "→ line"))
("|" move-to-column "→ column")(":" goto-line "→ line")("%" recenter "center display around cursor"))"Exit" (("i" nil "insert-mode" :exit t)("a" forward-char "append-mode" :exit t)("o" viper-open-line "open line below" :exit t)("O" viper-Open-line "open line above" :exit t))
(:color blue :quit-key ("q" "SPC") :title hydra-project--title)("Actions"(("s" projectile-switch-open-project "switch open project")("S" projectile-switch-project "switch project")("i" projectile-project-info "info")("a" projectile-add-known-project "add")("k" projectile-remove-known-project "remove")("r" projectile-find-references "find references")("f" projectile-find-file "find file")("v" projectile-shell "vterm")("d" projectile-discover-projects-in-directory "discover new projects")("c" projectile-comander "help (commander)"))))
(:color blue :quit-key ("q" "SPC") :title hydra-project--title)("Actions"(("s" projectile-switch-open-project "switch open project")("S" projectile-switch-project "switch project")("i" projectile-project-info "info")("a" projectile-add-known-project "add")("k" projectile-remove-known-project "remove")("r" projectile-find-references "find references")("f" projectile-find-file "find file")("v" projectile-shell "vterm")("d" projectile-discover-projects-in-directory "discover new projects")("c" projectile-comander "help (commander)"))))
;; (org-babel-load-file (concat user-emacs-directory "/proglang-kotlin-setup.org"));; (org-babel-load-file (concat user-emacs-directory "/proglang-groovy-setup.org"))
;; (org-babel-load-file (concat user-emacs-directory "/proglang-kotlin-setup.org"))(org-babel-load-file (concat user-emacs-directory "/proglang-rust-setup.org"))
(put 'narrow-to-region 'disabled nil)
(defun my-occur-from-isearch ()(interactive)(let ((query (if isearch-regexpisearch-string(regexp-quote isearch-string))))(isearch-update-ring isearch-string isearch-regexp)(let (search-nonincremental-instead)(ignore-errors (isearch-done t t)))(occur query)))(defun my-project-search-from-isearch ()(interactive)(let ((query (if isearch-regexpisearch-string(regexp-quote isearch-string))))(isearch-update-ring isearch-string isearch-regexp)(let (search-nonincremental-instead)(ignore-errors (isearch-done t t)))(project-find-regexp query))):bind(:map isearch-mode-map("C-f" . my-project-search-from-isearch)("M-o" . my-occur-from-isearch)))
(use-package tab-bar:config(setq tab-bar-show ttab-bar-close-button-show niltab-bar-tab-hints t))
(use-package tab-bar:config(setq tab-bar-show ttab-bar-close-button-show niltab-bar-tab-hints t)(keymap-unset tab-bar-mode-map "C-<tab>" 'remove))
* casual transientAlle casuals, die ich *definitiv* nicht benutze, wurden geloescht.Mit den Keyboard Shortcuts C-o kann ich mich nicht anfreunden.#+begin_src emacs-lisp;; (require 'casual-suite);; (casual-ediff-install) ; run this to enable Casual Ediff;; (add-hook 'ediff-keymap-setup-hook;; (lambda ();; (keymap-set ediff-mode-map "C-o" #'casual-ediff-tmenu)));; (keymap-set calc-mode-map "C-c c" #'casual-calc-tmenu);; (keymap-set isearch-mode-map "C-c c" #'casual-isearch-tmenu)#+end_srcin keybindings.org- rectangle- windows- registers- bookmarkszu ueberladen, daher verworfen:- ibuffer- edit kit- agenda- infooffen:(keymap-set reb-mode-map "C-o" #'casual-re-builder-tmenu)(keymap-set reb-lisp-mode-map "C-o" #'casual-re-builder-tmenu)(keymap-set symbol-overlay-map "C-o" #'casual-symbol-overlay-tmenu)
(use-package eat:if sys/linuxp:custom(eat-kill-buffer-on-exit t):config(eat-eshell-mode)(setq eshell-visual-commands '()))
(defmacro apply-split-nest (callable arguments count body)(setq arguments (copy-sequence arguments))(setq count (1- count))(let* ((forms (list 'unused))(last-cons forms))(while arguments(setcdr last-cons (list (cons callable arguments)))(setq last-cons (nthcdr count arguments))(setq arguments (cdr last-cons)))(setcdr last-cons body)(cadr forms)))(defun advice-remove-all (symbol)(dolist (advice (advice-list symbol))(seq-let (_how function) advice(advice-remove symbol function))))(defmacro with-advice-1 (advice-add-arguments &rest body)(let ((state (make-symbol "--with-advice--")))`(let ((,state (list ,@advice-add-arguments)))(unwind-protect(progn(condition-case error(apply 'advice-add ,state)(wrong-number-of-arguments(setq ,state nil)(signal (car error) (cdr error)))),@body)(when ,state(setcdr ,state (cddr ,state))(setcdr (cdr ,state) nil)(apply 'advice-remove ,state))))))(defmacro with-advice (advice-list &rest body)(declare (indent 1))`(apply-split-nest with-advice-1 ,advice-list 1 ,body))(defun best-compile (function)(if (native-comp-available-p)(native-compile function)(byte-compile function)))(defun function-lisp (function)(let ((raw (indirect-function function)))(while (advice--p raw)(setq raw (advice--cdr raw)))(if (or (subr-native-elisp-p raw)(byte-code-function-p raw)(autoloadp raw))(if-let* ((source (find-function-library function))(file (cdr source)))(function-lisp--read-from-source (car source) file)nil)(if (subrp raw)nil(if (interpreted-function-p raw)(interpreted-function-lisp raw)raw)))))(defun function-lisp--read-from-source (name file)(let* ((buffers (buffer-list))(found (find-function-search-for-symbol name nil file))(buffer (car found))(position (cdr found))(was-already-open (memq buffer buffers)))(prog1(read (set-marker (make-marker) position buffer))(unless was-already-open(kill-buffer buffer)))))(defun function-lisp-anonymize (definition)(cond((memq (car definition) '(defun defsubst))(cons 'lambda (cddr definition)))((eq (car definition) 'defmacro)(cons 'macro (cons 'lambda (cddr definition))))(tdefinition)))(defun form-replace (from-forms to-forms in-forms)(when in-forms(let ((unmatched-in-forms in-forms)(unmatched-from-forms from-forms))(while (and unmatched-in-formsunmatched-from-forms(equal (car unmatched-in-forms)(car unmatched-from-forms)))(pop unmatched-in-forms)(pop unmatched-from-forms))(if unmatched-from-forms(nconc(form-replace--car from-forms to-forms (car in-forms))(form-replace from-forms to-forms (cdr in-forms)))(nconc(copy-sequence to-forms)(form-replace from-forms to-forms unmatched-in-forms))))))(defun form-replace--car (from-forms to-forms nested-form)(if (consp nested-form)(list (form-replace from-forms to-forms nested-form))(if (and (equal nested-form (car from-forms))(not (cdr from-forms)))(copy-sequence to-forms)(list nested-form))))#+end_src#+begin_src emacs-lisp(defvar-local pop-to-command-buffer nil)(defvar pop-to-command-setup-hook nil)(defvar-local pop-to-command--callback nil)(defun pop-to-command-buffer-name (command &optional context name)(setq-if-nil name (string-join command " "))(if context(concat "*" name " (" context ")*")(concat "*" name "*")))(defun pop-to-command (command &optional context name callback)(require 'eshell)(setq name (pop-to-command-buffer-name command context name))(let ((program (car command))(arguments (cdr command))(directory default-directory)(buffer (get-buffer name)))(if buffer(with-current-buffer buffer(when eshell-process-list(eshell-kill-process)(sleep-for 0.04)))(setq buffer (get-buffer-create name))(set-buffer buffer)(setq histdir nil)(let ((eshell-non-interactive-p t)(eshell-history-file-name nil))(eshell-mode)))(pop-to-buffer buffer)(use-local-map (make-sparse-keymap))(set-keymap-parent (current-local-map) eshell-mode-map)(local-set-key "\C-m" 'ignore)(setq-local pop-to-command-buffer t)(setq-local pop-to-command--callback callback)(setq default-directory directory)(end-of-buffer)(add-hook 'eshell-post-command-hook 'pop-to-command--done-eshell nil t)(run-hooks 'pop-to-command-setup-hook)(let ((parsed-command (eshell-parse-command program arguments t)))(eshell-eval-command parsed-command))buffer))(defun pop-to-command--done-eshell ()(insert "\nCommand " (buffer-name) " done.\n")(end-of-buffer)(when pop-to-command--callback(funcall pop-to-command--callback)))(provide 'pop-to-command)#+end_src#+begin_src emacs-lisp(use-package eat:if sys/linuxp:custom(eat-kill-buffer-on-exit t):config(eat-eshell-mode)(setq eshell-visual-commands '())(defun hack-make-process (arguments)(let* ((cell (cdr (plist-member arguments :command)))(command (car cell)))(when (and (equal (car command) "/usr/bin/env")(equal (cadr command) "jimsh"))(setcar cell (cdr command))))arguments)(defun fixed-eat--make-process (function &rest arguments)(with-advice (('make-process :filter-args 'hack-make-process))(let ((process-environment process-environment))(when (equal (eat-term-name) "eat-truecolor")(push "COLORTERM=truecolor" process-environment))(apply function arguments))))(advice-add 'eat--eshell-adjust-make-process-args:around 'fixed-eat--make-process)(advice-add 'eat-exec :around 'fixed-eat--make-process)(eval(form-replace'(defun eat--t-write)'(defun fixed-eat--t-write)(form-replace'((+ written wrote))'((+ written max))(form-replace'((- end e))'((- max wrote))(function-lisp 'eat--t-write))))t)(best-compile 'fixed-eat--t-write)(advice-add 'eat--t-write :override 'fixed-eat--t-write)(defun hack-eat-exec (arguments)(when (equal (caddr arguments) "/usr/bin/env")(setcar (cddr arguments) "env"))arguments)(advice-add 'eat-exec :filter-args 'hack-eat-exec)(defun eat-point ()(when eat-terminal(marker-position(eat-term-display-cursor eat-terminal))))(setq eat-enable-shell-prompt-annotation nil)(set-face-foreground 'eat-term-color-0 "#505050")(set-face-foreground 'eat-term-color-1 "#C00000")(set-face-foreground 'eat-term-color-2 "#00C000")(set-face-foreground 'eat-term-color-3 "#C0C000")(set-face-foreground 'eat-term-color-4 "#6060C0")(set-face-foreground 'eat-term-color-5 "#C000C0")(set-face-foreground 'eat-term-color-6 "#00C0C0")(set-face-foreground 'eat-term-color-7 "#E0E0E0")(set-face-foreground 'eat-term-color-8 "#707070")(set-face-foreground 'eat-term-color-9 "#FF0000")(set-face-foreground 'eat-term-color-10 "#00FF00")(set-face-foreground 'eat-term-color-11 "#FFFF00")(set-face-foreground 'eat-term-color-12 "#8080FF")(set-face-foreground 'eat-term-color-13 "#FF00FF")(set-face-foreground 'eat-term-color-14 "#00FFFF")(set-face-foreground 'eat-term-color-15 "#FFFFFF")(eat-eshell-mode 1)(eat-eshell-visual-command-mode 1))