sharkov63 / sakls Goto Github PK
View Code? Open in Web Editor NEWLicense: MIT License
License: MIT License
Before releasing SAKLS, we should write tutorials on how to contribute and extend SAKLS. One of these tutorials should be "How to write a Layout Plugin", which will use sakls.xkb-switch as an example. The tutorial is best written in markdown with source lying directly in SAKLS repository.
We should create a convenience class, which given an implementation of C SAKLS Layout API (sakls_LayoutAPI
), creates a C++ class sakls::LayoutAPI
which makes access to Layout API more convenient.
Schema (or syntax-to-layout schema) is a convenient, manually written set of rules that tells sakls which keyboard layout should be set at any given moment based on the syntax information of the vim buffer.
Say we have a vim buffer, the syntax tree of it's contents and a position
A schema determines the keyboard layout only by looking at the syntax stack of the current cursor position in the buffer. Simplifying, it looks at the node ID at top of the syntax stack and determines the layout from it.
A schema divides all possible node IDs into the following three disjoint sets.
default_layout
field of Layout API.This is an epic which sums up to prepare all docs before SAKLS release.
Instead of using
#ifdef __cplusplus
extern "C" {
#endif
//...
#ifdef __cplusplus
}
#endif
We should define convenience macros SAKLS_EXTERN_C_BEGIN
and SAKLS_EXTERN_C_END
.
Layout API is an interface which provides means of getting and setting the current keyboard layout. Simply, it consists of two methods: get_layout(): layout
and set_layout(layout)
. The interface should be agnostic of the actual implementation that does the layout switching.
The implementations of layout API can be:
iminsert
between 0 and 1 - it would be useful when there are no means of switching the actual system keyboard layout.The Layout API makes it so that implementation of this API would be very easy to write.
After task #7 we have a stub implementation of sakls::Engine
class. In this task we should implement this class, providing the full support of memorized, forced and ignored syntax node types.
Currently we only aim to implement updateNewSyntaxStack
function which changes the whole syntax stack at once. In the future we can add support for push
and pop
syntax stack functions.
In order to use sakls headers in other projects (for exmaple, using LayoutAPI.h
header in Layout API implementations in separate repositories, we should create a CMake INTERFACE
library. This will not make itself as a library, but using target_link_libraries
with it will add the necessary include paths, without the need to do it manually.
We should design a basic C API of creating/deleting a SAKLS Engine as well as provide a function to fully update the syntax stack in the engine.
This is an epic to ensure doxygen support.
Goals:
ninja sakls-doxygen
or something.In this task we should make the necessary decisions regarding error handling:
Expected<T>
-like mechanisms, should we use std::expected
from C++23, or should we use some other error-code library (like llvm-expected header-only library)?Before the release we should prepare the following:
README.md
CONTRIBUTING.md
CODE_OF_CONDUCT.md
SECURITY.md
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.