[core]
tab-width = 4
indent-with-spaces = off
# cursor width in pixels
cursor-width = 1
# time to blink cursor for (i.e. it will be on for cursor-blink-time-on seconds, then off for cursor-blink-time-off seconds)
# set -off to 0 to disable blinking
cursor-blink-time-on = 0.5
cursor-blink-time-off = 0.3
# amount of scroll "padding" (minimum number of lines below the cursor will the bottom of the screen be)
scrolloff = 5
# if you do a bunch of typing, then undo, it will generally
# undo the past this many seconds of editing.
undo-save-time = 6
text-size = 18
border-thickness = 1
max-menu-width = 600
padding = 6
error-display-time = 10
auto-indent = on
# automatically add a newline at the end of the file on save
auto-add-newline = on
syntax-highlighting = on
line-numbers = on
# if set to "on", when a file is changed by another program, it will be reloaded by ted without asking you.
auto-reload = on
# automatically reload config when saved
auto-reload-config = on
build-default-command = make
# restore previously opened files when ted is launched?
restore-session = on
# show autocomplete menu when a trigger character (e.g. '.') is typed (LSP only)
trigger-characters = on
# should all identifier characters (e.g. a-z) be treated as trigger characters?
identifier-trigger-characters = off
# display "phantom completions"? (if there is only one completion, display it next to the cursor)
phantom-completions = on
# enable LSP support (for autocompletion, etc.)
# you can also set `lsp = ""` but this is a quick way to disable LSP servers for all langauges
lsp-enabled = yes
# enable this to log all messages between ted and the LSP server
# (may require restarting ted to update)
# the log file is in the same folder as ted.cfg.
lsp-log = off
# display function signature help? (only with LSP running)
# this is the thing at the bottom of ted which shows the parameters to the function you're calling
signature-help-enabled = yes
# display hover info when F1 key is pressed? (only with LSP running)
hover-enabled = yes
# if this is set to x, then hover info will be displayed without shift key after x seconds (with LSP running)
hover-time = 1e10
# highlight instances of the variable under the cursor when the F2 key is pressed? (only with LSP running)
highlight-enabled = yes
# don't require ctrl key for highlighting
highlight-auto = no
# maximum editable file size.
# ted will set the buffer to view-only if a file larger than this is loaded.
# NOTE: ted is not really meant for absolutely massive files.
#       it should handle anything up to 100,000 lines just fine (maybe small hiccups in some cases for >20,000)
#       files up to 1,000,000 lines should be just fine in view-only mode (although they might take a bit of time to load)
max-file-size = 20000000
# absolute maximum file size.
# ted will produce an error if a file larger than this is loaded.
max-file-size-view-only = 100000000

# whether to use vsync or not. you probably want this on.
vsync = on
# max framerate. vsync overrides this.
# you might want to increase this if you have a >60Hz monitor and you don't care about CPU usage.
framerate-cap = 60

# search depth for files to generate tags for.
# if set to 0, tag generation/regeneration will do nothing
tags-max-depth = 2
# regenerate tags if an identifier is not found (with Ctrl+click)?
regenerate-tags-if-not-found = yes
# this variable determines how ted finds the "root directory" of a project for
# running build commands and because LSP servers need to know
# FOR EXAMPLE:  If you have the file /a/b/c/d.txt open,
#               ted will check each of the directories /, /a, /a/b, /a/b/c
#               and set the root to whichever one has one of these files,
#               breaking ties by order of appearance in the list below.
#               So if /a/b/.git and /a/Makefile and /a/b/c/Cargo.toml exist,
#               ted will select /a/b as the root.
# if no identifying files are found, the directory containing the current file is used.
root-identifiers = .ted-root, .ted-root.out, Cargo.toml, make.bat, CMakeLists.txt, Makefile, go.mod, .git

# you can make your own custom background for ted using a shader.
# an example is provided here. you will have access to the following variables:
#     t_pos - screen position of fragment (0,0) to (1,1)
#     t_aspect - (window_width / window_height, 1)
#     t_time - current time in seconds, modulo 3600
#     t_save_time - time since last save, in seconds.
#     t_texture - a texture, made with your choice of image
# if you want your shader supported no matter what, only use stuff from GLSL version 110.
#  on non-ancient computers, you should be able to use GLSL version 130.
# bg-shader = "void main() {
# 	vec2 p = t_pos * t_aspect;
# 	float r = pow(sin(p.x * 100.0 + t_time * 3.0), 60.0);
# 	float g = pow(sin(p.y * 100.0 + t_time * 6.0), 60.0);
# 	vec4 color = vec4(r, g, 1.0 - t_save_time, 0.2);
# 	gl_FragColor = clamp(color, 0.0, 1.0);
# }"
# here's an example using a texture:
# bg-texture = "/path/to/my/cool/picture.jpg" (or .png, .gif, .bmp)
# bg-shader = "void main() { gl_FragColor = texture2D(t_texture, t_pos) * vec4(1.0,1.0,1.0,0.2); }"

[C.core]
lsp = "clangd --log=error"

[C++.core]
lsp = "clangd --log=error"

[Go.core]
lsp = "gopls"

[Java.core]
lsp = "jdtls"
# by default, jdtls doesn't give signature help
lsp-configuration = `{
	"java": {
		"signatureHelp": {
			"enabled": true
		}
	}
}`

[JavaScript.core]
lsp = "typescript-language-server --stdio"

[TypeScript.core]
lsp = "typescript-language-server --stdio"

[Python.core]
lsp = "pylsp"

[Rust.core]
lsp = "rust-analyzer"

[Tex.core]
lsp = "texlab"

[keyboard]
# motion and selection
Left = :left
Shift+Left = :select-left
Ctrl+Left = :left-word
Ctrl+Shift+Left = :select-left-word
Right = :right
Shift+Right = :select-right
Ctrl+Right = :right-word
Ctrl+Shift+Right = :select-right-word
Up = :up
Shift+Up = :select-up
Down = :down
Shift+Down = :select-down
Ctrl+Up = :up-blank-line
Ctrl+Shift+Up = :select-up-blank-line
Ctrl+Down = :down-blank-line
Ctrl+Shift+Down = :select-down-blank-line
Home = :start-of-line
Shift+Home = :select-start-of-line
Ctrl+Home = :start-of-file
Ctrl+Shift+Home = :select-start-of-file
End = :end-of-line
Shift+End = :select-end-of-line
Ctrl+End = :end-of-file
Ctrl+Shift+End = :select-end-of-file
Ctrl+a = :select-all

# insertion
Tab = :tab
Shift+Tab = :backtab
Enter = :newline
# same as :newline for normal text insertion, but goes to the previous search result instead of the next one for find+replace
Shift+Enter = :newline-back
Keypad Enter = :newline
Shift+Keypad Enter = :newline-back
# toggle selection between commented/uncommented
Ctrl+/ = :comment-selection

# deletion
Delete = :delete
Shift+Delete = :delete
Ctrl+Delete = :delete-word
Ctrl+Shift+Delete = :delete-word
Backspace = :backspace
Shift+Backspace = :backspace
Ctrl+Backspace = :backspace-word
Ctrl+Shift+Backspace = :backspace-word

# scrolling
PageUp = :page-up
PageDown = :page-down
Shift+PageUp = :select-page-up
Shift+PageDown = :select-page-down

Ctrl+o = :open
Ctrl+n = :new
Ctrl+s = :save
Ctrl+Alt+Shift+s = :save-all
Ctrl+Shift+s = :save-as
Ctrl+q = :quit
# reload all buffers from their files.
# this doesn't affect buffers with unsaved changes.
Ctrl+Shift+r = :reload-all

# You can do something like this:
# Ctrl+Alt+t = 3 :set-language
# to set the language of the current buffer to Rust, for example. This might be useful if
# one file extension could be multiple different languages.
# Here are the numbers corresponding to each language we have syntax highlighting for:
#  0 Plain text (no syntax highlighting)
#  1 C
#  2 C++
#  3 Rust
#  4 Python
#  5 TeX
#  6 Markdown
#  7 HTML
#  8 Config
#  9 JavaScript
# 10 Java
# 11 Go
# 12 ted.cfg
# 13 TypeScript
# 14 JSON
# 15 XML
# 16 GLSL
# -1 Guess from the file extension (default)

# IDE features
Ctrl+Space = :autocomplete
# go to previous completion
Ctrl+Shift+Space = :autocomplete-back
Ctrl+u = :find-usages

Ctrl+z = :undo
Ctrl+Shift+z = :redo
Ctrl+f = :find
Ctrl+Shift+f = :find-replace
Ctrl+c = :copy
Ctrl+x = :cut
Ctrl+v = :paste
Ctrl+Shift+p = :command-selector

# tabs
Ctrl+w = :tab-close
Ctrl+PageUp = :tab-prev
Ctrl+PageDown = :tab-next
Ctrl+Shift+PageUp = :tab-move-left
Ctrl+Shift+PageDown = :tab-move-right
Alt+1 = 0 :tab-switch
Alt+2 = 1 :tab-switch
Alt+3 = 2 :tab-switch
Alt+4 = 3 :tab-switch
Alt+5 = 4 :tab-switch
Alt+6 = 5 :tab-switch
Alt+7 = 6 :tab-switch
Alt+8 = 7 :tab-switch
Alt+9 = 8 :tab-switch
Alt+0 = 9 :tab-switch
# (for if you have those fancy extra buttons on your mouse)
X1 = :tab-prev
X2 = :tab-next

Ctrl+Equals = 3 :increase-text-size
Ctrl+- = 3 :decrease-text-size

Ctrl+Alt+Shift+v = :view-only

F4 = :build
Ctrl+[ = :build-prev-error
Ctrl+] = :build-next-error
# Ctrl+Shift+1 applies to QWERTY keyboards (and others), Ctrl+! for AZERTY (and others)
Ctrl+Shift+1 = :shell
Ctrl+! = :shell

Ctrl+t = :generate-tags

Ctrl+d = :goto-definition
# alternative to ctrl+click
Ctrl+' = :goto-definition-at-cursor
# alternative to ctrl+shift+click
Ctrl+Shift+' = :goto-declaration-at-cursor
# alternative to ctrl+alt+click
Ctrl+Alt+' = :goto-type-definition-at-cursor
Ctrl+g = :goto-line

Ctrl+\ = :split-horizontal
Ctrl+Shift+\ = :split-vertical
# unsplit
Ctrl+j = :split-join
# switch to the other side of a split
Ctrl+tab = :split-switch
# swap sides of a split
Ctrl+Shift+tab = :split-swap

Escape = :escape

[colors]
# below, bg is short for background and hl is short for highlight

border = #a77
active-tab-hl = #a77a
# this color is used for tabs which are selected, but not active (because you are on the other side of a split, perhaps)
selected-tab-hl = #7777
cursor-line-bg = #fff2
cursor = #3ff
# used as cursor color when you do autocomplete and there are no suggestions
cursor-error = #f00
# color to highlight matching brackets with
matching-bracket-hl = #fda8
selection-bg = #36aa
view-only-cursor = #0d0
view-only-selection-bg = #0a05
hl = #ccc
text = #fff
# less prominent text color
text-secondary = #fff7
# For example, in the open menu it is nice to have a visual distinction between folders and files.
# This is the color used for folders.
text-folder = #88f
# Used for things that are neither files nor folders.
text-other = #8f8
bg = #001
# The entire screen gets filled with this color when a menu (e.g. the "open" menu) is shown.
# By making it transparent, we can dim everything else while the menu is open.
menu-backdrop = #0004
menu-bg = #222
menu-hl = #afa2
# error box colors
error-border = #f00
error-bg = #800
# warning box colors
warning-border = #ff0
warning-bg = #660
# info box colors
info-border = #00f
info-bg = #004
# color to highlight search results with
find-hl = #fff4
yes = #afa
no = #faa
cancel = #ffa

# autocomplete
autocomplete-bg = #000
autocomplete-border = #999
autocomplete-hl = #f6a3
# hover (press shift while hovering over an identifier with an LSP server running)
hover-bg = #000a
hover-border = #fffa
hover-text = #fff
hover-hl = #ffc4
# these control the text color for various kinds of completions
autocomplete-variable = #bfb
autocomplete-function = #fec
autocomplete-type = #faf


# Syntax highlighting
keyword = #0c0
preprocessor = #77f
string = #f77
character = #fa7
builtin = #a7f
comment = #999
constant = #8ff

line-numbers = #779
cursor-line-number = #ddf
line-numbers-separator = #fff3

[extensions]
C = .c, .h
C++ = .cpp, .hpp, .C, .H, .cxx, .hxx, .cc, .hh
Rust = .rs
Python = .py
Tex = .tex
Markdown = .md
GLSL = .glsl, .tesc, .tese, .vert, .frag, .geom, .comp
HTML = .html, .php, .xhtml
XML = .xml, .iml
Config = .cfg, .toml
# ted.cfg has its own syntax highlighting for multiline strings.
TedCfg = ted.cfg
JavaScript = .js
TypeScript = .ts
JSON = .json
Java = .java
Go = .go

# You can add language-specific settings like this:
# [HTML.core]
# tab-width = 2

# Or path-specific settings like this:
# [/path/to/special/project//colors]
# keyword = #f0f

# Or both!
# [/path/to/special/project//Javascript.keyboard]
# Ctrl+J = "function() {" :insert-text