petertriho / nvim-scrollbar Goto Github PK
View Code? Open in Web Editor NEWExtensible Neovim Scrollbar
License: MIT License
Extensible Neovim Scrollbar
License: MIT License
question in title
Describe the bug
I'm not sure how to get coc-diagnostic's errors and warnings to show up in the scrollbar.
To Reproduce
Steps to reproduce the behavior:
I have the following setup config
require("scrollbar").setup({
show = true,
set_highlights = true,
handle = {
text = " ",
color = "white",
cterm = nil,
highlight = "CursorColumn",
hide_if_all_visible = true, -- Hides handle if all lines are visible
},
marks = {
Search = {
text = { "-", "=" },
priority = 0,
color = "orange",
cterm = nil,
highlight = "Search",
},
Error = {
text = { "-", "=" },
priority = 1,
color = "red",
cterm = "red",
--highlight = "DiagnosticVirtualTextError",
highlight = "CocErrorSign",
},
Warn = {
text = { "-", "=" },
priority = 2,
color = "yellow",
cterm = "yellow",
highlight = "DiagnosticVirtualTextWarn",
},
Info = {
text = { "-", "=" },
priority = 3,
color = "green",
cterm = "green",
--highlight = "DiagnosticVirtualTextInfo",
highlight = "CocInfoVirtualText",
},
Hint = {
text = { "-", "=" },
priority = 4,
color = "blue",
cterm = "blue",
highlight = "DiagnosticVirtualTextHint",
},
Misc = {
text = { "-", "=" },
priority = 5,
color = "red",
cterm = "red",
highlight = "Normal",
},
},
excluded_buftypes = {
"terminal",
},
excluded_filetypes = {
"prompt",
"TelescopePrompt",
},
autocmd = {
render = {
"BufWinEnter",
"TabEnter",
"TermEnter",
"WinEnter",
"CmdwinLeave",
"TextChanged",
"VimResized",
"WinScrolled",
},
},
handlers = {
diagnostic = true,
search = true, -- Requires hlslens to be loaded, will run require("scrollbar.handlers.search").setup() for you
},
})
Search marks show up in the scrollbar but not Coc diagnostics errors.
Expected behavior
Expect to see the error mark in the scrollbar.
Screenshots
Please see above.
Version Info (please complete the following information):
nvim --version
:version
NVIM v0.6.1
Build type: Release
LuaJIT 2.1.0-beta3
Compiled by brew@Monterey
Features: +acl +iconv +tui
See ":help feature-compile"
system vimrc file: "$VIM/sysinit.vim"
fall-back for $VIM: "/usr/local/Cellar/neovim/0.6.1/share/nvim"
Additional context
N/A
Is your feature request related to a problem? Please describe.
As title
Describe the solution you'd like
An option in the setup to setup the width of the handle
Describe alternatives you've considered
No.
Additional context
No.
Describe the bug
I'm unable to see the scrollbar handle.
To Reproduce
Steps to reproduce the behavior:
Expected behavior
I expect to see a scrollbar.
I noticed that this plugin highlights the scrollbar using the ScrollbarHandle
highlight, which is defined here: https://github.com/petertriho/nvim-scrollbar/blob/main/lua/scrollbar/utils.lua#L29
However that does not set any terminal highlighting. It also clears my highlight link
.
When I replace that line with a hardcoded string.format("highlight link %s StatusLine", M.get_highlight_name("", true))
, I see the scrollbar. Though I'm not sure that's the best fix.
Version Info (please complete the following information):
:version
NVIM v0.6.0
Build type: Release
LuaJIT 2.1.0-beta3
Compiled by runner@fv-az32-74
Features: +acl +iconv +tui
See ":help feature-compile"
system vimrc file: "$VIM/sysinit.vim"
fall-back for $VIM: "/share/nvim"
Run :checkhealth for more info
I'm happy to suggest a PR if that's helpful.
Is your feature request related to a problem? Please describe.
Provide commands like #10 but only toggle/show/hide handler, marks, or handlers
Describe the solution you'd like
Something along the lines of <CMD>ScrollbarToggle diagnostic<CR>
<CMD>ScrollbarToggle search<CR>
, etc
I think it would be a good addition to also show marks a user has set (via m[a-zA-Z]
). This could be opt in to avoid clutter, but should not be an issue since marks are set manually and there usually aren't that many.
Describe the bug
As title.
To Reproduce
Just open a file with lines > 10,000.
Expected behavior
smooth scroll
Screenshots
Version Info (please complete the following information):
NVIM v0.8.0-dev+67-g0d41c4dee
Build type: Release
LuaJIT 2.1.0-beta3
Additional context
I'd like the scroll bar to only be shown when I would need to scroll to see something that isn't on screen. This could probably be done with some clever configuration once #10 is implemented, but to me, this seems like a sensible option to bake in.
Describe the bug
https://github.com/petertriho/nvim-scrollbar#search
Second example of search setup not enabling search marks on scrollbar. I added this instead of require("scrollbar.handlers.search").setup()
:
require("hlslens").setup({
build_position_cb = function(plist, _, _, _)
require("scrollbar.handlers.search").handler.show(plist.start_pos)
end,
})
vim.cmd([[
augroup scrollbar_search_hide
autocmd!
autocmd CmdlineLeave : lua require('scrollbar.handlers.search').handler.hide()
augroup END
]])
Version Info (please complete the following information):
NVIM v0.8.0-1210-gd367ed9b2
Build type: RelWithDebInfo
LuaJIT 2.1.0-beta3
Compilation: /usr/bin/gcc-10 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 -DNVIM_TS_HAS_SET_MATCH_LIMIT -DNVIM_TS_HAS_SET_ALLOCATOR -O2 -g -Og -g -Wall -Wextra -pedantic -Wno-unused-parameter -Wstrict-prototypes -std=gnu99 -Wshadow -Wconversion -Wdouble-promotion -Wmissing-noreturn -Wmissing-format-attribute -Wmissing-prototypes -Wimplicit-fallthrough -Wvla -fstack-protector-strong -fno-common -fdiagnostics-color=always -DINCLUDE_GENERATED_DECLARATIONS -D_GNU_SOURCE -DNVIM_MSGPACK_HAS_FLOAT32 -DNVIM_UNIBI_HAS_VAR_FROM -DMIN_LOG_LEVEL=3 -I/home/runner/work/neovim/neovim/build/cmake.config -I/home/runner/work/neovim/neovim/src -I/home/runner/work/neovim/neovim/.deps/usr/include -I/usr/include -I/home/runner/work/neovim/neovim/build/src/nvim/auto -I/home/runner/work/neovim/neovim/build/include
Compiled by runner@fv-az457-787
Features: +acl +iconv +tui
See ":help feature-compile"
system vimrc file: "$VIM/sysinit.vim"
fall-back for $VIM: "
/home/runner/work/neovim/neovim/build/nvim.AppDir/usr/share/nvim"
Is your feature request related to a problem? Please describe.
On ultra wide monitor - having scroll bar on the very right is bit hard to see.
Describe the solution you'd like
Offset scroll bar by eg. X parameter could be nice. It would move scrollbar closer to center. Or just move it by -1 to left (without introducing new parameter)
Describe alternatives you've considered
Tried custom font symbol that is offset ed to left, but its not enough -eg '▌'
Example of other scrollbar plug where plugin author moved it by default by 1 to left (used with symbol above, to make it more thin/modern looking) :
I find it helpful to have the cursor displayed as a mark on the scrollbar (as VS Code does it), so I have an idea of exactly where it is in relation to the more interesting marks
Describe the bug
I played a bit with custom Handlers, and I noticed that when I register more than one custom handler, all but the last one seem to be disabled.
To Reproduce
create two handlers with require("scrollbar.handlers").register("foo", function(bufnr) ... end
Expected behavior
All custom handlers should work
Version Info (please complete the following information):
macOS 13.0.1 (M1)
neovim 0.8.0 (homebrew)
require("scrollbar").setup({
handlers = {
diagnostic = true,
search = false,
},
})
NVIM v0.7.0-dev+839-g09d270bce
The scrollbar should remain static in windows that are not focused.
Hi @petertriho thanks for this awesome plugin.
I been using https://github.com/dstein64/nvim-scrollview which has mouse support.
It would be great if this plugin also supports it, its good when you want to scroll aggressively in a long file.
More so with the awesome LSP indicators you have implemented.
Not sure if this needs to be implemented on your side, his side, or in my config, but I think this should work out of the box.
It would be great to add commands to enable/disable the scrollbar on demand. This could be named show/hide or enable/disable or even just toggle.
This might also solve #7 as people can then just create autocommands to enable/disable the scrollbar.
It seems that currently highlights are implemented just on setup and not with the ColorScheme autocmd. This means that they are likely to get cleared by most colorscheme.
For example, this is your highlights cleared (compared to non cleared highlights from other plugins above and below):
As an implementation example, this is how it is done in nvim-notify
vim.cmd([[
augroup NvimNotifyRefreshHighlights
autocmd!
autocmd ColorScheme * lua require('notify.config.highlights').setup()
augroup END
]])
When highlights are cleared, even if the scrollbar renders, it might not show up in the terminal.
require("scrollbar").setup({
handlers = {
diagnostic = true,
search = false,
},
})
NVIM v0.7.0-dev+839-g09d270bce
Scrollbar state should remain exactly the same when switching windows.
Lots of error when have diff view in fugitive as the following:
pretty-fold.nvim/lua/pretty-fold/init.lua:68: in function <...ack/packer/opt/pretty-fold.nvim/lua/pretty-fold/init.lua:61>
Describe the bug
When a line is too long and is split into multiple lines, the scrollbar behaves incorrectly.
To Reproduce
Expected behavior
Screenshots
Version Info (please complete the following information):
nvim --version
NVIM v0.7.0-dev+1132-g15004473b5
Build type: RelWithDebInfo
LuaJIT 2.1.0-beta3
Compilation: /usr/bin/cc -march=x86-64 -mtune=generic -O2 -pipe -fno-plt -DNVIM_TS_HAS_SET_MATCH_LIMIT -DNVIM_TS_HAS_SET_ALLOCATOR -O2 -g -Og -g -Wall -Wextra -pedantic -Wno-unused-parameter -Wstrict-prototypes -std=gnu99 -Wshadow -Wconversion -Wmissing-prototypes -Wimplicit-fallthrough -Wvla -fstack-protector-strong -fno-common -fdiagnostics-color=auto -DINCLUDE_GENERATED_DECLARATIONS -D_GNU_SOURCE -DNVIM_MSGPACK_HAS_FLOAT32 -DNVIM_UNIBI_HAS_VAR_FROM -DMIN_LOG_LEVEL=3 -I/build/neovim-git/src/build/config -I/build/neovim-git/src/neovim-git/src -I/usr/include -I/build/neovim-git/src/build/src/nvim/auto -I/build/neovim-git/src/build/include
Compiled by builduser
Features: +acl +iconv +tui
Is your feature request related to a problem? Please describe.
Since there are some issues now with people requesting different marks it might be a good idea to just provide a general api to register a new handler so people can extend the plugin in an easy fashion. Builtin handlers could then be just implemented on top of this api.
Describe the solution you'd like
Some restructuring of the code with a general handler interface to make adding handlers easy and a function or config option to register new handlers.
Describe alternatives you've considered
An alternative would be to add every requested handler into the project, which might exclude niche handlers that are out of scope or bloat the plugin.
Describe the bug
When having overscroll (scrolled beyond the last line of the file), the scrollbar is cut off at the top. This is relevant for people remapping j
to jzz
and similar stuff.
To Reproduce
Steps to reproduce the behavior:
zz
Now the top half of the scrollbar is missing.
Expected behavior
Scrollbar works correctly with overscroll
Screenshots
when somewhere in the editor
when at the last line, and then pressed zz
Version Info (please complete the following information):
macOS 13.0.1 (M1)
neovim 0.8.0 (homebrew)
Describe the bug
I have both nvim-scrollbar and nvim-hlslens installed. When I don't add any special configuration for nvim-hlslens everything works as described in README. However, when I add require('hlslens').setup { override_lens = function() ... end
search marks disappear.
To Reproduce
use {
'kevinhwang91/nvim-hlslens',
config = function()
require('hlslens').setup {
override_lens = function(render, plist, nearest, idx, r_idx)
local sfw = vim.v.searchforward == 1
local indicator, text, chunks
local abs_r_idx = math.abs(r_idx)
if abs_r_idx > 1 then
indicator = sfw ~= (r_idx > 1) and '▲' or '▼'
elseif abs_r_idx == 1 then
indicator = sfw ~= (r_idx == 1) and '▲' or '▼'
else
indicator = ''
end
local lnum, col = unpack(plist[idx])
if nearest then
local cnt = #plist
if indicator ~= '' then
text = ('[%s %d/%d]'):format(indicator, idx, cnt)
else
text = ('[%d/%d]'):format(idx, cnt)
end
chunks = {{' ', 'Ignore'}, {text, 'HlSearchLensNear'}}
else
text = ('[%s %d]'):format(indicator, idx)
chunks = {{' ', 'Ignore'}, {text, 'HlSearchLens'}}
end
render.set_virt(0, lnum - 1, col - 1, chunks, nearest)
end
}
end
}
use {
'petertriho/nvim-scrollbar',
config = function()
local colors = require("tokyonight.colors").setup { }
require("scrollbar").setup {
handle = {
color = colors.bg_highlight,
},
marks = {
Search = { color = colors.orange },
Error = { color = colors.error },
Warn = { color = colors.warning },
Info = { color = colors.info },
Hint = { color = colors.hint },
Misc = { color = colors.purple },
},
}
end
}
Expected behavior
I expect hlslens' override_lens
to work (virtual text is overriden) and get visible search marks.
Screenshots
If applicable, add screenshots to help explain your problem.
Version Info (please complete the following information):
NVIM v0.7.0-dev
Additional context
I use Packer.
Probably worth investigating if creating a floating window that is right aligned to the each window to contain the scrollbar is a viable solution.
The marks can instead just be text placed inside the buffer/window and scrollbar handle be extmarks, meaning rendering marks and the scrollbar handle can be separated
Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
The scrollbar being white tends to stick out from most themes, and customising for several different themes doesn't seem very friendly.
Describe the solution you'd like
A clear and concise description of what you want to happen.
The default highlight group for ScrollBarHandle links to CursorLine (same as the example used in the README for TokyoNight). Perhaps even Diagnostic mark colours should link to the default Diagnostic* highlight groups as well! This makes it more consistent to individual ColorSchemes :)
Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.
Alternative solutions include manually finding and setting the colours by theme colour API's (as in the README), adding a custom highlight group override to every single theme configuration, or using an autocmd if this is not supported.
Additional context
Add any other context or screenshots about the feature request here.
It would be nice for community engagement if this repo had issue templates. These are easily set up with two clicks in the settings>options page, at least the defaults.
Describe the bug
use nvim-cmp autocompletion, the first placeholder automatically changed to zj.
To Reproduce
Steps to reproduce the behavior:
Expected behavior
the first placeholder should remain same.
Version Info (please complete the following information):
NVIM v0.7.0
Build type: Release
LuaJIT 2.1.0-beta3
Compiled by brew@Monterey
Features: +acl +iconv +tui
See ":help feature-compile"
system vimrc file: "$VIM/sysinit.vim"
fall-back for $VIM: "/usr/local/Cellar/neovim/0.7.0/share/nvim"
To Reproduce
Steps to reproduce the behavior:
/word
:let @/ = ""
that cancel the searchingExpected behavior
The Search Marks are cleaned.
Version Info (please complete the following information):
I don't know how hard this would be to implement, but a simple form of interactivity would be to make the bar clickable and scroll to the position that was clicked on. This would allow for fast and relevant navigation, especially if something like marks are added.
Describe the bug
To Reproduce
Steps to reproduce the behavior:
Expected behavior
No error message.
Version Info (please complete the following information):
NVIM v0.7.0-dev+926-g6006e15e7
Build type: RelWithDebInfo
LuaJIT 2.1.0-beta3
Config
require("scrollbar").setup({})
Describe the bug
require('scrollbar.handlers.search').handler.hide() -- doesn't work
To Reproduce
install both scrollbar and hlslens with packer and execute these two functions in order
function hlslens()
local build_position_cb = nil
-- forward search results to scrollbar if installed
if is_mod_exists('scrollbar') then build_position_cb = function(plist, _, _, _) require('scrollbar.handlers.search').handler.show(plist.start_pos) end
require 'hlslens'.setup {
nearest_only = true,
nearest_float_when = 'never',
build_position_cb = build_position_cb
}
end
function scrollbar()
require 'scrollbar'.setup {
set_highlights = false, -- highlights are set elsewhere
handle = {
hide_if_all_visible = true,
},
handlers = {
diagnostic = true,
-- setting search = true here overrides hlslens setup configs
},
}
-- enable search marks if hlslens is installed
if is_mod_exists('hlslens') then require'scrollbar.config'.get().handlers.search = true end
end
so far this all works great, now my issue is that I can't clear the search marks with
require('scrollbar.handlers.search').handler.hide()
mapping it to a key or executing it in the command line makes no difference
Suggested solution
I've looked up that function
hide = function()
if not vim.v.event.abort then
local cmdl = vim.trim(vim.fn.getcmdline())
if #cmdl > 2 then
for _, cl in ipairs(vim.split(cmdl, "|")) do
if ("nohlsearch"):match(vim.trim(cl)) then
local bufnr = vim.api.nvim_get_current_buf()
local scrollbar_marks = utils.get_scrollbar_marks(bufnr)
scrollbar_marks.search = nil
utils.set_scrollbar_marks(bufnr, scrollbar_marks)
render()
break
end
end
end
end
end
and removed
if #cmdl > 2 then
and now it works fine, this single check has prevented me from using the whole hide()
function.
Version Info
NVIM v0.6.1
Quite often when I'm changing some code and in the middle of the change when the code is broken, it throws a random error.
It's not every time, just at some weird times.
Here it happens when I put 11.
Pretty much just enter the file, go to the line, go to insert at the beginning of the line, type 11, go to normal mode => throws an error.
Here is the code to try and repro:
-- Name: Scrollbar
-- Description: Scrollbar with diagnostics
-- Link: https://github.com/petertriho/nvim-scrollbar
local scrollbar = require("scrollbar")
local colors = require("utils.colors")
------------------------------------------------------------------------------------------
----------------------------------- CONFIG -----------------------------------------------
------------------------------------------------------------------------------------------
scrollbar.setup({
excluded_filetypes = {
"NvimTree",
"alpha",
"docker-term",
"git-term",
},
handle = {
color = colors.background_light,
},
marks = {
Error = { text = { "▀" }, color = colors.red },
Warn = { text = { "▀" }, color = colors.orange },
Info = { text = { "▀" }, color = colors.blue },
Hint = { text = { "▀" }, color = colors.yellow },
Misc = { text = { "▀" }, color = colors.green },
},
})
Is your feature request related to a problem? Please describe.
Currently diagnostics only seem to be fetched from LSP. However, I also use ALE and all those diagnostics don't appear in the scrollbar.
Describe the solution you'd like
Include entries from the location and quckfix list into the sidebar.
I did a quick research on how to accomplish that.
You can call getloclist()
and getqflist()
, which will return a list of dicts. Each dict contains a "type" key that can be "I", "W", or "E", and an "lnum" key for the line number. For getqflist
you probably also have to compare the "bufnr" key to the current buffer. getloclist
accepts an argument to specifiy the current window.
Then proceed as usual to add a marker.
Describe the bug
When I edit an .h file and scroll down, nvim is extremely laggy. I then tested all the plugins and found out that the scrollbar plugin is the problem. I have the following code in my "init.lua" file of nvim:
local colors = require("tokyonight.colors").setup()
require("scrollbar").setup({
handle = {
color = colors.bg_highlight,
},
marks = {
Search = { colour = colors.orange },
Error = { colour = colors.error },
Warn = { colour = colors.warning },
Info = { colour = colors.info },
Hint = { colour = colors.hint },
Misc = { colour = colors.purple },
}
})
As soon as I comment out this part of the code and restart nvim. Everything is lag-free.
To Reproduce
Steps to reproduce the behavior:
Expected behavior
If the problem is not with me, then it should lag with the program code when you scroll down and if you comment out the program code from above, then nvim should run normally again when editing the .h file.
Version:
Nvim v0.7.0
Is your feature request related to a problem? Please describe.
Its hard to spot places that were changed without having to scroll through whole file
Describe the solution you'd like
Would be great if nvim-scrollbar would allow have git-signs integration - where it would show modifier places on scroll view
Describe alternatives you've considered
I believe there is nothing like this
Additional context
I would imagine this would look something like this:
As title.
Describe the bug
Hello, when there is an error in the code, the scroll bar will prompt. When I fix the code, it is still there. How can I make it disappear?
To Reproduce
Steps to reproduce the behavior:
Expected behavior
A clear and concise description of what you expected to happen.
Screenshots
If applicable, add screenshots to help explain your problem.
Version Info (please complete the following information):
nvim --version
Additional context
Add any other context about the problem here.
What theme are the screenshots used?
I use show_in_active_only
currently, but I would like to be able to set a highlight group for the scrollbar in inactive windows instead of hiding it. There is already a highlight option to set the highlight group, maybe this can be expanded to be:
{
handle = {
highlight = "CursorLine",
inactive_highlight = "CursorLine",
}
}
Describe the bug
I wanted to get thicker mark line for search result :
But nvim-scrollbar seems to be ignoring first entry in search.text table :
Notice the "𝝣" works ok, also "━", works ok for errors. It is just single Search
mark that gets ignored.
To Reproduce
My marks setup
marks = {
Search = { text = { "━", "𝝣" }, priority = 0, color = "orange" },
Error = { text = { "━", "𝝣" }, priority = 1, color = "red" },
Warn = { text = { "━", "𝝣" }, priority = 2, color = "yellow" },
Info = { text = { "-","=" }, priority = 3, color = "blue" },
Hint = { text = { "-","=" }, priority = 4, color = "green" },
Misc = { text = { "━", "𝝣" }, priority = 5, color = "purple" },
},
Expected behavior
Signle search mark should change to new symbol
Version Info (please complete the following information):
NVIM v0.7.0-dev+806-gf86039de1
Build type: Debug
LuaJIT 2.1.0-beta3
Say I want to ignore the scrollbar in float windows, having something like:
require("scrollbar").setup({
exclude_func = function(winid, bufnr)
if not vim.api.nvim_win_is_valid(winid) then
return true
end
local is_floating = vim.api.nvim_win_get_config(winid).relative ~= ""
local filetype = vim.api.nvim_buf_get_option(bufnr, "filetype")
local exclude_filetype = {
TelescopePrompt = true,
[""] = true,
}
local buftype = vim.api.nvim_buf_get_option(bufnr, "buftype")
local exclude_buftype = {
terminal = true,
prompt = true,
}
return is_floating or exclude_buftype[buftype] or exclude_filetype[filetype]
end,
})
which is likely a bit more complicated and would require adding options for each kind of filtering the user wants to do. Having a function like this (can even provide some default options) seems a bit easier.
This would be in addition to exclude_filetypes
or just replace it as that option would likely become redundant.
I will make a PR for this in a bit.
I noticed when scrolling, that the bar first increases in size in the scrolling direction before moving and decreasing to its previous size. I suspect this is not intended behavior and looks somewhat wanky, with the bar wobbeling along while scrolling. This may be due to scrolloff, but I didn't have time yet to narrow down the issue.
I think it would be quite possible to implement showing search results right in this plugin without requiring installing another plugin (that also overwrites n
mappings). The only requirements I could imagine to do this would be plenary.nvim
for async stuff (a plugin most people should have installed anyway, since a lot of plugins require it including telescope) and an external search program, preferably ripgrep
but grep should do.
An example implementation could be how todo-comments.nvim
does it: https://github.com/folke/todo-comments.nvim/blob/main/lua/todo-comments/search.lua
One could then use the /
register to get the last searched pattern. Since this works asynchronously and potentially uses rg
it should be reasonably fast without touching the native search functionality.
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.