From 3b2f0a4cb4fc95daeb083dafd32be98cab1b784b Mon Sep 17 00:00:00 2001 From: Love Billenius Date: Thu, 30 Jan 2025 21:19:37 +0100 Subject: [PATCH] Fix root finding. The problem was projectile --- .emacs | 70 ++++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 54 insertions(+), 16 deletions(-) diff --git a/.emacs b/.emacs index 51c5a6f..90a7f0a 100644 --- a/.emacs +++ b/.emacs @@ -185,15 +185,15 @@ (evil-mode 1) ;; Force modes to start in Emacs state - (dolist (mode '(;;Buffer-menu-mode - ;;ibuffer-mode - dired-mode - help-mode - bookmark-bmenu-mode - gnus-summary-mode - gnus-group-mode - package-menu-mode)) - (evil-set-initial-state mode 'emacs)) + ;;(dolist (mode '(;;Buffer-menu-mode + ;;;;ibuffer-mode + ;;dired-mode + ;;help-mode + ;;bookmark-bmenu-mode + ;;gnus-summary-mode + ;;gnus-group-mode + ;;package-menu-mode)) + ;;(evil-set-initial-state mode 'emacs)) ;; Correct keybindings for minibuffer maps using actual keymap objects (dolist (keymap '(minibuffer-local-map @@ -247,12 +247,14 @@ (setq company-minimum-prefix-length 1 company-idle-delay 0.0)) ;; Show completions immediately -;; Install and configure Projectile + (use-package projectile :init - (projectile-mode +1) - :bind (:map projectile-mode-map - ("s-p" . projectile-command-map))) + (projectile-mode) + :config + (setq projectile-project-root-files '(".git" ".lsp-root")) + ;;(setq projectile-project-root-files-bottom-up '(".git" ".clangd")) + (projectile-mode +1)) ;; Install and bind Magit (use-package magit @@ -278,9 +280,35 @@ (rust-mode . lsp)) :commands lsp :config - (setq lsp-prefer-flymake nil) ;; Use lsp-ui and flycheck instead of flymake - (setq lsp-enable-snippet t) ;; Disable snippet support if not needed - (setq lsp-headerline-breadcrumb-enable nil)) ;; Disable breadcrumb for performance + (setq lsp-prefer-flymake nil) + (setq lsp-enable-snippet t) + (setq lsp-headerline-breadcrumb-enable nil) + + ;; Enhanced project root detection with debug logging + (defun my/lsp-get-project-root () + "Find the project root by locating the nearest .git directory with validation." + (let* ((current-file (or (buffer-file-name) default-directory)) + (root-dir (locate-dominating-file current-file ".git")) + (valid-root (when root-dir + (expand-file-name root-dir)))) + (when valid-root + (message "[LSP] Detected project root: %s" valid-root) + valid-root))) + + ;; Set project root detection for C/C++ before LSP initializes + (add-hook 'c-mode-hook (lambda () + (setq-local lsp-project-root-function #'my/lsp-get-project-root) + (message "[LSP] C mode root: %s" (my/lsp-get-project-root)))) + + (add-hook 'c++-mode-hook (lambda () + (setq-local lsp-project-root-function #'my/lsp-get-project-root) + (message "[LSP] C++ mode root: %s" (my/lsp-get-project-root)))) + + ;; Configure ignored directories for better performance + (setq lsp-file-watch-ignored '("[/\\\\]\\.git$" + "[/\\\\]build$" + "[/\\\\]bin$" + "[/\\\\]tests$"))) (use-package lsp-ui :commands lsp-ui-mode @@ -335,6 +363,16 @@ (setq rust-format-on-save t) ) +;; =========================== +;; C/C++ Line Length Configuration +;; =========================== +(defun my/c-mode-line-limit () + "Set 80-character line limit for C/C++ files." + (setq fill-column 80) + (display-fill-column-indicator-mode 1) +) +(add-hook 'c-mode-hook #'my/c-mode-line-limit) + (message "Emacs init loaded.") (custom-set-variables ;; custom-set-variables was added by Custom.