Emacs: Rust improvements, ob-rust race condition, TS with ansi codes compilation

This commit is contained in:
Joseph Ferano 2023-03-15 13:40:32 +07:00
parent 38232c81ab
commit 6703a9fece

View File

@ -714,6 +714,7 @@ The theme of `C-x 4` bindings is that they operate on other windows, so this fun
"^\\*lsp-help\\*" lsp-help-mode "^\\*lsp-help\\*" lsp-help-mode
"^\\*ert\\*" ert-results-mode "^\\*ert\\*" ert-results-mode
"^\\*cargo-test\\*" cargo-test-mode "^\\*cargo-test\\*" cargo-test-mode
"^\\*cargo-run\\*" cargo-run-mode
"^\\*rustic-compilation\\*" rustic-compilation-mode "^\\*rustic-compilation\\*" rustic-compilation-mode
;; "^\\*ansi-term\\*$" term-mode ;; "^\\*ansi-term\\*$" term-mode
("^\\*Warnings\\*$" . hide) ("^\\*Warnings\\*$" . hide)
@ -1140,50 +1141,8 @@ targets."
(message "Opening %s done" file))) (message "Opening %s done" file)))
#+end_src #+end_src
** Org Mode
#+begin_src emacs-lisp #+begin_src emacs-lisp
(straight-use-package 'org-bullets)
(defun joe/org-init ()
(setq org-todo-keywords '((sequence "TODO" "IN-PROGRESS" "|" "DONE" "BACKLOG")))
(setq org-agenda-files '("~/todo.org"))
(org-babel-do-load-languages
'org-babel-load-languages
'((emacs-lisp . t)
(makefile . t)
(ocaml . t)
(python . t)
(C . t)
(haskell . t)
(rust . t)
(shell . t)))
(require 'org-tempo)
(add-to-list 'org-structure-template-alist '("el" . "src emacs-lisp"))
(add-to-list 'org-structure-template-alist '("ml" . "src ocaml"))
(add-to-list 'org-structure-template-alist '("rs" . "src rust"))
(add-to-list 'org-structure-template-alist '("py" . "src python"))
(add-to-list 'org-structure-template-alist '("hs" . "src haskell"))
(add-to-list 'org-structure-template-alist '("cc" . "src C :includes stdio.h stdlib.h"))
(setq org-edit-src-content-indentation 0))
(with-eval-after-load 'org (joe/org-init))
(setq org-blank-before-new-entry
'((heading . nil)
(plain-list-item . nil)))
(setq org-cycle-separator-lines 1)
(setq org-hide-emphasis-markers t)
(setq org-src-window-setup 'current-window)
(defun joe/org-hook ()
(local-set-key (kbd "C-. C-i") 'consult-org-heading)
(org-bullets-mode)
(org-indent-mode))
(add-hook 'org-mode-hook 'joe/org-hook)
(straight-use-package 'org-kanban)
#+end_src #+end_src
** Avy ** Avy
@ -1497,6 +1456,25 @@ println!("Hello world");
;; (define-key global-map (kbd "C-x C-s) #'save-buffer) ;; (define-key global-map (kbd "C-x C-s) #'save-buffer)
(define-key global-map (kbd "<f9>") #'joe/save-then-recompile) (define-key global-map (kbd "<f9>") #'joe/save-then-recompile)
(define-key global-map (kbd "<f10>") #'compile) (define-key global-map (kbd "<f10>") #'compile)
(defun joe/colorize-compilation-buffer ()
(ansi-color-apply-on-region compilation-filter-start (point)))
(add-hook 'compilation-filter-hook 'joe/colorize-compilation-buffer)
(defun joe/close-compilation-if-no-warn-err (buffer string)
"Bury a compilation buffer if succeeded without warnings "
(if (and
(string-match "compilation" (buffer-name buffer))
(string-match "finished" string)
(not
(with-current-buffer (current-buffer)
(search-forward "warning" nil t))))
(run-with-timer 1.5 nil
(lambda ()
(and (eq (point) 1)
(string-match "compilation" (buffer-name (current-buffer)))
(popper-close-latest))))))
(add-hook 'compilation-finish-functions 'joe/close-compilation-if-no-warn-err)
#+end_src #+end_src
** Debugging ** Debugging
*** DAP *** DAP
@ -1539,7 +1517,8 @@ println!("Hello world");
*** Rust *** Rust
#+begin_src emacs-lisp #+begin_src emacs-lisp
(straight-use-package 'rustic) (straight-use-package 'rustic)
(straight-use-package 'ob-rust) ;; Org-Babel (straight-use-package 'ob-rust)
;; Org-Babel
;; Disabling until we figure out how to get it working ;; Disabling until we figure out how to get it working
;; (straight-use-package 'parsec) ;; Required by evcxr-mode ;; (straight-use-package 'parsec) ;; Required by evcxr-mode
@ -1559,6 +1538,7 @@ println!("Hello world");
(with-eval-after-load 'rustic (with-eval-after-load 'rustic
;; Don't autostart ;; Don't autostart
(setq rustic-lsp-setup-p nil) (setq rustic-lsp-setup-p nil)
(define-key rustic-mode-map (kbd "<f9>") #'rustic-cargo-run)
(setq lsp-rust-analyzer-server-display-inlay-hints t) (setq lsp-rust-analyzer-server-display-inlay-hints t)
(setq lsp-rust-analyzer-display-lifetime-elision-hints-enable "always") (setq lsp-rust-analyzer-display-lifetime-elision-hints-enable "always")
@ -1573,6 +1553,11 @@ println!("Hello world");
#+begin_src emacs-lisp #+begin_src emacs-lisp
(global-set-key (kbd "C-x C-r") 'eval-region) (global-set-key (kbd "C-x C-r") 'eval-region)
#+end_src #+end_src
*** Web
#+begin_src emacs-lisp
(straight-use-package 'typescript-mode)
(setq typescript-indent-level 2)
#+end_src
*** C *** C
Design some basic functions for compiling. There's also a hook to close the popper window if there Design some basic functions for compiling. There's also a hook to close the popper window if there
@ -1588,21 +1573,6 @@ it doesn't close it.
(electric-pair-local-mode t) (electric-pair-local-mode t)
(c-toggle-comment-style -1)) (c-toggle-comment-style -1))
(add-hook 'c-mode-hook #'joe/c-mode-hook) (add-hook 'c-mode-hook #'joe/c-mode-hook)
(defun joe/close-compilation-if-no-warn-err (buffer string)
"Bury a compilation buffer if succeeded without warnings "
(if (and
(string-match "compilation" (buffer-name buffer))
(string-match "finished" string)
(not
(with-current-buffer (current-buffer)
(search-forward "warning" nil t))))
(run-with-timer 1.5 nil
(lambda ()
(and (eq (point) 1)
(string-match "compilation" (buffer-name (current-buffer)))
(popper-close-latest))))))
(add-hook 'compilation-finish-functions 'joe/close-compilation-if-no-warn-err)
#+end_src #+end_src
*** Haskell *** Haskell
#+begin_src emacs-lisp #+begin_src emacs-lisp
@ -1619,7 +1589,7 @@ it doesn't close it.
(setq cider-show-error-buffer 'only-in-repl) (setq cider-show-error-buffer 'only-in-repl)
#+end_src #+end_src
*** OCaml *** OCaml
#+begin_src emacs-lisp #+begin_src emacs-lisp :tangle no
(straight-use-package 'tuareg) (straight-use-package 'tuareg)
(straight-use-package 'dune) (straight-use-package 'dune)
(straight-use-package 'utop) (straight-use-package 'utop)
@ -1646,7 +1616,7 @@ it doesn't close it.
We won't use the LSP server but rather directly talk to Merlin, since I guess LSP just wraps Merlin We won't use the LSP server but rather directly talk to Merlin, since I guess LSP just wraps Merlin
and there's no need for a middle-man when it's already been implemented. and there's no need for a middle-man when it's already been implemented.
#+begin_src emacs-lisp #+begin_src emacs-lisp :tangle no
;; (require 'utop) ;; (require 'utop)
;; Use the opam installed utop ;; Use the opam installed utop
@ -1680,6 +1650,51 @@ and there's no need for a middle-man when it's already been implemented.
(straight-use-package 'json) (straight-use-package 'json)
(straight-use-package 'markdown-mode) (straight-use-package 'markdown-mode)
#+end_src #+end_src
** Org Mode
#+begin_src emacs-lisp
(straight-use-package 'org-bullets)
(defun joe/org-init ()
(setq org-todo-keywords '((sequence "TODO" "IN-PROGRESS" "|" "DONE" "BACKLOG")))
(setq org-agenda-files '("~/todo.org"))
(org-babel-do-load-languages
'org-babel-load-languages
'((emacs-lisp . t)
(makefile . t)
(ocaml . t)
(python . t)
(C . t)
(haskell . t)
(rust . t)
(shell . t)))
(require 'org-tempo)
(add-to-list 'org-structure-template-alist '("el" . "src emacs-lisp"))
(add-to-list 'org-structure-template-alist '("ml" . "src ocaml"))
(add-to-list 'org-structure-template-alist '("rs" . "src rust"))
(add-to-list 'org-structure-template-alist '("py" . "src python"))
(add-to-list 'org-structure-template-alist '("hs" . "src haskell"))
(add-to-list 'org-structure-template-alist '("cc" . "src C :includes stdio.h stdlib.h"))
(setq org-edit-src-content-indentation 0))
(with-eval-after-load 'org (joe/org-init))
(setq org-blank-before-new-entry
'((heading . nil)
(plain-list-item . nil)))
(setq org-cycle-separator-lines 1)
(setq org-hide-emphasis-markers t)
(setq org-src-window-setup 'current-window)
(defun joe/org-hook ()
(local-set-key (kbd "C-. C-i") 'consult-org-heading)
(org-bullets-mode)
(org-indent-mode))
(add-hook 'org-mode-hook 'joe/org-hook)
(straight-use-package 'org-kanban)
#+end_src
** Magit ** Magit
The best git porcelain/client I've ever used. Also kill stray magit buffers left over as explained [[https://manueluberti.eu/emacs/2018/02/17/magit-bury-buffer/][here]] The best git porcelain/client I've ever used. Also kill stray magit buffers left over as explained [[https://manueluberti.eu/emacs/2018/02/17/magit-bury-buffer/][here]]