GithubHelp home page GithubHelp logo

foldsigns.nvim's Issues

add foldsigns in gitsigns readme

I did not know about foldsigns plugins. IMO link to it could be placed in 'Comparison with vim-gitgutter' table in the
Fold text showing whether folded lines have been changed - Note: possible with foldsigns
line.

No git signs with _extmark_signs = true in gitsigns

After setting _extmark_signs = true in gitsigns config, this plugin shows nothing on the signcolumn with folding.

Thank you.

UPDATE:
The diagnostics signs are shown as normal. It seems only the git signs are not displayed.

BUG :: Segfault when interacting with folds

As mentioned in commit ddf9aa003ef19558e6462d56107cc41468eb3576, Neovim segfaults when interacting with folds (fold less / fold more). See crash dump below. Commit 6abc76a3eed8a76f1eb94170d349258b6ca2139f works OK and does not trigger the segfault.

Crash dump
-------------------------------------
Translated Report (Full Report Below)
-------------------------------------

Process:               nvim [64090]
Path:                  /usr/local/Cellar/neovim/0.9.0/bin/nvim
Identifier:            nvim
Version:               ???
Code Type:             X86-64 (Native)
Parent Process:        nvim [64089]
Responsible:           iTerm2 [539]
User ID:               10000

Date/Time:             2023-04-19 00:51:21.9545 +0200
OS Version:            macOS 12.4 (21F79)
Report Version:        12
Bridge OS Version:     6.5 (19P5071)
Anonymous UUID:        269247DA-4148-64E7-A70E-888928701E33

Sleep/Wake UUID:       257A92EF-DF2D-4F99-A190-5CDD1B4551D9

Time Awake Since Boot: 620000 seconds
Time Since Wake:       4330 seconds

System Integrity Protection: enabled

Crashed Thread:        0  Dispatch queue: com.apple.main-thread

Exception Type:        EXC_BAD_ACCESS (SIGSEGV)
Exception Codes:       KERN_INVALID_ADDRESS at 0x0000000000000000
Exception Codes:       0x0000000000000001, 0x0000000000000000
Exception Note:        EXC_CORPSE_NOTIFY

Termination Reason:    Namespace SIGNAL, Code 11 Segmentation fault: 11
Terminating Process:   exc handler [64090]

VM Region Info: 0 is not in any region.  Bytes before following region: 4559147008
    REGION TYPE                    START - END         [ VSIZE] PRT/MAX SHRMOD  REGION DETAIL
    UNUSED SPACE AT START
--->  
    __TEXT                      10fbf1000-10fed5000    [ 2960K] r-x/r-x SM=COW  ....9.0/bin/nvim

Thread 0 Crashed::  Dispatch queue: com.apple.main-thread
0   nvim                          	       0x10fc6da14 draw_virt_text_item + 144
1   nvim                          	       0x10fc6d8ef draw_virt_text + 409
2   nvim                          	       0x10fc6cb7b win_line + 21867
3   nvim                          	       0x10fc707a0 win_update + 5030
4   nvim                          	       0x10fc6f0fc update_screen + 2788
5   nvim                          	       0x10fd6df1b normal_check + 669
6   nvim                          	       0x10fe06de8 state_enter + 58
7   nvim                          	       0x10fbf888c main + 10864
8   dyld                          	       0x1194be51e start + 462

Thread 1:
0   libsystem_kernel.dylib        	    0x7ff80acfe3ea __psynch_cvwait + 10
1   libsystem_pthread.dylib       	    0x7ff80ad38a6f _pthread_cond_wait + 1249
2   libuv.1.dylib                 	       0x1101bf135 uv_cond_wait + 9
3   libuv.1.dylib                 	       0x1101b02fd worker + 121
4   libsystem_pthread.dylib       	    0x7ff80ad384e1 _pthread_start + 125
5   libsystem_pthread.dylib       	    0x7ff80ad33f6b thread_start + 15

Thread 2:
0   libsystem_kernel.dylib        	    0x7ff80acfe3ea __psynch_cvwait + 10
1   libsystem_pthread.dylib       	    0x7ff80ad38a6f _pthread_cond_wait + 1249
2   libuv.1.dylib                 	       0x1101bf135 uv_cond_wait + 9
3   libuv.1.dylib                 	       0x1101b02fd worker + 121
4   libsystem_pthread.dylib       	    0x7ff80ad384e1 _pthread_start + 125
5   libsystem_pthread.dylib       	    0x7ff80ad33f6b thread_start + 15

Thread 3:
0   libsystem_kernel.dylib        	    0x7ff80acfe3ea __psynch_cvwait + 10
1   libsystem_pthread.dylib       	    0x7ff80ad38a6f _pthread_cond_wait + 1249
2   libuv.1.dylib                 	       0x1101bf135 uv_cond_wait + 9
3   libuv.1.dylib                 	       0x1101b02fd worker + 121
4   libsystem_pthread.dylib       	    0x7ff80ad384e1 _pthread_start + 125
5   libsystem_pthread.dylib       	    0x7ff80ad33f6b thread_start + 15

Thread 4:
0   libsystem_kernel.dylib        	    0x7ff80acfe3ea __psynch_cvwait + 10
1   libsystem_pthread.dylib       	    0x7ff80ad38a6f _pthread_cond_wait + 1249
2   libuv.1.dylib                 	       0x1101bf135 uv_cond_wait + 9
3   libuv.1.dylib                 	       0x1101b02fd worker + 121
4   libsystem_pthread.dylib       	    0x7ff80ad384e1 _pthread_start + 125
5   libsystem_pthread.dylib       	    0x7ff80ad33f6b thread_start + 15


Thread 0 crashed with X86 Thread State (64-bit):
rax: 0x0000000000000000  rbx: 0x0000000000000008  rcx: 0x0000000000000011  rdx: 0x0000e99cc3e29810
rdi: 0x00007fc3b0023800  rsi: 0x0000000000000011  rbp: 0x00007ff7b0309e80  rsp: 0x00007ff7b0309d70
 r8: 0x0000000000000008   r9: 0x0000000000000000  r10: 0x000000000000f541  r11: 0x0000000000000003
r12: 0x0000e99cc3e29810  r13: 0x0000000000000000  r14: 0x000000010fead54c  r15: 0x0000000000000000
rip: 0x000000010fc6da14  rfl: 0x0000000000010246  cr2: 0x0000000000000000

Logical CPU:     2
Error Code:      0x00000004 (no mapping for user data read)
Trap Number:     14

Thread 0 instruction stream:
00 48 89 45 d0 49 83 c0-08 4c 89 85 f8 fe ff ff  .H.E.I...L......
4c 8d 35 81 fb 23 00 31-c0 48 89 85 20 ff ff ff  L.5..#.1.H.. ...
45 31 ed 45 31 ff 44 89-8d 38 ff ff ff 89 b5 40  E1.E1.D..8.....@
ff ff ff 3b 75 10 0f 8d-b0 03 00 00 41 80 3e 00  ...;u.......A.>.
0f 85 81 00 00 00 4d 39-e7 0f 83 9d 03 00 00 4c  ......M9.......L
89 fb 48 c1 e3 04 48 03-9d f8 fe ff ff 45 31 ed  ..H...H......E1.
[4c]8b 73 f8 8b 03 be 00-00 00 00 85 c0 7e 1c c6  L.s..........~..	<==
85 50 ff ff ff 00 bf ff-ff ff ff 89 c6 48 8d 95  .P...........H..
50 ff ff ff e8 be df 09-00 89 c6 44 89 ef e8 c2  P..........D....
95 09 00 41 89 c5 49 ff-c7 4d 85 f6 75 09 48 83  ...A..I..M..u.H.
c3 10 4d 39 e7 72 b9 4d-85 f6 44 8b 8d 38 ff ff  ..M9.r.M..D..8..
ff 8b b5 40 ff ff ff 0f-84 2f 03 00 00 41 80 3e  ...@...../...A.>

Binary Images:
     0x10fbf1000 -        0x10fed4fff nvim (*) <b6182f07-95e2-3da6-a9f6-aadb26c8e72d> /usr/local/Cellar/neovim/0.9.0/bin/nvim
     0x1194b9000 -        0x119524fff dyld (*) <b70ce1ec-b902-3852-8268-05de00bfa8d5> /usr/lib/dyld
  0x7ff80acfa000 -     0x7ff80ad31fff libsystem_kernel.dylib (*) <61711d11-e776-3bc3-b9a2-6f9f37cb8499> /usr/lib/system/libsystem_kernel.dylib
  0x7ff80ad32000 -     0x7ff80ad3dfff libsystem_pthread.dylib (*) <bc574849-1aae-31e7-b350-916dda999d97> /usr/lib/system/libsystem_pthread.dylib
     0x1101ad000 -        0x1101c8fff libuv.1.dylib (*) <a0d8ba9a-935b-3de4-90f7-e1bc5b6cbe47> /usr/local/Cellar/libuv/1.44.2/lib/libuv.1.dylib

External Modification Summary:
Calls made by other processes targeting this process:
  task_for_pid: 0
  thread_create: 0
  thread_set_state: 0
Calls made by this process:
  task_for_pid: 0
  thread_create: 0
  thread_set_state: 0
Calls made by all processes on this machine:
  task_for_pid: 0
  thread_create: 0
  thread_set_state: 0

VM Region Summary:
ReadOnly portion of Libraries: Total=397.8M resident=0K(0%) swapped_out_or_unallocated=397.8M(100%)
Writable regions: Total=736.0M written=0K(0%) resident=0K(0%) swapped_out=0K(0%) unallocated=736.0M(100%)

                              VIRTUAL   REGION 
REGION TYPE                        SIZE    COUNT (non-coalesced) 
===========                     =======  ======= 
Activity Tracing                   256K        1 
Kernel Alloc Once                    8K        1 
MALLOC                           276.4M       66 
MALLOC guard page                   16K        3 
MALLOC_NANO (reserved)           384.0M        1         reserved VM address space (unallocated)
ObjC additional data                15K        1 
STACK GUARD                       56.0M        5 
Stack                             40.0M        5 
VM_ALLOCATE                       35.5M      288 
__DATA                            2315K      127 
__DATA_CONST                      5430K       93 
__DATA_DIRTY                       209K       50 
__LINKEDIT                       314.1M       16 
__TEXT                            83.8M      140 
__UNICODE                          592K        1 
dyld private memory               1024K        1 
shared memory                       12K        2 
===========                     =======  ======= 
TOTAL                              1.2G      801 
TOTAL, minus reserved VM space   815.4M      801 



-----------
Full Report
-----------

{"app_name":"nvim","timestamp":"2023-04-19 00:51:22.00 +0200","app_version":"","slice_uuid":"b6182f07-95e2-3da6-a9f6-aadb26c8e72d","build_version":"","platform":1,"share_with_app_devs":0,"is_first_party":1,"bug_type":"309","os_version":"macOS 12.4 (21F79)","incident_id":"21DCE590-B90C-4924-908A-E70958AA1EAB","name":"nvim"}
{
"uptime" : 620000,
"procLaunch" : "2023-04-19 00:50:58.3993 +0200",
"procRole" : "Unspecified",
"version" : 2,
"userID" : 10000,
"deployVersion" : 210,
"modelCode" : "MacBookPro16,1",
"procStartAbsTime" : 622937185449962,
"coalitionID" : 597,
"osVersion" : {
  "train" : "macOS 12.4",
  "build" : "21F79",
  "releaseType" : "User"
},
"captureTime" : "2023-04-19 00:51:21.9545 +0200",
"incident" : "21DCE590-B90C-4924-908A-E70958AA1EAB",
"bug_type" : "309",
"pid" : 64090,
"procExitAbsTime" : 622960739414055,
"cpuType" : "X86-64",
"procName" : "nvim",
"procPath" : "\/usr\/local\/Cellar\/neovim\/0.9.0\/bin\/nvim",
"parentProc" : "nvim",
"parentPid" : 64089,
"coalitionName" : "com.googlecode.iterm2",
"crashReporterKey" : "269247DA-4148-64E7-A70E-888928701E33",
"responsiblePid" : 539,
"responsibleProc" : "iTerm2",
"wakeTime" : 4330,
"bridgeVersion" : {"build":"19P5071","train":"6.5"},
"sleepWakeUUID" : "257A92EF-DF2D-4F99-A190-5CDD1B4551D9",
"sip" : "enabled",
"vmRegionInfo" : "0 is not in any region.  Bytes before following region: 4559147008\n      REGION TYPE                    START - END         [ VSIZE] PRT\/MAX SHRMOD  REGION DETAIL\n      UNUSED SPACE AT START\n--->  \n      __TEXT                      10fbf1000-10fed5000    [ 2960K] r-x\/r-x SM=COW  ....9.0\/bin\/nvim",
"isCorpse" : 1,
"exception" : {"codes":"0x0000000000000001, 0x0000000000000000","rawCodes":[1,0],"type":"EXC_BAD_ACCESS","signal":"SIGSEGV","subtype":"KERN_INVALID_ADDRESS at 0x0000000000000000"},
"termination" : {"flags":0,"code":11,"namespace":"SIGNAL","indicator":"Segmentation fault: 11","byProc":"exc handler","byPid":64090},
"vmregioninfo" : "0 is not in any region.  Bytes before following region: 4559147008\n      REGION TYPE                    START - END         [ VSIZE] PRT\/MAX SHRMOD  REGION DETAIL\n      UNUSED SPACE AT START\n--->  \n      __TEXT                      10fbf1000-10fed5000    [ 2960K] r-x\/r-x SM=COW  ....9.0\/bin\/nvim",
"extMods" : {"caller":{"thread_create":0,"thread_set_state":0,"task_for_pid":0},"system":{"thread_create":0,"thread_set_state":0,"task_for_pid":0},"targeted":{"thread_create":0,"thread_set_state":0,"task_for_pid":0},"warnings":0},
"faultingThread" : 0,
"threads" : [{"triggered":true,"id":14258871,"instructionState":{"instructionStream":{"bytes":[0,72,137,69,208,73,131,192,8,76,137,133,248,254,255,255,76,141,53,129,251,35,0,49,192,72,137,133,32,255,255,255,69,49,237,69,49,255,68,137,141,56,255,255,255,137,181,64,255,255,255,59,117,16,15,141,176,3,0,0,65,128,62,0,15,133,129,0,0,0,77,57,231,15,131,157,3,0,0,76,137,251,72,193,227,4,72,3,157,248,254,255,255,69,49,237,76,139,115,248,139,3,190,0,0,0,0,133,192,126,28,198,133,80,255,255,255,0,191,255,255,255,255,137,198,72,141,149,80,255,255,255,232,190,223,9,0,137,198,68,137,239,232,194,149,9,0,65,137,197,73,255,199,77,133,246,117,9,72,131,195,16,77,57,231,114,185,77,133,246,68,139,141,56,255,255,255,139,181,64,255,255,255,15,132,47,3,0,0,65,128,62],"offset":96}},"threadState":{"r13":{"value":0},"rax":{"value":0},"rflags":{"value":66118},"cpu":{"value":2},"r14":{"value":4562015564,"symbolLocation":909,"symbol":".str.2"},"rsi":{"value":17},"r8":{"value":8},"cr2":{"value":0},"rdx":{"value":256859510577168},"r10":{"value":62785},"r9":{"value":0},"r15":{"value":0},"rbx":{"value":8},"trap":{"value":14,"description":"(no mapping for user data read)"},"err":{"value":4},"r11":{"value":3},"rip":{"value":4559657492,"matchesCrashFrame":1},"rbp":{"value":140701789625984},"rsp":{"value":140701789625712},"r12":{"value":256859510577168},"rcx":{"value":17},"flavor":"x86_THREAD_STATE","rdi":{"value":140478448285696}},"queue":"com.apple.main-thread","frames":[{"imageOffset":510484,"symbol":"draw_virt_text_item","symbolLocation":144,"imageIndex":0},{"imageOffset":510191,"symbol":"draw_virt_text","symbolLocation":409,"imageIndex":0},{"imageOffset":506747,"symbol":"win_line","symbolLocation":21867,"imageIndex":0},{"imageOffset":522144,"symbol":"win_update","symbolLocation":5030,"imageIndex":0},{"imageOffset":516348,"symbol":"update_screen","symbolLocation":2788,"imageIndex":0},{"imageOffset":1560347,"symbol":"normal_check","symbolLocation":669,"imageIndex":0},{"imageOffset":2186728,"symbol":"state_enter","symbolLocation":58,"imageIndex":0},{"imageOffset":30860,"symbol":"main","symbolLocation":10864,"imageIndex":0},{"imageOffset":21790,"symbol":"start","symbolLocation":462,"imageIndex":1}]},{"id":14259282,"frames":[{"imageOffset":17386,"symbol":"__psynch_cvwait","symbolLocation":10,"imageIndex":2},{"imageOffset":27247,"symbol":"_pthread_cond_wait","symbolLocation":1249,"imageIndex":3},{"imageOffset":74037,"symbol":"uv_cond_wait","symbolLocation":9,"imageIndex":4},{"imageOffset":13053,"symbol":"worker","symbolLocation":121,"imageIndex":4},{"imageOffset":25825,"symbol":"_pthread_start","symbolLocation":125,"imageIndex":3},{"imageOffset":8043,"symbol":"thread_start","symbolLocation":15,"imageIndex":3}]},{"id":14259283,"frames":[{"imageOffset":17386,"symbol":"__psynch_cvwait","symbolLocation":10,"imageIndex":2},{"imageOffset":27247,"symbol":"_pthread_cond_wait","symbolLocation":1249,"imageIndex":3},{"imageOffset":74037,"symbol":"uv_cond_wait","symbolLocation":9,"imageIndex":4},{"imageOffset":13053,"symbol":"worker","symbolLocation":121,"imageIndex":4},{"imageOffset":25825,"symbol":"_pthread_start","symbolLocation":125,"imageIndex":3},{"imageOffset":8043,"symbol":"thread_start","symbolLocation":15,"imageIndex":3}]},{"id":14259284,"frames":[{"imageOffset":17386,"symbol":"__psynch_cvwait","symbolLocation":10,"imageIndex":2},{"imageOffset":27247,"symbol":"_pthread_cond_wait","symbolLocation":1249,"imageIndex":3},{"imageOffset":74037,"symbol":"uv_cond_wait","symbolLocation":9,"imageIndex":4},{"imageOffset":13053,"symbol":"worker","symbolLocation":121,"imageIndex":4},{"imageOffset":25825,"symbol":"_pthread_start","symbolLocation":125,"imageIndex":3},{"imageOffset":8043,"symbol":"thread_start","symbolLocation":15,"imageIndex":3}]},{"id":14259285,"frames":[{"imageOffset":17386,"symbol":"__psynch_cvwait","symbolLocation":10,"imageIndex":2},{"imageOffset":27247,"symbol":"_pthread_cond_wait","symbolLocation":1249,"imageIndex":3},{"imageOffset":74037,"symbol":"uv_cond_wait","symbolLocation":9,"imageIndex":4},{"imageOffset":13053,"symbol":"worker","symbolLocation":121,"imageIndex":4},{"imageOffset":25825,"symbol":"_pthread_start","symbolLocation":125,"imageIndex":3},{"imageOffset":8043,"symbol":"thread_start","symbolLocation":15,"imageIndex":3}]}],
"usedImages" : [
{
  "source" : "P",
  "arch" : "x86_64",
  "base" : 4559147008,
  "size" : 3031040,
  "uuid" : "b6182f07-95e2-3da6-a9f6-aadb26c8e72d",
  "path" : "\/usr\/local\/Cellar\/neovim\/0.9.0\/bin\/nvim",
  "name" : "nvim"
},
{
  "source" : "P",
  "arch" : "x86_64",
  "base" : 4719349760,
  "size" : 442368,
  "uuid" : "b70ce1ec-b902-3852-8268-05de00bfa8d5",
  "path" : "\/usr\/lib\/dyld",
  "name" : "dyld"
},
{
  "source" : "P",
  "arch" : "x86_64",
  "base" : 140703309996032,
  "size" : 229376,
  "uuid" : "61711d11-e776-3bc3-b9a2-6f9f37cb8499",
  "path" : "\/usr\/lib\/system\/libsystem_kernel.dylib",
  "name" : "libsystem_kernel.dylib"
},
{
  "source" : "P",
  "arch" : "x86_64",
  "base" : 140703310225408,
  "size" : 49152,
  "uuid" : "bc574849-1aae-31e7-b350-916dda999d97",
  "path" : "\/usr\/lib\/system\/libsystem_pthread.dylib",
  "name" : "libsystem_pthread.dylib"
},
{
  "source" : "P",
  "arch" : "x86_64",
  "base" : 4565159936,
  "size" : 114688,
  "uuid" : "a0d8ba9a-935b-3de4-90f7-e1bc5b6cbe47",
  "path" : "\/usr\/local\/Cellar\/libuv\/1.44.2\/lib\/libuv.1.dylib",
  "name" : "libuv.1.dylib"
}
],
"sharedCache" : {
"base" : 140703306969088,
"size" : 15220686848,
"uuid" : "398acfb4-57f6-31e0-bc82-e9959e5c92ce"
},
"vmSummary" : "ReadOnly portion of Libraries: Total=397.8M resident=0K(0%) swapped_out_or_unallocated=397.8M(100%)\nWritable regions: Total=736.0M written=0K(0%) resident=0K(0%) swapped_out=0K(0%) unallocated=736.0M(100%)\n\n                                VIRTUAL   REGION \nREGION TYPE                        SIZE    COUNT (non-coalesced) \n===========                     =======  ======= \nActivity Tracing                   256K        1 \nKernel Alloc Once                    8K        1 \nMALLOC                           276.4M       66 \nMALLOC guard page                   16K        3 \nMALLOC_NANO (reserved)           384.0M        1         reserved VM address space (unallocated)\nObjC additional data                15K        1 \nSTACK GUARD                       56.0M        5 \nStack                             40.0M        5 \nVM_ALLOCATE                       35.5M      288 \n__DATA                            2315K      127 \n__DATA_CONST                      5430K       93 \n__DATA_DIRTY                       209K       50 \n__LINKEDIT                       314.1M       16 \n__TEXT                            83.8M      140 \n__UNICODE                          592K        1 \ndyld private memory               1024K        1 \nshared memory                       12K        2 \n===========                     =======  ======= \nTOTAL                              1.2G      801 \nTOTAL, minus reserved VM space   815.4M      801 \n",
"legacyInfo" : {
"threadTriggered" : {
  "queue" : "com.apple.main-thread"
}
},
"trialInfo" : {
"rollouts" : [
  {
    "rolloutId" : "61301e3a61217b3110231469",
    "factorPackIds" : {
      "SIRI_FIND_MY_CONFIGURATION_FILES" : "6348493aa52bb16adc4e4d06"
    },
    "deploymentId" : 240000021
  },
  {
    "rolloutId" : "60f8ddccefea4203d95cbeef",
    "factorPackIds" : {
      "NETWORK_SERVICE_PROXY_CONFIG_UPDATE" : "6401414cc679dd6bc5828183"
    },
    "deploymentId" : 240000025
  }
],
"experiments" : [
  {
    "treatmentId" : "c28e4ee6-1b08-4f90-8e05-2809e78310a3",
    "experimentId" : "6317d2003d24842ff850182a",
    "deploymentId" : 400000013
  }
]
}
}

Redundant signs

Screen Shot 2022-04-28 at 13 02 13

See this screenshot. If the buffer has folds, there will be a redundant sign in nvm-tree window. This extra sign will disappear if I execute one of the following:

  1. zM to unfold all folds, or
  2. move focus to nvim-tree window

I think this issue is caused by this plugin. I tried to uninstall this plugin, and no redundant signs any more.

Thank you.

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.