A major-mode for editing C# in emacs
Emacs Lisp C# Makefile
Clone or download
josteink Fix error handling multiline compiler-directives.
Caused by changes upstream in cc-mode.
Fix by copying removed functions locally.
Latest commit 5e47b77 Jul 8, 2018



This is a mode for editing C# in emacs. It’s based on cc-mode, v5.30.3 and above.

Travis-CI build-page. Build-status: https://api.travis-ci.org/josteink/csharp-mode.png

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
  • automagic code-doc generation when you type three slashes.
  • intelligent insertion of matched pairs of curly braces.
  • imenu indexing of C# source, for easy menu-based navigation.
  • compilation-mode support for msbuild, devenv and xbuild.


This package is currently available on MELPA & Marmalade. 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:

(defun my-csharp-mode-hook ()
  ;; enable the stuff you want for C# here
  (electric-pair-mode 1)       ;; Emacs 24
  (electric-pair-local-mode 1) ;; 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 configuring cc-mode settings (which csharp-mode derives from) see the cc-mode manual.

For more advanced and IDE-like functionality we recommend using csharp-mode together with Omnisharp-Emacs.


This repo is 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.


The original project was licensed under GPL v2, so this one is too.