View Source Editor Setup for Cure String Literals
This guide helps you configure your editor to easily input Unicode curly quotes (' and ') for Cure charlist literals.
Implementation Status: Charlist literals with Unicode curly quotes are fully implemented in the Cure lexer and tested (see
test/string_lexer_test.erl). However, in practice, most Cure code uses regular strings ("hello") for text. Charlists are primarily for Erlang interoperability when needed.
Quick Reference
Cure uses different quote characters for different purposes:
| Character | Unicode | Usage | Example |
|---|---|---|---|
" | U+0022 | String literals | "hello" |
' | U+2018 | Charlist start | 'hello' |
' | U+2019 | Charlist end | 'hello' |
: | U+003A | Atoms (recommended) | :my_atom |
' | U+0027 | Atoms (alternative) | 'my_atom' |
Operating System Methods
macOS
System-wide Keyboard Shortcuts:
- Left curly quote
': <kbd>Option</kbd> + <kbd>]</kbd> - Right curly quote
': <kbd>Option</kbd> + <kbd>Shift</kbd> + <kbd>]</kbd>
Text Substitution (Automatic):
- Open System Preferences → Keyboard → Text
- Add entries:
- Replace:
''→ With:''(two single curly quotes) - Or configure your preferred trigger
- Replace:
Linux
Compose Key Method:
- Set a compose key in your keyboard settings
- Use sequences:
'(left): <kbd>Compose</kbd> <kbd><</kbd> <kbd>'</kbd>'(right): <kbd>Compose</kbd> <kbd>></kbd> <kbd>'</kbd>
XKB Custom Layout:
Create a custom keyboard layout in ~/.config/xkb/symbols/custom:
partial alphanumeric_keys
xkb_symbols "cure_quotes" {
include "us(basic)"
key <AC10> { [ apostrophe, quotedbl, U2018, U2019 ] };
};Apply with: setxkbmap -option "custom:cure_quotes"
Windows
AutoHotkey Script:
Save as cure_quotes.ahk:
; Cure Charlist Quotes
; Press Alt+[ for left curly quote
; Press Alt+] for right curly quote
![ ::SendInput {U+2018} ; Alt+[
!] ::SendInput {U+2019} ; Alt+]Run the script on startup.
Editor-Specific Configurations
VS Code
Method 1: Custom Keybindings
Add to keybindings.json:
[
{
"key": "alt+[",
"command": "type",
"args": { "text": "'" },
"when": "editorTextFocus && editorLangId == 'cure'"
},
{
"key": "alt+]",
"command": "type",
"args": { "text": "'" },
"when": "editorTextFocus && editorLangId == 'cure'"
}
]Method 2: Snippets
Add to Cure language snippets:
{
"Charlist Literal": {
"prefix": "cl",
"body": "'$1'",
"description": "Insert charlist literal with curly quotes"
}
}Method 3: Text Expander Extension
Install an extension like "Text Expander" and configure:
'c→'(left curly quote)c'→'(right curly quote)
Vim/Neovim
Method 1: Insert Mode Mappings
Add to .vimrc or init.vim:
" Cure charlist quotes
inoremap <A-[> '
inoremap <A-]> '
" Or use digraphs (Ctrl+K followed by code)
" '<' for U+2018, '>' for U+2019Method 2: Abbreviations
" Auto-expand ''c to charlist quotes
autocmd FileType cure inoreabbrev ''c ''Method 3: Custom Digraphs
digraphs c< 8216 " '<
digraphs c> 8217 " '>Then use: <kbd>Ctrl+K</kbd> <kbd>c</kbd> <kbd><</kbd> for '
Emacs
Method 1: Custom Keybindings
Add to .emacs or init.el:
;; Cure charlist quotes
(define-key cure-mode-map (kbd "M-[")
(lambda () (interactive) (insert "'")))
(define-key cure-mode-map (kbd "M-]")
(lambda () (interactive) (insert "'")))Method 2: Abbrev Mode
(define-abbrev cure-mode-abbrev-table "'c" "''")Method 3: YASnippet
Create cure-mode/charlist.yasnippet:
# -*- mode: snippet -*-
# name: charlist
# key: cl
# --
'$1'$0Sublime Text
Method 1: Key Bindings
Add to Preferences → Key Bindings:
[
{
"keys": ["alt+["],
"command": "insert_snippet",
"args": {"contents": "'"}
},
{
"keys": ["alt+]"],
"command": "insert_snippet",
"args": {"contents": "'"}
}
]Method 2: Snippets
Create cure-charlist.sublime-snippet:
<snippet>
<content><![CDATA['$1']]></content>
<tabTrigger>cl</tabTrigger>
<scope>source.cure</scope>
<description>Charlist Literal</description>
</snippet>IntelliJ IDEA / WebStorm
Live Templates:
- Go to Settings → Editor → Live Templates
- Create new template group "Cure"
- Add template:
- Abbreviation:
cl - Template text:
'$END$' - Applicable in: Cure files
- Abbreviation:
Keymap:
- Settings → Keymap
- Search for "Insert Live Template"
- Add shortcut: <kbd>Alt</kbd>+<kbd>[</kbd> for
', <kbd>Alt</kbd>+<kbd>]</kbd> for'
Atom
Snippets:
Add to snippets.cson:
'.source.cure':
'Charlist Literal':
'prefix': 'cl'
'body': "'$1'"Keybindings:
Add to keymap.cson:
'atom-text-editor[data-grammar="source cure"]':
'alt-[': 'snippets:insert-text-left-curly-quote'
'alt-]': 'snippets:insert-text-right-curly-quote'Language Server / LSP Support
If you're using a Cure language server, it can provide:
Auto-Closing Pairs:
- Typing
'automatically inserts' - Cursor positioned between quotes
Snippet Completion:
- Type
charorcl→ charlist literal template
Diagnostics:
- Warns when using ASCII
'for charlists - Suggests correction to Unicode quotes
Copy-Paste Method
If configuring your editor is too complex, you can:
Create a file
snippets.txtwith commonly-used patterns:'' (empty charlist) 'hello' 'world'Copy-paste as needed
Or use a clipboard manager with pre-configured snippets
Testing Your Setup
Create a test file test.cure:
module Test do
export [main/0]
import Std.Io [println/1]
def main(): Int =
# String literal (straight quotes)
let str = "hello"
println(str)
# Charlist literal (curly quotes) - stores as [104, 101, 108, 108, 111]
# let chars = 'hello'
# Atom (ASCII single quote)
let atom = :my_atom
0
endVerify:
"hello"→ String (UTF-8 binary)'hello'→ Charlist (list of Unicode codepoints: [104, 101, 108, 108, 111]):my_atom→ Atom (recommended syntax)'my_atom'→ Atom (alternative ASCII single quote syntax)
Troubleshooting
Characters Not Displaying
Issue: Curly quotes show as boxes or question marks
Solution: Ensure your editor uses a Unicode-aware font:
- Recommended fonts: Fira Code, JetBrains Mono, Source Code Pro
- Enable UTF-8 encoding in editor settings
Incorrect Character Inserted
Issue: Wrong Unicode character inserted
Solution:
- Verify the Unicode codepoints: U+2018 (left) and U+2019 (right)
- Check your keyboard layout or input method
- Use
xxdor a Unicode inspector to verify characters
Auto-Pairing Conflicts
Issue: Editor's auto-pairing interferes with charlist quotes
Solution:
- Disable auto-pairing for single quotes in Cure files
- Configure language-specific settings
- Use explicit keybindings instead of relying on editor defaults
Alternative: ASCII Syntax (Not Recommended)
If Unicode input is impossible in your environment, you can use ASCII single quotes for atoms instead:
# ASCII single quote for atoms (fully supported)
atom = 'my_atom'
# Or use colon prefix (recommended)
atom = :my_atomNote: Charlists with Unicode curly quotes are implemented and tested in the compiler (see test/string_lexer_test.erl), but are rarely used in practice. Most Cure code uses strings ("hello") for text and atoms (:atom) for symbolic values.
Contributing
Found a better method for your editor? Please contribute:
- Fork the Cure repository
- Update this document with your configuration
- Submit a pull request
See CONTRIBUTING.md for guidelines.
Resources
- Unicode Character Table
- Curly Quotes vs Straight Quotes
- Cure Syntax Guide
- String Lexer Tests - Reference implementation tests
Support
Need help configuring your editor?
- Open an issue on GitHub
- Join the Cure community chat
- Check the FAQ in the main documentation
Happy coding! 🎉