{"action":"created","comment":{"url":"https://api.github.com/repos/neovim/neovim/pulls/comments/26817009","id":26817009,"diff_hunk":"@@ -87,3 +98,591 @@ void os_get_hostname(char *hostname, size_t len)\n #endif\n }\n \n+/// To get the \"real\" home directory:\n+///   - get value of $HOME\n+/// For Unix:\n+///   - go to that directory\n+///   - do os_dirname() to get the real name of that directory.\n+/// This also works with mounts and links.\n+/// Don't do this for MS-DOS, it will change the \"current dir\" for a drive.\n+static char_u   *homedir = NULL;\n+\n+void init_homedir(void)\n+{\n+  char_u  *var;\n+\n+  /* In case we are called a second time (when 'encoding' changes). */\n+  free(homedir);\n+  homedir = NULL;\n+\n+  var = (char_u *)os_getenv(\"HOME\");\n+\n+  if (var != NULL && *var == NUL)       /* empty is same as not set */\n+    var = NULL;\n+\n+\n+  if (var != NULL) {\n+#ifdef UNIX\n+    /*\n+     * Change to the directory and get the actual path.  This resolves\n+     * links.  Don't do it when we can't return.\n+     */\n+    if (os_dirname(NameBuff, MAXPATHL) == OK\n+        && os_chdir((char *)NameBuff) == 0) {\n+      if (!os_chdir((char *)var) && os_dirname(IObuff, IOSIZE) == OK)\n+        var = IObuff;\n+      if (os_chdir((char *)NameBuff) != 0)\n+        EMSG(_(e_prev_dir));\n+    }\n+#endif\n+    homedir = vim_strsave(var);\n+  }\n+}\n+\n+#if defined(EXITFREE)\n+\n+void free_homedir(void)\n+{\n+  free(homedir);\n+}\n+\n+#endif\n+\n+/// Call expand_env() and store the result in an allocated string.\n+/// This is not very memory efficient, this expects the result to be freed\n+/// again soon.\n+/// @param src String containing environment variables to expand\n+/// @see {expand_env}\n+char_u *expand_env_save(char_u *src)\n+{\n+  return expand_env_save_opt(src, false);\n+}\n+\n+/// Similar to expand_env_save() but when \"one\" is `true` handle the string as\n+/// one file name, i.e. only expand \"~\" at the start.\n+/// @param src String containing environment variables to expand\n+/// @param one Should treat as only one file name\n+/// @see {expand_env}\n+char_u *expand_env_save_opt(char_u *src, bool one)\n+{\n+  char_u *p = xmalloc(MAXPATHL);\n+  expand_env_esc(src, p, MAXPATHL, false, one, NULL);\n+  return p;\n+}\n+\n+/// Expand environment variable with path name.\n+/// \"~/\" is also expanded, using $HOME. For Unix \"~user/\" is expanded.\n+/// Skips over \"\\ \", \"\\~\" and \"\\$\" (not for Win32 though).\n+/// If anything fails no expansion is done and dst equals src.\n+/// @param src Input string e.g. \"$HOME/vim.hlp\"\n+/// @param dst Where to put the result\n+/// @param dstlen Maximum length of the result\n+void expand_env(char_u *src, char_u *dst, int dstlen)\n+{\n+  expand_env_esc(src, dst, dstlen, false, false, NULL);\n+}\n+\n+/// Expand environment variable with path name and escaping.\n+/// \"~/\" is also expanded, using $HOME. For Unix \"~user/\" is expanded.\n+/// Skips over \"\\ \", \"\\~\" and \"\\$\" (not for Win32 though).\n+/// If anything fails no expansion is done and dst equals src.\n+/// startstr recognize the start of a new name, for '~' expansion.\n+/// @param srcp Input string e.g. \"$HOME/vim.hlp\"\n+/// @param dst Where to put the result\n+/// @param dstlen Maximum length of the result\n+/// @param esc Should we escape spaces in expanded variables?\n+/// @param one Should we expand more than one '~'?\n+/// @param startstr Common prefix for paths, can be NULL\n+void expand_env_esc(char_u *srcp, char_u *dst, int dstlen, bool esc, bool one,\n+                    char_u *startstr)\n+{\n+  char_u      *src;\n+  char_u      *tail;\n+  int c;\n+  char_u      *var;\n+  bool copy_char;\n+  bool mustfree;                 /* var was allocated, need to free it later */\n+  bool at_start = true;           /* at start of a name */\n+  int startstr_len = 0;\n+\n+  if (startstr != NULL)\n+    startstr_len = (int)STRLEN(startstr);\n+\n+  src = skipwhite(srcp);\n+  --dstlen;                 /* leave one char space for \"\\,\" */\n+  while (*src && dstlen > 0) {\n+    copy_char = true;\n+    if ((*src == '$') || (*src == '~' && at_start)) {\n+      mustfree = false;\n+\n+      /*\n+       * The variable name is copied into dst temporarily, because it may\n+       * be a string in read-only memory and a NUL needs to be appended.\n+       */\n+      if (*src != '~') {                                /* environment var */\n+        tail = src + 1;\n+        var = dst;\n+        c = dstlen - 1;\n+\n+#ifdef UNIX\n+        /* Unix has ${var-name} type environment vars */\n+        if (*tail == '{' && !vim_isIDc('{')) {\n+          tail++;               /* ignore '{' */\n+          while (c-- > 0 && *tail && *tail != '}')\n+            *var++ = *tail++;\n+        } else // NOLINT\n+#endif\n+        {\n+          while (c-- > 0 && *tail != NUL && vim_isIDc(*tail)) {\n+            *var++ = *tail++;\n+          }\n+        }\n+\n+#if defined(UNIX)\n+        // Verify that we have found the end of a UNIX ${VAR} style variable\n+        if (src[1] == '{' && *tail != '}') {\n+          var = NULL;\n+        } else if (src[1] == '{') {\n+          ++tail;\n+        }\n+#elif defined(MSWIN)\n+        // Verify that we have found the end of a Windows %VAR% style variable\n+        if (src[0] == '%' && *tail != '%') {\n+          var = NULL;\n+        } else if (src[0] == '%') {\n+          ++tail;\n+        }\n+#endif\n+        *var = NUL;\n+        var = vim_getenv(dst, &mustfree);\n+      } else if (  src[1] == NUL /* home directory */\n+                 || vim_ispathsep(src[1])\n+                 || vim_strchr((char_u *)\" ,\\t\\n\", src[1]) != NULL) {\n+        var = homedir;\n+        tail = src + 1;\n+      } else {                                        /* user directory */\n+#if defined(UNIX)\n+        /*\n+         * Copy ~user to dst[], so we can put a NUL after it.\n+         */\n+        tail = src;\n+        var = dst;\n+        c = dstlen - 1;\n+        while (    c-- > 0\n+                   && *tail\n+                   && vim_isfilec(*tail)\n+                   && !vim_ispathsep(*tail))\n+          *var++ = *tail++;\n+        *var = NUL;\n+        /*\n+         * Use os_get_user_directory() to get the user directory.\n+         * If this function fails, the shell is used to\n+         * expand ~user. This is slower and may fail if the shell\n+         * does not support ~user (old versions of /bin/sh).\n+         */\n+        var = (char_u *)os_get_user_directory((char *)dst + 1);\n+        mustfree = true;\n+        if (var == NULL)\n+        {\n+          expand_T xpc;\n+\n+          ExpandInit(&xpc);\n+          xpc.xp_context = EXPAND_FILES;\n+          var = ExpandOne(&xpc, dst, NULL,\n+              WILD_ADD_SLASH|WILD_SILENT, WILD_EXPAND_FREE);\n+          mustfree = true;\n+        }\n+#else\n+        /* cannot expand user's home directory, so don't try */\n+        var = NULL;\n+        tail = (char_u *)\"\";            /* for gcc */\n+#endif /* UNIX */\n+      }\n+\n+#ifdef BACKSLASH_IN_FILENAME\n+      /* If 'shellslash' is set change backslashes to forward slashes.\n+       * Can't use slash_adjust(), p_ssl may be set temporarily. */\n+      if (p_ssl && var != NULL && vim_strchr(var, '\\\\') != NULL) {\n+        char_u  *p = vim_strsave(var);\n+\n+        if (mustfree) {\n+          free(var);\n+        }\n+        var = p;\n+        mustfree = true;\n+        forward_slash(var);\n+      }\n+#endif\n+\n+      /* If \"var\" contains white space, escape it with a backslash.\n+       * Required for \":e ~/tt\" when $HOME includes a space. */\n+      if (esc && var != NULL && vim_strpbrk(var, (char_u *)\" \\t\") != NULL) {\n+        char_u  *p = vim_strsave_escaped(var, (char_u *)\" \\t\");\n+\n+        if (mustfree)\n+          free(var);\n+        var = p;\n+        mustfree = true;\n+      }\n+\n+      if (var != NULL && *var != NUL\n+          && (STRLEN(var) + STRLEN(tail) + 1 < (unsigned)dstlen)) {\n+        STRCPY(dst, var);\n+        dstlen -= (int)STRLEN(var);\n+        c = (int)STRLEN(var);\n+        /* if var[] ends in a path separator and tail[] starts\n+         * with it, skip a character */\n+        if (*var != NUL && after_pathsep(dst, dst + c)\n+#if defined(BACKSLASH_IN_FILENAME)\n+            && dst[-1] != ':'\n+#endif\n+            && vim_ispathsep(*tail))\n+          ++tail;\n+        dst += c;\n+        src = tail;\n+        copy_char = false;\n+      }\n+      if (mustfree)\n+        free(var);\n+    }\n+\n+    if (copy_char) {        /* copy at least one char */\n+      /*\n+       * Recognize the start of a new name, for '~'.\n+       * Don't do this when \"one\" is true, to avoid expanding \"~\" in\n+       * \":edit foo ~ foo\".\n+       */\n+      at_start = false;\n+      if (src[0] == '\\\\' && src[1] != NUL) {\n+        *dst++ = *src++;\n+        --dstlen;\n+      } else if ((src[0] == ' ' || src[0] == ',') && !one) {\n+        at_start = true;\n+      }\n+      *dst++ = *src++;\n+      --dstlen;\n+\n+      if (startstr != NULL && src - startstr_len >= srcp\n+          && STRNCMP(src - startstr_len, startstr, startstr_len) == 0)\n+        at_start = true;\n+    }\n+  }\n+  *dst = NUL;\n+}\n+\n+/// Check if the directory \"vimdir/<version>\" or \"vimdir/runtime\" exists.\n+/// Return NULL if not, return its name in allocated memory otherwise.\n+/// @param vimdir directory to test\n+static char_u *vim_version_dir(char_u *vimdir)\n+{\n+  char_u      *p;\n+\n+  if (vimdir == NULL || *vimdir == NUL)\n+    return NULL;\n+  p = concat_fnames(vimdir, (char_u *)VIM_VERSION_NODOT, true);\n+  if (os_isdir(p))\n+    return p;\n+  free(p);\n+  p = concat_fnames(vimdir, (char_u *)RUNTIME_DIRNAME, true);\n+  if (os_isdir(p))\n+    return p;\n+  free(p);\n+  return NULL;\n+}\n+\n+/// If the string between \"p\" and \"pend\" ends in \"name/\", return \"pend\" minus\n+/// the length of \"name/\".  Otherwise return \"pend\".\n+static char_u *remove_tail(char_u *p, char_u *pend, char_u *name)\n+{\n+  int len = (int)STRLEN(name) + 1;\n+  char_u      *newend = pend - len;\n+\n+  if (newend >= p\n+      && fnamencmp(newend, name, len - 1) == 0\n+      && (newend == p || after_pathsep(p, newend)))\n+    return newend;\n+  return pend;\n+}\n+\n+/// Vim's version of getenv().\n+/// Special handling of $HOME, $VIM and $VIMRUNTIME, allowing the user to\n+/// override the vim runtime directory at runtime.  Also does ACP to 'enc'\n+/// conversion for Win32.\n+/// @param name Name of environment variable to expand\n+/// @param[out] mustfree Ouput parameter for the caller to determine if they are\n+///           responsible for releasing memory. Must be initialized to false\n+///           by the caller.\n+char_u *vim_getenv(char_u *name, bool *mustfree)\n+{\n+  char_u      *p;\n+  char_u      *pend;\n+  int vimruntime;\n+\n+\n+  p = (char_u *)os_getenv((char *)name);\n+  if (p != NULL && *p == NUL)       /* empty is the same as not set */\n+    p = NULL;\n+\n+  if (p != NULL) {\n+    return p;\n+  }\n+\n+  vimruntime = (STRCMP(name, \"VIMRUNTIME\") == 0);\n+  if (!vimruntime && STRCMP(name, \"VIM\") != 0)\n+    return NULL;\n+\n+  /*\n+   * When expanding $VIMRUNTIME fails, try using $VIM/vim<version> or $VIM.\n+   * Don't do this when default_vimruntime_dir is non-empty.\n+   */\n+  if (vimruntime\n+#ifdef HAVE_PATHDEF\n+      && *default_vimruntime_dir == NUL\n+#endif\n+      ) {\n+    p = (char_u *)os_getenv(\"VIM\");\n+    if (p != NULL && *p == NUL)             /* empty is the same as not set */\n+      p = NULL;\n+    if (p != NULL) {\n+      p = vim_version_dir(p);\n+      if (p != NULL)\n+        *mustfree = true;\n+      else\n+        p = (char_u *)os_getenv(\"VIM\");\n+    }\n+  }\n+\n+  /*\n+   * When expanding $VIM or $VIMRUNTIME fails, try using:\n+   * - the directory name from 'helpfile' (unless it contains '$')\n+   * - the executable name from argv[0]\n+   */\n+  if (p == NULL) {\n+    if (p_hf != NULL && vim_strchr(p_hf, '$') == NULL)\n+      p = p_hf;\n+    if (p != NULL) {\n+      /* remove the file name */\n+      pend = path_tail(p);\n+\n+      /* remove \"doc/\" from 'helpfile', if present */\n+      if (p == p_hf)\n+        pend = remove_tail(p, pend, (char_u *)\"doc\");\n+\n+      /* for $VIM, remove \"runtime/\" or \"vim54/\", if present */\n+      if (!vimruntime) {\n+        pend = remove_tail(p, pend, (char_u *)RUNTIME_DIRNAME);\n+        pend = remove_tail(p, pend, (char_u *)VIM_VERSION_NODOT);\n+      }\n+\n+      /* remove trailing path separator */\n+      /* With MacOS path (with  colons) the final colon is required */\n+      /* to avoid confusion between absolute and relative path */","path":"src/nvim/os/env.c","position":405,"original_position":405,"commit_id":"7478b2b1b643e7540404d84ae6379b61bb75c2ed","original_commit_id":"7478b2b1b643e7540404d84ae6379b61bb75c2ed","user":{"login":"justinmk","id":1359421,"avatar_url":"https://avatars.githubusercontent.com/u/1359421?v=3","gravatar_id":"","url":"https://api.github.com/users/justinmk","html_url":"https://github.com/justinmk","followers_url":"https://api.github.com/users/justinmk/followers","following_url":"https://api.github.com/users/justinmk/following{/other_user}","gists_url":"https://api.github.com/users/justinmk/gists{/gist_id}","starred_url":"https://api.github.com/users/justinmk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/justinmk/subscriptions","organizations_url":"https://api.github.com/users/justinmk/orgs","repos_url":"https://api.github.com/users/justinmk/repos","events_url":"https://api.github.com/users/justinmk/events{/privacy}","received_events_url":"https://api.github.com/users/justinmk/received_events","type":"User","site_admin":false},"body":"as @Pyrohh noted, this comment about MacOS is irrelevant. In the Vim source it is contained in a `#ifndef MACOS_CLASSIC` check, so the comment served to explain the purpose of that `#ifndef`, but the comment makes no sense in Neovim.","created_at":"2015-03-20T03:40:46Z","updated_at":"2015-03-20T03:40:46Z","html_url":"https://github.com/neovim/neovim/pull/2148#discussion_r26817009","pull_request_url":"https://api.github.com/repos/neovim/neovim/pulls/2148","_links":{"self":{"href":"https://api.github.com/repos/neovim/neovim/pulls/comments/26817009"},"html":{"href":"https://github.com/neovim/neovim/pull/2148#discussion_r26817009"},"pull_request":{"href":"https://api.github.com/repos/neovim/neovim/pulls/2148"}}},"pull_request":{"url":"https://api.github.com/repos/neovim/neovim/pulls/2148","id":31179321,"html_url":"https://github.com/neovim/neovim/pull/2148","diff_url":"https://github.com/neovim/neovim/pull/2148.diff","patch_url":"https://github.com/neovim/neovim/pull/2148.patch","issue_url":"https://api.github.com/repos/neovim/neovim/issues/2148","number":2148,"state":"open","locked":false,"title":"[RDY] Split some environment handling functions from misc1.c","user":{"login":"bobtwinkles","id":1514748,"avatar_url":"https://avatars.githubusercontent.com/u/1514748?v=3","gravatar_id":"","url":"https://api.github.com/users/bobtwinkles","html_url":"https://github.com/bobtwinkles","followers_url":"https://api.github.com/users/bobtwinkles/followers","following_url":"https://api.github.com/users/bobtwinkles/following{/other_user}","gists_url":"https://api.github.com/users/bobtwinkles/gists{/gist_id}","starred_url":"https://api.github.com/users/bobtwinkles/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bobtwinkles/subscriptions","organizations_url":"https://api.github.com/users/bobtwinkles/orgs","repos_url":"https://api.github.com/users/bobtwinkles/repos","events_url":"https://api.github.com/users/bobtwinkles/events{/privacy}","received_events_url":"https://api.github.com/users/bobtwinkles/received_events","type":"User","site_admin":false},"body":"This is an update to #1231, rebased upon the latest master. The patch set in #1231 was so far out of date that I felt it was easier to redo some of the work, so this PR supersedes that one. Any feedback is appreciated, especially on the tests. By testing `expand_env_esc` I think I catch most of the obvious things, but I'm missing tests for the Windows logic (I don't have a windows machine to test the tests on) and I probably have nowhere near 100% branch coverage.","created_at":"2015-03-14T06:42:03Z","updated_at":"2015-03-20T03:40:46Z","closed_at":null,"merged_at":null,"merge_commit_sha":"a12d0bebbce63de4f6bb4ee8f47ae1e7acb64769","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/neovim/neovim/pulls/2148/commits","review_comments_url":"https://api.github.com/repos/neovim/neovim/pulls/2148/comments","review_comment_url":"https://api.github.com/repos/neovim/neovim/pulls/comments{/number}","comments_url":"https://api.github.com/repos/neovim/neovim/issues/2148/comments","statuses_url":"https://api.github.com/repos/neovim/neovim/statuses/7478b2b1b643e7540404d84ae6379b61bb75c2ed","head":{"label":"bobtwinkles:env-split","ref":"env-split","sha":"7478b2b1b643e7540404d84ae6379b61bb75c2ed","user":{"login":"bobtwinkles","id":1514748,"avatar_url":"https://avatars.githubusercontent.com/u/1514748?v=3","gravatar_id":"","url":"https://api.github.com/users/bobtwinkles","html_url":"https://github.com/bobtwinkles","followers_url":"https://api.github.com/users/bobtwinkles/followers","following_url":"https://api.github.com/users/bobtwinkles/following{/other_user}","gists_url":"https://api.github.com/users/bobtwinkles/gists{/gist_id}","starred_url":"https://api.github.com/users/bobtwinkles/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bobtwinkles/subscriptions","organizations_url":"https://api.github.com/users/bobtwinkles/orgs","repos_url":"https://api.github.com/users/bobtwinkles/repos","events_url":"https://api.github.com/users/bobtwinkles/events{/privacy}","received_events_url":"https://api.github.com/users/bobtwinkles/received_events","type":"User","site_admin":false},"repo":{"id":24392893,"name":"neovim","full_name":"bobtwinkles/neovim","owner":{"login":"bobtwinkles","id":1514748,"avatar_url":"https://avatars.githubusercontent.com/u/1514748?v=3","gravatar_id":"","url":"https://api.github.com/users/bobtwinkles","html_url":"https://github.com/bobtwinkles","followers_url":"https://api.github.com/users/bobtwinkles/followers","following_url":"https://api.github.com/users/bobtwinkles/following{/other_user}","gists_url":"https://api.github.com/users/bobtwinkles/gists{/gist_id}","starred_url":"https://api.github.com/users/bobtwinkles/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bobtwinkles/subscriptions","organizations_url":"https://api.github.com/users/bobtwinkles/orgs","repos_url":"https://api.github.com/users/bobtwinkles/repos","events_url":"https://api.github.com/users/bobtwinkles/events{/privacy}","received_events_url":"https://api.github.com/users/bobtwinkles/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/bobtwinkles/neovim","description":"vim for the 21st century","fork":true,"url":"https://api.github.com/repos/bobtwinkles/neovim","forks_url":"https://api.github.com/repos/bobtwinkles/neovim/forks","keys_url":"https://api.github.com/repos/bobtwinkles/neovim/keys{/key_id}","collaborators_url":"https://api.github.com/repos/bobtwinkles/neovim/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/bobtwinkles/neovim/teams","hooks_url":"https://api.github.com/repos/bobtwinkles/neovim/hooks","issue_events_url":"https://api.github.com/repos/bobtwinkles/neovim/issues/events{/number}","events_url":"https://api.github.com/repos/bobtwinkles/neovim/events","assignees_url":"https://api.github.com/repos/bobtwinkles/neovim/assignees{/user}","branches_url":"https://api.github.com/repos/bobtwinkles/neovim/branches{/branch}","tags_url":"https://api.github.com/repos/bobtwinkles/neovim/tags","blobs_url":"https://api.github.com/repos/bobtwinkles/neovim/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/bobtwinkles/neovim/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/bobtwinkles/neovim/git/refs{/sha}","trees_url":"https://api.github.com/repos/bobtwinkles/neovim/git/trees{/sha}","statuses_url":"https://api.github.com/repos/bobtwinkles/neovim/statuses/{sha}","languages_url":"https://api.github.com/repos/bobtwinkles/neovim/languages","stargazers_url":"https://api.github.com/repos/bobtwinkles/neovim/stargazers","contributors_url":"https://api.github.com/repos/bobtwinkles/neovim/contributors","subscribers_url":"https://api.github.com/repos/bobtwinkles/neovim/subscribers","subscription_url":"https://api.github.com/repos/bobtwinkles/neovim/subscription","commits_url":"https://api.github.com/repos/bobtwinkles/neovim/commits{/sha}","git_commits_url":"https://api.github.com/repos/bobtwinkles/neovim/git/commits{/sha}","comments_url":"https://api.github.com/repos/bobtwinkles/neovim/comments{/number}","issue_comment_url":"https://api.github.com/repos/bobtwinkles/neovim/issues/comments{/number}","contents_url":"https://api.github.com/repos/bobtwinkles/neovim/contents/{+path}","compare_url":"https://api.github.com/repos/bobtwinkles/neovim/compare/{base}...{head}","merges_url":"https://api.github.com/repos/bobtwinkles/neovim/merges","archive_url":"https://api.github.com/repos/bobtwinkles/neovim/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/bobtwinkles/neovim/downloads","issues_url":"https://api.github.com/repos/bobtwinkles/neovim/issues{/number}","pulls_url":"https://api.github.com/repos/bobtwinkles/neovim/pulls{/number}","milestones_url":"https://api.github.com/repos/bobtwinkles/neovim/milestones{/number}","notifications_url":"https://api.github.com/repos/bobtwinkles/neovim/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/bobtwinkles/neovim/labels{/name}","releases_url":"https://api.github.com/repos/bobtwinkles/neovim/releases{/id}","created_at":"2014-09-23T23:15:58Z","updated_at":"2014-10-04T19:27:35Z","pushed_at":"2015-03-19T06:41:49Z","git_url":"git://github.com/bobtwinkles/neovim.git","ssh_url":"git@github.com:bobtwinkles/neovim.git","clone_url":"https://github.com/bobtwinkles/neovim.git","svn_url":"https://github.com/bobtwinkles/neovim","homepage":"http://neovim.org/","size":26429,"stargazers_count":0,"watchers_count":0,"language":"VimL","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"neovim:master","ref":"master","sha":"608d709fa0878cbc4ff7386badc81fdfcc66234a","user":{"login":"neovim","id":6471485,"avatar_url":"https://avatars.githubusercontent.com/u/6471485?v=3","gravatar_id":"","url":"https://api.github.com/users/neovim","html_url":"https://github.com/neovim","followers_url":"https://api.github.com/users/neovim/followers","following_url":"https://api.github.com/users/neovim/following{/other_user}","gists_url":"https://api.github.com/users/neovim/gists{/gist_id}","starred_url":"https://api.github.com/users/neovim/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/neovim/subscriptions","organizations_url":"https://api.github.com/users/neovim/orgs","repos_url":"https://api.github.com/users/neovim/repos","events_url":"https://api.github.com/users/neovim/events{/privacy}","received_events_url":"https://api.github.com/users/neovim/received_events","type":"Organization","site_admin":false},"repo":{"id":16408992,"name":"neovim","full_name":"neovim/neovim","owner":{"login":"neovim","id":6471485,"avatar_url":"https://avatars.githubusercontent.com/u/6471485?v=3","gravatar_id":"","url":"https://api.github.com/users/neovim","html_url":"https://github.com/neovim","followers_url":"https://api.github.com/users/neovim/followers","following_url":"https://api.github.com/users/neovim/following{/other_user}","gists_url":"https://api.github.com/users/neovim/gists{/gist_id}","starred_url":"https://api.github.com/users/neovim/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/neovim/subscriptions","organizations_url":"https://api.github.com/users/neovim/orgs","repos_url":"https://api.github.com/users/neovim/repos","events_url":"https://api.github.com/users/neovim/events{/privacy}","received_events_url":"https://api.github.com/users/neovim/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/neovim/neovim","description":"vim out of the box","fork":false,"url":"https://api.github.com/repos/neovim/neovim","forks_url":"https://api.github.com/repos/neovim/neovim/forks","keys_url":"https://api.github.com/repos/neovim/neovim/keys{/key_id}","collaborators_url":"https://api.github.com/repos/neovim/neovim/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/neovim/neovim/teams","hooks_url":"https://api.github.com/repos/neovim/neovim/hooks","issue_events_url":"https://api.github.com/repos/neovim/neovim/issues/events{/number}","events_url":"https://api.github.com/repos/neovim/neovim/events","assignees_url":"https://api.github.com/repos/neovim/neovim/assignees{/user}","branches_url":"https://api.github.com/repos/neovim/neovim/branches{/branch}","tags_url":"https://api.github.com/repos/neovim/neovim/tags","blobs_url":"https://api.github.com/repos/neovim/neovim/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/neovim/neovim/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/neovim/neovim/git/refs{/sha}","trees_url":"https://api.github.com/repos/neovim/neovim/git/trees{/sha}","statuses_url":"https://api.github.com/repos/neovim/neovim/statuses/{sha}","languages_url":"https://api.github.com/repos/neovim/neovim/languages","stargazers_url":"https://api.github.com/repos/neovim/neovim/stargazers","contributors_url":"https://api.github.com/repos/neovim/neovim/contributors","subscribers_url":"https://api.github.com/repos/neovim/neovim/subscribers","subscription_url":"https://api.github.com/repos/neovim/neovim/subscription","commits_url":"https://api.github.com/repos/neovim/neovim/commits{/sha}","git_commits_url":"https://api.github.com/repos/neovim/neovim/git/commits{/sha}","comments_url":"https://api.github.com/repos/neovim/neovim/comments{/number}","issue_comment_url":"https://api.github.com/repos/neovim/neovim/issues/comments{/number}","contents_url":"https://api.github.com/repos/neovim/neovim/contents/{+path}","compare_url":"https://api.github.com/repos/neovim/neovim/compare/{base}...{head}","merges_url":"https://api.github.com/repos/neovim/neovim/merges","archive_url":"https://api.github.com/repos/neovim/neovim/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/neovim/neovim/downloads","issues_url":"https://api.github.com/repos/neovim/neovim/issues{/number}","pulls_url":"https://api.github.com/repos/neovim/neovim/pulls{/number}","milestones_url":"https://api.github.com/repos/neovim/neovim/milestones{/number}","notifications_url":"https://api.github.com/repos/neovim/neovim/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/neovim/neovim/labels{/name}","releases_url":"https://api.github.com/repos/neovim/neovim/releases{/id}","created_at":"2014-01-31T13:39:22Z","updated_at":"2015-03-20T01:49:09Z","pushed_at":"2015-03-19T23:19:42Z","git_url":"git://github.com/neovim/neovim.git","ssh_url":"git@github.com:neovim/neovim.git","clone_url":"https://github.com/neovim/neovim.git","svn_url":"https://github.com/neovim/neovim","homepage":"http://neovim.org","size":54055,"stargazers_count":12434,"watchers_count":12434,"language":"VimL","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":836,"mirror_url":null,"open_issues_count":399,"forks":836,"open_issues":399,"watchers":12434,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/neovim/neovim/pulls/2148"},"html":{"href":"https://github.com/neovim/neovim/pull/2148"},"issue":{"href":"https://api.github.com/repos/neovim/neovim/issues/2148"},"comments":{"href":"https://api.github.com/repos/neovim/neovim/issues/2148/comments"},"review_comments":{"href":"https://api.github.com/repos/neovim/neovim/pulls/2148/comments"},"review_comment":{"href":"https://api.github.com/repos/neovim/neovim/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/neovim/neovim/pulls/2148/commits"},"statuses":{"href":"https://api.github.com/repos/neovim/neovim/statuses/7478b2b1b643e7540404d84ae6379b61bb75c2ed"}}}}