You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This mode is effectively no longer maintained. No new features
will be added, and the mode itself has been moved into Emacs core.
Thus development of support for C# will continue in core Emacs. However, this repo will continue
being available from (M)ELPA for some time for backwards compatibility.
If you are running Emacs 29 or later you are advised to remove this package and rely
on what’s in core. Bug reports should be directed to the Emacs bug tracker
after Emacs 29 is released.
csharp-mode
This is a mode for editing C# in emacs. It’s using CC mode or tree-sitter for
highlighting and indentation.
Main features
font-lock and indent of C# syntax including:
all c# keywords and major syntax
attributes that decorate methods, classes, fields, properties
enum types
#if/#endif #region/#endregion
instance initializers
anonymous functions and methods
verbatim literal strings (those that begin with @)
generics
intelligent insertion of matched pairs of curly braces.
compilation-mode support for msbuild, devenv and xbuild.
tree-sitter support
You can enable experimental tree sitter support for indentation and highlighting using
If you are using this, clearly state so if you find any issues.
Note that we don’t depend on tree-sitter yet, so you have to manually install
the packages involved. The simplest way is to use the provided snippet above.
Using and evolving the tree-sitter functionality.
tree-sitter introduces a minor mode called tree-sitter-debug-mode where you can
look at the actual syntax tree it produces. If and when you spot missing or
wrong syntax highlighting, look at how the patterns are written in
csharp-tree-sitter-mode.el, then submit a pr with a couple new ones added. When
testing and debugging this, it is actually as simple as M-x eval-buffer on
csharp-tree-sitter-mode.el, then M-x revert-buffer in the file you are testing.
It should update and show the correct syntax highlighting.
So the development cycle is:
Spot missing syntax highlighting
View AST with tree-sitter-debug-mode
Locate offending part
Add new pattern
M-x eval-buffer in csharp-tree-sitter-mode.el
M-x revert-buffer inside your some-test-file.cs
Usage
This package is currently available on both ELPA and MELPA. Install using M-x
package-install<RET>csharp-mode.
Once installed the package should be automatically used for files with a ‘.cs’-extension.
Note: This package is also available on MELPA-stable for those who don’t want or need
bleeding edge development-versions.
For a better experience you may want to enable electric-pair-mode when editing C#-files.
To do so, add the following to your .emacs-file:
(defunmy-csharp-mode-hook ()
;; enable the stuff you want for C# here
(electric-pair-mode1) ;; Emacs 24
(electric-pair-local-mode1) ;; Emacs 25
)
(add-hook'csharp-mode-hook'my-csharp-mode-hook)
For further mode-specific customization, M-x customize-group RET csharp RET will show available settings with documentation.
For more advanced and IDE-like functionality we recommend using csharp-mode together
with lsp-mode or eglot
Attribution
This repo was a fork of the code originally developed by Dylan R. E. Moonfire and
further maintained by Dino Chiesa as hosted on Google code.
New focus
The original csharp-mode repo contained lots of different code for lots of different purposes,
some finished, some not, some experimental, some not. Basiaclly things like ASPX-mode, TFS-mode,
code completion backends, etc.
All this original code can still be found in the extras-branch, but we have decided to
go for a more focused approach and to throw out all dead or unused code, code we wont
be maintaining.
The goal: That what we package in csharp-mode actually works and works well.
ELPA
This package aims to stay as close to mainline emacs as it can. As such,
paperwork with the FSF is needed for contributions of significant size.
License
The original project was licensed under GPL v2+, but after a rewrite in September
2020, it was relicensed to GPLv3+