Giter Club home page Giter Club logo

evilvte's People

Contributors

adaptee avatar caleb- avatar insanum avatar raphaelahrens 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

evilvte's Issues

Do not overwrite title when it is manually set

When using WINDOW_TITLE_DYNAMIC, if I set the title for a tab manually it is getting overwritten each time an escape sequence is emitted.

I think the desired behavior is to keep the manually set title, and provide a way to unset it so dynamic title can be enabled again. Maybe setting to an empty title would be fine.

Highlight tab on bell

I often don't recognize the visual bell, because the window is active; it's just that I'm in another tab.
Could perhaps the background of the tab in the tabbar light up in a different color upon receiving a bell-event until it gets selected?

Listen for xsettings change

Hi!

libvte is getting DPI settings from xsettings. It would be convenient if evilvte could listen to changes to adapt DPI settings. It would be useful for people switching from HiDPI to non-HiDPI screens. xfce4-terminal listen for such changes.

Caps lock changes hot key behavior

For example if you have:

define HOTKEY_COPY CTRL(GDK_C)

in your config.h then <ctrl> + <shift> + c works. However if you turn on the caps lock it changes to just <ctrl> + c.

default directory when launched via HOTKEY_OPEN_NEW_WINDOW

Config:

define DEFAULT_DIRECTORY g_get_current_dir()

define HOTKEY_OPEN_NEW_WINDOW CTRL GDK_N

Steps to reproduce:
visit /usr/share/misc and start evilvte from that folder (entering the command on a terminal or via file manager). Evilvte starts with /usr/share/misc as the initial directory.
Do "cd ../awk" and hit Ctrl-Shift-N to open a new terminal.

Expected behaviour:
The new shell opens in /usr/share/awk

Observed behaviour:
The new shell opens in /usr/share/misc

How to customized evilvte?

I want to change evilvte's font and other aspects but I cant find out anything on this subject.

The only thing I found out was that I can edit the config.h file and build it again but what about already built and install instance of evilvte?

Shift-arrow keybinding

That would be very useful to make possible assign shift+arrow keybinding via config file (e.g. for selection of the next or previous tab)

Tag your project

Hi,

I'm going to package it into Fedora, but I hope you can add a proper tag for each release on github.

Thanks.

-e flag ignores options when the --name or --class flag is present

evilvte --name title -e something -a -b -c de behaves like evilvte --name title -e something. It seems that anything after the first space is ignored such that evilvte --name title -e "something -a -b -c de" is seen as evilvte --name title -e "something. Is this just me? (Everything works fine for the -T/-title flag however).

Fading of inactive windows

One very nice thing about urxvt is that it allows to fade the text of inactive terminals by a certain amount, making it very visually obvious which window is active. This is especially useful with minimal window managers like dwm, where visual cues are fairly few. Any chance of this getting implemented?

Resize Window

I can't resize the window to anything smaller than a certain size (which is almost as large as it is maximized on my screen). How do I enable resizing? I'm on Arch Linux 64-bit with Xorg-server version 1.13.1-1. Thanks! Here is my config.h:

/* Use // to disable options                                                  */

//#define    BACKGROUND_IMAGE       "/usr/share/awesome/themes/sky/background.png"
//#define BACKGROUND_SATURATION  0.2
//#define BACKGROUND_SCROLLABLE  TRUE
// #define BACKGROUND_TINT_COLOR  "black"
//#define BACKGROUND_TRANSPARENT TRUE  /* Pseudo transparent background      */
// #define BACKGROUND_OPACITY     TRUE  /* True transparent background        */
// #define BACKSPACE_KEY /* Options: AUTO, BACKSPACE, DELETE, ERASE_TTY,      */
                         /*          DELETE_SEQUENCE                          */
// #define DELETE_KEY    /* Options: AUTO, BACKSPACE, DELETE, ERASE_TTY,      */
                         /*          DELETE_SEQUENCE                          */
#define BELL_AUDIBLE           TRUE
// #define BELL_VISIBLE           TRUE
// #define BELL_URGENT            TRUE
// #define BUTTON_ORDER_BY_RCFILE TRUE
// #define CLOSE_DIALOG           TRUE  /* Dialog to confirm close event      */
// #define CLOSE_SAFELY           TRUE  /* Do not kill running applications   */
// #define COLOR_BACKGROUND       "white"
// #define COLOR_FOREGROUND       "#000000"
#define COLOR_STYLE SOLARIZED_DARK
                         /* Options: LINUX, RXVT, TANGO, XTERM, ZENBURN,      */
                         /*          ZENBURN_DARK, SOLARIZED_DARK,            */
                         /*          SOLARIZED_LIGHT                          */
// #define COLOR_TEXT_BOLD        "red"
// #define COLOR_TEXT_DIM         "#FFFF00"
// #define COLOR_TEXT_HIGHLIGHTED "green"
#define COMMAND_AT_ROOT_WINDOW TRUE  /* -r option, run in root window      */
// #define COMMAND_COLOR_FG       TRUE  /* -fg option, foreground color       */
// #define COMMAND_COLOR_BG       TRUE  /* -bg option, background color       */
// #define COMMAND_SATURATION     TRUE  /* -sa option, saturation level       */
// #define COMMAND_DOCK_MODE      TRUE  /* -d option, run as a dock           */
#define    COMMAND_EXEC_PROGRAM   TRUE  /* -e option, execute program         */
#define COMMAND_FULLSCREEN     TRUE  /* -f option, init in fullscreen mode */
//#define COMMAND_FONT           TRUE  /* -fn option, to assign font & size  */
// #define COMMAND_GEOMETRY       TRUE  /* -g +X+Y option, to assign geometry */
// #define COMMAND_LOGIN_SHELL    TRUE  /* -ls option, to enable login shell  */
#define COMMAND_SET_TITLE      TRUE  /* -T or -title to set program title  */
// #define COMMAND_SHOW_HELP      TRUE  /* -h option, show help               */
//#define    COMMAND_SHOW_OPTIONS   TRUE  /* -o option, show build-time options */
#define    COMMAND_SHOW_VERSION   TRUE  /* -v option, show program version    */
// #define COMMAND_TAB_NUMBERS    TRUE  /* -[2-9] options, to set tab numbers */
#define CURSOR_BLINKS          FALSE
// #define CURSOR_COLOR           "blue"
// #define CURSOR_SHAPE  /* Options: BLOCK, IBEAM, UNDERLINE                  */
// #define DEFAULT_COMMAND        g_getenv("SHELL")
// #define DEFAULT_DIRECTORY      g_get_current_dir()
// #define DEFAULT_TERMINAL_SIZE  173x44
// #define EXPORT_WINDOWID        TRUE
#define FONT                   "Inconsolata-dz 14"
#define FONT_ANTI_ALIAS        TRUE
// #define FONT_ENABLE_BOLD_TEXT  TRUE
// #define MOUSE_CTRL_SATURATION  TRUE  /* Scroll left or right to adjust it  */
#define MOUSE_CURSOR_AUTOHIDE  TRUE
// #define PROGRAM_ALWAYS_ON_TOP  TRUE
// #define PROGRAM_ICON           ".config/evilvte/icon.png"
//#define PROGRAM_WM_CLASS       TRUE
// #define RECORD_LASTLOG         TRUE
// #define RECORD_UTMP            TRUE
// #define RECORD_WTMP            TRUE
#define SCROLL_LINES           -1000  /* Negative value means unlimited     */
#define SCROLL_ON_KEYSTROKE    TRUE
// #define SCROLL_ON_OUTPUT       TRUE
#define    SCROLLBAR              OFF_R /* Options: LEFT, RIGHT, OFF_L, OFF_R */
#define SHOW_WINDOW_BORDER     FALSE
#define SHOW_WINDOW_DECORATED  FALSE
// #define    SHOW_WINDOW_ICON       TRUE
// #define    STATUS_BAR             TRUE
#define WINDOW_TITLE_DYNAMIC   TRUE  /* for xterm escape sequences         */
#define    WORD_CHARS             "-A-Za-z0-9_$.+!*(),;:@&=?/~#%"

// #define    MENU                   TRUE
// #define MENU_ENCODING_LIST     "BIG-5", "Default Encoding", "GBK", "EUC-JP"
#define MENU_MATCH_STRING_EXEC "google-chrome"
#define      MATCH_STRING_L    "google-chrome" /* left click to open without menu*/
// #define      MATCH_STRING_M    "firefox" /* middle click to open           */
#define      MATCH_STRING_HTTP TRUE      /* Detect http(s) and ftp(s)      */
// #define      MATCH_STRING_MAIL TRUE      /* Detect mailto:                 */
// #define      MATCH_STRING_FILE TRUE      /* Detect file:///                */
// #define MENU_CUSTOM            "Copy", "Separator", "Paste", "Separator"
           /* Options: "Copy",         "Zoom in",       "Add tab",
            *          "Paste",        "Zoom out",      "Remove tab",
            *          "Select all",   "Zoom default",  "New window",
            *          "Edit label",   "Select font",
            *          "Input method",                  "Encoding list",
            *          "Submenu input method",          "Submenu encoding list",
            *          "Toggle tabbar",
            *          "Toggle scrollbar",              "Background tint",
            *          "Toggle status bar",             "Adjust saturation",
            *          "Toggle anti-alias",
            *          "Toggle background",             "Separator",
            *          "Toggle fullscreen",             "Quit",
            *          "Toggle always on top",
            *          "Toggle hotkeys locking",        "Reset terminal",
            *          "Toggle window decorated",       "Reset and clear",
            *
            *          "Auto-click" (when there is only one effective menu item)
            */

#define    TAB                    TRUE
#define TAB_BORDER             0
#define TAB_CLOSE_BUTTON       FALSE
// #define TAB_EXPANDED_WIDTH     TRUE
// #define TAB_LABEL              "Page %u" /* %u will be replaced by numbers */
#define TAB_LABEL_DYNAMIC      TRUE      /* for xterm escape sequences     */
// #define TAB_LABEL_CUSTOM       "One", "Two", "Three", "Four", "Five", "Six"
// #define TAB_NEW_PATH_EQUAL_OLD TRUE
// #define TAB_NEW_TAB_AT_TAB_ONE TRUE   /* New tab will always the first tab */
#define TAB_REORDERABLE        TRUE
// #define TAB_SHOW_INFO_AT_TITLE TRUE
#define TABBAR                 FALSE
// #define TABBAR_PLACE           TOP    /* Options: TOP, BOTTOM, LEFT, RIGHT */
// #define TABBAR_AUTOHIDE        TRUE
// #define TABBAR_SCROLLABLE      TRUE
// #define TABBAR_MENU_SELECT_TAB TRUE

/* Use || for multiple hotkeys.
 *
 * CTRL(GDK_A) || CTRL(GDK_a) || ALT(GDK_b) || CTRL_ALT(GDK_c) || SHIFT(GDK_d)
 *
 * CTRL(GDK_a)     = "Ctrl + a"
 * CTRL(GDK_A)     = "Ctrl + Shift + a"
 * ALT(GDK_A)      = "Alt  + Shift + a"
 * CTRL_ALT(GDK_A) = "Ctrl + Alt + Shift + a"
 *
 * Also support: ALT_SHIFT(GDK_*)
 *               CTRL_ALT_SHIFT(GDK_*)
 *               CTRL_SHIFT(GDK_*)
 *
 * See /usr/include/gtk-?.0/gdk/gdkkeysyms.h for GDK_* definitions.           */

#define    HOTKEY                       TRUE
#define HOTKEY_COPY                  CTRL_SHIFT(GDK_C) || CTRL_SHIFT(GDK_c)
#define HOTKEY_PASTE                 CTRL_SHIFT(GDK_V) || CTRL_SHIFT(GDK_v)
// #define HOTKEY_SELECT_ALL            CTRL_SHIFT(GDK_S) || CTRL_SHIFT(GDK_s)
// #define HOTKEY_COLOR_BACKGROUND      CTRL_SHIFT(GDK_B) || CTRL_SHIFT(GDK_b)
// #define HOTKEY_EDIT_ENCODING         CTRL_SHIFT(GDK_U) || CTRL_SHIFT(GDK_u)
// #define HOTKEY_FONT_BIGGER           CTRL(GDK_KP_Add)
// #define HOTKEY_FONT_SMALLER          CTRL(GDK_KP_Subtract)
// #define HOTKEY_FONT_DEFAULT_SIZE     CTRL(GDK_KP_Insert)
// #define HOTKEY_FONT_SELECT           CTRL_SHIFT(GDK_F) || CTRL_SHIFT(GDK_f)
// #define HOTKEY_MIMIC_SCROLL_UP       CTRL_SHIFT(GDK_K) || CTRL_SHIFT(GDK_k)
// #define HOTKEY_MIMIC_SCROLL_DOWN     CTRL_SHIFT(GDK_J) || CTRL_SHIFT(GDK_j)
// #define HOTKEY_OPEN_NEW_WINDOW       CTRL_SHIFT(GDK_N) || CTRL_SHIFT(GDK_n)
// #define HOTKEY_RESET_TERMINAL        CTRL_SHIFT(GDK_R) || CTRL_SHIFT(GDK_r)
// #define HOTKEY_RESET_AND_CLEAR       CTRL_SHIFT(GDK_A) || CTRL_SHIFT(GDK_a)
// #define HOTKEY_SATURATION_DIALOG     CTRL_SHIFT(GDK_X) || CTRL_SHIFT(GDK_x)
// #define HOTKEY_SATURATION_MORE       CTRL(GDK_KP_Multiply)
// #define HOTKEY_SATURATION_LESS       CTRL(GDK_KP_Divide)
// #define HOTKEY_SCROLL_ONE_PAGE_UP    CTRL(GDK_k) || CTRL(GDK_K)
// #define HOTKEY_SCROLL_ONE_PAGE_DOWN  CTRL(GDK_j) || CTRL(GDK_J)
// #define HOTKEY_SEARCH_STRING         CTRL_SHIFT(GDK_Q) || CTRL_SHIFT(GDK_q)
// #define HOTKEY_SEARCH_PREVIOUS       CTRL_SHIFT(GDK_G) || CTRL_SHIFT(GDK_g)
// #define HOTKEY_SEARCH_NEXT           CTRL(GDK_g) || CTRL(GDK_G)
// #define        SEARCH_CASE_SENSITIVE TRUE
#define    HOTKEY_TAB_ADD               CTRL_SHIFT(GDK_T) || CTRL_SHIFT(GDK_t)
#define    HOTKEY_TAB_REMOVE            CTRL_SHIFT(GDK_W) || CTRL_SHIFT(GDK_w)
// #define    HOTKEY_TAB_PREVIOUS          CTRL(GDK_Page_Up)
// #define    HOTKEY_TAB_NEXT              CTRL(GDK_Page_Down)
// #define HOTKEY_TAB_FIRST             CTRL(GDK_Home)
// #define HOTKEY_TAB_LAST              CTRL(GDK_End)
// #define ALT_NUMBER_GO_TO_TAB_NUMBER  TRUE
#define CTRL_NUMBER_GO_TO_TAB_NUMBER TRUE
// #define HOTKEY_TAB_EDIT_LABEL        CTRL_SHIFT(GDK_E) || CTRL_SHIFT(GDK_e)
// #define HOTKEY_TOGGLE_ANTI_ALIAS     CTRL_SHIFT(GDK_L) || CTRL_SHIFT(GDK_l)
// #define HOTKEY_TOGGLE_DECORATED      CTRL(GDK_Left)
// #define HOTKEY_TOGGLE_FULLSCREEN     CTRL_SHIFT(GDK_M) || CTRL_SHIFT(GDK_m)
// #define HOTKEY_TOGGLE_HOTKEYS        CTRL(GDK_quoteleft)
// #define HOTKEY_TOGGLE_ON_TOP         CTRL_SHIFT(GDK_O) || CTRL_SHIFT(GDK_o)
// #define HOTKEY_TOGGLE_SCROLLBAR      CTRL(GDK_Right)
// #define HOTKEY_TOGGLE_STATUS_BAR     CTRL(GDK_Down)
// #define HOTKEY_TOGGLE_TABBAR         CTRL(GDK_Up)
// #define HOTKEY_TOGGLE_BACKGROUND     CTRL(GDK_KP_Delete)
// #define TOGGLE_BG_ORDER    "Image", "Transparent", "No background", "Opacity"

// #define LABEL_DEFAULT_ENCODING       "_Default Encoding"
// #define LABEL_DIALOG_BACKGROUND_TINT "_Background tint color"
// #define LABEL_DIALOG_CLOSE           "Do you really want to close it?"
// #define LABEL_DIALOG_SEARCH          "Find"
// #define LABEL_MENU_SATURATION        "_Adjust saturation"
// #define LABEL_MENU_TOGGLE_ANTI_ALIAS "_Toggle anti-alias"
// #define LABEL_MENU_TOGGLE_BG         "_Toggle background"
// #define LABEL_MENU_TOGGLE_DECORATED  "_Toggle window decorated"
// #define LABEL_MENU_TOGGLE_FULLSCREEN "_Toggle fullscreen"
// #define LABEL_MENU_TOGGLE_HOTKEYS    "_Toggle hotkeys locking"
// #define LABEL_MENU_TOGGLE_ON_TOP     "_Toggle always on top"
// #define LABEL_MENU_TOGGLE_SCROLLBAR  "_Toggle scrollbar"
// #define LABEL_MENU_TOGGLE_STATUS_BAR "_Toggle status bar"
// #define LABEL_MENU_TOGGLE_TABBAR     "_Toggle tabbar"
// #define LABEL_SUBMENU_ENCODING       "_Character Encoding"
// #define LABEL_SUBMENU_IME            "_Input Methods"
// #define GTK3_CSS                     "GtkNotebook GtkHBox GtkButton { -GtkWidget-focus-line-width: 0; } GtkNotebook GtkButton { border-width: 0; padding: 0; -GtkButton-inner-border: 0; } GtkWindow GtkNotebook { padding: 0; }"

Do not resize the window when hiding the tab bar

I've got TABBAR_AUTOHIDE set to TRUE, and when I close the last tab but one, the window gets automatically resized to its default size.

Steps to reproduce:

  1. Open a tab
  2. Resize the window
  3. Close the opened tab

I think this is a bad behavior

scroll screen up/down

This is a feature request.

Emacs has Ctrl+v Alt-v
Vim has Ctrl+f Ctrl+b

to scroll up/down one screen.

      GET_CURRENT_TAB(gtk_notebook_get_current_page(GTK_NOTEBOOK(notebook)));
      gtk_test_widget_click(term->vte, 4, 0);

only scroll about 7 lines.

How to scroll faster in evilvte?

Can not compile latest evilvte - g_variant_new_take_string

Can not compile latest evilvte.

include/libpng14 -I/usr/include/libpng16 -I/usr/include/harfbuzz -c -o src/evilvte.o src/evilvte.c
src/evilvte.c: In function 'add_tab':
src/evilvte.c:2045:5: warning: 'vte_terminal_fork_command' is deprecated (declared at /usr/include/vte-0.0/vte/vtedeprecated.h:82) [-Wdeprecated-declarations]
cc -lpthread src/evilvte.o -L/usr/local/lib -lglib-2.0 -lgobject-2.0 -lgdk-x11-2.0 -lgtk-x11-2.0 -lvte -o src/evilvte
/System/Libraries/libgio-2.0.so.0: undefined reference to `g_variant_new_take_string'
collect2: ld returned 1 exit status
make: *** [evilvte] Error 1

vim not able to change the title

I have enabled the option WINDOW_TITLE_DYNAMIC, bash is able to set the title, however, vim is still not able to set the title.

Refresh tab title when closing or moving tabs

I have given my tabs simple numbers and turned on TAB_DYNAMIC_TITLE.
When moving or at least on closing tabs it would be nice to have the title (here just the number) updated.

Example: You open evilvte and open two more tabs, so the titles are
[1][2][3]
Then you close the second tab. The current behavior is that the titles are
[1][3]
If you open up another, you then have
[1][3][3]
Moving the first tab to the end you'd end up with
[3][3][1]

It would be nice to instead have the title of all potentially changed tabs updated after closing (as well as after moving) a tab, so that the tab numbering stays consistend.
With the previous example, after closing the second tab you'd have
[1][2]
Then adding one:
[1][2][3]
Moving the first tab to the end:
[1][2][3]

If you wish to keep the old behavior, you could perhaps introduce a new macro to allow toggling this behavior.

when launch evilvte often the prompt is invisible

Like the title saying,when I launch a new evilvte window,often the prompt is invisible,but it's actually there,after I press Enter it becomes visible.

I compile with default config.h,both in version 0.5.0 and 0.5.1 pre3 from github,the problem still there.And this is my showvte output:

Configuration of evilvte 0.5.0:

define BACKGROUND_IMAGE �[1m�[32m".config/evilvte/background.png"�[m

define COLOR_BACKGROUND �[1m�[32m"#272822"�[m

define COLOR_FOREGROUND �[1m�[32m"#FFFFFF"�[m

define COMMAND_EXEC_PROGRAM �[1m�[32mTRUE �[m

define COMMAND_SHOW_OPTIONS �[1m�[32mTRUE �[m

define COMMAND_SHOW_VERSION �[1m�[32mTRUE �[m

define CURSOR_BLINKS �[1m�[32mTRUE�[m

define CURSOR_SHAPE�[1m�[32m UNDERLINE �[m

define DEFAULT_ENCODING �[1m�[32m"UTF-8"�[m

define DEFAULT_TERMINAL_SIZE�[1m�[32m 80x24�[m

define FONT �[1m�[32m"Monaco�[1m�[32m 10"�[m

define FONT_ENABLE_BOLD_TEXT �[1m�[31mFALSE�[m

define SCROLL_LINES -1000 �[m

define SCROLLBAR�[1m�[32m RIGHT �[m

define SHOW_WINDOW_BORDER �[1m�[31mFALSE�[m

define SHOW_WINDOW_DECORATED �[1m�[31mFALSE�[m

define SHOW_WINDOW_ICON �[1m�[32mTRUE�[m

define STATUS_BAR �[1m�[31mFALSE�[m

define WINDOW_TITLE_DYNAMIC �[1m�[32mTRUE �[m

define WORD_CHARS �[1m�[32m"-A-Za-z0-9_$.+!*(),;:@&=?/~#%"�[m

define MENU �[1m�[32mTRUE�[m

define TAB �[1m�[31mFALSE�[m

define TAB_BORDER�[1m�[32m 0�[m

define TABBAR �[1m�[31mFALSE�[m

define HOTKEY �[1m�[32mTRUE�[m

define HOTKEY_TAB_ADD�[1m�[32m CTRL GDK_T�[m

define HOTKEY_TAB_REMOVE�[1m�[32m CTRL GDK_W�[m

define HOTKEY_TAB_PREVIOUS�[1m�[32m CTRL GDK_Page_Up�[m

define HOTKEY_TAB_NEXT�[1m�[32m CTRL GDK_Page_Down�[m

Unable to use -e option along with --name/--class option

Hi! It seems gtk_init modifies content of argv when it detects --name/--class arguments and default_argv looses "-e" option parameters.
The following code (I'm not a C-expert, sorry) fixes this problem:

int gtk_argc = argc;
char **gtk_argv = (char**)malloc(argc * sizeof(char*));
int ii = 0;
for (ii = 0; ii < argc; ii++)
    gtk_argv[ii] = argv[ii];

  gtk_init(&gtk_argc, &gtk_argv);

free(gtk_argv);

Update to vte 2.91 API

In vte version 0.38 the API was changed to version 2.91, changing or removing some of the functions used by evilvte, causing compilation or execution to fail after upgrade.

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.