Giter Club home page Giter Club logo

vim-xtabline's Introduction

xtabline

Imgur


Note: you may need some patched font for icons. In a Debian-based distribution you can install the following packages:

  • ttf-ancient-fonts-symbola
  • fonts-powerline

In Windows, one of the pre-patched nerd-fonts is recommended.


Introduction

This plugin tries to give you full control on the tabline:

  • three tabline modes: tabs, buffers, arglist
  • buffer filtering on the base of the CWD (also local)
  • you can rename tabs and/or buffers, and assign them icons

Also:

  • tab CWD/name is shown in the right corner of the tabline
  • commands to quickly set/change (tab/window) working directory
  • reopen closed tabs
  • clean up buffers across all tabs
  • session management and tabs bookmarks

Features

The tabline can be rendered in three different modes:

tabs tab name, CWD, or buffer name
buffers up to a max of N (default 10) recent buffers
arglist buffers contained in the arglist

In tabs-mode, the tabline will show the numbered tabs. This looks a lot like vim default tabline, but the CWD is shown in the top-right corner.

In buffer-mode, the tabline will show a filtered list of buffers that belong to the tab's CWD, or any open buffer inside the window. By default, only the 10 most recently accessed buffers are displayed.

In arglist-mode, the tabline will show the files defined in the arglist. You can switch file with the usual commands (:next, etc).

These modes can be cycled with a mapping (F5 by default). You can also define which modes to cycle with a setting.

Buffers and tabs can be renamed, and also given a custom icon.


Installation

Install the plugin:

Use vim-plug or any other Vim plugin manager.

With vim-plug:

Plug 'mg979/vim-xtabline'
Recommendation for macOS users:

If you want to use the session management feature, you must install the GNU core utilities, because its implementation requires the GNU version of the stat and date commands. The corresponding GNU commands are gstat and gdate. Install them with:

brew install coreutils

Usage

:help xtabline.txt

Some quick tips, assuming you are using default mappings:

F5 change tabline mode
N BS go to N tab (in tabs mode) or N buffer (in buffers mode)
[b/]b go to count next/previous buffer
cdw/cdl/cdt set working directory (tab/local)
cd? show tab informations (cwd, git dir, tag files)
\x? a list of all mappings

Themes

Some details may vary, depending on color schemes and plugin version. Here used with default bufferline formatter, and with empty formatter:

codedark

Imgur


slate

Imgur


monokai

Imgur


seoul

Imgur


tomorrow

Imgur


dracula

Imgur


Credits

Bram Moolenaar for Vim
Aristotle Pagaltzis for Buftabline
Giacomo Comitti for Taboo


License

MIT

vim-xtabline's People

Contributors

mg979 avatar rockyzhang24 avatar ryanndagreat 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

vim-xtabline's Issues

Don't display a buffer on tab

Bug report

I updated new master. But I think it is broken. I want to show in tab when I open a new buffer. But it only shows when I opened a second time.
dfc6957 commit is OK.
Is this expected?

Info

vim version: NVIM v0.4.0-778-g974b43fd7
Kernel: Linux argon 5.1.7-arch1-1-ARCH
OS: Arch Linux
commit hash: 19b7513

screen shot

do-not-display

minimal vimrc

if !((has('python') || has('python3') || has('ruby') || has('nvim'))
      \ && v:version > 703)
  echo 'Not load a plugin. Required +python/+python3/+ruby support or nvim'
  finish
endif


if has('vim_starting')
  let s:pluin_manager_dir='~/.vim/plugged/vim-plug'
  execute 'set runtimepath+=' . s:pluin_manager_dir
  if !isdirectory(expand(s:pluin_manager_dir))
    call system('mkdir -p ' . s:pluin_manager_dir)
    call system('git clone --depth 1 https://github.com/junegunn/vim-plug.git '
        \ . s:pluin_manager_dir . '/autoload')
  end
endif

call plug#begin('~/.vim/plugged')
Plug 'junegunn/vim-plug',
      \ {'dir': '~/.vim/plugged/vim-plug/autoload'}

Plug 'mg979/vim-xtabline'

call plug#end()

No filenames in List of command XTabListTabs

Hello,
thank you for your plugin. I tried it today and it looks really good.

I tried to use the command XTabListTabs, but the filenames aren't displayed.

Here's a screenshot:
grafik

Here is my vim version (neovim on Debian 11)
VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Mar 02 2021 02:58:09) Included patches: 1-2434 Modified by [email protected] Compiled by [email protected] Huge version without GUI. Features included (+) or not (-): +acl -farsi +mouse_sgr +tag_binary +arabic +file_in_path -mouse_sysmouse -tag_old_static +autocmd +find_in_path +mouse_urxvt -tag_any_white +autochdir +float +mouse_xterm +tcl -autoservername +folding +multi_byte +termguicolors -balloon_eval -footer +multi_lang +terminal +balloon_eval_term +fork() -mzscheme +terminfo -browse +gettext +netbeans_intg +termresponse ++builtin_terms -hangul_input +num64 +textobjects +byte_offset +iconv +packages +textprop +channel +insert_expand +path_extra +timers +cindent +ipv6 +perl +title -clientserver +job +persistent_undo -toolbar -clipboard +jumplist +popupwin +user_commands +cmdline_compl +keymap +postscript +vartabs +cmdline_hist +lambda +printer +vertsplit +cmdline_info +langmap +profile +virtualedit +comments +libcall -python +visual +conceal +linebreak +python3 +visualextra +cryptv +lispindent +quickfix +viminfo +cscope +listcmds +reltime +vreplace +cursorbind +localmap +rightleft +wildignore +cursorshape +lua +ruby +wildmenu +dialog_con +menu +scrollbind +windows +diff +mksession +signs +writebackup +digraphs +modify_fname +smartindent -X11 -dnd +mouse -sound -xfontset -ebcdic -mouseshape +spell -xim +emacs_tags +mouse_dec +startuptime -xpm +eval +mouse_gpm +statusline -xsmp +ex_extra -mouse_jsbterm -sun_workshop -xterm_clipboard +extra_search +mouse_netterm +syntax -xterm_save system vimrc file: "$VIM/vimrc" user vimrc file: "$HOME/.vimrc" 2nd user vimrc file: "~/.vim/vimrc" user exrc file: "$HOME/.exrc" defaults file: "$VIMRUNTIME/defaults.vim" fall-back for $VIM: "/usr/share/vim" Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -Wdate-time -g -O2 -ffile-prefix-map=/build/vim-wroKTq/vim-8.2.2434=. -fstack-protector-strong -Wformat -Werror=format-security -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 Linking: gcc -L. -Wl,-z,relro -Wl,-z,now -fstack-protector-strong -rdynamic -Wl,-export-dynamic -Wl,-E -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -o vim -lm -ltinfo -lselinux -lacl -lattr -lgpm -ldl -L/usr/lib -llua5.2 -Wl,-E -fstack-protector-strong -L/usr/local/lib -L/usr/lib/x86_64-linux-gnu/perl/5.32/CORE -lperl -ldl -lm -lpthread -lcrypt -L/usr/lib/python3.9/config-3.9-x86_64-linux-gnu -lpython3.9 -lcrypt -lpthread -ldl -lutil -lm -lm -L/usr/lib/x86_64-linux-gnu -ltcl8.6 -ldl -lz -lpthread -lm -lruby-2.7 -lm -L/usr/lib

Maybe it's related to my previous Pull Request #30

Thank you a lot in advance for any hint,
Best Regards,
Martin

Using lazyloading results in binding opening buffer.

Hey, I've been trying out xtabline for the past few days and I have the following set:
let g:xtabline_lazy = 0
However it results in the backspace key being bound to opening the buffer menu for some reason, even though I have set
let g:xtabline_settings.enable_mappings = 0
This is on the latest git version of xtabline.
Let me know if you need more information to reproduce.
Thanks.

Key not present after source vimrc in a open file.

Hello,
Here is my settings:

let g:xtabline_settings = {}
let g:xtabline_settings.tabline_modes = ['buffers']
let g:xtabline_settings.buffer_filtering = 0
let g:xtabline_settings.tab_number_in_buffers_mode = 0

When I open a file the first time, it work well. If I source .vimrc in a file and press some key mapping, it just report errors like: Key not present in Dictionary.......

Please update doc/tags when you update the master branch

doc/tags often conflict when updating using vim-plug. Because vim-plug updates the tag automatically with every update. https://github.com/junegunn/vim-plug/wiki/faq#does-vim-plug-generate-help-tags-for-my-plugins
I'm in trouble every time I have to resolve conflicts.

This is not updated now.

@@ -60,4 +60,5 @@ xtabline-tab-todo     xtabline.txt    /*xtabline-tab-todo*
 xtabline-tab_format    xtabline.txt    /*xtabline-tab_format*
 xtabline-tabline_modes xtabline.txt    /*xtabline-tabline_modes*
 xtabline-tabs_show_bufname     xtabline.txt    /*xtabline-tabs_show_bufname*
+xtabline-wd_type_indicator     xtabline.txt    /*xtabline-wd_type_indicator*
 xtabline.txt   xtabline.txt    /*xtabline.txt*

How to achieve hybrid (buffers+tabs) mode?

I would like to have a hybrid mode combining the buffers mode and the tabs mode: when there is only one tab present, the modes work like buffers, and as tabs when there are more than two tabs.

From doc:

                                                      *xtabline-tabline_modes*

    let g:xtabline_settings.tabline_modes = ['tabs', 'buffers', 'arglist']

        The modes that can be put in this list are:

        - |tabs|:       similar to the default vim tabline, with CWD
        - |buffers|:    buffer names
        - |arglist|:    the files in the arglist, as shown by |:args|

        The modes can be cycled with <F5> (default mapping).

Would it be possible to have a combined, hybrid mode as a built-in feature? Or how can one implement this on their own using the existing modes. Also, I would want to suppress messages like Showing buffers.

Thank you for your help!

Using space as leader leads to freeze

Hi,

I set the space key as my leader key by let mapleader=" ". Then when I press <leader>x, my vim freezes and has no response anymore. If I change the leader key to another key like ,, it works well.

Thank you.

Closing buffers broken in last 3 commits (?)

In one of the last 3 commits (since 35466f9) it seems closing buffers has broken for me. Basically if I do :bd or even use xtabline's own :XTabCloseBuffer or :XTabDeleteBuffers the buffer that I just removed still sticks around in the list of buffers on top. I have my own config on top of xtabline that lets me go to previous and next buffer with C-p and C-n and also close buffers with C-x, it also filters terminal buffers, maybe that is part of the problem?

" xtabline
let g:xtabline_settings = {}
let g:xtabline_settings.tabline_modes = ['buffers']
let g:xtabline_settings.buffer_filtering = 0
let g:xtabline_settings.enable_persistance = 0
let g:xtabline_settings.show_right_corner = 0
let g:xtabline_settings.recent_buffers = 12
let g:xtabline_settings.last_open_first = 0
fun! MyBuflineFormat(bufnr)
  if getbufvar(a:bufnr, '&buftype') == 'terminal'
    return ''
  else
    let A = '%#TabLineSel#'
    let B = bufnr('%') == a:bufnr ? '%#PmenuSel#' : '%#TabLine#'
    let name = bufname(a:bufnr) != '' ? fnamemodify(bufname(a:bufnr), ':t') : '...'
    return printf('%s  %s  ', B, name)
  endif
endfun
let g:xtabline_settings.buffer_format = function('MyBuflineFormat')
let g:my_last_buffer_change = 'prev'
function! MyPrevBuffer()
  let g:my_last_buffer_change = 'prev'
  XTabPrevBuffer
  if &buftype == 'terminal'
    XTabPrevBuffer
  endif
endfunction
function! MyNextBuffer()
  let g:my_last_buffer_change = 'next'
  XTabNextBuffer
  if &buftype == 'terminal'
    XTabNextBuffer
  endif
endfunction
function! MyCloseBuffer()
  let n = bufnr('%')
  if g:my_last_buffer_change == 'prev'
    call MyNextBuffer()
    let g:my_last_buffer_change = 'prev'
  else
    call MyPrevBuffer()
    let g:my_last_buffer_change = 'next'
  endif
  execute 'bd '.n
endfunction
nnoremap <C-p> :call MyPrevBuffer()<CR>
nnoremap <C-n> :call MyNextBuffer()<CR>
nnoremap <Space><C-p> :XTabMoveBufferPrev<CR>
nnoremap <Space><C-n> :XTabMoveBufferNext<CR>
nnoremap <C-x> :call MyCloseBuffer()<CR>

I can try to repro without these config changes if that helps. For now I am sticking with the commit I linked above ^ that worked for me.

next/prev_buffer() does not work any more since commit 3c7264ed0

my setting(linux):

let g:xtabline_settings = {}
let g:xtabline_settings.tabline_modes = ['buffers', 'tabs', 'arglist']
let g:xtabline_settings.buffer_filtering = 0
"let g:xtabline_settings.override_airline = 0
nmap <tab> :XTabNextBuffer<cr>
nmap <s-tab> :XTabPrevBuffer<cr>
nmap <BS> (XT-Select-Buffer)

Neither nor :XTabNextBuffer works any more since:

commit 3c7264e
Author: mg979 [email protected]
Date: Fri Oct 4 21:00:30 2019 +0200
Rewritten functions for buffer selection

buffer mode do not show the tabline

Hi,
I freshly installed the xtabline plug via vim-plug on my neovim.
The tabmode works just fine, but the buffer mode do not show the tabline when I have multiple buffers and change to buffer mode.
Any suggestions ?

Xtabline may has a load order problem when lazy_mode is on

let g:xtabline_lazy = 1
let g:xtabline_settings = get(g:, 'xtabline_settings', {})
let g:xtabline_settings.tabline_modes = ['buffers']
let g:xtabline_settings.enable_mappings = 0
let g:xtabline_settings.buffer_filtering = 0
let g:xtabline_settings.tab_number_in_buffers_mode = 0

Hello

Xtabline may has a load order problem when lazy_mode is on. If Xtabline has been started or inited this bug will not happen. It seems like an bug.

When open an buffer in vim, tabline should contain two buffers, the old one and the new open one. But Xtabline don't do that (since 34485e3) and only contain an new open buffer.

Expect

Open an buffer in the open vim, Xtabline init and contains two buffers not just the new open one.

If autoload/xtabline.vim in 34485e3, line 24, is let s:ready = { -> !exists('g:SessionLoad') || get(s:v, 'filter_buffers', 0) } wil be good. But I don't know any detail about this.

Make tab line invisible when only one tab is open

Is there a way to make the tab line invisible when I'm only using one tab?

Default vim behaviour is to leave the tabline invisible when only one tab exists, saving space in the terminal. But i noticed that when I install this plugin, it makes the tab bar visible all the time even when opening a single file.

Thank you,
Ryan

E716: Key not present in Dictionary: "special_tabs && s:is_special(s:tab_buffer(a:tnr))"

The following error happens on startup when loading this plugin via lazy.nvim (with lazy = false); it was working OK if loaded using vim-plug.

Error detected while processing function xtabline#render#tabline[15]..<SNR>139_render_tabs[6]..<SNR>139_format_tab_label[7]..<SNR>139_tab_hi:
line    2:
E716: Key not present in Dictionary: "special_tabs && s:is_special(s:tab_buffer(a:tnr))"

how to fix this error

Error detected while processing function xtabline#hi#init[2]..xtabline#hi#apply_theme[7]..
29:
line   13:
E492: Not an editor command:  guifg=#af0000 gui=bold cterm=bold

image

and the nvim version.
image

Closed buffer is still on the tabline

Hello,

It seems the tabline doesn't get refreshed when the current buffer is closed via the command XTabCloseBuffer, and even via the built-in bdelete command. I attached a short video as a demo below. I have two buffers. When I closed one, it was still on the tabline.

Screen.Recording.2021-01-30.at.7.33.59.PM.mov

BTW, as I remember this issue seemed not existing before 4d434cb, but I am not sure.
Thank you very much.

Please do not move to the coc's scratch floating window

Thank you for your continuous support. This plugin is one of my favorite


The current xtabline moves to the floating window displayed by Coc.nvim.
I want to add an option to not move in it.

Peek 2020-05-08 16-23

My environment

vim-xtabline: latest
neovim: NVIM v0.5.0-497-gf04a9a2c9
OS: ArchLinux
xtabline's mode: buffer

  let g:xtabline_settings = {}
  let g:xtabline_settings.tabline_modes = ['buffers', 'tabs', 'arglist']
  let g:xtabline_settings.buffer_filtering = 0
  let g:xtabline_settings.relative_paths = 0
  let g:xtabline_settings.use_tab_cwd = 0
  let g:xtabline_settings.theme = 'codedark'
  let g:xtabline_settings.map_prefix = 'm'
  " let g:xtabline_settings.enable_mappings = 1
  let g:xtabline_settings.bufline_format = ' N I< l +'
  let g:xtabline_settings.recent_buffers = 99
  let g:xtabline_settings.tab_number_in_buffers_mode = 0

Help can be more usefull

On help I read on row 207:

BUFFERS-MODE                                                *xtabline-buffers*
==============================================================================
                                                      *xtabline-select-buffer*
  Plug                              Mapping~
  <Plug>(XT-Select-Buffer)          [count] <BS>

  Command                           Mapping~
  XTabNextBuffer                  [count] ]b
  XTabPrevBuffer                  [count] [b
  XTabCloseBuffer                *q
  XTabHideBuffer                  *h
  XTabMoveBuffer                 *m
  XTabMoveBufferNext          *]
  XTabMoveBufferPrev          *[
  XTabPinBuffer                     *p

I'm using Ubuntu 20.04 and vim 8.2

XTabNextBuffer [count] ]b

work in normal mode but is not write in help

XTabMoveBuffer *m

work only if use \x before and this too is not write.
The * before the key is for what?
Is this * tell me I have to use \x ?
before the \x m the [count] work to set the buffer number position to move:
\x [count]]m
\x 3m move the current buffer to 3 position

I like this plugin and I'm moving to use it, so I not know it well.

If the help was writing thinking to beginners I think it will be more usefull.

Please, my English is not good so forgive it: my intention is to be polite and help the project.

best regards,
Leoanardo

Not display all buffers when switching tab

Hello,

I got another issue regarding the buffer display when tab switching. Firstly, the default mode is buffers. And I have already updated xtabline to the latest.

How to reproduce

  1. open neovim with one buffer open
  2. run :tabedit filename to open a new tab.
    On the tabline it shows 2/2 along with two buffers, so far so good.
  3. run :tabprevious to switch to the other tab.
    On the tabline, it shows 1/2, however, only the first buffer is shown on the tabline. Here is the issue. I think all the buffers should be displayed, right?
  4. To make all buffers to be displayed on the tabline, I have to run :XTablineUpdate, or switch to the tabs mode and then switch back to the buffers mode.

I attached a short video as a demo below:

Screen.Recording.2021-01-31.at.8.27.31.AM.mov

Thank you very much.

Feature Suggestion: Git Integration

I have an idea for a feature: an indicator on each tab that tells you if it has changes to the previous git commit.

Just like Xuyuanp/nerdtree-git-plugin marks folders and files that are dirty, perhaps this would be possible in tabs? It would mark uncommitted tabs as dirty, so you can see which ones that have been edited.

Right now it already shows a * next to tabs that have been modified but not saved. Perhaps we could also have markers for files that are saved but not committed?

Compatiability with Taboo

There's a vim plugin called "Taboo" that lets you rename Vim tabs. It works with vanilla vim tabs, but with this plugin it doesn't seem to work (the tabs keep their default names after using the TabooRename command). Is there any way to make this work?

For example, if I create two tabs, and in the second tab use the ":TabooRename MySecondTab" command, the tab should then be called MySecondTab

Here's the Taboo plugin:
https://github.com/gcmt/taboo.vim

Thank you!

An 8-color tab theme

Hi! Could you please add a simple 8-color tab theme? All of the themes currently require a terminal that can display 256 colors, unlike the Windows terminal. Right now, if you run in 8-color vim, the selected tab is white, along with the other unselected tabs - making it hard to see which tab I'm in.

Or otherwise, is there a way to add a custom theme in my .vimrc without forking this repo?

Thank you!,
Ryan Burgert

Error on loading session

Hello,

This plugin is definitely amazing. I have been using it for a long time. Just now I wanted to try its session management feature. I got an issue.

Firstly, I am using neovim on macOS.
When I try to load a session, the fzf window is open but there is an "illegal option" error in it. I attached a screenshot below.

image

I believe this issue is caused by the simplified version of stat command in macOS.

Thank you very much.

Update:
Next, I tried the Startify's session management. I opened two buffers and saved the session. Then when I tried to load the session, xtabline only showed one buffer (the default mode is 'buffers', and lazyload is set to 0). I have to enter the ex command line and then quit to make all the buffers show out, or toggle 'tab' mode followed by toggling 'buffers' mode back.

Update2:
I installed the latest GNU stat and date commands, and change all stat and date in xtabline/fzf.vim to gstat and gdate. Then the issue is solved. The time can be shown correctly in the session selection window. I will open a PR for this latter.
However, when I load a session that contains more than one buffer, only one buffer instead of all the buffers in this loaded session will be shown on the tabline.

Get an error in Neovim's floating window

Sorry to bring up the issue so often.

Floating widows in Neovim now give me an error from this commit(34485e3).

:message
Error detected while processing function xtabline#render#tabline[18]..<SNR>47_render_buffers[31]..<lambda>24:
line    1:
E716: Key not present in Dictionary: 2
Error detected while processing function xtabline#render#tabline[18]..<SNR>47_render_buffers[31]..<lambda>24:
line    1:
E116: Invalid arguments for function get
Error detected while processing function xtabline#render#tabline[18]..<SNR>47_render_buffers[31]..<lambda>24:
line    1:
E15: Invalid expression: get(s:X.Buffers, nr, s:X._buffers[nr])
Error detected while processing function xtabline#render#tabline[18]..<SNR>47_render_buffers:
line   31:
E121: Undefined variable: special
Error detected while processing function xtabline#render#tabline[18]..<SNR>47_render_buffers:
line   31:

I know you are not using Neovim. But if you can fix it I would be happy.

Reproduce step

  1. Use this minimal vimrc. nvim -u /tmp/mini.vim /tmp/mini.vim
" minimal_vimrc
syntax enable
filetype plugin indent on

if has('vim_starting')
	let s:pluin_manager_dir='~/.vim/plugged/vim-plug'
	execute 'set runtimepath+=' . s:pluin_manager_dir
endif

call plug#begin('~/.vim/plugged')
Plug 'mg979/vim-xtabline'
call plug#end()

let g:xtabline_settings = {}
let g:xtabline_settings.tabline_modes = ['buffers', 'tabs', 'arglist']
  1. :let buf = nvim_create_buf(v:false, v:true)
  2. :let win = nvim_open_win(buf, 0, {'relative': 'cursor', 'width': 10, 'height': 2, 'col': 0, 'row': 1, 'anchor': 'NW', 'style': 'minimal '} )
  3. Error message is displayed

My environment

vim: Neovim v0.5.0-709-g4f8d98e58
OS: ArchLinux
vim-xtabline: 34485e3

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.