)]}'
{
  "log": [
    {
      "commit": "ddc769445d967a3bc8d5b75ed6899bd3723876a0",
      "tree": "79a184cb1df4aa1517169be4975a97d99d12ebda",
      "parents": [
        "2bafc934577c8cd8ed21181d599cdb9d533788c4"
      ],
      "author": {
        "name": "George Kulakowski",
        "email": "kulakowski@google.com",
        "time": "Wed Oct 05 18:55:18 2016 -0700"
      },
      "committer": {
        "name": "George Kulakowski",
        "email": "kulakowski@google.com",
        "time": "Wed Oct 05 18:55:18 2016 -0700"
      },
      "message": "Actually wait on the provided fd in __read\n\nChange-Id: Iad7f6e8529741c4ff8851c4db44e8141403d3810\n"
    },
    {
      "commit": "2bafc934577c8cd8ed21181d599cdb9d533788c4",
      "tree": "82bc0b1faf6da35af46dbf0f78f840192b932cfc",
      "parents": [
        "6e522c3969e156f9989a73e02e2563477d973865"
      ],
      "author": {
        "name": "Viet-Trung Luu",
        "email": "vtl@google.com",
        "time": "Wed Aug 24 09:36:01 2016 -0700"
      },
      "committer": {
        "name": "Viet-Trung Luu",
        "email": "vtl@google.com",
        "time": "Wed Aug 24 09:36:01 2016 -0700"
      },
      "message": "Update to match mxio changes.\n\nChange-Id: I52a8a5885af5fe5eaefc1268c7cf46465fd89742\n"
    },
    {
      "commit": "6e522c3969e156f9989a73e02e2563477d973865",
      "tree": "3d412366cd24a465a2dcdc685d2e5b05a4d50ea3",
      "parents": [
        "679f06cd5e1654e734454f384f68fd11cd88bf7c"
      ],
      "author": {
        "name": "Viet-Trung Luu",
        "email": "vtl@google.com",
        "time": "Tue Aug 23 12:04:22 2016 -0700"
      },
      "committer": {
        "name": "Viet-Trung Luu",
        "email": "vtl@google.com",
        "time": "Tue Aug 23 12:04:22 2016 -0700"
      },
      "message": "Fix build: linenoise needs to specify/propagate its include dir.\n\nChange-Id: I1433aa6c357feaf8a51a9afe37412d74f37933a6\n"
    },
    {
      "commit": "679f06cd5e1654e734454f384f68fd11cd88bf7c",
      "tree": "e09bd65b1ff22e870e0a7f62fa20a0575fde3cab",
      "parents": [
        "c894b9e59f02203dbe4e2be657572cf88c4230c3"
      ],
      "author": {
        "name": "Arman Uguray",
        "email": "armansito@google.com",
        "time": "Wed Aug 17 13:02:47 2016 -0700"
      },
      "committer": {
        "name": "Arman Uguray",
        "email": "armansito@google.com",
        "time": "Wed Aug 17 23:12:06 2016 -0700"
      },
      "message": "Port linenoise to Fuchsia\n\nMade the minimum amount of modifications to support running on Fuchsia.\n\nChange-Id: Ie2ac32d4e314be78f274c45b549c8a359547a150\n"
    },
    {
      "commit": "c894b9e59f02203dbe4e2be657572cf88c4230c3",
      "tree": "45e5827b023459978dfd620a767a1670638f7095",
      "parents": [
        "2eb4956846c64f162f83a99c1ab7cc87708d7cf0"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Fri Jul 29 11:25:35 2016 +0200"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Fri Jul 29 11:25:35 2016 +0200"
      },
      "message": "Fix insecure history file creation.\n\nSee https://bugs.debian.org/cgi-bin/bugreport.cgi?bug\u003d832460.\n\nThis patch was kindly contributed by Chris Lamb (@lamby).\n"
    },
    {
      "commit": "2eb4956846c64f162f83a99c1ab7cc87708d7cf0",
      "tree": "fa13f5e68e187ccd08d9cdf6d9d4c0b461bc53e6",
      "parents": [
        "a64257a8d27a1764ae2f100a989ba43ca552b64f"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Apr 13 12:19:04 2016 +0200"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Apr 13 12:19:04 2016 +0200"
      },
      "message": "Clear hints after newline.\n"
    },
    {
      "commit": "a64257a8d27a1764ae2f100a989ba43ca552b64f",
      "tree": "de9919d7d2d628a47a8fb32283c4854c9c551f66",
      "parents": [
        "24c52baad615d6de8a771c74ab1c226cb9db397f"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Tue Apr 12 18:44:46 2016 +0200"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Tue Apr 12 18:44:46 2016 +0200"
      },
      "message": "Hints: when only bold is set, use color 37 (white).\n"
    },
    {
      "commit": "24c52baad615d6de8a771c74ab1c226cb9db397f",
      "tree": "307aa0efcead59cc83b7f1152665de768e507882",
      "parents": [
        "24e401c20202939ae76914b9578fbb809ae04d67"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Tue Apr 12 18:35:43 2016 +0200"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Tue Apr 12 18:39:43 2016 +0200"
      },
      "message": "Linenoise API documented.\n"
    },
    {
      "commit": "24e401c20202939ae76914b9578fbb809ae04d67",
      "tree": "e290a23e91663ae90685a3bb87641c6a54672b4b",
      "parents": [
        "ae5f793ec07b1e8be640135d255c70a765d3e3d0"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Tue Apr 12 18:35:12 2016 +0200"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Tue Apr 12 18:35:12 2016 +0200"
      },
      "message": "Use sane defaults for hints color and bold.\n"
    },
    {
      "commit": "ae5f793ec07b1e8be640135d255c70a765d3e3d0",
      "tree": "e1ef33f0bd6245399e4ffef03434ac1baf56d9b9",
      "parents": [
        "12a8680d8a0b7c6b513ba82eb437fb7e621a73bd"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Tue Apr 12 18:08:33 2016 +0200"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Tue Apr 12 18:08:33 2016 +0200"
      },
      "message": "linenoiseFree() API introduced.\n"
    },
    {
      "commit": "12a8680d8a0b7c6b513ba82eb437fb7e621a73bd",
      "tree": "2881646ff027de1cb294ebb5bf7413bb61da3069",
      "parents": [
        "d97e7665a855971e6f817536ed34b552abf236a0"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Tue Apr 12 17:59:33 2016 +0200"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Tue Apr 12 17:59:41 2016 +0200"
      },
      "message": "Hints WIP\n"
    },
    {
      "commit": "d97e7665a855971e6f817536ed34b552abf236a0",
      "tree": "e233eb0fe03a70748a6fe4901b32830ca27948d0",
      "parents": [
        "94d9ddb25635009f820d056cec8518cca7d7cf27"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Apr 06 13:40:15 2016 +0200"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Apr 06 13:40:15 2016 +0200"
      },
      "message": "Copyright info updated.\n"
    },
    {
      "commit": "94d9ddb25635009f820d056cec8518cca7d7cf27",
      "tree": "b04249421dc634b13cf30764f8bebcdaf979e057",
      "parents": [
        "027dbcef5d6853897603763d39c1873449da2efe"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Apr 06 13:39:09 2016 +0200"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Apr 06 13:39:09 2016 +0200"
      },
      "message": "4096 bytes line limit removed when STDIN is not a tty.\n"
    },
    {
      "commit": "027dbcef5d6853897603763d39c1873449da2efe",
      "tree": "5e260fd8d31b74717b4a3d852b0cbda9ed723db8",
      "parents": [
        "80fd0569d166cd32886a640e58f3bf292807a3c0"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Mon Jul 13 16:04:24 2015 +0200"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Mon Jul 13 16:04:24 2015 +0200"
      },
      "message": "Reported to work with Emacs comint mode.\n"
    },
    {
      "commit": "80fd0569d166cd32886a640e58f3bf292807a3c0",
      "tree": "50b3b208d6b4cf834b125c7cfd84816be33310a8",
      "parents": [
        "cf1bdf5f89e10b504a0bec3efc8a8587eadecd2c"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Mon Apr 13 09:38:43 2015 +0200"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Mon Apr 13 09:38:43 2015 +0200"
      },
      "message": "Version 1.0\n\nLinenoise is used in multiple projects for enough time, let\u0027s tag this\ncommit with a version number as requested into issue #88, so that we\nhave an initial reference.\n\nGiven the nature of the library, the version was also added in the\nlinenoise C and header file as well so that it is easy to realize for\npeople having a copy embedded somewhere if they are using the latest\nversion.\n"
    },
    {
      "commit": "cf1bdf5f89e10b504a0bec3efc8a8587eadecd2c",
      "tree": "83631744b8fd1f393e61b7bfb9739e77c5425382",
      "parents": [
        "c1c5a026d03ce58e7eb51cb5778e4226635d186f"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Tue Oct 07 15:22:48 2014 +0200"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Tue Oct 07 15:23:53 2014 +0200"
      },
      "message": "License file added.\n\nHowever the files linenose.c and linenose.h already had inline licenses.\n"
    },
    {
      "commit": "c1c5a026d03ce58e7eb51cb5778e4226635d186f",
      "tree": "9101160a60aa37058bfd9635f485658fb09014d9",
      "parents": [
        "01e723a095c181155e90fab2f9bb161c050a27ac"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Sep 03 11:49:43 2014 +0200"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Sep 03 11:49:43 2014 +0200"
      },
      "message": "Move to end before return when in multi-line mode.\n\nThis makes sure that if we are editing in multi-line mode a line that\nactually spawns across multiple lines, the next output performed by the\napplication using linenoise will not overwrite the edited line.\n"
    },
    {
      "commit": "01e723a095c181155e90fab2f9bb161c050a27ac",
      "tree": "94ab156af1fd7ce2574161d8467badb1ce43ace4",
      "parents": [
        "c84d0a02ce46439f501580bc5c42cf0fc61381dd"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Sep 03 11:38:19 2014 +0200"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Sep 03 11:38:19 2014 +0200"
      },
      "message": "Replace ESC 999D with CR.\n\nOSX default Terminal app does not handle 999D well, the cursor will wrap\nback to the previous row in the last colum, instead of ignoring the\nsequence if the cursor is already at the left edge.\n\nIn order to avoid reintroducing the nG sequence that is not compatible\nwith base VT100 emulation and ANSI.SYS, we use CR that should be\nhopefully widely supported.\n"
    },
    {
      "commit": "c84d0a02ce46439f501580bc5c42cf0fc61381dd",
      "tree": "f1c5b6ef5cc4ca190e55eaab8e24814e83459cf8",
      "parents": [
        "471e75460155d7b434044b7706bb8ac6fac46102"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Sep 03 10:11:31 2014 +0200"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Sep 03 10:11:31 2014 +0200"
      },
      "message": "Don\u0027t emit ESC [ n C with n\u003d0.\n\nThis fixes a bug introduced with ANSI.SYS compatibility.\nWhen we want to move at a specific column, we need to emit the sequence\nto move the cursor to the right (after we moved 999 positions to the left)\nonly if we want to actually move right at least 1 position, since a\ncount of zero will still move the cursor one position to the right.\n"
    },
    {
      "commit": "471e75460155d7b434044b7706bb8ac6fac46102",
      "tree": "0f974af3a898f8d8c24faa64358ba8a5b9d1f376",
      "parents": [
        "0a745fca68efdfe70cde46c588f41dd38f225da8"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Sep 03 09:51:29 2014 +0200"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Sep 03 09:51:29 2014 +0200"
      },
      "message": "Better specify the set of escapes used.\n"
    },
    {
      "commit": "0a745fca68efdfe70cde46c588f41dd38f225da8",
      "tree": "2d7943c5b7fc50d59b3ba2d4bae2812f5b8f12d3",
      "parents": [
        "828b9dacc52d4ad5a15c89be8fb8691d224f9a4f"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Sep 03 09:30:32 2014 +0200"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Sep 03 09:30:32 2014 +0200"
      },
      "message": "Avoid CHA sequence for ANSI.SYS compatibility.\n\nGithub user @welash proposed a change in issue #73 in order to improve\nthe linenoise compatibility with older terminal emulators only able to\ndeal with a subset of ANSI sequences, notably ANSI.SYS and VT100\nterminals strictly able to handle the original set of VT100 escape\nsequences.\n\nIn order to improve the compatibility, the CHA sequence was removed and\ntranslated to move 999 positions to the left, then move on the right\nfor the desired number of positions. The CHA sequence was apparently\nadded only with VT220, that\u0027s why it is not available everywhere.\n\nThis commit features almost exactly the change proposed in issue #73\nwith a small fix for a bug in multi-line editing mode introduced by the\npatch.\n"
    },
    {
      "commit": "828b9dacc52d4ad5a15c89be8fb8691d224f9a4f",
      "tree": "a13d8186cf201b5cedb6dd3a45880c741aad4af2",
      "parents": [
        "e0f15a65d6531a93942e413f3110f52ad851806e"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Sep 03 00:02:09 2014 +0200"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Sep 03 00:02:15 2014 +0200"
      },
      "message": "Remove trailing spaces from source code.\n"
    },
    {
      "commit": "e0f15a65d6531a93942e413f3110f52ad851806e",
      "tree": "62e0cbb7f2552bf55b8f392d779fe2f4635ae56b",
      "parents": [
        "0ca0326a74e8b3e65e66fc1292ad2a94ec310b99"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Fri Apr 18 17:47:49 2014 +0200"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Fri Apr 18 17:47:49 2014 +0200"
      },
      "message": "Multi line editing is no longer experimental.\n\nIt is now the default in the Redis command line interface so it is\nused by many users every day.\n"
    },
    {
      "commit": "0ca0326a74e8b3e65e66fc1292ad2a94ec310b99",
      "tree": "7e511805f2a237684055e7e0b58dd80485e0905c",
      "parents": [
        "542ad7e346c511fc1379c3128a9b570852ceae60"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Fri Apr 18 17:46:47 2014 +0200"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Fri Apr 18 17:46:47 2014 +0200"
      },
      "message": "Fixed yet another 1000 lines claim.\n"
    },
    {
      "commit": "542ad7e346c511fc1379c3128a9b570852ceae60",
      "tree": "65d9bbbecdb4017afb2b7c333fe169fbb8058883",
      "parents": [
        "c86280ed0c01cfc72aae3f620ffa1f6df61dfab6"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Fri Apr 18 17:45:40 2014 +0200"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Fri Apr 18 17:45:46 2014 +0200"
      },
      "message": "Linenoise is now ~ 1100 lines of code ;-)\n\nFixes issue #63.\n"
    },
    {
      "commit": "c86280ed0c01cfc72aae3f620ffa1f6df61dfab6",
      "tree": "95ebb48c40d6e622fc7f64ab8c8a91aea20f76fe",
      "parents": [
        "2a92a4d19bd3f6ed386514812a1a69b738675a9d"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Thu Mar 13 12:40:02 2014 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Thu Mar 13 12:40:02 2014 +0100"
      },
      "message": "linenoiseHistoryAdd() reworked + duplicated lines prevented.\n"
    },
    {
      "commit": "2a92a4d19bd3f6ed386514812a1a69b738675a9d",
      "tree": "9ed62b3bafed718c5bb70345127f2108ced3520c",
      "parents": [
        "ca20f8c4bc8b7f1d988b426b7f06cac662cc6562"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Thu Mar 13 12:27:53 2014 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Thu Mar 13 12:27:53 2014 +0100"
      },
      "message": "Check read() return value in getCursorPosition().\n"
    },
    {
      "commit": "ca20f8c4bc8b7f1d988b426b7f06cac662cc6562",
      "tree": "600738de39ed00be5cea7bfa728009af5f1f1ad3",
      "parents": [
        "8447b2b0f09fd4dd1271363a161c7ff347e684bd"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Thu Mar 13 12:25:14 2014 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Thu Mar 13 12:25:14 2014 +0100"
      },
      "message": "Support for Home / End keys.\n\nSome terminal reports ESC [H and ESC [F, while some other reports\nESC OH and ESC OF. We support both but there is at least another\nvariant documented, hopefully no longer.\n"
    },
    {
      "commit": "8447b2b0f09fd4dd1271363a161c7ff347e684bd",
      "tree": "fec8a8b97fd749879471553dfe0955173df813d5",
      "parents": [
        "9e1c23185be2a4762feecf8107ce20483d00a5d4"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Thu Mar 13 12:20:11 2014 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Thu Mar 13 12:20:11 2014 +0100"
      },
      "message": "Fix right arrow handling.\n\nBug introduced in recent refactoring.\n"
    },
    {
      "commit": "9e1c23185be2a4762feecf8107ce20483d00a5d4",
      "tree": "9194b2aa2d8484d031136b7b82307bc80a4f65cd",
      "parents": [
        "fb015dabbd14aa2ad9274cb348cf1ab37e5acd27"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Thu Mar 13 12:04:36 2014 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Thu Mar 13 12:04:36 2014 +0100"
      },
      "message": "If ioctl() fails get num of columns querying the terminal.\n\nThis change makes linenoise both more robust if the ioctl() fails, and\nfar more portable to non POSIX systems, since the ioclt() to query the\nterminal was probably one of the non trivial parts to replace.\n\nThe code is inspired to Andreas Kupries commit 24186e99 on the win32\nLinenoise port from Steve Bennett, but is a complete reimplementation.\n"
    },
    {
      "commit": "fb015dabbd14aa2ad9274cb348cf1ab37e5acd27",
      "tree": "44df6611c5e687b368c259d50cf6b1052910ea48",
      "parents": [
        "4115b61663d1cd3882fa029c43374852f8065d25"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Thu Mar 13 11:08:37 2014 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Thu Mar 13 11:08:37 2014 +0100"
      },
      "message": "linenoiseEdit() escapes processing refactor.\n"
    },
    {
      "commit": "4115b61663d1cd3882fa029c43374852f8065d25",
      "tree": "6f46c83d286ab5c61ef574476c1de79bdb55ebc1",
      "parents": [
        "3e521d47df6158a75ffe4387968b5548e5d05006"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Thu Mar 13 10:30:31 2014 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Thu Mar 13 10:30:31 2014 +0100"
      },
      "message": "Compare human readable key codes with chars literals.\n\nMany sequences are actually human readable and fall into the printable\nASCII subset, they are a lot more recognizable when written as chars\ncompared to numbers.\n\nFor example up arrow is sent back from the terimal as ESC [A, and so\nforth.\n\nThis commit makes the code speak the same \"language\" that you find in\nany terminal escape sequences documentation.\n"
    },
    {
      "commit": "3e521d47df6158a75ffe4387968b5548e5d05006",
      "tree": "f0df7f48009678cfb7689a06bd9f57d7dc7fa408",
      "parents": [
        "f698ec47d18c149cdf1293456f43fa49cb66f414"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Thu Mar 13 10:19:07 2014 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Thu Mar 13 10:19:07 2014 +0100"
      },
      "message": "linenoisePrintKeyCodes(): show character if printable.\n"
    },
    {
      "commit": "f698ec47d18c149cdf1293456f43fa49cb66f414",
      "tree": "d712a29c4b26e2b1711a3af0e4e068930c3da9b1",
      "parents": [
        "cb0d040010aabb05bab0025891a30e21c1e87d1b"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Thu Mar 13 10:08:39 2014 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Thu Mar 13 10:10:30 2014 +0100"
      },
      "message": "Rename Scan codes -\u003e Key codes.\n\nWhat we print in debug mode using the option (now) called --keycodes\nare not the scan codes, but the key codes returned by the terminal (a\nmore higher level representation of the keys pressed).\n\nThis commit fixes the word used.\n"
    },
    {
      "commit": "cb0d040010aabb05bab0025891a30e21c1e87d1b",
      "tree": "94497ec05c26c6bbd66342fb6e33363423a6a94f",
      "parents": [
        "bbcf9bf246ab575aeac5eebc2d10ff25cba63b26"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Mar 12 23:49:54 2014 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Mar 12 23:49:54 2014 +0100"
      },
      "message": "Fix Del key processing + minor cleanup.\n"
    },
    {
      "commit": "bbcf9bf246ab575aeac5eebc2d10ff25cba63b26",
      "tree": "2acf42a9a0a3f8b0fcc2382d8efd579a12adcda7",
      "parents": [
        "a05ab23df6f670303eceabb9f33e205ee3485613"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Mar 12 23:38:40 2014 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Mar 12 23:38:48 2014 +0100"
      },
      "message": "Scan codes debugging functionality.\n\n./linenoise_example --scancodes\n"
    },
    {
      "commit": "a05ab23df6f670303eceabb9f33e205ee3485613",
      "tree": "0a08002301e63d5e641c18ec7a35e8834e15c4cc",
      "parents": [
        "d5ec9cbbaabb7969e5c78c07d0db7926b2fd745e"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Mar 12 23:25:27 2014 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Mar 12 23:25:27 2014 +0100"
      },
      "message": "Use the two-reads fix for the additional escapes as well.\n\nSee commit e153bd8 for more information.\nThe gist is that slow terminals may return a short read of 1 byte.\n"
    },
    {
      "commit": "d5ec9cbbaabb7969e5c78c07d0db7926b2fd745e",
      "tree": "faaaf7d194b2aeffd9c8915e74afe10030182cc9",
      "parents": [
        "e153bd83abef6516a818eebb7b323f421e654782"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Mar 12 23:10:48 2014 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Mar 12 23:10:48 2014 +0100"
      },
      "message": "Arrow scancodes replaced with enums in linenoiseEdit().\n"
    },
    {
      "commit": "e153bd83abef6516a818eebb7b323f421e654782",
      "tree": "bc626cc2c2c11bf584dc4a1ef1fdb1606d4d89cc",
      "parents": [
        "8d4566825cb6b67e939eddb5b96a27bf60477cb2"
      ],
      "author": {
        "name": "Nick Gasson",
        "email": "nick.gasson@acano.com",
        "time": "Mon Jan 06 11:04:02 2014 +0000"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Mar 12 16:32:42 2014 +0100"
      },
      "message": "Fix escape sequence processing when only one byte available\n\nThe read call in the escape sequence processing does not\nhandle the case where only the first byte is available. This can\nhappen for example on a slow serial terminal.\n\nComment by @antirez:\n\nI reworked the code for brevity, for historical reasons here is the\nproposed patch. I believe my fix should be functionally equivalent.\n\nOriginal fix:\n\n             case 27:    /* escape sequence */\n                 /* Read the next two bytes representing the\n                    escape sequence. */\n    -            if (read(fd,seq,2) \u003d\u003d -1) break;\n    +            {\n    +                ssize_t b \u003d read(fd, seq, 2);\n    +\n    +                if (b \u003c 0) break;\n    +\n    +                if (b \u003d\u003d 1) {\n    +                    b \u003d read(fd,\u0026seq[1], 1);\n    +                    if (b !\u003d 1) {\n    +                        break;\n    +                    }\n    +                }\n    +            }\n\nSee PR #47.\n"
    },
    {
      "commit": "8d4566825cb6b67e939eddb5b96a27bf60477cb2",
      "tree": "90064b5cd873db7829dfe09d82c7e6be527c725c",
      "parents": [
        "fb2385900d6586a4e6f77cc901d7523320921926",
        "3cc30b1b2a2530ceb608aec40a56de47f13f262a"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Mar 12 16:28:32 2014 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Mar 12 16:28:32 2014 +0100"
      },
      "message": "Merge branch \u0027master\u0027 of github.com:/antirez/linenoise\n"
    },
    {
      "commit": "fb2385900d6586a4e6f77cc901d7523320921926",
      "tree": "72470eee21866740a47f4685e15bde4dd51e0e0a",
      "parents": [
        "94cbdd6540a79b5a3fda81a0044cf47fe2c2f0d9"
      ],
      "author": {
        "name": "Nick Gasson",
        "email": "nick.gasson@acano.com",
        "time": "Mon Jan 06 11:01:41 2014 +0000"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Mar 12 16:26:15 2014 +0100"
      },
      "message": "Add extern \"C\" around linenoise.h when compiled as C++\n"
    },
    {
      "commit": "3cc30b1b2a2530ceb608aec40a56de47f13f262a",
      "tree": "4310d0f2fbeb64b579ea07a76745752231334fa4",
      "parents": [
        "94cbdd6540a79b5a3fda81a0044cf47fe2c2f0d9",
        "4642c1ae25fe5a41bb7a8f212d8a0521a85633d9"
      ],
      "author": {
        "name": "Salvatore Sanfilippo",
        "email": "antirez@gmail.com",
        "time": "Wed Mar 12 16:23:24 2014 +0100"
      },
      "committer": {
        "name": "Salvatore Sanfilippo",
        "email": "antirez@gmail.com",
        "time": "Wed Mar 12 16:23:24 2014 +0100"
      },
      "message": "Merge pull request #48 from nickg/emacs\n\nAdd \"emacs\" to unsupported_term"
    },
    {
      "commit": "94cbdd6540a79b5a3fda81a0044cf47fe2c2f0d9",
      "tree": "9ca124abeb90c62e1e1f4bdbc3b54c9743a5ac3e",
      "parents": [
        "ff91a64c7899893113dc7c0e637e38fabb9a9da7",
        "3258af5ac93b03714e9cd8c264e7b1dabb3f8617"
      ],
      "author": {
        "name": "Salvatore Sanfilippo",
        "email": "antirez@gmail.com",
        "time": "Wed Mar 12 16:22:13 2014 +0100"
      },
      "committer": {
        "name": "Salvatore Sanfilippo",
        "email": "antirez@gmail.com",
        "time": "Wed Mar 12 16:22:13 2014 +0100"
      },
      "message": "Merge pull request #49 from polch/master_fixes\n\nfix linenoiseEdit buflen decreasing."
    },
    {
      "commit": "ff91a64c7899893113dc7c0e637e38fabb9a9da7",
      "tree": "a359fe927e068da554143f32953f496df6f51c88",
      "parents": [
        "01cd117f47e85e21651ef40f82582c6a23293264",
        "9031c808f08603f39653f88c77d7b190000a31b6"
      ],
      "author": {
        "name": "Salvatore Sanfilippo",
        "email": "antirez@gmail.com",
        "time": "Wed Mar 12 16:19:51 2014 +0100"
      },
      "committer": {
        "name": "Salvatore Sanfilippo",
        "email": "antirez@gmail.com",
        "time": "Wed Mar 12 16:19:51 2014 +0100"
      },
      "message": "Merge pull request #51 from MartinNowak/const\n\nuse const char * when modification isn\u0027t necessary"
    },
    {
      "commit": "01cd117f47e85e21651ef40f82582c6a23293264",
      "tree": "62b87367fed2271dce2eab00e762652e261d0dd8",
      "parents": [
        "49635f1ccaf5d6dd159fab1f870f7d026c105183"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Mar 12 16:18:18 2014 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Mar 12 16:18:20 2014 +0100"
      },
      "message": "Don\u0027t assume STDIN_FD and STDOUT_FD are interchangeable.\n"
    },
    {
      "commit": "49635f1ccaf5d6dd159fab1f870f7d026c105183",
      "tree": "4cdc955fad1adf300d7c689528be599020ca7197",
      "parents": [
        "8ea25f8da3daeb7a5c86a500a7e17873952ac205"
      ],
      "author": {
        "name": "Shengwen1997",
        "email": "l1996812@gmail.com",
        "time": "Thu Jan 16 22:26:24 2014 +0800"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Mar 12 16:07:14 2014 +0100"
      },
      "message": "Add the key enumeration\n"
    },
    {
      "commit": "8ea25f8da3daeb7a5c86a500a7e17873952ac205",
      "tree": "14b5bc3823c9da9f36e71b2795f40309abd00dca",
      "parents": [
        "f3a4e0629ce69056c84734cfac70268956cb804f"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Mar 12 15:38:37 2014 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Mar 12 15:38:37 2014 +0100"
      },
      "message": "Debugging code cleanup.\n"
    },
    {
      "commit": "f3a4e0629ce69056c84734cfac70268956cb804f",
      "tree": "f72fc458d093d6fe9e943826a744b0e84459705e",
      "parents": [
        "cbf172f79dbc86264fd35b2b8a0b308896ae00e1",
        "2022fb1fc8585d13745deb2019cdb7c210c5b9e2"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Mar 12 13:12:29 2014 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Mar 12 13:12:29 2014 +0100"
      },
      "message": "Merge branch \u0027master\u0027 of git://github.com/antirez/linenoise\n"
    },
    {
      "commit": "cbf172f79dbc86264fd35b2b8a0b308896ae00e1",
      "tree": "9cceee404e30e8f7c5137498d1b7c1b3d14ff353",
      "parents": [
        "aed9d1af9fd9f8d83ec9b5fcb0c2d071433f9fd1"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Mar 12 13:10:44 2014 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Mar 12 13:10:44 2014 +0100"
      },
      "message": "Handle malloc error in linenoiseAddCompletion().\n\nWe just don\u0027t add the entry on out of memory to avoid to\nbreak the API with previous versions of Linenoise.\n"
    },
    {
      "commit": "aed9d1af9fd9f8d83ec9b5fcb0c2d071433f9fd1",
      "tree": "82c6ad246617ef1f9f459bfd8065e1140e914bb4",
      "parents": [
        "59a4fc96d840f1834002ec378c95908d40c8f604"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Mar 12 13:04:22 2014 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Mar 12 13:04:26 2014 +0100"
      },
      "message": "Refresh line with single write to avoid flickering.\n\nEscape sequences and actual content to write to the terminal is now\naccumulated into an heap allocated buffer that is flushed with a single\nwrite at the end. This avoids a flickering effect making linenoise more\nprofessional looking ;-)\n"
    },
    {
      "commit": "2022fb1fc8585d13745deb2019cdb7c210c5b9e2",
      "tree": "bb70a3a9fbdf537382bafa79473463808c11cf79",
      "parents": [
        "27a3b4d5205a5fb3e2101128edd6653bd0c92189",
        "5f5cc2eaaee6932d595b95687a1183144b07fdb1"
      ],
      "author": {
        "name": "Salvatore Sanfilippo",
        "email": "antirez@gmail.com",
        "time": "Fri Feb 21 10:48:29 2014 +0100"
      },
      "committer": {
        "name": "Salvatore Sanfilippo",
        "email": "antirez@gmail.com",
        "time": "Fri Feb 21 10:48:29 2014 +0100"
      },
      "message": "Merge pull request #53 from insop/master\n\nfix incorrect type caused issue on 64bit powerpc"
    },
    {
      "commit": "5f5cc2eaaee6932d595b95687a1183144b07fdb1",
      "tree": "bb70a3a9fbdf537382bafa79473463808c11cf79",
      "parents": [
        "27a3b4d5205a5fb3e2101128edd6653bd0c92189"
      ],
      "author": {
        "name": "Insop Song",
        "email": "insop.song@gainspeed.com",
        "time": "Fri Feb 21 01:21:13 2014 -0800"
      },
      "committer": {
        "name": "Insop Song",
        "email": "insop.song@gainspeed.com",
        "time": "Fri Feb 21 01:21:13 2014 -0800"
      },
      "message": "fix incorrect type caused issue on 64bit powerpc\n\nSigned-off-by: Insop Song \u003cinsop.song@gainspeed.com\u003e\n"
    },
    {
      "commit": "9031c808f08603f39653f88c77d7b190000a31b6",
      "tree": "67e0cc014b276a50a276c6da7bc11a61402c5c5f",
      "parents": [
        "27a3b4d5205a5fb3e2101128edd6653bd0c92189"
      ],
      "author": {
        "name": "Martin Nowak",
        "email": "code@dawg.eu",
        "time": "Tue Jan 28 00:53:26 2014 +0100"
      },
      "committer": {
        "name": "Martin Nowak",
        "email": "code@dawg.eu",
        "time": "Tue Jan 28 00:53:26 2014 +0100"
      },
      "message": "use const char * when modification isn\u0027t necessary\n"
    },
    {
      "commit": "3258af5ac93b03714e9cd8c264e7b1dabb3f8617",
      "tree": "528bc2e4d00eec3a2bf75551d20877786c73d92c",
      "parents": [
        "27a3b4d5205a5fb3e2101128edd6653bd0c92189"
      ],
      "author": {
        "name": "Paul Chavent",
        "email": "paul.chavent@fnac.net",
        "time": "Wed Jan 15 22:52:18 2014 +0100"
      },
      "committer": {
        "name": "Paul Chavent",
        "email": "paul.chavent@fnac.net",
        "time": "Wed Jan 15 22:52:18 2014 +0100"
      },
      "message": "fix linenoiseEdit buflen decreasing.\n"
    },
    {
      "commit": "4642c1ae25fe5a41bb7a8f212d8a0521a85633d9",
      "tree": "243e9db30158bb64ca4653cc3870a1f04cedbb3f",
      "parents": [
        "27a3b4d5205a5fb3e2101128edd6653bd0c92189"
      ],
      "author": {
        "name": "Nick Gasson",
        "email": "nick.gasson@acano.com",
        "time": "Mon Jan 06 11:19:36 2014 +0000"
      },
      "committer": {
        "name": "Nick Gasson",
        "email": "nick.gasson@acano.com",
        "time": "Mon Jan 06 11:19:36 2014 +0000"
      },
      "message": "Add \"emacs\" to unsupported_term\n\nThe Emacs terminal emulator has its own line editing and does not\nbehave correctly in raw mode. Without this programs using linenoise\nwill hang when run inside an Emacs shell.\n"
    },
    {
      "commit": "27a3b4d5205a5fb3e2101128edd6653bd0c92189",
      "tree": "d2f5ca0a0b3d786342516ff0238f9a8a6da09d91",
      "parents": [
        "59a4fc96d840f1834002ec378c95908d40c8f604",
        "fac5a1cb2695d0cc3a9dff3185170237b759fa1a"
      ],
      "author": {
        "name": "Salvatore Sanfilippo",
        "email": "antirez@gmail.com",
        "time": "Fri Feb 08 03:33:05 2013 -0800"
      },
      "committer": {
        "name": "Salvatore Sanfilippo",
        "email": "antirez@gmail.com",
        "time": "Fri Feb 08 03:33:05 2013 -0800"
      },
      "message": "Merge pull request #31 from fperrad/buildroot\n\nfix getColumns() for Buildroot"
    },
    {
      "commit": "59a4fc96d840f1834002ec378c95908d40c8f604",
      "tree": "a086cdae090d0d56a6da4eb6214a7a51e10f9e76",
      "parents": [
        "64e109e26cc9738523d26585c3d79751be49215d"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Fri Feb 08 12:24:07 2013 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Fri Feb 08 12:24:07 2013 +0100"
      },
      "message": "Example app improved.\n"
    },
    {
      "commit": "64e109e26cc9738523d26585c3d79751be49215d",
      "tree": "661546be799ddbe57d597f34f83afd78d936d1c9",
      "parents": [
        "5654f543aa418522b80c96ecd1fa55dd5801832a"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Fri Feb 08 12:18:42 2013 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Fri Feb 08 12:18:42 2013 +0100"
      },
      "message": "linenoiseHistorySetMaxLen() was broken and never tested. Fixed.\n"
    },
    {
      "commit": "5654f543aa418522b80c96ecd1fa55dd5801832a",
      "tree": "2e2757a9df4149dd73e84afbd36b75ce299ac969",
      "parents": [
        "892ec0fe4c0189cd443f7f817768f07214cf84df",
        "dac4299905e4f0d0a943b7cc792bcf07825bedd3"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Fri Feb 08 00:12:39 2013 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Fri Feb 08 00:12:39 2013 +0100"
      },
      "message": "Merge branch \u0027master\u0027 of git://github.com/antirez/linenoise\n"
    },
    {
      "commit": "892ec0fe4c0189cd443f7f817768f07214cf84df",
      "tree": "0a022d0d4428b9da753431dcfa2998c515e4b536",
      "parents": [
        "4cc1ac49840a15b4cd174ade369b0ea9e3c96ce6"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Fri Feb 08 00:12:01 2013 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Fri Feb 08 00:12:01 2013 +0100"
      },
      "message": "Completion fixed (broken during refactoring).\n"
    },
    {
      "commit": "dac4299905e4f0d0a943b7cc792bcf07825bedd3",
      "tree": "a993761b31825d1382fa12d64b5eb7723716fdfc",
      "parents": [
        "4cc1ac49840a15b4cd174ade369b0ea9e3c96ce6",
        "7c0ec84ed7992089ac1cd9df072a3b8925c88820"
      ],
      "author": {
        "name": "Salvatore Sanfilippo",
        "email": "antirez@gmail.com",
        "time": "Thu Feb 07 15:05:56 2013 -0800"
      },
      "committer": {
        "name": "Salvatore Sanfilippo",
        "email": "antirez@gmail.com",
        "time": "Thu Feb 07 15:05:56 2013 -0800"
      },
      "message": "Merge pull request #30 from shvechikov/patch-1\n\nTypo: readl -\u003e real"
    },
    {
      "commit": "4cc1ac49840a15b4cd174ade369b0ea9e3c96ce6",
      "tree": "46ca769078619d2f17e60c2764296a651251d9d1",
      "parents": [
        "09ddc70963adf2bc40a0f5ddeb84bec968493915",
        "d6373b31393c17a2b8e992724878a64c80c595ed"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Thu Feb 07 17:31:25 2013 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Thu Feb 07 17:31:25 2013 +0100"
      },
      "message": "Merge branch \u0027master\u0027 of git://github.com/antirez/linenoise\n"
    },
    {
      "commit": "09ddc70963adf2bc40a0f5ddeb84bec968493915",
      "tree": "3c1dca2386b8c2353d7d203f1b02e83323198a45",
      "parents": [
        "752175d66bb0ebc65186d600a3caabaee785a19d"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Thu Feb 07 17:30:49 2013 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Thu Feb 07 17:30:49 2013 +0100"
      },
      "message": "Fix to multi-line mode when deleting cross-line with cursor at EOL.\n"
    },
    {
      "commit": "d6373b31393c17a2b8e992724878a64c80c595ed",
      "tree": "7766cd711ffda908b7e4ebd896ac8481c9c6cc4a",
      "parents": [
        "752175d66bb0ebc65186d600a3caabaee785a19d",
        "d7f2c5c56795e2bfd4312b3dd74163e6137cb96b"
      ],
      "author": {
        "name": "Salvatore Sanfilippo",
        "email": "antirez@gmail.com",
        "time": "Thu Feb 07 08:18:29 2013 -0800"
      },
      "committer": {
        "name": "Salvatore Sanfilippo",
        "email": "antirez@gmail.com",
        "time": "Thu Feb 07 08:18:29 2013 -0800"
      },
      "message": "Merge pull request #37 from spullara/patch-1\n\nReducing the lines of code from 1 million to 1 thousand"
    },
    {
      "commit": "d7f2c5c56795e2bfd4312b3dd74163e6137cb96b",
      "tree": "7766cd711ffda908b7e4ebd896ac8481c9c6cc4a",
      "parents": [
        "752175d66bb0ebc65186d600a3caabaee785a19d"
      ],
      "author": {
        "name": "Sam Pullara",
        "email": "sam@sampullara.com",
        "time": "Thu Feb 07 08:17:39 2013 -0800"
      },
      "committer": {
        "name": "Sam Pullara",
        "email": "sam@sampullara.com",
        "time": "Thu Feb 07 08:17:39 2013 -0800"
      },
      "message": "Reducing the lines of code from 1 million to 1 thousand"
    },
    {
      "commit": "752175d66bb0ebc65186d600a3caabaee785a19d",
      "tree": "03b39df14a3c1aa32df1750afcd0c2af697c27d5",
      "parents": [
        "40a361d1f2a587966ea5e8a04ae681610f12fd9f"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Thu Feb 07 17:02:48 2013 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Thu Feb 07 17:02:48 2013 +0100"
      },
      "message": "Linenoise is now ~1000 lines of code, not 400.\n"
    },
    {
      "commit": "40a361d1f2a587966ea5e8a04ae681610f12fd9f",
      "tree": "fe82373d9d11e100ab12cdef4ee756e1e0c614ec",
      "parents": [
        "04eb8546040df846c5d555689807ba51c736bf11"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Thu Feb 07 16:59:43 2013 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Thu Feb 07 16:59:43 2013 +0100"
      },
      "message": "README updated.\n"
    },
    {
      "commit": "04eb8546040df846c5d555689807ba51c736bf11",
      "tree": "9e74cdb6ff1f5192ce3ba3358198fc84b3794ad4",
      "parents": [
        "16d398e6b89fa14103c1e19ba47700691d0e6e16"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Thu Feb 07 16:57:09 2013 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Thu Feb 07 16:57:09 2013 +0100"
      },
      "message": "Better option parsing for the example program.\n"
    },
    {
      "commit": "16d398e6b89fa14103c1e19ba47700691d0e6e16",
      "tree": "b52052c3c4d4f410da25cc705924d3565cf35fa0",
      "parents": [
        "381bdee2873839456978e06e998971195cb636e8"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Thu Feb 07 16:06:16 2013 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Thu Feb 07 16:51:57 2013 +0100"
      },
      "message": "Experimental multi-line editing capabilities.\n"
    },
    {
      "commit": "381bdee2873839456978e06e998971195cb636e8",
      "tree": "fcff31c84e149e2750729940fbd45d8ac11f1fd4",
      "parents": [
        "0f3b8134c666d86bad6847e00fed1f439fffbf24"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Feb 06 12:49:06 2013 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Feb 06 12:49:06 2013 +0100"
      },
      "message": "Update year in copyright notice.\n"
    },
    {
      "commit": "0f3b8134c666d86bad6847e00fed1f439fffbf24",
      "tree": "ee9b4c1daea8b915703e78ccebe337d2fe68bf10",
      "parents": [
        "2144786428135ffaa7a86856cce8787497730d8a"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Feb 06 12:41:15 2013 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Feb 06 12:41:22 2013 +0100"
      },
      "message": "Escapes dispatching better documented.\n"
    },
    {
      "commit": "2144786428135ffaa7a86856cce8787497730d8a",
      "tree": "a2924fb80e0125f90e77337d4ac27a4186e112ae",
      "parents": [
        "57b3f76109eb3abf03de06cbb17185038387565a"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Feb 06 12:38:36 2013 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Feb 06 12:38:45 2013 +0100"
      },
      "message": "Ctrl-w refactored into linenoiseEditDeletePrevWord().\n"
    },
    {
      "commit": "57b3f76109eb3abf03de06cbb17185038387565a",
      "tree": "f5e9a5d9c79dcc1161550cfef0b2cecdacd9064e",
      "parents": [
        "4d166e4f13522f46fd1b754687f4785d9f5fe34b"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Feb 06 12:32:42 2013 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Feb 06 12:32:42 2013 +0100"
      },
      "message": "Clarified with ctrl-t does in comments.\n"
    },
    {
      "commit": "4d166e4f13522f46fd1b754687f4785d9f5fe34b",
      "tree": "ec4a4a755f12576651b4baa695a6520462db51ca",
      "parents": [
        "9e15fd42f6eaabc5dd77658a783f17bbf747795f"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Feb 06 12:28:29 2013 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Feb 06 12:28:29 2013 +0100"
      },
      "message": "Backspace functionality refactored into linenoiseEditBackspace() function.\n"
    },
    {
      "commit": "9e15fd42f6eaabc5dd77658a783f17bbf747795f",
      "tree": "afc9d0ae3a78fa74421fd507385bdcd2af4248c2",
      "parents": [
        "62a30cac31645264bced6acacd646245e1e21659"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Feb 06 12:20:01 2013 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Feb 06 12:20:10 2013 +0100"
      },
      "message": "Delete and ctrl-d refactored into linenoiseEditDelete()\n"
    },
    {
      "commit": "62a30cac31645264bced6acacd646245e1e21659",
      "tree": "597b55efc549364d1ff37797497304c0820e3a35",
      "parents": [
        "07fb96dad2189c0925f670d2f2b426fe99883134"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Feb 06 12:08:19 2013 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Feb 06 12:08:19 2013 +0100"
      },
      "message": "Off-by-one overflow fixed. Was a silent bug before refactoring.\n"
    },
    {
      "commit": "07fb96dad2189c0925f670d2f2b426fe99883134",
      "tree": "21dd3bca77381b3234d3bbd2e064bfb35b7c350a",
      "parents": [
        "44a5f2a969dc3be7f28f79db5cf67ab992d55d77"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Tue Feb 05 23:01:32 2013 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Tue Feb 05 23:01:32 2013 +0100"
      },
      "message": "Refactoring WIP #1: split in functions.\n"
    },
    {
      "commit": "44a5f2a969dc3be7f28f79db5cf67ab992d55d77",
      "tree": "03b6e86b74fcef5bab767593fd31249894c7d9de",
      "parents": [
        "9334052613dcb8ad8c3b3ee319b70c83010ac39a"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Tue Feb 05 19:52:01 2013 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Tue Feb 05 19:54:02 2013 +0100"
      },
      "message": "More stuff on .gitignore\n"
    },
    {
      "commit": "9334052613dcb8ad8c3b3ee319b70c83010ac39a",
      "tree": "129c75ae10a7ad8dd4a06e1a990f56063a1c3a38",
      "parents": [
        "b7a76cd8a59d68f4f1bc2d70ea75d64950de382c"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Tue Feb 05 19:51:03 2013 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Tue Feb 05 19:53:38 2013 +0100"
      },
      "message": "Refactoring: code split into sections. Chars insertion as a function.\n"
    },
    {
      "commit": "b7a76cd8a59d68f4f1bc2d70ea75d64950de382c",
      "tree": "608d73bbe48e8df7a25762a8129f70aeb7817724",
      "parents": [
        "bb192237e83f41c06abe80c9bdfe99cba19d2f9c"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Tue Feb 05 19:34:10 2013 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Tue Feb 05 19:34:10 2013 +0100"
      },
      "message": "linenosePrompt() -\u003e linenoiseEdit().\n"
    },
    {
      "commit": "bb192237e83f41c06abe80c9bdfe99cba19d2f9c",
      "tree": "1e61b59770449b1c29a27cfdb2b786c75c259a3c",
      "parents": [
        "96fd7d410633e4edc7227310466fef2235f2b6ff"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Tue Feb 05 19:26:07 2013 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Tue Feb 05 19:26:07 2013 +0100"
      },
      "message": "README updated (we know have completion).\n"
    },
    {
      "commit": "96fd7d410633e4edc7227310466fef2235f2b6ff",
      "tree": "f31b2acc5ab2ae27d38a76b806bc7755f261d766",
      "parents": [
        "5e5b0cf54f51dbd41105aa3f7b858545816e3ae2"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Tue Feb 05 19:25:08 2013 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Tue Feb 05 19:25:08 2013 +0100"
      },
      "message": "All functions commented.\n"
    },
    {
      "commit": "5e5b0cf54f51dbd41105aa3f7b858545816e3ae2",
      "tree": "7b930c88c2c0d1ed01e3692e876e38742c6f9f65",
      "parents": [
        "8c9b481281ba401f6baf45bc9ca9fc940b59405f"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Tue Feb 05 18:49:19 2013 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Tue Feb 05 18:58:02 2013 +0100"
      },
      "message": "Refactoring: editing state is now a structure.\n"
    },
    {
      "commit": "fac5a1cb2695d0cc3a9dff3185170237b759fa1a",
      "tree": "1fcb5075d243b345a131f76187db5c5b3edb7b49",
      "parents": [
        "8c9b481281ba401f6baf45bc9ca9fc940b59405f"
      ],
      "author": {
        "name": "Francois Perrad",
        "email": "francois.perrad@gadz.org",
        "time": "Wed Oct 03 09:33:04 2012 +0200"
      },
      "committer": {
        "name": "Francois Perrad",
        "email": "francois.perrad@gadz.org",
        "time": "Wed Oct 03 09:33:04 2012 +0200"
      },
      "message": "fix getColumns() for Buildroot\n\nsame behaviour in ncurses (drv_size() in tinfo/tinfo_driver.c)\n"
    },
    {
      "commit": "8c9b481281ba401f6baf45bc9ca9fc940b59405f",
      "tree": "59c8935c5b8145e680c1e3efc175b028132f17cd",
      "parents": [
        "02d793517ef370a49a436c80262fad8c0020a6aa",
        "98ca0397c5b661c1940238f7d5b0ec81365395dc"
      ],
      "author": {
        "name": "Salvatore Sanfilippo",
        "email": "antirez@gmail.com",
        "time": "Tue Oct 02 11:22:59 2012 -0700"
      },
      "committer": {
        "name": "Salvatore Sanfilippo",
        "email": "antirez@gmail.com",
        "time": "Tue Oct 02 11:22:59 2012 -0700"
      },
      "message": "Merge pull request #18 from gsserge/master\n\nYet Another Ctrl+W"
    },
    {
      "commit": "7c0ec84ed7992089ac1cd9df072a3b8925c88820",
      "tree": "9d614690eeedbb5306104ddee455074501abf247",
      "parents": [
        "02d793517ef370a49a436c80262fad8c0020a6aa"
      ],
      "author": {
        "name": "Leonid Shvechikov",
        "email": "shvechikov@gmail.com",
        "time": "Fri Aug 24 20:44:20 2012 +0400"
      },
      "committer": {
        "name": "Leonid Shvechikov",
        "email": "shvechikov@gmail.com",
        "time": "Fri Aug 24 20:44:20 2012 +0400"
      },
      "message": "Typo: readl -\u003e real"
    },
    {
      "commit": "98ca0397c5b661c1940238f7d5b0ec81365395dc",
      "tree": "59c8935c5b8145e680c1e3efc175b028132f17cd",
      "parents": [
        "02d793517ef370a49a436c80262fad8c0020a6aa"
      ],
      "author": {
        "name": "Sergey Glushchenko",
        "email": "gsserge@gmail.com",
        "time": "Thu Jun 30 22:03:46 2011 +0300"
      },
      "committer": {
        "name": "Sergey Glushchenko",
        "email": "gsserge@gmail.com",
        "time": "Thu Jun 30 22:03:46 2011 +0300"
      },
      "message": "Add ctrl-w: delete previous word\n"
    },
    {
      "commit": "02d793517ef370a49a436c80262fad8c0020a6aa",
      "tree": "e2d09e64b9c3f6d5c397a62314d0e859482a3d37",
      "parents": [
        "6cdc775807e57b2c3fd64bd207814f8ee1fe35f3"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Mar 30 17:08:20 2011 +0200"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Mar 30 17:08:20 2011 +0200"
      },
      "message": "switched to two-clause simplified BSD license\n"
    },
    {
      "commit": "6cdc775807e57b2c3fd64bd207814f8ee1fe35f3",
      "tree": "9fb497dec9879c20eb35ac21ab0d8c698ee6c3e8",
      "parents": [
        "03e8e4dab590a2de2d1880a8700af0d69b7a1b14"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Tue Feb 22 17:38:49 2011 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Tue Feb 22 17:38:49 2011 +0100"
      },
      "message": "Support for ctrl-d deleting the char at right of the cursor added\n"
    },
    {
      "commit": "03e8e4dab590a2de2d1880a8700af0d69b7a1b14",
      "tree": "ba36652c64c7524df65bd081f7631562c5fe6806",
      "parents": [
        "7f6690911beecdb91e3324e7f200ff10b39a38d9"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@metal.(none)",
        "time": "Fri Dec 10 19:21:28 2010 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@metal.(none)",
        "time": "Fri Dec 10 19:21:28 2010 +0100"
      },
      "message": "suppress a warning on Linux adding some truly stupid code\n"
    },
    {
      "commit": "7f6690911beecdb91e3324e7f200ff10b39a38d9",
      "tree": "f9bc3f3511b40c2d19a3547681c65f9d38338ffc",
      "parents": [
        "322176621cbc95870569d107797996e8db3e68d8"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Dec 01 11:11:55 2010 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Dec 01 11:11:55 2010 +0100"
      },
      "message": "Ctrl-l support to clear the screen. New sequences added documented.\n"
    },
    {
      "commit": "322176621cbc95870569d107797996e8db3e68d8",
      "tree": "f85a7cff2dd85a2405e43b8fb6792fca2775b575",
      "parents": [
        "f4508efb9b3f228da7040ae487a5c23fb033e603"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Tue Nov 30 11:37:48 2010 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Tue Nov 30 11:37:48 2010 +0100"
      },
      "message": "gitignore added\n"
    },
    {
      "commit": "f4508efb9b3f228da7040ae487a5c23fb033e603",
      "tree": "10811aebbfdf3eec4cda681509ae4ffd2d8f218b",
      "parents": [
        "778de19a2bd850e57db50b44572118bd2c9403f0"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Tue Nov 30 11:34:06 2010 +0100"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Tue Nov 30 11:34:06 2010 +0100"
      },
      "message": "Pieter Noordhuis copyright notice added, since this was a major contribution. README updated.\n"
    },
    {
      "commit": "778de19a2bd850e57db50b44572118bd2c9403f0",
      "tree": "6f9040a002cc11218694eb047024c473e691ded3",
      "parents": [
        "493a55014a4341dc8120ef603acc9d2af2a2b070"
      ],
      "author": {
        "name": "Pieter Noordhuis",
        "email": "pcnoordhuis@gmail.com",
        "time": "Mon Nov 29 20:35:20 2010 +0100"
      },
      "committer": {
        "name": "Pieter Noordhuis",
        "email": "pcnoordhuis@gmail.com",
        "time": "Mon Nov 29 20:35:20 2010 +0100"
      },
      "message": "Show original buffer when completion is aborted\n"
    },
    {
      "commit": "493a55014a4341dc8120ef603acc9d2af2a2b070",
      "tree": "5dd46387532869aa2abc26d48c635ed5df400f01",
      "parents": [
        "7534b88325765ab69dbb91b5a8f55b58e8844ef9"
      ],
      "author": {
        "name": "Pieter Noordhuis",
        "email": "pcnoordhuis@gmail.com",
        "time": "Mon Nov 29 18:52:55 2010 +0100"
      },
      "committer": {
        "name": "Pieter Noordhuis",
        "email": "pcnoordhuis@gmail.com",
        "time": "Mon Nov 29 18:52:55 2010 +0100"
      },
      "message": "Minimal framework for autocompletion\n"
    },
    {
      "commit": "7534b88325765ab69dbb91b5a8f55b58e8844ef9",
      "tree": "2e9c861efe9620de7e9d4a0fb3e9824703a616d4",
      "parents": [
        "ce845468b084992ab626ca47c83fa6f14b23d59b"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Fri Sep 24 17:05:18 2010 +0200"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Fri Sep 24 17:05:18 2010 +0200"
      },
      "message": "support for delete key, thanks to jgriffiths (on github)\n"
    },
    {
      "commit": "ce845468b084992ab626ca47c83fa6f14b23d59b",
      "tree": "f44a5be656b444de404442c4d293e021a0e7a523",
      "parents": [
        "28884b52a8d42d992b6bbacbc8d7397aa4a84b2a"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Jul 07 18:26:23 2010 +0200"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Jul 07 18:26:23 2010 +0200"
      },
      "message": "Support API to save/load history on file\n"
    },
    {
      "commit": "28884b52a8d42d992b6bbacbc8d7397aa4a84b2a",
      "tree": "179394468d5f8c1a7a7396b12c939172b8ebfb67",
      "parents": [
        "42ba034ea42c558b561a21d3a77066636eca0c88"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Jul 07 18:05:11 2010 +0200"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Jul 07 18:05:11 2010 +0200"
      },
      "message": "Fixed another mem leak\n"
    },
    {
      "commit": "42ba034ea42c558b561a21d3a77066636eca0c88",
      "tree": "2deaa7c1c4f0bfbc5e0a23b6597566c0a1cf56e8",
      "parents": [
        "6a0775fd61d2fa3d69f55813e5e0bd98110bc593"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Jul 07 13:28:26 2010 +0200"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Jul 07 13:28:26 2010 +0200"
      },
      "message": "enabled debugging symbols in Make, used NULL instead of 0 introduced for a typo\n"
    },
    {
      "commit": "6a0775fd61d2fa3d69f55813e5e0bd98110bc593",
      "tree": "f526c8f36a6718e7b62e499c5177b685f9842000",
      "parents": [
        "10a81c0ffb3699ba289f7d22bea42659b9ac7fbe"
      ],
      "author": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Jul 07 13:19:29 2010 +0200"
      },
      "committer": {
        "name": "antirez",
        "email": "antirez@gmail.com",
        "time": "Wed Jul 07 13:19:29 2010 +0200"
      },
      "message": "Fixed one memleak, investigating the next one\n"
    }
  ],
  "next": "10a81c0ffb3699ba289f7d22bea42659b9ac7fbe"
}
