diff --git a/init.el b/init.el index f1947d4..7b12491 100644 --- a/init.el +++ b/init.el @@ -111,15 +111,25 @@ '((c-mode . c-ts-mode) (c++-mode . c++-ts-mode) (c-or-c++-mode . c-or-c++-ts-mode) - (objc-mode . objc-ts-mode) (java-mode . java-ts-mode) (rust-mode . rust-ts-mode) (json-mode . json-ts-mode)))) ;; c-ts-mode (use-package c-ts-mode + :after evil :init - (setq-default c-ts-mode-indent-offset 4)) + (setq-default c-ts-mode-indent-offset 4) + :config + (evil-define-key 'normal 'c-ts-mode-map + "go" #'ff-find-other-file + "gO" #'ff-find-other-file-other-window) + (evil-define-key 'normal 'c++-ts-mode-map + "go" #'ff-find-other-file + "gO" #'ff-find-other-file-other-window) + (evil-define-key 'normal 'objc-mode-map + "go" #'ff-find-other-file + "gO" #'ff-find-other-file-other-window)) ;; recentf (use-package recentf @@ -383,6 +393,45 @@ visual states." (advice-add 'eglot-completion-at-point :around #'cape-wrap-buster) (setq eglot-autoshutdown t)) +;; project.el +(use-package project + :bind (:map project-prefix-map + ("s" . my/project-vterm)) + :init + (defvar my/project-vterm-hash-table (make-hash-table :test 'equal) + "Hash table that maps project root dirs to vterm buffers.") + (defun my/project-vterm () + "Switch to or create a vterm buffer in the current projects root." + (interactive) + (if-let ((proj (project-current t)) + (default-directory (project-root proj))) + (if-let ((vterm-buff (gethash default-directory + my/project-vterm-hash-table)) + ((buffer-live-p vterm-buff))) + (switch-to-buffer vterm-buff) + (puthash default-directory + (vterm (concat "*vterm for project " default-directory "*")) + my/project-vterm-hash-table)))) + (defvar my/project-run-command nil + "Command to run with `my/project-run'.") + (defvar my/-project-run-history '() + "Commands previously run with `my/project-run'") + (defun my/project-run (command comint) + "Like `project-compile', but for running a project. +COMMAND and COMINT are like `compile'." + (interactive (list (or my/project-run-command + (read-shell-command "Run Command: " + (car my/-project-run-history) + '(my/-project-run-history . 1))) + (consp current-prefix-arg))) + (let* ((proj (project-current nil)) + (default-directory (if proj (project-root proj) default-directory)) + (compilation-buffer-name-function (lambda (_) + (progn "*run project*"))) + (compilation-directory default-directory) + (compile-history nil)) + (compile command comint)))) + ;; rust (use-package rust-mode) @@ -567,7 +616,9 @@ visual states." dashboard-display-icons-p t dashboard-icon-type 'nerd-icons dashboard-set-file-icons t + dashboard-projects-backend 'project-el dashboard-items '((recents . 5) + (projects . 5) (bookmarks . 5)))) ;;; init.el ends here