diff --git a/init.d/programming/common.el b/init.d/programming/common.el index fe1832c..c72419a 100644 --- a/init.d/programming/common.el +++ b/init.d/programming/common.el @@ -1,6 +1,6 @@ ;;; common.el --- Common programming settings. -*- lexical-binding: t; -*- -;; Time-stamp: <2020-01-26T20:35:54+0100> +;; Time-stamp: <2020-01-27T02:09:18+0100> ;;; Commentary: @@ -248,148 +248,5 @@ ) ) -;; Git integration. -(use-package git-commit - :pin melpa - ) - -(unless slow-computer - ;; magit from melpa needs transient from melpa. - (use-package transient - :pin melpa) - - (use-package magit - :pin melpa - - :custom - (magit-diff-refine-hunk 'all) ; Show word-granularity differences. - - :config - (defun my/magit-display-buffer (buffer) - "Workaround to ensure that BUFFER is split vertically if necessary." - (if (and git-commit-mode - (with-current-buffer buffer - (derived-mode-p 'magit-diff-mode))) - (display-buffer buffer '((display-buffer-pop-up-window - display-buffer-use-some-window - display-buffer-below-selected) - (inhibit-same-window . t))) - (magit-display-buffer-traditional buffer))) - (setq magit-display-buffer-function #'my/magit-display-buffer) - - :bind - ("C-x g" . magit-status) - ("C-x M-g" . magit-dispatch) - - :hook - (after-save . magit-after-save-refresh-status) - ) - - ;; Use libgit rather than git. - (use-package magit-libgit - :pin melpa - ) - - ;; Show TODOs in magit-status. - (use-package magit-todos - :after magit - - :config - ;; Mark variables as safe. This prevents prompts when using .dir-locals.el. - (put 'magit-todos-depth 'safe-local-variable #'integerp) - - :hook - (magit-mode . magit-todos-mode) - ) - - ;; Work with Git forges from Magit. - (use-package forge - :pin melpa ; - - :after magit - - :config - (add-to-list 'forge-alist '("schlomp.space" "schlomp.space/api/v1" - "schlomp.space" forge-gitea-repository)) - ) - ) ; unless slow-computer. - -(unless slow-computer - ;; Client for Language Server Protocol servers. - (use-package lsp-mode - :if (executable-find "clangd") - :after (whitespace) - :defines (lsp-clients-clangd-args) - - :custom - (lsp-prefer-flymake nil) ; Disable flymake. - (lsp-auto-guess-root t) ; Don't ask for project root. - (lsp-eldoc-render-all t) ; Display all eldoc information. - - :config - (setq lsp-clients-clangd-args '("--compile-commands-dir=build")) - ;; Add “-clang-tidy” to clangd args if the version supports it. - (when (>= (my/clangd-version) 9.0) - (add-to-list 'lsp-clients-clangd-args "--clang-tidy" t)) - - ;; Mark lsp-clients-clangd-args as safe to override. - (put 'lsp-clients-clangd-args 'safe-local-variable #'consp) - - (defun my/lsp-ws-toggle () - (if lsp-ui-peek-mode - (my/whitespace-mode-off) - (my/whitespace-mode-on))) - - :hook - (c++-mode . lsp) - (c-mode . lsp) - (lsp-ui-peek-mode . my/lsp-ws-toggle) ; Dots in wrong color. - ) - - ;; Eye-candy and flycheck support for lsp-mode. - (use-package lsp-ui - :after (lsp-mode flycheck) - - :custom - (lsp-ui-sideline-enable nil) ; Do not insert doc into buffer. - (lsp-ui-doc-include-signature t) ; Include signature in doc popup. - (lsp-ui-doc-enable nil) ; Disable doc popup. - - :bind - (:map lsp-ui-mode-map - ("M-." . lsp-ui-peek-find-definitions) - ("C-M-." . lsp-ui-peek-find-references) - ("C-M-," . lsp-ui-peek-find-implementation) - ) - - :hook - (lsp-mode . lsp-ui-mode) - ) - - ;; Completions with lsp-mode. - (use-package company-lsp - :after (lsp-mode company) - - :config - (push 'company-lsp company-backends) - ) - - ;; ivy interface to lsp-mode. - (use-package lsp-ivy - :after (lsp-mode ivy) - ) - - ;; Integration between lsp-mode and treemacs. - (use-package lsp-treemacs - :after (treemacs lsp-ui) - - :bind - (:map lsp-ui-mode-map - ("" . lsp-treemacs-errors-list) ; Use treemacs for error list. - ("M-i" . lsp-treemacs-symbols) ; Display symbols using treemacs. - ) - ) - ) ; unless slow-computer. - (provide 'programming/common) ;;; common.el ends here diff --git a/init.d/programming/git.el b/init.d/programming/git.el new file mode 100644 index 0000000..50917cb --- /dev/null +++ b/init.d/programming/git.el @@ -0,0 +1,78 @@ +;;; git.el --- magit and stuff. -*- lexical-binding: t; -*- + +;; Time-stamp: <2020-01-27T02:06:44+0100> + +;;; Commentary: + +;;; Code: + +(require 'basics/global-variables) + +;; Git integration. +(use-package git-commit + :pin melpa + ) + +(unless slow-computer + ;; magit from melpa needs transient from melpa. + (use-package transient + :pin melpa) + + (use-package magit + :pin melpa + + :custom + (magit-diff-refine-hunk 'all) ; Show word-granularity differences. + + :config + (defun my/magit-display-buffer (buffer) + "Workaround to ensure that BUFFER is split vertically if necessary." + (if (and git-commit-mode + (with-current-buffer buffer + (derived-mode-p 'magit-diff-mode))) + (display-buffer buffer '((display-buffer-pop-up-window + display-buffer-use-some-window + display-buffer-below-selected) + (inhibit-same-window . t))) + (magit-display-buffer-traditional buffer))) + (setq magit-display-buffer-function #'my/magit-display-buffer) + + :bind + ("C-x g" . magit-status) + ("C-x M-g" . magit-dispatch) + + :hook + (after-save . magit-after-save-refresh-status) + ) + + ;; Use libgit rather than git. + (use-package magit-libgit + :pin melpa + ) + + ;; Show TODOs in magit-status. + (use-package magit-todos + :after magit + + :config + ;; Mark variables as safe. This prevents prompts when using .dir-locals.el. + (put 'magit-todos-depth 'safe-local-variable #'integerp) + + :hook + (magit-mode . magit-todos-mode) + ) + + ;; Work with Git forges from Magit. + (use-package forge + :pin melpa ; + + :after magit + + :config + (add-to-list 'forge-alist '("schlomp.space" "schlomp.space/api/v1" + "schlomp.space" forge-gitea-repository)) + ) + ) ; unless slow-computer. + +(provide 'programming/git) +;;; git.el ends here diff --git a/init.d/programming/lsp.el b/init.d/programming/lsp.el new file mode 100644 index 0000000..71dccf5 --- /dev/null +++ b/init.d/programming/lsp.el @@ -0,0 +1,89 @@ +;;; lsp.el --- Language Server Protocol. -*- lexical-binding: t; -*- + +;; Time-stamp: <2020-01-27T02:10:04+0100> + +;;; Commentary: + +;;; Code: + +(require 'basics/global-variables) + +(unless slow-computer + ;; Client for Language Server Protocol servers. + (use-package lsp-mode + :if (executable-find "clangd") + :after (whitespace) + :defines (lsp-clients-clangd-args) + + :custom + (lsp-prefer-flymake nil) ; Disable flymake. + (lsp-auto-guess-root t) ; Don't ask for project root. + (lsp-eldoc-render-all t) ; Display all eldoc information. + + :config + (setq lsp-clients-clangd-args '("--compile-commands-dir=build")) + ;; Add “-clang-tidy” to clangd args if the version supports it. + (when (>= (my/clangd-version) 9.0) + (add-to-list 'lsp-clients-clangd-args "--clang-tidy" t)) + + ;; Mark lsp-clients-clangd-args as safe to override. + (put 'lsp-clients-clangd-args 'safe-local-variable #'consp) + + (defun my/lsp-ws-toggle () + (if lsp-ui-peek-mode + (my/whitespace-mode-off) + (my/whitespace-mode-on))) + + :hook + (c++-mode . lsp) + (c-mode . lsp) + (lsp-ui-peek-mode . my/lsp-ws-toggle) ; Dots in wrong color. + ) + + ;; Eye-candy and flycheck support for lsp-mode. + (use-package lsp-ui + :after (lsp-mode flycheck) + + :custom + (lsp-ui-sideline-enable nil) ; Do not insert doc into buffer. + (lsp-ui-doc-include-signature t) ; Include signature in doc popup. + (lsp-ui-doc-enable nil) ; Disable doc popup. + + :bind + (:map lsp-ui-mode-map + ("M-." . lsp-ui-peek-find-definitions) + ("C-M-." . lsp-ui-peek-find-references) + ("C-M-," . lsp-ui-peek-find-implementation) + ) + + :hook + (lsp-mode . lsp-ui-mode) + ) + + ;; Completions with lsp-mode. + (use-package company-lsp + :after (lsp-mode company) + + :config + (push 'company-lsp company-backends) + ) + + ;; ivy interface to lsp-mode. + (use-package lsp-ivy + :after (lsp-mode ivy) + ) + + ;; Integration between lsp-mode and treemacs. + (use-package lsp-treemacs + :after (treemacs lsp-ui) + + :bind + (:map lsp-ui-mode-map + ("" . lsp-treemacs-errors-list) ; Use treemacs for error list. + ("M-i" . lsp-treemacs-symbols) ; Display symbols using treemacs. + ) + ) + ) ; unless slow-computer. + +(provide 'programming/lsp) +;;; lsp.el ends here diff --git a/init.el b/init.el index ecdc40b..c7a7dc1 100644 --- a/init.el +++ b/init.el @@ -1,6 +1,6 @@ ;;; init.el --- tastytea's Emacs init file. -*- lexical-binding: t; -*- -;; Time-stamp: <2020-01-01T03:37:43+0100> +;; Time-stamp: <2020-01-27T02:10:15+0100> ;;; Commentary: ;; Requires at least Emacs 26. Most of it will probably work with Emacs 24 and @@ -41,6 +41,8 @@ (require 'programming/common) (require 'programming/c++) +(require 'programming/git) +(require 'programming/lsp) (require 'programming/misc) (require 'net/server)