Giter VIP home page Giter VIP logo

nvimpager's Introduction

Nvimpager

Using neovim as a pager to view man pages, git diffs, whatnot with neovim's syntax highlighting and mouse support.

About

The nvimpager script calls neovim in a fashion that turns it into something like a pager. The idea is not new, this is actually rewrite of vimpager but with less (but stricter) dependencies and specifically for neovim.

Some typical use cases:

# view a file in nvimpager
nvimpager file
# pipe text to nvimpager
echo some text | nvimpager
# use it as your default $PAGER
export PAGER=nvimpager
man bash
git diff

The script also has a "cat mode" which will not start up the neovim interface but instead print a highlighted version of the file to the terminal. Like cat with neovim syntax highlighting! If the input has less lines than the terminal cat mode is activated automatically so nvimpager behaves similar to less -F. Pager mode and cat mode can be enforced with the options -p and -c respectively.

Nvimpager comes with a small set of command line options but you can also use all of neovim's command line options. Use nvimpager -h to see the help text. The configuration is separated from the users config for neovim. The main config file is ~/.config/nvimpager/init.vim (or .lua). See the manpage for further explanation.

Installation

Packaging status

Nvimpager is already packaged for some distributions. If not for yours, you can install it manually, read on.

Dependencies

Installation instructions

Use the makefile to configure and install the script. It supports the usual PREFIX (defaults to /usr/local) and DESTDIR (defaults to empty) variables:

make PREFIX=$HOME/.local install

The target install-no-man can be used to install nvimpager without the man page.

Additionally the variable BUSTED can be used to specify the executable for the test suite:

make test BUSTED="/path/to/busted --some-args"

Development

Nvimpager is developed on GitHub where you are very much invited to post bug reports, feature or pull requests! The test can be run with make test. They are also run on GitHub: Build Status

Limitations

  • if reading from stdin, nvimpager (like nvim) waits for EOF until it starts up
  • large files are slowing down neovim on startup (less does a better, i.e. faster and more memory efficient job at paging large files)

Ideas

  • see how neovim#5035, neovim#7438 and neovim#23093 are resolved and maybe move more code (logic) from bash to lua (bash's [[ -t ... ]] can be replaced by has('ttyin'), has('ttyout'))
  • proper lazy pipe reading while paging (like less) to improve startup time and also memory usage for large input on pipes (maybe stdioopen() can be used?)

License

The project is licensed under a BSD-2-clause license. See the LICENSE file.

nvimpager's People

Contributors

3v1n0 avatar ardnew avatar env25 avatar ericonr avatar icp1994 avatar lucc avatar name-snrl avatar openjck avatar qouoq 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

nvimpager's Issues

How to gracefully handle a huge file input using pager mode?

env: PAGER=nvimpager
Some command like journactl opens a huge input file making nvim freeze until it completely loads.
I make a trick alias journalctl='PAGER=less journalctl' to avoid the problem by using less instead of nvimpager.
Is there a graceful way to handle this problem?

following fields table missing in man page

The manpage isn't right for me. The "following fields" table is missing.

I'm using scdoc version 1.11.1 on the develop branch (49315df) and there are no errors when building.

When I view the page, I get this:

❯ man nvimpager        
/usr/bin/tbl:<standard input>:106: unrecognised format `T'
/usr/bin/tbl:<standard input>:106: giving up on this table

The macOS man uses the builtin version of /usr/bin/tbl which is GNU tbl (groff) version 1.19.2.

Can't generate right RGB color with 256 colors using cat mode.

Such as darkblue morning go wrong with 256 colors but work fine in true color.
neovim version: v0.4.3
terminal: gnome-terminal | alacritty

cat test_sh.sh

#!/bin/sh

echo 'hello'

nvimpager -c test_sh.sh | nvim

�[0;34;4-1m#!/bin/sh

�[0;1;38;5;130;4-1mecho�[0;31;4-1m �[0;1;38;5;130;4-1m'�[0;31;4-1mhello�[0;1;38;5;130;4-1m'�[0m

�=^[

Bug: Cannot remap j and k keys.

I am trying to remap the j, k keys so that instead of moving one line down or up, I can go one page down or up. However, it looks like the j, k keys cannot be remapped to anything. My other remaps work normally.

To reproduce the error:

  • type man man to access the nvimpager
  • type :map j <c-d> and then :map k <c-u> to remap j and k
  • press j and k and notice there is no difference in normal mode
  • press V to go into visual mode
  • press j and k and notice the remaps work on visual mode

The remap commands for j and k do not work in normal mode, only in visual mode.

Other things I tried that were unsuccessful:

  • using :nmap, :noremap, and :nnoremap instead of :map
  • putting the remap commands in .config/nvimpager/init.vim with nothing else in the file
  • going into the file /usr/share/nvimpager/runtime/lua/nvimpager.lua and commenting out the lines map('n', 'k', '<C-Y>') and map('n', 'j', '<C-E>')

I found one solution, but I do not like it because it changes the source code:

  • go into the file /usr/share/nvimpager/runtime/lua/nvimpager.lua
  • replace the line map('n', 'k', '<C-Y>') with map('n', 'k', '<c-u>')
  • replace the line map('n', 'j', '<C-E>') with map('n', 'j', '<c->')

Edit the file being viewed

I don't see an option for editing the file being viewed when using nvimpager. Am I missing it?

If it's not available, could it be?

Feature: support dman

Is it possible to automatically use dman command on linux to search for man page online?

We need it, for example, when there is no manpage avaible locally.

Output is garbled when using with ri (ruby info)

When I run.

ri Array

I get the following

= A�Ar�rr�ra�ay�y � <�< � O�Ob�bj�je�ec�ct�t

------------------------------------------------------------------------
= I�In�nc�cl�lu�ud�de�es�s:�:
Enumerable (from ruby site)
...

However I do not get this when running ri String which produces output in cat mode.

I tried using vimpager and I don't have this problem (though my python plugins don't work with it).

How to cat afterwards?

What i want is the following:

  1. run nvimpager in pager mode
  2. when i exit use cat mode so the highlighted version is printed to my terminal and i can scroll back through it along my other stdout history

How can i achieve this (the manpage states -p overrides -c)? (would be awesome if it even worked with auto mode)

Thanks in advance

tabstop and list settings are ignored on cat mode

Currently when printing tabs on cat mode, nvimpager ignores tabstop and list settings and just prints the tabs as is. This is different from pager mode, where those settings are used as expected. I was wondering if it's possible to add support for them for cat mode, so the output of cat mode and pager mode would be the same.

Being able to use an already running nvim process via RPC

The application of this would be to make syntax highlighting in https://github.com/junegunn/fzf.vim preview window look exactly the same (or, at least, as close as possible) as in nvim.

By default nvim exposes an RPC socket which is available to subprocesses via $NVIM_LISTEN_ADDRESS. This API could be used for running Lua scripts as well, so nvimpager would require very little modification for that.

What would be a good approach to implement that? This would be hard to do in bash because of RPC message format. There are client libraries for multiple languages, but the Lua library is not well documented, so I am leaning towards Python.

No output when launched with no input

If I just launch the command with no arguments, the UI is stopping and con Ctrl+C I'm getting:

^Ccat: /tmp/tmp.v4Vmkmf9h4: No such file or directory

Broken man-pages on MacOS

Description

After running man bash, I get the following broken output:

Screen Shot 2021-10-12 at 22 32 14

Environment

Version nvimpager: 0.10.2
Version nvim: 0.5.1
OS: macOS 11.6

Git colors aren't properly parsed

Git colors work when using the default syntax highlighter

However when using it as a pager (i.e. using GIT_PAGER="nvimpager -p" git graph) the result isn't correct.

this pager:
less

less:
nvimpager

Escape sequences not translated

Not sure, if it's really nvimpager at fault here but I tested it with PAGER set to nvimpager and less:
nvimpager_vs_less

Both show numpy's mean docstring in ipython, left with nvimpager, right with less.

The same happens to man pages, if MANPAGER is set to nvimpager :

nvimpager_vs_less_man

This is using suckless' simple terminal (st), but I tested it also with xterm, same result.
It is perfecly possible that there is some issue with my setup, but since I cannot find a remedy online, I reported this here in the hope that someone has a clue what's going on.

Treesitter support

Can nvimpager show treesitter syntax highlighting?

From my tests below, nvimpager.lua isn't parsing treesitter syntax highlighting.

Here is what I am using to test:

mkdir -p ~/.local/share/nvimpager/site/pack/packer/opt
ln -s ~/.local/share/nvim/site/pack/packer/opt/nvim-treesitter ~/.local/share/nvimpager/site/pack/packer/opt/nvim-treesitter

~/.config/nvimpager/init.vim

packadd nvim-treesitter

lua << EOF
require'nvim-treesitter.configs'.setup {
ensure_installed = {
  "lua"
  },
highlight = {
enable = true
},
}
EOF

using nvimpager on a lua file to see if treesitter works:

nvimpager ~/lua.lua # shows nvim syntax highlighting
nvimpager -c ~/lua.lua # shows nvim syntax highlighting
nvimpager -p ~/lua.lua # shows treesitter highlighted text

Python help pages

HI,
I discovered today that the output is a bit mangled in python when using the help() function.
(Not really sure what format they use)
I attached a screenshot with the where nvimpager is used in the left terminal and les in the right one.
2022-02-24-11-57-32

Feel free to ask if more information is needed, I'm on Arch and this is with python 3.10

No output when used as Ranger preview

Thanks for publishing this!

I'd like to have ranger's file preview syntax highlighting consistent with my text editor.

I tried adding the below line to ranger's scope.sh but the preview pane is just blank. I'm not sure where to keep looking. Any assistance is appreciated!

nvimpager -c -- ${FILE_PATH} ; exit 5

Indicating a file as a parameter should ignore stdin

I was trying to use nvimpager as a previewer for nnn and ranger, but turns out that if there's no stdin (because nvimpager is ran within nnn/ranger), nothing is shown. I'm guessing the command is equivalent to this:

nvimpager -c example.ini < /dev/null

outputs:

image

I think it'd be more appropiate to first check the arguments, and falling back to stdin if none were passed.


I might be completely wrong, but it seems to be caused by highlight, which is called in cat_mode after nvim.nvim_command('next'). The first highlight outside the for shouldn't matter, but once it iterates the arguments something should be output. In this line, it will end when the buffer is empty, so it doesn't actually get to read the parameter file here.

It might actually be neovim's fault, here's the same problem with neovim:

image

It might be related to this issue.

Security concern

curl http://www.drchip.org/astronaut/vim/vbafiles/AnsiEsc.vba.gz | \
	  gunzip > $@

No SSL even...

Manpage produced by scdoc is blank

I saw that when running make, a nvimpager.1 was created. Without knowing much about scdoc, I'd assume there isn't documentation yet or scdoc is failing to find it in the source repository.

If this is the case of being no docs, we (including myself as I remember the manpage language quite well) can choose to write the manpage by hand removing scdoc as a dependency, or we could try to write your scdoc thing.

If this is the case of scdoc not finding the code for the document to be created, well, now you know to fix it I guess haha.

Build fails on downloading AnsiEsc.vba

FYI the build fails when fetching AnsiEsc. Here's the build output

sed 's#^RUNTIME=.*$#RUNTIME='"'/usr/share/nvimpager/runtime'"'#;s#version=.*$#version=v0.6-1-g205b59f#' < nvimpager > nvimpager.configured
chmod +x nvimpager.configured
curl https://www.drchip.org/astronaut/vim/vbafiles/AnsiEsc.vba.gz | \
  gunzip > AnsiEsc.vba
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 20599  100 20599    0     0  25029      0 --:--:-- --:--:-- --:--:-- 24998

gzip: stdin: unexpected end of file
make: *** [makefile:36: AnsiEsc.vba] Error 1

I am on archlinux and was attempting to install via the AUR.

I checked drchip's website, and it appears the package was updated on May 1st.

AnsiEsc Instructions

I have AnsiEsc as a plugin in Neovim, but I have to manually activate it (:AnsiEsc) whenever I use nvimpager.

How can I automatically enable AnsiEsc whenever I open something with nvimpager?

Settings in lua file overriding init.vim

In particular, I would like to have a statusbar in nvimpager as set in my init.vim, but I see that nvimpager does set laststatus=0 in the Lua file which overrides my settings. Maybe only set default settings if no init.vim file is found?

Optional mappings

I request the following default mappings:

local opts = { noremap=true }

vim.api.nvim_set_keymap('n', 'j', 'Lj', opts)
vim.api.nvim_set_keymap('n', 'k', 'Hk', opts)

I would also understand to make them optional with nvimpager -l (for --less-like-motion).

Support for colors (eg with git)?

Hi, when something such as:

export PAGER=less; git log --graph

we get something with nice colors (ie with my setup I get yellow commit hashes and red lines for the main branch line).

Doing so with nvimpager won't output any color. I do get colored man pages however so I don't know. Is that maybe a terminal colorscheme configuration?

Not coloring normal text

Not sure if this is an issue on my part or intended behaviour, but nvimpager doesn't seem to set a color in cat mode for normal text.

init.vim:

syntax on
highlight Normal ctermfg=red

This still displays normal text with the colors set from Xresources. For the record, changing "Normal" to e.g. "Comment" correctly shows comments in red and everything also works as expected in pager mode.

Option to turn off mappings

Hi. I really like this project, but I do have a minor complaint. I don't quite like the less-like mappings that's hardcoded in the .lua script. It would be nice if I could turn it off using an option. Thanks.

How to use config from NeoVim?

I would like to use the third-party colorscheme in NeoVim, however I copy .config/nvim/init.vim to .config/nvimpager/init.vim, I find that the nvimpager can not install and use third-party colorscheme.

Nvim plugins are loaded

Thanks for you work!

As I understand, when I open nvimpager, plugins in nvim site directory shouldn't be loaded.

However, when I download and use it today. My plugins are still loaded.

echo &rtp shows all my plugins for nvim are loaded.

FUSE permission error when setting $PAGER/$MANPAGER

My ultimate goal would be to use nvim as the pager in bash, ranger, git, etc.

Currently, nvimpager works as a terminal command (e.g. nvimpager nvimpager.md)

However, when I set nvimpager as the default pager in bash (export PAGER=nvimpager) and try to run it, I get the following error message:

$ man nvimpager
fuse: mount failed: Permission denied

Cannot mount AppImage, please check your FUSE setup.
You might still be able to extract the contents of this AppImage 
if you run it with the --appimage-extract option. 
See https://github.com/AppImage/AppImageKit/wiki/FUSE 
for more information
open dir error: No such file or directory
man: command exited with status 127: sed -e '/^[[:space:]]*$/{ N; /^[[:space:]]*\n[[:space:]]*$/D; }' | LESS=-ix8RmPm Manual page nvimpager(1) ?ltline %lt?L/%L.:byte %bB?s/%s..?e (END):?pB %pB\%.. (press h for help or q to quit)$PM Manual page nvimpager(1) ?ltline %lt?L/%L.:byte %bB?s/%s..?e (END):?pB %pB\%.. (press h for help or q to quit)$ MAN_PN=nvimpager(1) nvimpager

I found the following related issues

Based on them this might be an nvim issue, but for me, nvim works just fine.

Interestingly, as it mentions a permission issue, I tried to run the command with sudo but it seems that it would not work even with less.

$  export MANPAGER=nvimpager
$  man nvimpager # throws the above error
$  sudo man nvimpager
No manual entry for nvimpager

$ export MANPAGER=less
$ man nvimpager # this works
$ sudo man nvimpager # ?
No manual entry for nvimpager

Environment

  • ubuntu: 18.04
  • nvimpager: v0.6-24-gd8eddde
  • nvim: v0.4.3

Any ideas of how I could try to solve this?

Cannot close last window when hitting q

I've update nvimpager to verison v0.10.3 and I can no longer close man pages directly by pressing q.

  • man printf and then pressing q displays this message: E444: Cannot close last window.
  • nvimpager foo and then pressing q works fine.

Errors when installing on macOS

I use mac OS Sierra 10.12.6, and tried to install nvimpager.

First, I clone git clone https://github.com/lucc/nvimpager.git and make PREFIX=$HOME/.local install as described in README.

Then, first error occurred:

$ make PREFIX=$HOME/.local install
...
sed -i '/hl=/d' autoload/AnsiEsc.vim
sed: 1: "autoload/AnsiEsc.vim": command a expects \ followed by text
make: *** [autoload/AnsiEsc.vim] Error 1

So, I changed sed -i '/hl=/d' autoload/AnsiEsc.vim in makefile to sed -i -e '/hl=/d' autoload/AnsiEsc.vim, and retried installation and got the next errors:

$ nvim makefile
$ make PREFIX=$HOME/.local install
...
echo "---" > metadata.yaml
echo "footer: Version 0.4-4-ge83e103" >> metadata.yaml
echo "date: $(date --date @$(git log -1 --format=format:%at) +%F)" >> metadata.yaml
date: illegal option -- -
usage: date [-jnRu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ...
            [-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]
echo "..." >> metadata.yaml
pandoc --standalone --to man --output nvimpager.1 nvimpager.md metadata.yaml
install -D nvimpager.configured /Users/nakatam/.local/bin/nvimpager
install: illegal option -- D
usage: install [-bCcpSsv] [-B suffix] [-f flags] [-g group] [-m mode]
               [-o owner] file1 file2
       install [-bCcpSsv] [-B suffix] [-f flags] [-g group] [-m mode]
               [-o owner] file1 ... fileN directory
       install -d [-v] [-g group] [-m mode] [-o owner] directory ...
make: *** [install] Error 64

It is because the allowable options of install on mac are different. I modified the makefile from

install: nvimpager.configured $(AUTOLOAD_FILES) $(PLUGIN_FILES) nvimpager.1
	install -D nvimpager.configured $(DESTDIR)$(PREFIX)/bin/nvimpager
	install -D --target-directory=$(DESTDIR)$(RUNTIME)/autoload $(AUTOLOAD_FILES)
	install -D --target-directory=$(DESTDIR)$(RUNTIME)/plugin $(PLUGIN_FILES)
	install -D --target-directory=$(DESTDIR)$(PREFIX)/share/man/man1 nvimpager.1

to

install: nvimpager.configured $(AUTOLOAD_FILES) $(PLUGIN_FILES) nvimpager.1
	mkdir -p $(DESTDIR)$(PREFIX)/bin $(DESTDIR)$(RUNTIME)/autoload $(DESTDIR)$(RUNTIME)/plugin $(DESTDIR)$(PREFIX)/share/man/man1
	install nvimpager.configured $(DESTDIR)$(PREFIX)/bin/nvimpager
	install $(AUTOLOAD_FILES) $(DESTDIR)$(RUNTIME)/autoload
	install $(PLUGIN_FILES) $(DESTDIR)$(RUNTIME)/plugin
	install nvimpager.1 $(DESTDIR)$(PREFIX)/share/man/man1

And the installation finished.

Furthermore, date command seems also to take different parameter, so

echo "date: $$(date --date @$$(git log -1 --format=format:%at) +%F)" >> $@

must be

echo "date: $$(date -r $$(git log -1 --format=format:%at) +%F)" >> $@

Feature request: manually set the syntax when reading from stdin

It would be nice to have a option to set a file extension on the temporary file used to read from stdin, so we can handle syntax on these contexts too.

Here's an use case where I'd try to just print a function definition from type with syntax enabled:

alias ?=wat
function wat() {
	shopt -s extdebug
	declare -F $1
	shopt -u extdebug

	typedef=$(type $1)

	# Prints the debug output without highlighting
	echo "$typedef" | head -n1
	
	typedef=$(echo "$typedef" | tail -n+2)
	if [[ ! -z $typedef ]]; then
		if tty -s; then
			# Prints the function definition with syntax highlighting
			# '-s sh' produces /tmp/tmp.aP6kTGvrLT.sh so nvim reads it as a shell script
			echo "$typedef" | nvimpager -c -s sh
		else
			echo "$typedef"
		fi
	fi
}

Does that make sense?

manpage installation fails on macos

because macos uses BSD sed, sed behaves a little differently. so nvimpager installs and works just fine, but the manpage is not actually generated. if i try to manually create it with make nvimpager.1 i can see the error:

sed '1cnvimpager(1) "nvimpager v0.10.2-1-gd2b89c5"' nvimpager.md | scdoc > nvimpager.1
sed: 1: "1cnvimpager(1) "nvimpag ...": command c expects \ followed by text

i fixed the issue by installing gnu-sed (brew install gnu-sed) and replacing the sed on that line with gsed. then it worked fine, and i can man nvimpager properly.

nvimpager use nowrapscan by default

I noticed that it will compains E384: search hit TOP without match for: \<ZSH\> when I hit the start. I execute set wrapscan? in nvimpager, it outputs nowrapscan while NeoVim's help says it will set wrapscan on by default acutally.

Of course, I use the config from the NeoVim for nvimpager, the former does not set nowrapscan.

Problems with vim plug

Should not nvimpager use its own config?

Error detected while processing /home/XXX/.config/nvim/init.vim:
line    5:
E117: Unknown function: plug#begin
line    7:

Pager is very slow on git log -p

I'm using nvimpager as my default pager and while being slightly slow for some things (understandable though)

This is probably not just an issue with this script though as I'm noticing the same on pure vim and neovim.

It's just enough to launch git log -p and neovim starts hanging and after some time it will open the file

However this script instead of streaming the actual file contents, it creates a local file that can be quite big, and it's something I assume that a pager should not do, by instead just streaming the content

This is the temp file it's trying to open

ls -lht /tmp/tmp.HvMx4niUZz 
-rw------- 1 marco marco 541M ott 24 23:47 /tmp/tmp.HvMx4niUZz

Colors are broken in cat mode

image

Pager mode works fine:
image

I use custom st build as the terminal under Artix Linux.
nvimpager is installed as nvimpager-git package (version 0.10.3.r3.g2c2e137-1) from AUR, neovim is of version 0.6.0

Getting errors when using as git pager

I'm getting the following error whenever nvimpager is used for git. This only happens for git.

Not sure where to start inverstigating the cause of this, so any tips would be helpful.

Error detected while processing VimEnter Autocommands for "*":
E5108: Error executing lua /usr/share/nvimpager/runtime/lua/nvimpager.lua:338: Vim(setlocal):E519: Option not supported: hl=8:Ignore,~
:EndOfBuffer,z:TermCursor,Z:TermCursorNC,@:NonText,d:Directory,e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,N:CursorLi
neNr,r:Question,s:StatusLine,S:StatusLineNC,c:VertSplit,t:Title,v:Visual,V:VisualNOS,w:WarningMsg,W:WildMenu,f:Folded,F:FoldColumn,A:D
iffAdd,C:DiffChange,D:DiffDelete,T:DiffText,>:SignColumn,-:Conceal,B:SpellBad,P:SpellCap,R:SpellRare,L:SpellLocal,+:Pmenu,=:PmenuSel,x
:PmenuSbar,X:PmenuThumb,*:TabLine,#:TabLineSel,_:TabLineFill,!:CursorColumn,.:CursorLine,o:ColorColumn,q:QuickFixLine,0:Whitespace,I:N
ormalNC

Monitor file for changes

Is there a way to use nvimpager like less +F or tail -f (or tail -F ideally) to watch log files as they grow?

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.