1
1
mirror of https://github.com/tonsky/FiraCode.git synced 2024-08-15 07:50:24 +03:00
FiraCode/README.md
2015-09-13 13:48:16 +05:00

137 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## Fira Code: monospaced font with programming ligatures
<img src="https://dl.dropboxusercontent.com/u/561580/imgs/fira_code_logo.svg">
#### [Download Fira Code v0.6](https://github.com/tonsky/FiraCode/releases/download/0.6/FiraCode-Regular.otf)
### Problem
Programmers use a lot of symbols, often encoded with several characters. For human brain sequences like `->`, `<=` or `:=` are single logical token, even if they take two or three places on the screen. Your eye spends non-zero amount of energy to scan, parse and join multiple characters into a single logical one. Ideally, all programming languages should be designed with full-fledged Unicode symbols for operators, but thats not the case yet.
### Solution
Fira Code is a Fira Mono font extended with a set of ligatures for common programming multi-character combinations. This is just a font rendering feature: underlying code remains ASCII-compatible. This helps to read and understand code faster. For some frequent sequences like `..` or `//` ligatures allow us to correct spacing.
### Fira Code (with ligatures):
<img src="./showcases/all_ligatures.png" />
Compare to Fira Mono (without ligatures):
<img src="./showcases/no_ligatures.png" />
### Editor support
Do **not** work:
- Atom ([bug](https://github.com/atom/atom/issues/6055))
- SublimeText ([vote here](http://sublimetext.userecho.com/topic/433445-opentype-support-ligatures-curly-quotes-contextual-and-alternate-symbols/))
- Intellij Idea ([vote here](https://youtrack.jetbrains.com/issue/IDEA-127539))
- XCode
- iTerm 2 ([feature request](https://gitlab.com/gnachman/iterm2/issues/3568))
- OS X Terminal.app
- Emacs
- gVim, MacVim
- Eclipse (Mac and Win, [vote here](https://bugs.eclipse.org/bugs/show_bug.cgi?id=398656))
- Notepad++
- Kate, Konsole, KWrite in KDE 4
Do work:
- Visual Studio
- TextMate 2
- Coda 2
- Eclipse (Linux)
- QtCreator
- LightTable ([instructions](https://github.com/LightTable/LightTable/issues/1459#issuecomment-57366504))
- BBEdit — enter this command in a terminal to enable ligatures:
`defaults write com.barebones.bbedit "EnableFontLigatures_Fira Code" -bool YES`
- RStudio
- Chocolat
- Kate, Konsole, KWrite in Plasma/KDE 5
Should work (copied from [Hasklig README](https://github.com/i-tu/Hasklig)):
- Geany
- gEdit
- Smultron
- Vico
_Note:_ Im not a font designer, and Fira Code is built in sort of [a hacky way](https://github.com/mozilla/Fira/issues/62) from OTF version of Fira Mono. Please forgive me if it doesnt work for you. Help will be greatly appreciated.
### Code examples
Ruby:
<img src="./showcases/ruby.png" />
JavaScript:
<img src="./showcases/javascript.png" />
Erlang:
<img src="./showcases/erlang.png" />
Go:
<img src="./showcases/go.png" />
Haskell:
<img src="./showcases/haskell.png" />
### Alternatives
Another monospaced fonts with ligatures:
- [Hasklig](https://github.com/i-tu/Hasklig) (free)
- [PragmataPro](http://www.fsd.it/fonts/pragmatapro.htm) (€59)
- [Monoid](http://larsenwork.com/monoid/) (free)
### Credits
This work is based on OFL-licensed [Fira Mono font](https://github.com/mozilla/Fira). Original Fira Mono font was not changed, only extended
Fira Code was inspired by [Hasklig font](https://github.com/i-tu/Hasklig): Ligatures for Haskell code
### Changelog
**0.6**:
Redrawn from Fira Mono 3.204 (slightly heavier weight)
Added:
`**` `***` `+++` `--` `---` `?:`
`/=` `/==` `.=` `^=` `=~` `?=` `||=` `|=`
`<<<` `<=<` `-<<` `-<` `>-` `>>-` `>=>` `>>>`
`<*>` `<|>` `<$>` `<+>`
`<!--` `{-` `-}` `/**` `\\` `\\\`
`..<` `??` `|||` `&&&` `<|` `|>`
and Powerline support
**0.5**: `#{` `~-` `-~` `<==` `==>` `///` `;;` `</`
**0.4**:
- Added `~=` `~~` `#[`
- Rolled back `&&` and `||` to more traditional look
- `===` and `!==` are now rendered with 3 horisontal bars
**0.3**: `~@` `#?` `=:=` `=<`
**0.2.1**: Fixed width of `&&` and `||`
**0.2**: `-->` `<--` `&&` `||` `=>>` `=/=`
**0.1**
`>>=` `=<<` `<<=` `->>` `->` `=>` `<<-` `<-`
`===` `==` `<=>` `>=` `<=` `>>` `<<` `!==` `!=` `<>`
`:=` `++` `#(` `#_`
`::` `...` `..` `!!` `//` `/*` `*/` `/>`