{"id":13500943,"url":"https://github.com/wincent/corpus","last_synced_at":"2025-04-06T16:11:33.701Z","repository":{"id":31750691,"uuid":"35316798","full_name":"wincent/corpus","owner":"wincent","description":"📝 A note-management application","archived":false,"fork":false,"pushed_at":"2025-02-27T17:20:11.000Z","size":4485,"stargazers_count":93,"open_issues_count":14,"forks_count":10,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-03-30T14:11:10.744Z","etag":null,"topics":["note-taking","vim"],"latest_commit_sha":null,"homepage":"","language":"Lua","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wincent.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-05-09T05:41:33.000Z","updated_at":"2025-02-27T17:07:16.000Z","dependencies_parsed_at":"2022-07-28T11:59:29.668Z","dependency_job_id":"7e9ffee9-ae53-4b71-bd5b-ebf1e363003a","html_url":"https://github.com/wincent/corpus","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wincent%2Fcorpus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wincent%2Fcorpus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wincent%2Fcorpus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wincent%2Fcorpus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wincent","download_url":"https://codeload.github.com/wincent/corpus/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247509221,"owners_count":20950232,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["note-taking","vim"],"created_at":"2024-07-31T22:01:20.212Z","updated_at":"2025-04-06T16:11:33.677Z","avatar_url":"https://github.com/wincent.png","language":"Lua","funding_links":[],"categories":["Lua"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/wincent/corpus/media/corpus-logo.png\" /\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/wincent/corpus/media/corpus-demo.gif\" /\u003e\n\u003c/p\u003e\n\n# corpus\u003ca name=\"corpus-corpus\" href=\"#user-content-corpus-corpus\"\u003e\u003c/a\u003e\n\n## Intro\u003ca name=\"corpus-intro\" href=\"#user-content-corpus-intro\"\u003e\u003c/a\u003e\n\n\u003e Corpus is a note-management application for Neovim.\n\n\u003cp align=\"right\"\u003e\u003ca name=\"corpus-features\" href=\"#user-content-corpus-features\"\u003e\u003ccode\u003ecorpus-features\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\nNotes exist as Markdown files in a Git repository. Corpus provides:\n\n- An interface for listing, searching, switching to, and creating notes.\n- Bindings for creating links between notes.\n- Optionally, automatic creation of Git commits after each save.\n- Optionally, automatic creation of references for Markdown links.\n- Optionally, automatic tagging or titling of content in Markdown frontmatter sections.\n- Configurable rules for naming and linking such that Corpus directories can be used for local notes (eg. personal wikis) and hosted notes (eg. public wikis on the web).\n\nIf you're a visual person, the following screencast presents an early version of the plug-in and how it works: https://youtu.be/KRlNBcYw74I\n\nThis screencast shows a more recent update: https://youtu.be/kmsKO0hfHx8\n\n## Installation\u003ca name=\"corpus-installation\" href=\"#user-content-corpus-installation\"\u003e\u003c/a\u003e\n\nTo install Corpus, use your plug-in management system of choice.\n\nNote that Corpus requires a recent version of Neovim.\n\n## Commands\u003ca name=\"corpus-commands\" href=\"#user-content-corpus-commands\"\u003e\u003c/a\u003e\n\n\u003cp align=\"right\"\u003e\u003ca name=\"corpus\" href=\"#user-content-corpus\"\u003e\u003ccode\u003e:Corpus\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\n### `:Corpus {search}`\u003ca name=\"corpus-corpus-search\" href=\"#user-content-corpus-corpus-search\"\u003e\u003c/a\u003e\n\nWhen inside a Corpus directory, accepts a search query. On the left side of Corpus will show a list of files containing all of the words in the search query. On the right side, it will show a preview of the currently selected file. The selection can be moved up and down with the \u003cstrong\u003e`\u003cUp\u003e`\u003c/strong\u003e and \u003cstrong\u003e`\u003cDown\u003e`\u003c/strong\u003e keys (or equivalently, with `\u003cC-k\u003e` and `\u003cC-j\u003e`. Pressing `\u003cEnter\u003e` opens the selection in a buffer. Pressing `\u003cEsc\u003e` dismisses the search interface.\n\nIf the search query does not match any files, pressing `\u003cEnter\u003e` will create a new file with the same name. There are three additional special cases that you can use to create a new file:\n\n- You can append an explicit \u0026quot;.md\u0026quot; file extension to the search query. This supports the following use case: imagine you want to create a file \u0026quot;Foo.md\u0026quot;, but your notes directory already contains a file, \u0026quot;Bar.md\u0026quot;, that happens to contain the string \u0026quot;Foo\u0026quot;. In this situation, typing \u0026quot;Foo\u0026quot; will show the \u0026quot;Bar\u0026quot; in the list of candidate files. Pressing `\u003cEnter\u003e` in this scenario would open \u0026quot;Bar.md\u0026quot;. If you instead type \u0026quot;Foo.md\u0026quot;, you can press `\u003cEnter\u003e` to create \u0026quot;Foo.md\u0026quot;.\n- You can invoke \u003cstrong\u003e[`:Corpus`](#user-content-corpus)\u003c/strong\u003e with a \u003cstrong\u003e`\u003cbang\u003e`\u003c/strong\u003e suffix (ie. as `:Corpus!`) to tell it that you intend to create a file matching the name of your search term, if one doesn't exist already. In this mode, a preview of matching filenames is still shown (so that you can see whether there is an existing file with the desired name or not), but regardless of what is shown, pressing `\u003cEnter\u003e` will create or open a file with exactly that name (\u0026quot;.md\u0026quot; will be appended to the filename if not already present).\n- Alternatively, if you get to the end of your desired filename and realize that neither of the preceding two tricks work (ie. because you already have a file with contents \u0026quot;Foo.md\u0026quot; inside it, or because you didn't use `:Corpus!`), you can append a trailing \u0026quot;!\u0026quot; to your search term, which Corpus will take as a cue to create a new file no matter what. This last technique only works when \u003cstrong\u003e[`g:CorpusBangCreation`](#user-content-gcorpusbangcreation)\u003c/strong\u003e is set to `1`; the feature is optional because it can make it awkward to include exclamation marks in your search terms and filenames. For example, if \u003cstrong\u003e[`g:CorpusBangCreation`](#user-content-gcorpusbangcreation)\u003c/strong\u003e is set and you want to search for \u0026quot;foo bar!\u0026quot;, that search term would lead to the creation of a file, \u0026quot;foo bar.md\u0026quot;; to avoid this, search instead for \u0026quot;bar! foo\u0026quot; (the exclamation mark forces file creation only if it appears at the end of the search).\n\nWhen outside a Corpus directory, you can use tab-completion to switch to one of the configured \u003cstrong\u003e[`CorpusDirectories`](#user-content-corpusdirectories)\u003c/strong\u003e.\n\n## Mappings\u003ca name=\"corpus-mappings\" href=\"#user-content-corpus-mappings\"\u003e\u003c/a\u003e\n\nIn \u0026quot;.md\u0026quot; files inside a Corpus directory, \u0026quot;corpus\u0026quot; is added to the \u003cstrong\u003e`'filetype'`\u003c/strong\u003e and a buffer-local `\u003cC-]\u003e` mapping is configured. Hitting this mapping over a word turns it into a shorthand reference link. For example:\n\n```\nif cursor is on THIS here\n```\n\nit will turn into:\n\n```\nif cursor is on [THIS] here\n```\n\nIn \u003cstrong\u003e`Visual`\u003c/strong\u003e mode, the selection can be turned into a link:\n\n```\nif THIS IS SELECTED here\n```\n\nhitting the mapping will produce:\n\n```\nif [THIS IS SELECTED] here\n```\n\nWhen the cursor is on such a link, hitting `\u003cC-]\u003e` will navigate to that file.\n\n### `\u003cPlug\u003e(Corpus)`\u003ca name=\"corpus-plugcorpus\" href=\"#user-content-corpus-plugcorpus\"\u003e\u003c/a\u003e\n\nCorpus maps \u0026lt;Leader\u0026gt;c to \u003cstrong\u003e[`\u003cPlug\u003e(Corpus)`](#user-content-plugcorpus)\u003c/strong\u003e, which triggers the \u003cstrong\u003e[`:Corpus`](#user-content-corpus)\u003c/strong\u003e command. To use an alternative mapping instead, create a different one in your \u003cstrong\u003e`init.vim`\u003c/strong\u003e instead using \u003cstrong\u003e`:nmap`\u003c/strong\u003e:\n\n```\n\" Instead of \u003cLeader\u003ec, use \u003cLeader\u003eo.\nnmap \u003cleader\u003eo \u003cPlug\u003e(Corpus)\n```\n\n## Options\u003ca name=\"corpus-options\" href=\"#user-content-corpus-options\"\u003e\u003c/a\u003e\n\n\u003cp align=\"right\"\u003e\u003ca name=\"corpusdirectories\" href=\"#user-content-corpusdirectories\"\u003e\u003ccode\u003eCorpusDirectories\u003c/code\u003e\u003c/a\u003e \u003ca name=\"gcorpusdirectories\" href=\"#user-content-gcorpusdirectories\"\u003e\u003ccode\u003eg:CorpusDirectories\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\nCorpus relies on a list of \u003cstrong\u003e[`CorpusDirectories`](#user-content-corpusdirectories)\u003c/strong\u003e defined as a Lua table variable in your \u003cstrong\u003e`init.lua`\u003c/strong\u003e, or as a Vim dictionary in your \u003cstrong\u003e`init.vim`\u003c/strong\u003e. For example:\n\n```\n -- init.lua (as Lua global):\n CorpusDirectories = {\n   ['~/Documents/Corpus'] = {\n       autocommit = true,\n       autoreference = 1,\n       autotitle = 1,\n       base = './',\n       transform = 'local',\n     },\n     ['~/code/masochist/content/content/wiki'] = {\n       autocommit = false,\n       autoreference = 1,\n       autotitle = 1,\n       base = '/wiki/',\n       tags = {'wiki'},\n       transform = 'web',\n     },\n }\n\n -- init.lua (as Vim global):\n vim.g.CorpusDirectories = {...}\n\n \" init.vim (as Vim global):\n let g:CorpusDirectories = {...}\n```\n\nKeys in the table name directories containing Corpus notes. These directories should be Git repositories. A tilde in the name will be automatically expanded.\n\nValues are tables describing the desired behavior for the corresponding directory.\n\n\u003cp align=\"right\"\u003e\u003ca name=\"corpus-autocommit\" href=\"#user-content-corpus-autocommit\"\u003e\u003ccode\u003ecorpus-autocommit\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\n### `autocommit`\u003ca name=\"corpus-autocommit\" href=\"#user-content-corpus-autocommit\"\u003e\u003c/a\u003e\n\nWhen `true`, Corpus will create a commit each time a file is written.\n\nDefaults to `false`.\n\n\u003cp align=\"right\"\u003e\u003ca name=\"corpus-autoreference\" href=\"#user-content-corpus-autoreference\"\u003e\u003ccode\u003ecorpus-autoreference\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\n### `autoreference`\u003ca name=\"corpus-autoreference\" href=\"#user-content-corpus-autoreference\"\u003e\u003c/a\u003e\n\nWhen true, Corpus will update Markdown link references each time a file is saved. For example, given this text:\n\n```\nThis one [is a link] to somewhere else.\n```\n\nWe will see references like the following created at the bottom of the file:\n\n```\n[is a link]: \u003c./is a link.md\u003e\n```\n\nDefaults to `false`.\n\n\u003cp align=\"right\"\u003e\u003ca name=\"corpus-referenceheader\" href=\"#user-content-corpus-referenceheader\"\u003e\u003ccode\u003ecorpus-referenceheader\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\n### `referenceheader`\u003ca name=\"corpus-referenceheader\" href=\"#user-content-corpus-referenceheader\"\u003e\u003c/a\u003e\n\nWhen set to a string value, Corpus will maintain a header above the references list using HTML comment syntax. For example, given a `referenceheader` of 'References', it will insert a comment of the form `\u003c!-- References --\u003e`.\n\nDefaults to `nil` (ie. no header).\n\n\u003cp align=\"right\"\u003e\u003ca name=\"corpus-autotitle\" href=\"#user-content-corpus-autotitle\"\u003e\u003ccode\u003ecorpus-autotitle\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\n### `autotitle`\u003ca name=\"corpus-autotitle\" href=\"#user-content-corpus-autotitle\"\u003e\u003c/a\u003e\n\nWhen true, Corpus will update the `title` in the Markdown frontmatter (based on the filename) each time the note is saved.\n\nFor example, a file named \u0026quot;Some article.md\u0026quot; would produce the following metadata:\n\n```\ntitle: Some article\n```\n\nDefaults to `false`.\n\n\u003cp align=\"right\"\u003e\u003ca name=\"corpus-base\" href=\"#user-content-corpus-base\"\u003e\u003ccode\u003ecorpus-base\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\n### `base`\u003ca name=\"corpus-base\" href=\"#user-content-corpus-base\"\u003e\u003c/a\u003e\n\nWhen set, Corpus will use the `base` as a prefix when generating link targets, which is particularly useful when the notes in question are to be hosted on a public website.\n\nFor example, give a `base` of \u0026quot;/wiki/\u0026quot; and a link such as \u0026quot;foobar\u0026quot;, the resulting link target will be \u0026quot;/wiki/foobar\u0026quot;.\n\nDefaults to an empty string.\n\n\u003cp align=\"right\"\u003e\u003ca name=\"corpus-tags\" href=\"#user-content-corpus-tags\"\u003e\u003ccode\u003ecorpus-tags\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\n### `tags`\u003ca name=\"corpus-tags\" href=\"#user-content-corpus-tags\"\u003e\u003c/a\u003e\n\nWhen true, Corpus will update the `tags` list in the Markdown frontmatter (based on the filename) each time the note is saved.\n\nFor example, given a `tags` value of `{'foo', 'bar'}`, Corpus would produce the following metadata:\n\n```\ntags: foo bar\n```\n\nDefaults to `nil`, which means that no tags get added to the frontmatter.\n\n\u003cp align=\"right\"\u003e\u003ca name=\"corpus-transform\" href=\"#user-content-corpus-transform\"\u003e\u003ccode\u003ecorpus-transform\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\n### `transform`\u003ca name=\"corpus-transform\" href=\"#user-content-corpus-transform\"\u003e\u003c/a\u003e\n\nWhen set to \u0026quot;local\u0026quot;, tells Corpus to transform filenames into link targets in a way that is suitable for navigating between files on a local filesystem. This is the \u0026quot;local personal wiki\u0026quot; use case. For example, given a filename of \u0026quot;Shopping list.md\u0026quot;, we have:\n\n- A title of \u0026quot;Shopping list\u0026quot;.\n- Links of the form `[Shopping list]`.\n- Link targets of the form `Shopping list.md`.\n\nWhen set to \u0026quot;web\u0026quot;, tells Corpus to transform filenames into link targets in a way that is suitable for deployment as a public wiki on the web. Spaces are transformed into underscores, and the \u003cstrong\u003e[`corpus-base`](#user-content-corpus-base)\u003c/strong\u003e setting is prepended. For example, given a filename of \u0026quot;Troubleshooting tips.md\u0026quot;, we have:\n\n- A title of \u0026quot;Troubleshooting tips\u0026quot;.\n- Links of the form `[Troubleshooting tips]`.\n- Link targets of the form `/wiki/Troubleshooting_tips`.\n\nDefaults to 'local'.\n\n\u003cp align=\"right\"\u003e\u003ca name=\"gcorpusautocd\" href=\"#user-content-gcorpusautocd\"\u003e\u003ccode\u003eg:CorpusAutoCd\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\n### `g:CorpusAutoCd` (number, default: 0)\u003ca name=\"corpus-gcorpusautocd-number-default-0\" href=\"#user-content-corpus-gcorpusautocd-number-default-0\"\u003e\u003c/a\u003e\n\nWhen set to 1, and when there is only one Corpus directory, initiating a \u003cstrong\u003e[`:Corpus`](#user-content-corpus)\u003c/strong\u003e command will automatically \u003cstrong\u003e`:cd`\u003c/strong\u003e into that directory.\n\n```\nlet g:CorpusAutoCd=1\n```\n\n\u003cp align=\"right\"\u003e\u003ca name=\"gcorpusbangcreation\" href=\"#user-content-gcorpusbangcreation\"\u003e\u003ccode\u003eg:CorpusBangCreation\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\n### `g:CorpusBangCreation` (number, default: 0)\u003ca name=\"corpus-gcorpusbangcreation-number-default-0\" href=\"#user-content-corpus-gcorpusbangcreation-number-default-0\"\u003e\u003c/a\u003e\n\nWhen set to `1`, Corpus will take a trailing \u0026quot;!\u0026quot; at the end of a search term as a cue to create a file with that name. For example, an invocation like `:Corpus Foo!` would create or open a file called \u0026quot;Foo.md\u0026quot;.\n\n```\nlet g:CorpusBangCreation=1\n```\n\n\u003cp align=\"right\"\u003e\u003ca name=\"gcorpuschooserselectionhighlight\" href=\"#user-content-gcorpuschooserselectionhighlight\"\u003e\u003ccode\u003eg:CorpusChooserSelectionHighlight\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\n### `g:CorpusChooserSelectionHighlight` (string, default: \"PMenuSel\")\u003ca name=\"corpus-gcorpuschooserselectionhighlight-string-default-pmenusel\" href=\"#user-content-corpus-gcorpuschooserselectionhighlight-string-default-pmenusel\"\u003e\u003c/a\u003e\n\nSpecifies the highlight group applied to the currently selected item in the chooser listing (the left-hand pane). To override from the default value of \u0026quot;PMenuSel\u0026quot;, set a different value in your \u003cstrong\u003e`init.vim`\u003c/strong\u003e:\n\n```\nlet g:CorpusChooserSelectionHighlight='Error'\n```\n\n\u003cp align=\"right\"\u003e\u003ca name=\"gcorpuspreviewwinhighlight\" href=\"#user-content-gcorpuspreviewwinhighlight\"\u003e\u003ccode\u003eg:CorpusPreviewWinhighlight\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\n### `g:CorpusPreviewWinhighlight` (string, default: see below)\u003ca name=\"corpus-gcorpuspreviewwinhighlight-string-default-see-below\" href=\"#user-content-corpus-gcorpuspreviewwinhighlight-string-default-see-below\"\u003e\u003c/a\u003e\n\nSpecifies the \u003cstrong\u003e`'winhighlight'`\u003c/strong\u003e string for the preview pane (the right-hand pane). The default is:\n\n```\nEndOfBuffer:LineNr,FoldColumn:StatusLine,Normal:LineNr.\n```\n\nTo override, provide an alternate setting in your \u003cstrong\u003e`init.vim`\u003c/strong\u003e:\n\n```\nlet g:CorpusPreviewWinhighlight='Normal:ModeMsg'\n```\n\n\u003cp align=\"right\"\u003e\u003ca name=\"gcorpusloaded\" href=\"#user-content-gcorpusloaded\"\u003e\u003ccode\u003eg:CorpusLoaded\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\n### `g:CorpusLoaded` (any, default: none)\u003ca name=\"corpus-gcorpusloaded-any-default-none\" href=\"#user-content-corpus-gcorpusloaded-any-default-none\"\u003e\u003c/a\u003e\n\nTo prevent Corpus from being loaded, set \u003cstrong\u003e[`g:CorpusLoaded`](#user-content-gcorpusloaded)\u003c/strong\u003e to any value in your \u003cstrong\u003e`init.vim`\u003c/strong\u003e. For example:\n\n```\nlet g:CorpusLoaded=1\n```\n\n\u003cp align=\"right\"\u003e\u003ca name=\"gcorpussort\" href=\"#user-content-gcorpussort\"\u003e\u003ccode\u003eg:CorpusSort\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\n### `g:CorpusSort` (string, default: \"default\")\u003ca name=\"corpus-gcorpussort-string-default-default\" href=\"#user-content-corpus-gcorpussort-string-default-default\"\u003e\u003c/a\u003e\n\nSpecifies the sort order for the chooser listing. The default sort order maintains the order of results returned by `git-ls-files` and `git-grep`, which should be lexicographical order.\n\nTo sort by last-modified timestamp instead (ie. showing the most recently modified files at the top of the listing), set to \u0026quot;stat\u0026quot;.\n\n```\nlet g:CorpusSort='stat'\n```\n\n## Website\u003ca name=\"corpus-website\" href=\"#user-content-corpus-website\"\u003e\u003c/a\u003e\n\nSource code:\n\nhttps://github.com/wincent/corpus\n\n## License\u003ca name=\"corpus-license\" href=\"#user-content-corpus-license\"\u003e\u003c/a\u003e\n\nCopyright (c) 2015-present Greg Hurrell\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \u0026quot;Software\u0026quot;), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \u0026quot;AS IS\u0026quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n## Development\u003ca name=\"corpus-development\" href=\"#user-content-corpus-development\"\u003e\u003c/a\u003e\n\n### Contributing patches\u003ca name=\"corpus-contributing-patches\" href=\"#user-content-corpus-contributing-patches\"\u003e\u003c/a\u003e\n\nPatches can be sent via mail to greg@hurrell.net, or as GitHub pull requests at: https://github.com/wincent/corpus/pulls\n\n## Authors\u003ca name=\"corpus-authors\" href=\"#user-content-corpus-authors\"\u003e\u003c/a\u003e\n\nCorpus is written and maintained by Greg Hurrell \u0026lt;greg@hurrell.net\u0026gt;. Other contributors that have submitted patches include, in alphabetical order:\n\n- Cody Buell\n- Joe Lencioni\n\nThis list produced with:\n\n```\n:read !git shortlog -s HEAD | grep -v 'Greg Hurrell' | cut -f 2- | sed -e 's/^/- /'\n```\n\n## History\u003ca name=\"corpus-history\" href=\"#user-content-corpus-history\"\u003e\u003c/a\u003e\n\n### main (not yet released)\u003ca name=\"corpus-main-not-yet-released\" href=\"#user-content-corpus-main-not-yet-released\"\u003e\u003c/a\u003e\n\n- Initial release.\n- Added \u003cstrong\u003e[`g:CorpusChooserSelectionHighlight`](#user-content-gcorpuschooserselectionhighlight)\u003c/strong\u003e and \u003cstrong\u003e[`g:CorpusPreviewWinhighlight`](#user-content-gcorpuspreviewwinhighlight)\u003c/strong\u003e settings (https://github.com/wincent/corpus/issues/75).\n- Added \u003cstrong\u003e[`g:CorpusBangCreation`](#user-content-gcorpusbangcreation)\u003c/strong\u003e (https://github.com/wincent/corpus/issues/81).\n- Accept either a Lua global (`CorpusDirectories`) or a Vim Global (`g:CorpusDirectories`) for configuration.\n- Added \u003cstrong\u003e[`g:CorpusAutoCd`](#user-content-gcorpusautocd)\u003c/strong\u003e (https://github.com/wincent/corpus/pull/84, patch from Cody Buell).\n- Added \u003cstrong\u003e[`g:CorpusSort`](#user-content-gcorpussort)\u003c/strong\u003e (https://github.com/wincent/corpus/issues/74).\n- Added `referenceheader` setting (see \u003cstrong\u003e[`corpus-referenceheader`](#user-content-corpus-referenceheader)\u003c/strong\u003e).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwincent%2Fcorpus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwincent%2Fcorpus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwincent%2Fcorpus/lists"}