128 lines
4.3 KiB
Ruby
128 lines
4.3 KiB
Ruby
# basic configuration
|
|
# This can also be used to do speacail configs for different projects.
|
|
# its ruby guys script whatever you want.
|
|
|
|
C.startup do
|
|
puts "Starting crib..."
|
|
end
|
|
|
|
C.shutdown do
|
|
puts "Exiting crib..."
|
|
end
|
|
|
|
# this can be modified by the user during runtime through keybindings
|
|
# But i need to know how to ever read this value only when needed.
|
|
# maybe i can write a function that notifies if theme maybe changed then reload
|
|
# It can also be scripted to load different theme formats into a hash usable by crib
|
|
C.theme = {
|
|
:default => { fg: 0xEEEEEE },
|
|
:shebang => { fg: 0x7DCFFF },
|
|
:error => { fg: 0xEF5168 },
|
|
:comment => { fg: 0xAAAAAA, italic: true },
|
|
:string => { fg: 0xAAD94C },
|
|
:escape => { fg: 0x7DCFFF },
|
|
:interpolation => { fg: 0x7DCFFF },
|
|
:regexp => { fg: 0xD2A6FF },
|
|
:number => { fg: 0xE6C08A },
|
|
# rubocop:disable Lint/BooleanSymbol
|
|
:true => { fg: 0x7AE93C },
|
|
:false => { fg: 0xEF5168 },
|
|
# rubocop:enable Lint/BooleanSymbol
|
|
:char => { fg: 0xFFAF70 },
|
|
:keyword => { fg: 0xFF8F40 },
|
|
:keywordoperator => { fg: 0xF07178 },
|
|
:operator => { fg: 0xFFFFFF, italic: true },
|
|
:function => { fg: 0xFFAF70 },
|
|
:type => { fg: 0xF07178 },
|
|
:constant => { fg: 0x7DCFFF },
|
|
:variableinstance => { fg: 0x95E6CB },
|
|
:variableglobal => { fg: 0xF07178 },
|
|
:annotation => { fg: 0x7DCFFF },
|
|
:directive => { fg: 0xFF8F40 },
|
|
:label => { fg: 0xD2A6FF },
|
|
:brace1 => { fg: 0xD2A6FF },
|
|
:brace2 => { fg: 0xFFAFAF },
|
|
:brace3 => { fg: 0xFFFF00 },
|
|
:brace4 => { fg: 0x0FFF0F },
|
|
:brace5 => { fg: 0xFF0F0F }
|
|
}
|
|
|
|
# # TODO: to be done once a proper api for binding and window drawing is made
|
|
# # The binds will be connected to either `editor` or windows where editor can
|
|
# # only use a preset set of stuff to bind while teh windows are purely custom
|
|
# # # this part uses dsl bindings to define the bind function
|
|
# # # Hopefully extend to give more context/power to bindings
|
|
# # # but try to keep simple for performance
|
|
# # # for default keybindings
|
|
# # C.bind [:normal, :select], :a => "insert_mode"
|
|
# # # for custom keybindings
|
|
# # C.bind :select, [:x, :c] do
|
|
# # puts "cut"
|
|
# # end
|
|
# # C.bind :jumper do
|
|
# # set [:x, :c] do
|
|
# # puts "jump to first bookmark"
|
|
# # end
|
|
# # end
|
|
# # # they can also be defined conditionally
|
|
# # # This code is just an example and doesnt actually work
|
|
# # if using_tmux?
|
|
# # bind :C-p do
|
|
# # system("tmux select-pane -U")
|
|
# # end
|
|
# # end
|
|
|
|
# This can, for example, be modified by user bindings during runtime
|
|
# TODO: dynamic registration to actually be implemented once keybinds and extentions are implemented
|
|
# A predefined list already exists and can be found in libcrib.rb
|
|
# C.lsp_config["solargraph"] = ["stdio"]
|
|
#
|
|
# C.languages[:ruby] = {
|
|
# color: 0xff8087,
|
|
# symbol: " ",
|
|
# extensions: ["rb"],
|
|
# filenames: ["Gemfile"],
|
|
# mimetypes: ["text/x-ruby"],
|
|
# lsp: "solargraph"
|
|
# }
|
|
|
|
C.line_endings = :auto_unix # or :unix or :windows or :auto_windows
|
|
|
|
# C.extra_highlights do |_line, _idx|
|
|
# # the return can be an array of
|
|
# # [fg, bg. flags, start, end]
|
|
# # where fg and bg are integers (using 24 bit color)
|
|
# # and flags is a bitmask of bold/underline/italic etc
|
|
# # and start and end are integers strictly inside the line
|
|
# return []
|
|
# end
|
|
|
|
# The highlighter will be aplied to the language as long as the langauge is defined in C.languages
|
|
C.highlighters[:ruby_n] = {
|
|
parser: ->(line, state, line_idx) {
|
|
# the return value is a hash
|
|
# it contains the state and the highlights
|
|
# state can be of any type but will be consistent between calls
|
|
# initially nil is sent for uninitialized state the returned must be anything but nil
|
|
# the same state can be used for multiple lines
|
|
# the highlights can be an array of
|
|
# [K_type, start, end]
|
|
# K_type is a constant from the constants defined in libcrib.rb
|
|
# for ex: for strings it would be Tokens::K_STRING or for numbers Tokens::K_NUMBER etc.
|
|
# and start and end are integers strictly inside the line
|
|
return {
|
|
state: "",
|
|
tokens: [
|
|
# This will highlight the entire line as a string
|
|
# Any wrong format will not be handled and lead to crashes
|
|
{ type: Tokens::K_STRING, start: 0, end: line.length }
|
|
]
|
|
}
|
|
},
|
|
matcher: ->(state1, state2) {
|
|
# returns true if the states are equal
|
|
# And so would not need recomputation for further lines
|
|
return state1 == state2
|
|
}
|
|
}
|