Giter Site home page Giter Site logo

lite-xl-plugins's Introduction

Lite XL plugins

Plugins for the Lite XL text editor, originally forked from the lite plugins repository.

If you can't find a plugin that suits your needs, check if someone has already created an issue about it, otherwise feel free to create one yourself.

How to install

To install a plugin:

  • If the plugin links to a repository, follow its README.

  • If the plugin is a single file or directory, drop it directly in:

    • Linux ~/.config/lite-xl/plugins/
    • MacOS ~/.config/lite-xl/plugins/
    • Windows C:\Users\(username)\.config\lite-xl\plugins\

Or, if you have a Lite XL plugin manager, such as lpm, you may install plugins by doing

  lpm install plugin_name

Note: if you make a pull request, do not edit this README.md file, as it's autogenerated; the manifest.json file should be updated to include any new plugins added, as specified in the Lite XL plugin manifest specification.

Please note, that in this official repository, any plugins that specify a remote must also pin the remote to a specific commit hash. Any plugin that is hosted not in a repository, but only with a url must provide a checksum that matches the existing plugin.

Any commits specified with a remote will automatically be checked for updates to the latest branch, and PRs will automaticaly be created for them on a recurring basis to keep things up to date. Stubs can specify an alternate branch to follow with extra.follow_branch.

Any non-conforming PRs will not be accepted. The table below will be updated automatically.

Any entries marked with an asterisk are hosted on external repositories.


Plugins

Plugin Description
align_carets Align multiple carets and selections (clip)
autoinsert Automatically inserts closing brackets and quotes. Also allows selected text to be wrapped with brackets or quotes.
autosave Automatically saves files when they are changed
autosaveonfocuslost Automatically saves files that were changed when the main window loses focus by switching to another application
autowrap Automatically hardwraps lines when typing
base16* Theme manager with base16 color schemes for Lite XL.
bigclock Shows the current time and date in a view with large text (screenshot)
black* Integrates the black Python formatter with lite
bracketmatch Underlines matching pair for bracket under the caret (screenshot)
build* Provides a build system, messages window, and easily clickable errors. Supports an internal build system, and make. (screenshot)
centerdoc Centers document's content on the screen and adds zen mode support (screenshot)
cleanstart Hides the treeview at start if no arguments passed to the executable are directories. Compatible with lite.
codeplus* Offers improvements such as highlighted comments and autocomplete for brackets, quotes and more. (demo)
colorpicker Color picker dialog that supports html and rgb notations.
colorpreview Underlays color values (eg. #ff00ff or rgb(255, 0, 255)) with their resultant color. (screenshot)
console* A console for running external commands and capturing their output (gif)
copyfilelocation Copy file location to clipboard
custom_caret Customize the caret in the editor
datetimestamps Insert date-, time- and date-time-stamps
debugger* Provides a debugger integration, with pluggable backends. Currently supports only gdb. (screenshot)
devicons* PerilousBooklet's treeview icons for software developers.
discord-presence* Adds the current workspace and file to your Discord rich presence. Linux-only.
dragdropselected Provides basic drag and drop of selected text (in same document)
easingpreview* Adds a popup that displays the curve of Penner-styled easing functions.
editorconfig EditorConfig implementation for Lite XL
encodings* Properly read files that are not encoded in UTF-8 or ASCII by auto-detecting their encoding and allows saving on different text encodings.
endwise* Add end tags in variety of languages. Similar to Vim Endwise
eofnewline* Make sure the file ends with one blank line.
ephemeral_tabs Preview tabs. Opening a doc will replace the contents of the preview tab. Marks tabs as non-preview on any change or tab double clicking.
equationgrapher* Graphs y=x equations.
eval Replaces selected Lua code with its evaluated result
evergreen* Adds Treesitter syntax highlighting support
exec Runs selected text through shell command and replaces with result
extend_selection_line When a selection crosses multiple lines, it is drawn to the end of the screen (screenshot)
exterm* Allows to open an external console in current project directory
fallbackfonts* Adds support for fallback fonts (gif)
findfileimproved* Threaded project find files.
fontconfig Allows users to load fonts with fontconfig.
fontpreview Automatically displays a font with increasing sizes in a new view.
force_syntax Change the syntax used for a file.
formatter* formatters for various languages
ghmarkdown Opens a preview of the current markdown file in a browser window (screenshot) Note: the page content is generated by sending the markdown file to Github's markdown rendering API. Requires a GitHub token being provided
gitblame* Shows "git blame" information of a line (screenshot)
gitdiff_highlight* highlight changed lines from git (screenshot)
gitopen Open project files that are in a git commit (default=HEAD)
gitstatus Displays git branch and insert/delete count in status bar (screenshot)
gofmt Auto-formats the current go file, adds the missing imports and the missing return cases
gui_filepicker Graphical filepicker using zenity or kdialog.
ide* A metapackage that provides the minimum functionalities for Lite XL to run as a minimal IDE.
ide_c* A metapackage that turns Lite XL into an IDE for C/C++.
ide_java* A metapackage that turns Lite XL into an IDE for Java.
ide_javascript* A metapackage that turns Lite XL into an IDE for Javascript.
ide_lua* A metapackage that turns Lite XL into an IDE for Lua.
ide_python* A metapackage that turns Lite XL into an IDE for Python.
ide_rust* A metapackage that turns Lite XL into an IDE for Rust.
ide_tex* A metapackage that turns Lite XL into an IDE for TeX.
ide_typescript* A metapackage that turns Lite XL into an IDE for Typescript.
ide_zig* A metapackage that turns Lite XL into an IDE for Zig.
immersive-title* Dark (or even Mica!) title bar for Lite XL
indent_convert Convert between tabs and spaces indentation
indentguide Adds indent guides (screenshot)
ipc Adds inter-process communication support, single-instance mode and tab drag and drop between instances.
keymap_export Exports the keymap to a JSON file.
kinc-projects* Adds Kinc Project generation with basic build commands(depends on console)
lfautoinsert Automatically inserts indentation and closing bracket/text after newline
linenumbers The ability to change the display of the line number (screenshot)
lintplus* Advanced linter with ErrorLens-like error reporting. Compatible with linters made for linter (screenshot)
lite-debugger Debug Lite-XL's Lua VM interactively, if you're running it from a terminal. Warning: Will significantly slow down Lite-XL if installed.
lite-xl-vibe* VI(vim?) bindings with a hint of DOOM Emacs, for lite-xl
litepresence* Discord rich presence for Lite XL (display file editing in Discord)
lorem* Generates Lorem Ipsum placeholder dummy text
lsp* Provides intellisense by leveraging the LSP protocol.
lsp_c* Automatic configuration/binary download for LSP completion for C/C++ with clangd.
lsp_clojure* Automatic configuration/binary download for LSP completion for clojure with clojure-lsp.
lsp_emmet* Automatic configuration/binary download for LSP completion for Emmet with emmet-language-server.
lsp_java* Automatic configuration/binary download for LSP completion for Java with jdtls.
lsp_json* LSP support for JSON via vscode-json-languageserver with additional patches for increased functionality.
lsp_lua* Automatic configuration/binary download for LSP completion for Lua with lua-language-server (sumneko).
lsp_python* Automatic configuration/binary download for LSP completion for Python with Pyright.
lsp_quicklintjs* Automatic configuration/binary download for LSP linting for Javascript with quick-lint-js.
lsp_rust* Automatic configuration/binary download for LSP completion for Rust with rust-analyzer.
lsp_snippets* Adds LSP snippets support to the snippets plugin
lsp_tex* Automatic configuration/binary download for LSP completion for TeX with texlab.
lsp_typescript* Automatic configuration/binary download for LSP completion for Typescript and Javascript with typescript-language-server.
lsp_yaml* LSP support for YAML via yaml-language-server.
lsp_zig* LSP support for Zig via zls.
lspkind* Completion menu kind/type icons for Lite XL LSP
macmodkeys Remaps mac modkeys command/option to ctrl/alt
markers Add markers to docs and jump between them quickly (screenshot)
memoryusage Show memory usage in the status view
minimap Shows a minimap on the right-hand side of the docview. Taken from @andsve, and improved upon.
motiontrail Adds a motion-trail to the caret (gif)
navigate Allows moving back and forward between document positions, reducing the amount of scrolling
nerdicons File icons set for TreeView. Modification of the nonicons plugin. Uses NerdFont icons
nonicons File icons set for TreeView. Uses the Nonicons font
opacity Change the opaqueness/transparency of lite-xl using shift+mousewheel or a command.
open_ext Automatically prompts you if you tried to open a binary file in the editor
openfilelocation Opens the parent directory of the current file in the file manager
openselected Opens the selected filename or url
pdfview PDF preview for TeX files
plugin_manager* A plugin manager view for lite-xl that provides GUI access to lpm
primary_selection Adds middle mouse click copy/paste (primary selection). To use this plugin, xclip must be installed.
profiler Adds the ability to profile lite-xl with the lua-profiler
projectsearch* Threaded project search with 5-10x better performance.
rainbowparen Show nesting of parentheses with rainbow colours
regexreplacepreview Allows for you to write a regex and its replacement in one go, and live preview the results.
restoretabs Keep a list of recently closed tabs, and restore the tab in order on ctrl+shift+t.
scalestatus Displays current scale (zoom) in status view (depends on scale plugin)
scm* Extensible source control management plugin with git and fossil backends.
search_ui Friendlier search and replace user interface using Widgets.
select_colorscheme Select a color theme, like VScode, Sublime Text.(plugin saves changes)
selectionhighlight Highlights regions of code that match the current selection (screenshot)
settings Provides a GUI to manage core and plugin settings, bindings and select color theme (video). (depends on widget)
smallclock Displays the current time in the corner of the status view
smartopenselected Opens the selected filename or path in project. Useful to open imports.
smoothcaret Smooth caret animation (gif)
snippets* Provides code snippets support
sort Sorts selected lines alphabetically
sortcss* Sort selected CSS properties alphabetically or using the concentric model. (demo)
spellcheck Underlines misspelt words (screenshot) -- note: on Windows a words.txt dictionary file must be placed beside the exe
statusclock Displays the current date and time in the corner of the status view
sticky_scroll Keep track of the current scope at the top of the view (video)
su_save Save files that require root permissions. Needs pkexec.
svg_screenshot Takes an SVG screenshot. Only browsers seem to support the generated SVG properly.
tab_switcher Switch between open tabs by searching by name
tabnumbers Displays tab numbers from 1–9 next to their names (screenshot)
terminal* An integrated terminal for lite-xl. (screenshot)
tetris Allows you to play tetris directly in the editor.
texcompile Compile Tex files into PDF
theme16* Theme manager with base16 themes
themeselect Select a theme based on filename of active document
titleize Titleizes selected string (hello world => Hello World)
todotreeview* Todo tree viewer for annotations in code like TODO, BUG, FIX, IMPROVEMENT
togglesnakecamel Toggles symbols between snake_case and camelCase
treeview-extender* Extend Lite XL's treeview menu (screenshot)
typingspeed Displays your current typing speed in characters and words per minute in the status bar
unboundedscroll Allows scrolling outside the bounds of a document
updatechecker* Automatically checks for updates and notifies you
visu* Audio visualizer for Lite XL
wal* pywal integration with Lite XL.
wordcount Adds in a word count to the statusview.

Languages

Language Description
language_angelscript Syntax for the Angelscript programming language
language_assembly_riscv Syntax for RISC-V assembly
language_assembly_x86 Syntax for Intel x86 assembly
language_autohotkey_v1 Syntax for the AutoHotkey(v1) programming language
language_batch Syntax for Windows Batch Files
language_bazel Syntax for Bazel build tool files.
language_bend Syntax for Bend programming language files.
language_bib Syntax for BibTex files
language_blade Syntax for Blade files
language_blueprint Syntax for the Blueprint markup language
language_brainfuck Syntax for the Brainfuck programming language
language_buzz Syntax for the Buzz programming language.
language_c7 Syntax for the modifications to fe used in cel7
language_caddyfile Syntax for the Caddyfile used on the Caddy web server
language_carbon Syntax for the Carbon programming language.
language_clojure Syntax for the Clojure programming language
language_cmake Syntax for the CMake build system language
language_containerfile* Syntax for Containerfile/Dockerfile
language_crystal* Syntax for the Crystal programming language
language_csharp Syntax for the C# programming language
language_cue Syntax for the CUE definition and validation programming language
language_d Syntax for the D programming language
language_dart Syntax for the Dart programming languiage
language_diff Syntax for diff and patch files
language_djot* Syntax for the Djot markup language
language_edp Syntax for FreeFEM++ programming language
language_ejs Syntax for the EJS javascript template engine
language_elixir Syntax for the Elixir programming language
language_elm Syntax for the Elm programming language
language_env* Syntax for the env (dotenv) files
language_erb Syntax for the ERB programming language. Also known as eRuby or Embedded Ruby.
language_fe Syntax for the fe programming language
language_fennel Syntax for the fennel programming language
language_fortran Syntax for the fortran programming language
language_fstab Syntax for the fstab config files
language_gabc Syntax for the GABC music typesetting language
language_gdscript Syntax for the Godot Engine's GDScript scripting language
language_glsl Syntax for the GLSL programming language
language_gmi Syntax for the Gemtext markup language
language_go Syntax for the Go programming language
language_graphql Syntax for the GraphQL query language, and server-side runtime for executing queries using a type system.
language_gravity Syntax for the Gravity programming language.
language_groovy Syntax for the Groovy programming language
language_hare Syntax for the Hare programming language
language_haxe Syntax for the Haxe programming language
language_hlsl Syntax for the HLSL programming language
language_hs Syntax for the Haskell programming language
language_htaccess Syntax for .htaccess files.
language_ignore* Syntax for .gitignore, .dockerignore and some other .*ignore files
language_ini Syntax for ini files
language_java Syntax for the Java programming language
language_jiyu Syntax for the jiyu programming language
language_json Syntax for the JSON language
language_jsx Syntax for the JSX language for the React framework in JavaScript
language_julia Syntax for the Julia programming language
language_kotlin Syntax for the Kotlin programming language
language_ksy* Syntax for Kaitai struct files
language_lilypond Syntax for the LilyPond music typesetting language
language_liquid Syntax for Liquid templating language
language_lobster Syntax for Lobster programming language
language_lox Syntax for the Lox programming language, featured in the book 'Crafting Interpreters'.
language_make Syntax for the Make build system language
language_marte Syntax for MARTe2 configuration language
language_meson Syntax for the Meson build system language
language_miniscript Syntax for the MiniScript programming language
language_moon Syntax for the MoonScript scripting language
language_nelua Syntax for Nelua programming
language_nginx Syntax for Nginx config files
language_nim Syntax for the Nim programming language
language_nix Syntax for the Nix expression language
language_objc Syntax for the Objective C programming language
language_odin Syntax for the Odin programming language
language_openscad Syntax for the OpenSCAD programming language
language_perl Syntax for the Perl programming language
language_php Syntax for the PHP programming language
language_pico8 Syntax for Pico-8 cartridge files
language_pkgbuild Syntax for PKGBUILD package description files
language_po Syntax for PO translation files
language_pony* Syntax for Pony programming language
language_powershell Syntax for PowerShell scripting language
language_psql Syntax for the postgresql database access language
language_r Syntax for R scripting language
language_rescript Syntax for the ReScript programming language
language_rivet Syntax for the Rivet programming language
language_ruby Syntax for the Ruby programming language
language_rust Syntax for the Rust programming language
language_sass Syntax for the Sass CSS preprocessor
language_scala Syntax for the Scala programming language
language_sh Syntax for shell scripting language
language_ssh_config Syntax for ssh & sshd config files
language_swift Syntax for the Swift programming language
language_tal Syntax for the Uxntal assembly language
language_tcl Syntax for the Tcl programming language
language_teal Syntax for the Teal programming language, a typed dialect of Lua.
language_tex Syntax for the LaTeX typesetting language
language_toml Syntax for the TOML configuration language
language_ts Syntax for the TypeScript programming language, a typed dialect of JavaScript.
language_tsx Syntax for TSX language
language_typst Syntax for Typst markup language
language_umka Syntax for the Umka programming language.
language_v Syntax for the V programming language
language_vale* Syntax for the Vale programming language
language_wren Syntax for the Wren programming language
language_yaml Syntax for YAML serialization language
language_zig Syntax for the Zig programming language

Libraries

Library Description
encoding* Add support for detecting file and string encodings as converting between them.
font_nonicons Nonicons font with mapping
font_symbols_nerdfont_mono_regular Nerd Font Symbols font with mapping
jdk* Production and Early-Access OpenJDK Builds, from Oracle.
net* Add support for TCP and UDP sockets using SDL_net.
nodejs* Official NodeJs builds.
thread* Supports spawning true os-threads.
tree_sitter* Tree-sitter bindings based on lua-tree-sitter
widget* Plugin library that provides a set of re-usable components to more easily write UI elements for your plugins
www* A simple library that provides a web client to fetch, and submit data via HTTP requests.

lite-xl-plugins's People

Contributors

0x42656e avatar adamharrison avatar aqilc avatar dflock avatar dheison0 avatar drmargarido avatar franko avatar gaspartcho avatar github-actions[bot] avatar guldoman avatar jgmdev avatar jminor avatar juliardi avatar kgscialdone avatar liquidev avatar mundusnine avatar nightwing13 avatar nikneym avatar not-a-web-developer avatar perilousbooklet avatar rohanvashisht1234 avatar rxi avatar sathishmanohar avatar stunxfs avatar swissalps avatar takase1121 avatar tamnac avatar thacuber2a03 avatar torchedsammy avatar vincens2005 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

lite-xl-plugins's Issues

Linewrapping and projectsearch conflict

When you enable linewrapping by default, it breaks projectsearch:

It causes projectsearch to not be able to scroll to the correct line when trying to open a result. Instead you end up at the very bottom. I think this is because the linewrapping plugin does not yet know the width of the DocView, so it inserts a lot of wraps, causing the scroll to overshoot by a lot.

`indentguide` plugin is not working on master version of lite-xl

I have got this error while I am trying to run my lite-xl after the install of indentguide

Error: /home/dheisom/.config/lite-xl/plugins/indentguide.lua:42: attempt to call a nil value (method 'subpixel_scale')
stack traceback:
	/home/dheisom/.local/share/lite-xl/core/docview.lua:427: in upvalue 'DocView_draw'
	...e/dheisom/.local/share/lite-xl/plugins/lintplus/init.lua:505: in upvalue 'draw'
	/home/dheisom/.config/lite-xl/plugins/motiontrail.lua:28: in function 'core.docview.draw'
	/home/dheisom/.local/share/lite-xl/core/commandview.lua:285: in function 'core.commandview.draw'
	/home/dheisom/.local/share/lite-xl/core/node.lua:566: in function 'core.node.draw'
	/home/dheisom/.local/share/lite-xl/core/node.lua:30: in function 'core.node.propagate'
	/home/dheisom/.local/share/lite-xl/core/node.lua:571: in function 'core.node.draw'
	/home/dheisom/.local/share/lite-xl/core/node.lua:31: in function 'core.node.propagate'
	/home/dheisom/.local/share/lite-xl/core/node.lua:571: in function 'core.node.draw'
	/home/dheisom/.local/share/lite-xl/core/node.lua:31: in function 'core.node.propagate'
	...	(skipping 1 levels)
	/home/dheisom/.local/share/lite-xl/core/node.lua:571: in function 'core.node.draw'
	/home/dheisom/.local/share/lite-xl/core/rootview.lua:406: in upvalue 'draw'
	/home/dheisom/.local/share/lite-xl/plugins/autocomplete.lua:523: in upvalue 'root_view_draw'
	/home/dheisom/.local/share/lite-xl/plugins/lsp/listbox.lua:289: in upvalue 'root_view_draw'
	/home/dheisom/.local/share/lite-xl/plugins/contextmenu.lua:32: in upvalue 'root_view_draw'
	/home/dheisom/.local/share/lite-xl/plugins/treeview.lua:454: in function 'core.rootview.draw'
	/home/dheisom/.local/share/lite-xl/core/init.lua:1561: in function 'core.step'
	/home/dheisom/.local/share/lite-xl/core/init.lua:1604: in function 'core.run'
	(...tail calls...)
	[string "local core..."]:9: in function <[string "local core..."]:2>
	[C]: in function 'xpcall'
	[string "local core..."]:2: in main chunk

Edit: I am using the master version of lite-xl

[BUG] Minimap causes editor to crash

Error: C:\Users\SOG.config\lite-xl/plugins\minimap.lua:467: attempt to index a nil value (local 'color')
stack traceback:
C:\Users\SOG.config\lite-xl/plugins\minimap.lua:467: in function 'plugins.minimap.draw'
...\chocolatey\lib\lite-xl\tools\lite-xl\data/core\view.lua:302: in function 'core.view.draw_scrollbar'
...ocolatey\lib\lite-xl\tools\lite-xl\data/core\docview.lua:547: in upvalue 'old_draw'
...\lib\lite-xl\tools\lite-xl\data/plugins\linewrapping.lua:512: in upvalue 'draw'
C:\Users\SOG.config\lite-xl/plugins\motiontrail.lua:51: in function 'core.docview.draw'
...\chocolatey\lib\lite-xl\tools\lite-xl\data/core\node.lua:588: in function 'core.node.draw'
...\chocolatey\lib\lite-xl\tools\lite-xl\data/core\node.lua:32: in function 'core.node.propagate'
...\chocolatey\lib\lite-xl\tools\lite-xl\data/core\node.lua:593: in function 'core.node.draw'
...\chocolatey\lib\lite-xl\tools\lite-xl\data/core\node.lua:31: in function 'core.node.propagate'
...\chocolatey\lib\lite-xl\tools\lite-xl\data/core\node.lua:593: in function 'core.node.draw'
... (skipping 5 levels)
...\lib\lite-xl\tools\lite-xl\data/plugins\autocomplete.lua:571: in upvalue 'root_view_draw'
...atey\lib\lite-xl\tools\lite-xl\data/plugins\treeview.lua:498: in upvalue 'root_view_draw'
...y\lib\lite-xl\tools\lite-xl\data/plugins\contextmenu.lua:31: in function 'core.rootview.draw'
...\chocolatey\lib\lite-xl\tools\lite-xl\data/core/init.lua:1340: in function 'core.step'
...\chocolatey\lib\lite-xl\tools\lite-xl\data/core/init.lua:1384: in upvalue 'core_run'
C:\Users\SOG.config\lite-xl/plugins\profiler/init.lua:78: in upvalue 'core_run'
C:\Users\SOG.config\lite-xl/plugins\settings.lua:1867: in upvalue 'core_run'
C:\Users\SOG.config\lite-xl/plugins\ipc.lua:858: in function 'core.run'
(...tail calls...)
[string "local core..."]:9: in function <[string "local core..."]:2>
[C]: in function 'xpcall'
[string "local core..."]:2: in main chunk

[Request] Color picker

There's already a color highlight so I think it would be nice to have to complement that functionality in such a lightweight editor.

bracketmatch highlight both pairs

There should be options for how highlighting is done. Should give options about highlighting rather than underlining, and whether or not to highlight the original bracket.

Open recent file

Hello,

Not sure where to put this, it's maybe a feature request?

I'd want to have a way to open recent files.

Is there a plugin that can do this? Configuration options? Something else?

Also, is there a sort of catalog of all available configuration? Ideally something that wouldn't require trawling through all source code and plugins, could/does lite-xl have something like introspection (i.e. automatically generating a list based on all exported symbols)?

[Request] Minor QOL improvement to commenting features in lfautoinsert

The block comment feature feels a bit inflexible when it only triggers the ending block characters */ if you trigger the block with just /*, only making exceptions for whitespace.

It seems common among some programmers to add more characters/words to the first line of the comment block, so I was wondering if it would be reasonable to change the lua expression for comment blocks from ["/%*%s*\n"] to ["/%*.*\n"] , in order to make an exception for any characters following the start of the comment block.

Are there any issues this might cause that I'm not aware of? I've tested this change myself and it works like I expect (I often like to add an extra few asterisks at the top of the block to make it stand out, which with this change, works exactly as I expect).

[Request] JDTLS and snippets

I would like to know if there are currently any intentions to provide java language server protocol (JDTLS) and snippets integration within the autocomplete engine.

Beginner confusion

I just got lite-xl about an hour ago, I'm intending on using it for ricing my desktop.

When starting out I was very confused as to why the example code for changing the font wasn't working.

style.font = renderer.font.load(DATADIR .. "/fonts/azukifontB.ttf", 14 * SCALE)
style.code_font = renderer.font.load(DATADIR .. "/fonts/azukifontB.ttf", 14 * SCALE) 

I had placed the font file I wanted to use in .config/lite-xl/fonts, expecting that it would load it if I just put in the path, but nothing was happening. After going on the discord I learned that I had to use USERDIR instead of DATADIR, which isnt very obvious for beginners. It would be useful if a small edit to the docs mentioning this was added, just to avoid future confusion.

The person who helped me recommended that I submit an issue.

EDIT: I posted this issue to the wrong github, I meant to post it to the mean lite-xl issues page, oops

[Request] Settings: add duplicate keybindings warning

Right now you can create duplicate keybindings through the Settings GUI. This can lead to some problems, like when you remap line-wrapping:toggle to ctrl+w and now you can no longer close documents with Ctrl+W even though the hint still shows this:

image

I can think of a couple options:

  1. Add a dialog to notify of a keybinding conflict, and if the user chooses to save the new binding then it should clear the old binding.
  2. Don't show a dialog, but instead automatically clear the old binding when it is mapped to another command.

[Bug] Hiding minimap for small docs crashes the editor

Enabling the feature Hide for small Docs crashes the editor. Opening any file will crash it too.
image

Steps to reproduce

I cloned this repo and symlinked lite-xl-plugins/plugins to ~/.config/lite-xl/plugins so it is quite possible that a combination of features from other plugins might be contributing to the crashes.

  1. Clone this repo
  2. Symlink to ~/.config/lite-xl/plugins
  3. Enable the feature in the editor

Error

The editor spits the following error upon crash

Error: /opt/lite-xl/data/plugins/linewrapping.lua:273: attempt to compare number with string
stack traceback:
        /home/user/.config/lite-xl/plugins/minimap.lua:329: in function 'plugins.minimap.is_minimap_enabled'
        /home/user/.config/lite-xl/plugins/minimap.lua:614: in function 'core.docview.scroll_to_make_visible'
        /opt/lite-xl/data/core/docview.lua:381: in upvalue 'old_doc_update'
        /opt/lite-xl/data/plugins/linewrapping.lua:345: in upvalue 'update'
        /home/user/.config/lite-xl/plugins/bracketmatch.lua:167: in upvalue 'docview_update'
        /home/user/.config/lite-xl/plugins/indentguide.lua:60: in upvalue 'docview_update'
        /home/user/.config/lite-xl/plugins/smoothcaret.lua:36: in function 'core.docview.update'
        /opt/lite-xl/data/core/node.lua:483: in function 'core.node.update'
        /opt/lite-xl/data/core/node.lua:491: in function 'core.node.update'
        /opt/lite-xl/data/core/node.lua:490: in function 'core.node.update'
        ...     (skipping 4 levels)
        /opt/lite-xl/data/plugins/treeview.lua:493: in upvalue 'root_view_update'
        /opt/lite-xl/data/plugins/contextmenu.lua:26: in upvalue 'update'
        /home/user/.config/lite-xl/plugins/restoretabs.lua:16: in function 'core.rootview.update'
        /opt/lite-xl/data/core/init.lua:1320: in function 'core.step'
        /opt/lite-xl/data/core/init.lua:1388: in upvalue 'core_run'
        /home/user/.config/lite-xl/plugins/profiler/init.lua:78: in upvalue 'core_run'
        /home/user/.config/lite-xl/plugins/settings.lua:1867: in upvalue 'core_run'
        /home/user/.config/lite-xl/plugins/ipc.lua:858: in function 'core.run'
        (...tail calls...)
        [string "local core..."]:9: in function <[string "local core..."]:2>
        [C]: in function 'xpcall'
        [string "local core..."]:2: in main chunk

user_settings.lua

return {
  ["config"] = {
    ["always_show_tabs"] = true,
    ["animate_drag_scroll"] = true,
    ["borderless"] = false,
    ["disabled_plugins"] = {
      ["bigclock"] = true,
      ["smallclock"] = true,
      ["statusclock"] = true,
      ["tabnumbers"] = true,
      ["unboundedscroll"] = true
    },
    ["enabled_plugins"] = {
      ["custom_caret"] = true,
      ["datetimestamps"] = true,
      ["drawwhitespace"] = true,
      ["scale"] = true,
      ["treeview"] = true
    },
    ["plugins"] = {
      ["autoreload"] = {
        ["always_show_nagview"] = true
      },
      ["centerdoc"] = {
        ["enabled"] = false
      },
      ["drawwhitespace"] = {
        ["show_trailing_error"] = true
      },
      ["lineguide"] = {
        ["enabled"] = false
      },
      ["linewrapping"] = {
        ["enable_by_default"] = true,
        ["mode"] = "word"
      },
      ["minimap"] = {
        ["avoid_small_docs"] = true
      },
      ["scale"] = {
        ["default_scale"] = "autodetect"
      },
      ["scalestatus"] = {
        ["enabled"] = true
      }
    },
    ["tab_type"] = "hard",
    ["theme"] = "only_dark"
  }
}

System configuration

OS: Arch Linux running on zen-kernel 6.1.1
CPU: 11th Gen Intel i3-1115G4

[Request] Auto indent after opening bracket

In the autoinsert plugin, it would be convenient to go from void func() {//caret here} to

void func() {
    //caret here
}

by hitting ENTER. Seems easy enough and I would love to do it myself but unfortunately I don't know any Lua nor this project environment.

[2.1] bunch of problems with plugins

so the plugins for 2.1 have quite a few problems, and it was decided in the discord chat to list all the problems here.

so here goes nothing:

  • the spellcheck plugin breaks softwrap;
  • the minimap plugins also breaks softwrap;
  • lfautoinsert and smoothcaret cause an error that i'll paste a screenshot of, since the log is not giving an option to copy the log entry:
    Screenshot_20220325_234422

this is it for now, since it's late at night where i am right now; i would like it if other people test these plugins with the master-2.1 branch of lite-xl and report their findings here.

Spellcheck Plugin - How to configure in Linux?

How do I configure the spellcheck plugin in Linux?
I've tried a few things, the latest being downloading the word list here and creating a symlink to it as /usr/share/dict/words
No error messages from lite-xl on launch but not sure this is working.
How does one get the spellcheck going? And get the misspelled words highlighted? Needs a lint plugin as well?
(I also have hunspell installed but couldn't get this to work with xl-lite.)

[Request] Line Guide: add Opacity option

Right now if the cursor is on the line guide, then it disappears from view. For example, the cursor is after "should" here:

image

It would be nice to be able to set the opacity for the line guide.

plugins\minimap.lua:467: attempt to index a nil value (local 'color')

Got this error, I don't know why?

The Full Error Message from error.txt:

Error: ...l-v2.1.0-windows-x86_64\lite-xl\data/plugins\minimap.lua:467: attempt to index a nil value (local 'color')
stack traceback:
	...l-v2.1.0-windows-x86_64\lite-xl\data/plugins\minimap.lua:467: in function 'plugins.minimap.draw'
	...lite-xl-v2.1.0-windows-x86_64\lite-xl\data/core\view.lua:302: in function 'core.view.draw_scrollbar'
	...e-xl-v2.1.0-windows-x86_64\lite-xl\data/core\docview.lua:547: in upvalue 'old_draw'
	...1.0-windows-x86_64\lite-xl\data/plugins\linewrapping.lua:512: in function 'core.docview.draw'
	...lite-xl-v2.1.0-windows-x86_64\lite-xl\data/core\node.lua:588: in function 'core.node.draw'
	...lite-xl-v2.1.0-windows-x86_64\lite-xl\data/core\node.lua:32: in function 'core.node.propagate'
	...lite-xl-v2.1.0-windows-x86_64\lite-xl\data/core\node.lua:593: in function 'core.node.draw'
	...lite-xl-v2.1.0-windows-x86_64\lite-xl\data/core\node.lua:31: in function 'core.node.propagate'
	...lite-xl-v2.1.0-windows-x86_64\lite-xl\data/core\node.lua:593: in function 'core.node.draw'
	...lite-xl-v2.1.0-windows-x86_64\lite-xl\data/core\node.lua:32: in function 'core.node.propagate'
	...	(skipping 2 levels)
	...-xl-v2.1.0-windows-x86_64\lite-xl\data/core\rootview.lua:454: in upvalue 'root_view_draw'
	...te-xl-v2.1.0-windows-x86_64\lite-xl\data/widget/init.lua:1255: in upvalue 'draw'
	...1.0-windows-x86_64\lite-xl\data/plugins\autocomplete.lua:571: in upvalue 'root_view_draw'
	....1.0-windows-x86_64\lite-xl\data/plugins\contextmenu.lua:31: in upvalue 'root_view_draw'
	...-v2.1.0-windows-x86_64\lite-xl\data/plugins\treeview.lua:498: in function 'core.rootview.draw'
	...lite-xl-v2.1.0-windows-x86_64\lite-xl\data/core/init.lua:1340: in function 'core.step'
	...lite-xl-v2.1.0-windows-x86_64\lite-xl\data/core/init.lua:1384: in upvalue 'core_run'
	...-v2.1.0-windows-x86_64\lite-xl\data/plugins\settings.lua:1795: in function 'core.run'
	(...tail calls...)
	[string "local core..."]:9: in function <[string "local core..."]:2>
	[C]: in function 'xpcall'
	[string "local core..."]:2: in main chunk

Also, how can I change the cursor shape?

add rxi/lite link to readme

There is no obvious linkage to original rxi/lite. Github used to add one because of forking.

I feel it would be fair to include homage to rxi in lite-xl-plugins readme.
What do you think?

Wrap text

Is there any way to wrap text automatically on a long line? Otherwise, I have to put an Enter, which makes the code really inconsistent.

settings disables the drawwhitespace plugin

When using the seetings plugin the internal drawwhitespace plugin seems to no longer have any effect.

Steps to reproduce

  • install the widget and the settings plugin
  • use the init.lua from below
  • the whitespace is not colored

I have reproduced this on the latest master branch of lite-xl and version 2.1

local config = require "core.config"
local style = require "core.style"
config.plugins.drawwhitespace = {
  leading_color = style.background3,
  middle_color = style.modified,
  trailing_color = style.warn,
  show_middle_min = 2,
  substitutions = {
    {
      char = " ",
      sub =  "·",
      show_trailing = false,
    },
    {
      char = "\t",
      sub = "»",
    },
    {
      char = " ",
      sub = "",
      show_leading = false,
      show_middle = false,
      show_trailing = true,
      trailing_color = style.error,
    },
  },
}

[Request] Terminal inside text editor

Hi, I would like to make a feature request. Could you add terminal inside text editor by pressing Ctrl+T? It would be handy to run debug apps on terminal if running multiple tabs with different source location.

add editorconfig

it would be nice if we're able to use editorconfig to manage our code style

How do we run a custom plugin?

I am new to lua and lite-xl. Though I am new to lua, I have previous experience in python. I am planning to learn plug-in development in lite-xl and followed this tutorial. The tutorial does not mention how to run or debug lua plugins while development.

What I have done is, I have put my simple plugin here ~/.local/share/lite-xl/simple.lua and run lua simple.lua but I am getting this error


lua: ./core/regex.lua:3: cannot get undefined variable: regex
stack traceback:
	[C]: in function 'error'
	./core/strict.lua:21: in metamethod '__index'
	./core/regex.lua:3: in main chunk
	[C]: in function 'require'
	./core/init.lua:2: in main chunk
	[C]: in function 'require'
	simple.lua:3: in main chunk
	[C]: in ?

How do we run/debug our custom plugins?

simple.lua (Two lines of code)

-- mod-version:2 -- lite-xl 2.0

local core = require "core"

[RE] Fix keymap binding on non-US keyboard when the required key has to be done using shift

While thinking about this problem I produced the plugin below.

The plugin generates a table that can be used to swap the keypressed character, the one Lite XL sees, with the desired character that appears on the same key. The characters that you wish to use for short-cuts are placed in the find array.
It uses ffi to synthesize keystrokes, only the Windows part is implemented.

Even if the plugin works as intended there will still be problem cases that can't be resolved by it.
I.e. where two characters, both employed as short-cuts, are implemented on the same key.

-- mod-version:2 -- lite-xl 2.0

local core = require "core"
local command = require "core.command"
local common = require "core.common"
local ffi = require "ffi"

--[[
Modify 'keymap.lua':
   
local remapkeys = require "core.remapkeys"
-- local core = require "core" -- For core.log()

local function key_to_stroke(k)
  local stroke = ""
  for _, mk in ipairs(modkeys) do
    if keymap.modkeys[mk] then
      stroke = stroke .. mk .. "+"
    end
  end
  if keymap.modkeys["ctrl"] then -- Look for substitution if 'ctrl' is pressed
    k = remapkeys[k] or k
  end
  -- core.log("Key(s): %s", stroke .. k) -- See what's happening
  return stroke .. k
end

Create 'remapkeys.lua':

local remapkeys={}
return remapkeys
--]]

--[[
keybd_event(bVk, bScan, dwFlags, dwExtraInfo) Synthesizes a keystroke
dwFlags                    Value	   Meaning
KEYEVENTF_EXTENDEDKEY      0x0001      If specified, the scan code was preceded by a prefix byte having the value 0xE0 (224).
KEYEVENTF_KEYUP            0x0002      If specified, the key is being released. If not specified, the key is being depressed.
KEYEVENTF_SCANCODE         0x0008      If specified, bScan identifies the key and bVk is ignored.
--]]

ffi.cdef[[
void keybd_event(uint8_t, uint8_t, uint32_t, uintptr_t)
]]

local event_buffer = {}
local on_event
local key

-- Scan codes for number keys 0 -> 9, and OEM keys: VK_OEM_1; VK_OEM_PLUS; VK_OEM_COMMA; VK_OEM_MINUS; VK_OEM_PERIOD; VK_OEM_2; VK_OEM_3; VK_OEM_4 -> VK_OEM_8 
local scancodes = {0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x1A, 0x1B, 0x2B, 0x27, 0x28, 0x29, 0x33, 0x34, 0x35, 0x56}
-- local find = {"/", "\\", ".", "'", "[", "]", ";"}
local find = {"/", "\\", ".", "!", "%", "¦", "\"", ":", ""} -- For test purposes

local function press(scode)
   if PLATFORM == "Windows" then
      ffi.C.keybd_event(0, scode, 0x08, 0)
   elseif PLATFORM == "Linux" then
      --
   else
      --
   end
end

local function release(scode)
   ffi.C.keybd_event(0, scode, 0x0A, 0)
end

local function press_ext(scode)
   ffi.C.keybd_event(0, scode, 0x09, 0)
end

local function release_ext(scode)
   ffi.C.keybd_event(0, scode, 0x0B, 0)
end

local function press_and_release(scode)
   press(scode)
   release(scode)
end

local function press_keys()
   press_and_release(0x39) -- 0x39 SPACE - Dummy press needed. Lite XL swallows 'textinput' first keypress?
   press(0x36) -- 0x36 SHIFT key ('right shift')
   for i = 1, #scancodes do press_and_release(scancodes[i]) end
   release(0x36)
   press_ext(0x38) -- 0x38 ALT-GR key (EXT key) Note: `altgr` generates 'left ctrl' + 'right alt' i.e. 2 x keypress
   for i = 1, #scancodes do press_and_release(scancodes[i]) end
   release_ext(0x38)
   press_and_release(0x39) -- Signal end with 'space'
end

local function save_keymap()
   local fp = io.open(DATADIR .. "/core/" .. "remapkeys.lua", "w")
   if fp then
      fp:write("local remapkeys=", common.serialize(event_buffer),
         "\nreturn remapkeys")
      fp:close()
   end
end

local function del_key(k)
   for i = 1, #find do
      if find[i] == k then
         table.remove(find, i) -- If #find == 0 all keys have been found
         return true
      end
   end
   return false
end

local function catch_keys()
   on_event = core.on_event
   
   core.on_event = function(type, ...)
      
      if type == "textinput" then
         if ... == " " then -- Finished?
            core.on_event = on_event
            save_keymap()
            event_buffer = {}
            core.restart()
         else
            if del_key(...) then
               event_buffer[key] = ...
            end
         end
      elseif type == "keypressed" then
         key = ...
         del_key(...)
      end
   end
end

command.add(nil, {
   ["synthesize:keystrokes"] = function()
      catch_keys()
      press_keys()
   end,
})

autoinsert plugin backspace bug

lite-xl version : 2.0.5-luajit (from AUR)

For instance i have this text file like this

"A",
"B"

Then, when i use backspace (or ctrl + backspace), for deleting break line, from the B left doublequote

 "B"
^ my cursor is here

expected

"A","B"

result

"A",B"

The left quotes of B is got deleted to.


Another example

some_function("foo bar")
             ^ my cursor is between parentheses & quote

When i delete parentheses

expected

some_function"foo bar")

result

some_functionfoo bar")

The quote got deleted too.

regex preview plugin error

When use regexreplacepreview
and type \n (linebreak) anywhere in regex program crashes, displaying error
lite-xl-tegex-previev2
Content of file error.txt:

stack traceback:
	...paraf\progs\lite-xl/data/plugins\regexreplacepreview.lua:50: in function 'regex_replace_file'
	...paraf\progs\lite-xl/data/plugins\regexreplacepreview.lua:101: in function 'suggest'
	D:\pparaf\progs\lite-xl/data/core\commandview.lua:178: in function 'update_suggestions'
	D:\pparaf\progs\lite-xl/data/core\commandview.lua:200: in function 'update'
	D:\pparaf\progs\lite-xl/data/core\rootview.lua:516: in function 'update'
	D:\pparaf\progs\lite-xl/data/core\rootview.lua:523: in function 'update'
	D:\pparaf\progs\lite-xl/data/core\rootview.lua:524: in function 'update'
	D:\pparaf\progs\lite-xl/data/core\rootview.lua:524: in function 'update'
	D:\pparaf\progs\lite-xl/data/core\rootview.lua:524: in function 'update'
	D:\pparaf\progs\lite-xl/data/core\rootview.lua:1082: in function 'update'
	D:\pparaf\progs\lite-xl/data/plugins\autocomplete.lua:410: in function 'root_view_update'
	D:\pparaf\progs\lite-xl/data/plugins\contextmenu.lua:26: in function 'root_view_update'
	D:\pparaf\progs\lite-xl/data/plugins\treeview.lua:398: in function 'update'
	D:\pparaf\progs\lite-xl/data/core/init.lua:1529: in function 'step'
	D:\pparaf\progs\lite-xl/data/core/init.lua:1596: in function <D:\pparaf\progs\lite-xl/data/core/init.lua:1592>
	(...tail calls...)
	[string "local core..."]:9: in function <[string "local core..."]:2>
	[C]: in function 'xpcall'
	[string "local core..."]:2: in main chunk

The same on Linux (Ubuntu 20.04) and Windows 10

[Feature Request] Select to bracket/brace for `bracketmatch` plugin

I thought I would try to implement the feature myself and came up with the code below.
The additions to the original code are minimal consisting of one extra variable select_adj, a line of code in the update_state() function, and additions to command.add and keymap.add.
The changes seem to work, but I'm no expert on Lite XL's implementation or Lua so I could have got it wrong?

-- mod-version:2 -- lite-xl 2.0
local core = require "core"
local style = require "core.style"
local command = require "core.command"
local keymap = require "core.keymap"
local DocView = require "core.docview"

local bracket_maps = {
  -- [     ]    (     )    {      }
  { [91] = 93, [40] = 41, [123] = 125, step =  1 },
  -- ]     [    )     (    }      {
  { [93] = 91, [41] = 40, [125] = 123, step = -1 },
}


local function get_matching_bracket(doc, line, col, line_limit, open_byte, close_byte, step)
  local end_line = line + line_limit * step
  local depth = 0

  while line ~= end_line do
    local byte = doc.lines[line]:byte(col)
    if byte == open_byte then
      depth = depth + 1
    elseif byte == close_byte then
      depth = depth - 1
      if depth == 0 then return line, col end
    end

    local prev_line, prev_col = line, col
    line, col = doc:position_offset(line, col, step)
    if line == prev_line and col == prev_col then
      break
    end
  end
end


local state = {}
local select_adj = 0

local function update_state(line_limit)
  line_limit = line_limit or math.huge

  -- reset if we don't have a document (eg. DocView isn't focused)
  local doc = core.active_view.doc
  if not doc then
    state = {}
    return
  end

  -- early exit if nothing has changed since the last call
  local line, col = doc:get_selection()
  local change_id = doc:get_change_id()
  if  state.doc == doc and state.line == line and state.col == col
  and state.change_id == change_id and state.limit == line_limit then
    return
  end

  -- find matching bracket if we're on a bracket
  local line2, col2
  for _, map in ipairs(bracket_maps) do
    for i = 0, -1, -1 do
      local line, col = doc:position_offset(line, col, i)
      local open = doc.lines[line]:byte(col)
      local close = map[open]
      if close then
        -- i == 0 if the cursor is on the left side of a bracket (or -1 when on right)
        select_adj = i + 1 -- if i == 0 then select_adj = 1 else select_adj = 0 end
        line2, col2 = get_matching_bracket(doc, line, col, line_limit, open, close, map.step)
        goto found
      end
    end
  end
  ::found::

  -- update
  state = {
    change_id = change_id,
    doc = doc,
    line = line,
    col = col,
    line2 = line2,
    col2 = col2,
    limit = line_limit,
  }
end


local update = DocView.update

function DocView:update(...)
  update(self, ...)
  update_state(100)
end


local draw_line_text = DocView.draw_line_text

function DocView:draw_line_text(idx, x, y)
  draw_line_text(self, idx, x, y)

  if self.doc == state.doc and idx == state.line2 then
    local color = style.bracketmatch_color or style.syntax["function"]
    local x1 = x + self:get_col_x_offset(idx, state.col2)
    local x2 = x + self:get_col_x_offset(idx, state.col2 + 1)
    local h = math.ceil(1 * SCALE)
    renderer.draw_rect(x1, y + self:get_line_height() - h, x2 - x1, h, color)
  end
end


command.add("core.docview", {
  ["bracket-match:move-to-matching"] = function()
    update_state()
    if state.line2 then
      core.active_view.doc:set_selection(state.line2, state.col2)
    end
  end,
  ["bracket-match:select-to-matching"] = function()
    update_state()
    if state.line2 then
        core.active_view.doc:set_selection(state.line, state.col, state.line2, state.col2 + select_adj)
    end
  end,
})

keymap.add {
  ["ctrl+m"] = "bracket-match:move-to-matching",
  ["ctrl+shift+m"] = "bracket-match:select-to-matching",
}

[Request] Dummy Text Plugin

I don't know if dummy text feature already exist or not. But I try to type lorem and press tab it is doesn't do anything. This feature are like on VSCode.
It would be nice to have a dummy text plugin like lorem ipsum generator for add some of content on our code if this is not available yet.
Thank you.

Autocomplete bug?

I started a new document, but the autocomplete keeps popping up as I type with these symbols I've never seen before? Is it a bug?

image

Shouldn't autocomplete only parse the current document for symbols? On a related note, I wish we could specify using regex what is parsed for autocomplete.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.