Enable smart tabs for C and C++

This commit is contained in:
Camden Dixie O'Brien 2021-01-01 00:00:34 +00:00
parent f2531b8d84
commit ccec10683e

View File

@ -323,7 +323,8 @@
(setq-default basic-offset 4) (setq-default basic-offset 4)
#+end_src #+end_src
And generally indenting with spaces is more common, so make that the default: And generally indenting with spaces is more common, so make that
the default:
#+begin_src emacs-lisp #+begin_src emacs-lisp
(setq-default indent-tabs-mode nil) (setq-default indent-tabs-mode nil)
@ -356,20 +357,49 @@
(require 'lsp-ido) (require 'lsp-ido)
#+end_src #+end_src
** C *** Smart Tabs
For C there is =clangd= implementing LSP. Assuming that's installed Indent with tabs and align with spaces. Installing the package
and on the =PATH=, we can just hook =lsp-mode= into the default here but it's enabled on a per-language basis in the languages'
mode and there will be much rejoicing. individual config sections.
#+begin_src emacs-lisp #+begin_src emacs-lisp
(add-hook 'c-mode-hook #'lsp-deferred) (use-package smart-tabs-mode)
#+end_src #+end_src
[[help:smart-tabs-insinuate][smart-tabs-insinuate]] enables smart tabs for a particular language,
but also it will only be used when [[help:indent-tabs-mode][indent-tabs-mode]] is
non-nil. The following function wraps up setting
~indent-tabs-mode~ and enabling smart tabs for the language into
one thing:
#+begin_src emacs-lisp
(defun enable-smart-tabs (lang hook)
"Enable smart tabs for lang (even if indent-tabs-mode is nil by default)"
(smart-tabs-insinuate lang)
(add-hook hook (lambda () (setq indent-tabs-mode nil))))
#+end_src
** C
For C there is =clangd= implementing LSP. Assuming that's
installed and on the =PATH=, we can just hook =lsp-mode= into the
default mode and there will be much rejoicing.
#+begin_src emacs-lisp
(add-hook 'c-mode-hook #'lsp-deferred)
#+end_src
And we want to enable smart tabs:
#+begin_src emacs-lisp
(enable-smart-tabs 'c 'c-mode-hook)
#+end_src
** C++ ** C++
Essentially the same story as for C Essentially the same story as for C.
#+begin_src emacs-lisp #+begin_src emacs-lisp
(add-hook 'c++-mode-hook #'lsp-deferred) (add-hook 'c++-mode-hook #'lsp-deferred)
(enable-smart-tabs 'c++ 'c++-mode-hook)
#+end_src #+end_src
** Haskell ** Haskell