{"id":27198514,"url":"https://github.com/hp4k1h5/ephemeris","last_synced_at":"2026-02-07T09:32:46.733Z","repository":{"id":130646323,"uuid":"262100227","full_name":"hp4k1h5/ephemeris","owner":"hp4k1h5","description":"a diary plugin for vim","archived":false,"fork":false,"pushed_at":"2020-07-03T14:49:45.000Z","size":874,"stargazers_count":20,"open_issues_count":2,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-09T20:48:17.039Z","etag":null,"topics":["diary","markdown","todo","vim-plugin","viml"],"latest_commit_sha":null,"homepage":"https://github.com/HP4k1h5/ephemeris","language":"Vim script","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/hp4k1h5.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","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":"2020-05-07T16:19:07.000Z","updated_at":"2023-05-01T02:12:52.000Z","dependencies_parsed_at":null,"dependency_job_id":"ca23a688-878e-4d53-8d36-515fa1477bde","html_url":"https://github.com/hp4k1h5/ephemeris","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/hp4k1h5/ephemeris","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hp4k1h5%2Fephemeris","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hp4k1h5%2Fephemeris/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hp4k1h5%2Fephemeris/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hp4k1h5%2Fephemeris/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hp4k1h5","download_url":"https://codeload.github.com/hp4k1h5/ephemeris/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hp4k1h5%2Fephemeris/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29191407,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-07T07:37:03.739Z","status":"ssl_error","status_checked_at":"2026-02-07T07:37:03.029Z","response_time":63,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["diary","markdown","todo","vim-plugin","viml"],"created_at":"2025-04-09T20:42:08.930Z","updated_at":"2026-02-07T09:32:46.725Z","avatar_url":"https://github.com/hp4k1h5.png","language":"Vim script","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ephemeris\n! experimental and unstable see [BUGS](#bugs)\n\u003e a diary plugin for vim\n\nephemeris is a diary and calendar plugin for vim. It provides a collection of\nfunctions and commands that can be used to create, edit, and curate diary/log\nentries.\n\nThe diary is defined by the directories and files found recursively under the\ndirectory set in the global variable `g:ephemeris_diary`. ephemeris does not\nrely on any external programs and does not interfere with any external\nprogram, such as cal, etc. This plugin works best when the directory structure\nof `g:ephemeris_diary` is YYYY/MM/DD.md, as follows:\n```txt\n  ├── 2019\n  │   └── 09\n  │       ├── 16.md\n  │   └── 12\n  │       └── 20.md\n  ├── 2020\n  │   └── 05\n  │       ├── 01.md\n  │       ├── 04.md\n```\nThis tree structure is provided by default by ephemeris functions. This plugin\nwill only provide limited functionality if the directory structure does not\ninclude a date-aligned directory structure as outlined above.\n\n![diary index and markdown side-by-side](img/side-by-side.png)\n\n**see [doc/ephemeris.txt](doc/ephemeris.txt) for additional user help**  \n**see [CONTRIBUTING](.github/CONTRIBUTING.md) for contributor guidelines**  \n**see [vader tests](.github/CONTRIBUTING.md#vader-tests) for testing\ndocumentation**\n\nversion information available at [vim.org](https://www.vim.org/scripts/script.php?script_id=5879)\n\n---------------------------------------------\n\n## contents\n\n  - [functionalities](#functionalities)\n  - [installation](#installation)\n  - [usage](#usage)\n  - [workflow](#workflow)\n  - [options](#options)\n  - [commands](#commands)\n    - [code folding](#code-folding)\n  - [example-mappings](#example-mappings)\n  - [CHANGELOG](#changelog)\n\n---------------------------------------------\n\n#### functionalities\n\n - [🌕] create/goto index/today\n - [🌖] **checkbox** list item management\n   - [🌕] filter/toggle/archive/count\n   - [🌕] copy last set of tasks `- [ ]` to current day's diary entry\n - [🌗] print day's agenda\n - [🌖] list-appropriate code folding\n\n---------------------------------------------\n\n### installation\n\nAdd `Plug 'HP4k1h5/ephemeris'` to your `.vimrc` and run\n```vim\n:source $MYVIMRC | PlugInstall\n```\n\n---------------------------------------------\n\n### usage\nGenerally, ephemeris may work for those who like to keep a daily journal or log\nand a todo list and other note, task, and reminder related items in the same\nplace. As functionalities grow, the principle of moving data from one place\nto another efficiently will be prioritised.\n\n### workflow\n1) Add the only required setting to your `.vimrc`, with e.g. `:let\ng:ephemeris_diary = '~/diary'`\n2) Either create a new entry with `:EphemerisGotoToday`, or copy over todos\nfrom the last entry with `:EphemerisCopyTodos` if you already have entries\nthat contain `g:ephemeris_todos` markers.\n3) If you use task lists, `:EphemerisToggleTask` can create task items and\ntoggle task items between by default, `- [ ]`, for incomplete, and `- [x]` for\ncomplete tasks. `:EphemerisFilterTasks` will move to archive or delete\ncompleted tasks and their associated subblocks.\n4) `:EphemerisPrintAgenda` will grep all diary entries for date tags of the\ndate provided, e.g. `(YYYY/MM/DD)` or today, if no date is provided.\n\n---------------------------------------------\n\n\n#### options\n\n**g:ephemeris_diary (!!required)**  \nset the root directory for your diary entries `g:ephemeris_diary`, i.e. in your\n`.vimrc`:\n```vim\nlet g:ephemeris_diary = '~/diary'\n```\n\n**g:ephemeris_todos**  \nSet the string for `EphemerisCopyTodos`, to look for.  Everything below the\nmarker in the most recent diary entry is copied and appended into the current\nday's entry. You can change it by setting it, i.e.  in your `.vimrc`. See\n`EphemerisCopyTodos`.  \nDefault: `TODOs`  \nExample:\n```vim\nlet g:ephemeris_todos = '=== TASK LIST ==='\n```\n\n**g:ephemeris_toggle_list**  \nString list of characters to be used in checkbox items.  \nDefault: `' x'`, rendering as `- [ ]` and `- [x]`  \nExample:  \n```vim\nlet g:ephemeris_toggle_list = '🌑🌘🌗🌖🌕'\n```\na checkbox will look like `- [🌖]` and the last item in the list will be the\ncompleted item.\n\n---------------------------------------------\n\n#### commands\n**see [doc/ephemeris.txt](doc/ephemeris.txt) for additional help**\n\n**:EphemerisCreateIndex**  \nCreate markdown diary index of all '.md' files found under the\n|g:ephemeris_diary| directory, and go to vertical split.  Calls\n|ephemeris#ind#create_index()|\n\n**:EphemerisGotoIndex**  \nOpen diary index in a vertical split or focus diary index buffer. Index is\nfound at |g:ephemeris_diary|/index.md. Calls |ephemeris#ind#goto_index()|\n\n**:EphemerisGotoToday**  \nOpen a split with today's diary entry. Index is found at\n|g:ephemeris_diary|/index.md.\n\n**:EphemerisCopyTodos**  \n Copy TODOs from last set of TODOs going back up to 10 years. Your\n @setting(g:ephemeris_diary) directory must  be organized in a\n `.../YYYY/MM/DD.md` hierarchy, in order for this function to know which set\nof TODOs are_most recent_. TODOs are defined by the string set in\n @setting(g:ephemeris_todos). Default is 'TODOs'. Everything below that\n marker, until 2 consecutive newlines, an incomplete task, or a subsequent\n g:ephemeris_todos marker, is copied to the current day's diary entry. It will\n open today's diary entry in a split. Calls\n @function(ephemeris#lst#copy_todos)\n\n**:EphemerisToggleTask**  \nToggle state of task item under cursor through items provided in\n`g:ephemeris_toggle_list`. The last character in the string is the \"completed\"\nitem, used by e.g. `EphemerisFilterTasks`. If no task item is present a new\none will be created, using the left-most item in the\n`g:ephemeris_toggle_list`.\n\n**:EphemerisPrintAgenda**\nPrint [date]'s agenda composed of grepped lines found in files found in\n`g:ephemeris_diary` tagged with `(YYYY/MM/DD)` date-formatted markers. If no\ndate is provided, today's date is used. If `g:ephemeris_todos` exists agenda\nitems will be printed below that, otherwise at the top of the buffer.  \nEx: `:EphemerisPrintAgenda '2020/07/04'`, yields in the current buffer\n```md\n# TODOs\n## 2020/07/04 AGENDA\nfilename1 :: agenda item 1 due on... (2020/07/04)\nfilename2 :: agenda item 2 (2020/07/04)\nfilename3 :: agenda item 3 (2020/07/04)\n```\n\n**:EphemerisFilterTasks**  \n @usage [archive] [summary]  \n Delete or move completed tasks, e.g. list items containing `- [x]`, and all\n associated subblocks until the next incomplete task\n @setting(g:ephemeris_todos) marker, 2 newlines, or EOF.  See example in\n @function(ephemeris#lst#filter_tasks). The first argument [archive] is a\n boolean which determines whether the filtered tasks are moved to\n 'g:ephemeris_diary'/.cache/archive.md. Default is 0. The second argument\n [summary] is a boolean. If true this function will print a summary of\n filtered/remaining tasks at the bottom of the buffer. Default is 0.  \n Ex: `:EphemerisFilterTasks 1 1` \" filters tasks, moves completed tasks to\n```md\n*------------------------------------*\n| TODOs (before)                     |\n|- [x] complete task 1               |\n|- [ ] incomplete task 2             |\n|  - [x] complete task 2a            |\n|  - additional info that is not a   |    run in command-line mode\n| task will be preserved if the      |  *---------------------*\n| task is incomplete                 |--|:EphemerisFilterTasks|\n|- [x] complete task 3               |  *---------------------*\n|  - [ ] incomplete task 3a          |              |\n|- [x] complete task 4               |              |\n|  - but removed otherwise           |              |\n|  - [ ] incomplete task 4a also     |              |\n|   this will get preserved          |              |\n*------------------------------------*              V\n            *----------------------------------------------*\n            | TODOs  (after)                               |\n            |- [ ] incomplete task 2                       |\n            |  - [ ] incomplete task 3a                    |\n            |  - [ ] incomplete task 4a also               |\n            |   this will get preserved                    |\n            *----------------------------------------------*\n```\n\n**:EphemerisFold**  \n Fold file by line-separated paragraphs, works well with lists if you leave a\n \" space between list blocks. Set 'foldlevel' to 0 or type `zM` to fold all,\n type \" `zR` to open all folds.\n\n### code folding\n\nIn the top left image, an unfolded list of items.  As these grow, navigating\nthem and getting a high-level overview can be difficult. In the top right\nimage, `EphemerisFold` has been applied and all blocks have been closed `zM`.\nBlocks of newline-spaced list items are folded and visually condensed to their\nparent headers. In the bottom image, one fold has been opened `zo`.\n\n![full list](./img/full-list.png) ![folded\nlist](./img/folded.png) ![open fold](./img/open_fold.png)\n\n#### example-mappings\n```vim\nnmap \u003cleader\u003eeci :EphemerisCreateIndex\u003cCR\u003e\nnmap \u003cleader\u003eegt :EphemerisGotoToday\u003cCR\u003e\nnmap \u003cleader\u003eect :EphemerisCopyTodos\u003cCR\u003e\nnmap \u003cleader\u003eepa :EphemerisPrintAgenda\u003cCR\u003e\nnmap \u003cleader\u003eef  :EphemerisFold\u003cCR\u003e\nnmap \u003cleader\u003eeft :EphemerisFilterTasks 1 1\u003cCR\u003e\n\"           1 = archive, 0 = delete ---^ ^---- 1 = summary, 0 = no summary\nnmap \u003cleader\u003eet  :EphemerisToggleTask\u003cCR\u003e\n```\n\n---------------------------------------------\n\n### CHANGELOG\n\n- v0.9 bugfixes, agenda\n- v0.8 folding, checkbox options\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhp4k1h5%2Fephemeris","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhp4k1h5%2Fephemeris","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhp4k1h5%2Fephemeris/lists"}