{"id":18185063,"url":"https://github.com/jaandrle/mdexpr-agenda","last_synced_at":"2026-05-08T06:53:25.624Z","repository":{"id":82247093,"uuid":"530187155","full_name":"jaandrle/mdexpr-agenda","owner":"jaandrle","description":"Use extended markdown syntax to simulate `org-agenda` from emacs.","archived":false,"fork":false,"pushed_at":"2022-09-07T08:26:16.000Z","size":26,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-11T02:41:44.929Z","etag":null,"topics":["cli","markdown","mdexpr","nodejs","org-agenda","org-mode"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/jaandrle.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-08-29T11:22:51.000Z","updated_at":"2022-09-01T18:17:59.000Z","dependencies_parsed_at":"2023-05-20T15:00:41.553Z","dependency_job_id":null,"html_url":"https://github.com/jaandrle/mdexpr-agenda","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jaandrle/mdexpr-agenda","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jaandrle%2Fmdexpr-agenda","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jaandrle%2Fmdexpr-agenda/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jaandrle%2Fmdexpr-agenda/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jaandrle%2Fmdexpr-agenda/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jaandrle","download_url":"https://codeload.github.com/jaandrle/mdexpr-agenda/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jaandrle%2Fmdexpr-agenda/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32770544,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-08T02:36:36.067Z","status":"ssl_error","status_checked_at":"2026-05-08T02:36:07.210Z","response_time":54,"last_error":"SSL_read: 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":["cli","markdown","mdexpr","nodejs","org-agenda","org-mode"],"created_at":"2024-11-02T22:05:51.440Z","updated_at":"2026-05-08T06:53:25.611Z","avatar_url":"https://github.com/jaandrle.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"**WIP – currently under investigation!**\n\n# mdexpr-agenda\nUse extended markdown syntax to simulate `org-agenda` from emacs.\nFor motivation and/or more information about `mdexpr` syntax visits\n[jaandrle/mdexpr: Use extended markdown syntax inspired by Org mode from emacs.](https://github.com/jaandrle/mdexpr).\n\n## Example\nThis README.md dokument uses it! See section [Roadmap](#roadmap).\nBy calling `mdexpr-agenda README.md` on 2022-09-01 you see in terminal:\n```terminal\n—————                                           —————— FUTURE ————————————————————————————————— ——————\n#1 +    NEXT    2022-09-05      2022-09-10      - [ ] recurring dates                           phase1\n#2 +    NEXT    2022-09-05      2022-09-10      - [ ] remove limitation for first founded file  phase1\n#3 +    NEXT    2022-09-10      2022-09-10      - [ ] recurring dates                           phase1\n#4 +    NEXT    2022-09-10      2022-09-10      - [ ] remove limitation for first founded file  phase1\n#5 +    NEXT    2022-09-10      2022-09-10      ### CLI                                         phase1\n#6 +    TODO    2022-09-24      -               ### VIM                                         phase1\n#7 +    TODO    tbd             -               ### ? Synchronization with calendars (google)   phase2\n```\n\n### Syntax explanation\nTo allow `{… agenda}$` you must use elsewhere in document (e. g. end of the file):\n```markdown\n\u003cdetails\u003e\n\u003csummary\u003e`{… cmd}$` explanation\u003c/summary\u003e\n\nThis is [mdexpr](https://github.com/jaandrle/mdexpr) syntax. This document uses:\n- {use [agenda](https://github.com/jaandrle/mdexpr-agenda) with states=TODO,NEXT|DONE mdexpr}$\n\n\u003c/details\u003e\n```\n…for explanation visits [jaandrle/mdexpr](https://github.com/jaandrle/mdexpr#syntax-v05x-currently).\nThe `states` provide way to define open (todo) and “done” statuses with `todo|done`. It is possible\nto define multiple open states for both types separated by commas.\n\n`mdexpr-agenda` supports both inline and block syntax:\n```markdown\n## Agenda title (block)\n{STATUS \u003cdatetime-reminder\u003e **\u003cdatetime-deadline\u003e** *label* agenda}$\n\n\n- Agenda title (inline) {STATUS \u003cdatetime-reminder\u003e **\u003cdatetime-deadline\u003e** *label* agenda}$\n```\n\n- `STATUS`: this defines open/close status (see `states` above) and it can be used for filtering.\n- `\u003cdatetime-reminder\u003e`: this supports `%Y-%m-%d[ %H:%M][ r…]` syntax (`[…]` marks optional part)\n\t- `%Y-%m-%d` stands for date in the form *full\\_year-month-day*  (month/day should be two digits: `01, 02, …, 10, …, 31`)\n\t- `%M:%M` stands for time *hour:minute* (again two digits)\n\t- `r…` stands for recurring date, in the form `rNM` (`N` positive number/intiger, `M` measurement such as `d`=day/`m`=month/`y`=day)\n\t\t- dates are limited by `%Y-%m-%d[ %H:%M]` to `**\u003cdatetime-deadline\u003e**`\n\t- \u003cdatetime-reminder\u003e can be used multiple times\n- `**\u003cdatetime-deadline\u003e**`: deadline in the form `%Y-%m-%d[ %H:%M]`, it is possible to use only one deadline\n- `*label*`: this can be used to filtering (TBD), can be used multiple times\n- for title in block syntax only one line is supported (filtered)\n\n## Instalation\n**For now experiment!!!**\n\n1. you need nodejs \u003e=v17.0.1 ⇒ folows [nvm-sh/nvm: Node Version Manager](https://github.com/nvm-sh/nvm)[^node]\n1. `npm install https://github.com/jaandrle/mdexpr-agenda --global`\n\n## Roadmap v0.5.x\nThis is only rough estimate and **also syntax test**.\n\n### Sytax\n{DONE **\u003c2022-09-01\u003e** *phase1* agenda}$\n\n### CLI\n{NEXT **\u003c2022-09-10\u003e** *phase1* agenda}$\n\n- [x] split `mdexpr` and `mdexpr-agenda` {DONE **\u003c2022-09-01\u003e** *phase1* agenda}$\n- [x] print agenda items {DONE **\u003c2022-09-01 12:00\u003e** *phase1* agenda}$\n- [ ] remove limitation for first founded file {NEXT \u003c2022-09-05\u003e **\u003c2022-09-10\u003e** *phase1* agenda}$\n- [ ] filter options\n\t- [x] dates, states\n\t- [ ] labels\n- [x] configuration[^prepinani]\n- [ ] recurring dates {NEXT \u003c2022-09-05\u003e **\u003c2022-09-10\u003e** *phase1* agenda}$\n\n### VIM\n{TODO \u003c2022-09-24\u003e *phase1* agenda}$\n\n- [ ] simplify changing values[^prepinani]\n- [ ] helpers for dates\n- [ ] `gh`/`gd`\n- [ ] another helpers\n\n\u003cdetails\u003e\n\u003csummary\u003eworkaround\u003c/summary\u003e\n\n```vim\nfunction! s:mdexpr_agenda(file) abort\n\tlet c_file= a:file!='%' ? a:file : expand('%')\n\tlet s_makeprg= \u0026l:makeprg\n\tlet s_errorformat= \u0026l:errorformat\n\tlet \u0026l:makeprg= 'mdexpr-agenda '.c_file.' --grep'\n\tlet \u0026l:errorformat= '%f:%l:%m'\n\tsilent lmake\n\tsilent redraw!\n\tlet \u0026l:makeprg= s_makeprg\n\tlet \u0026l:errorformat= s_errorformat\n\tlopen\nendfunction\ncommand -nargs=* MDEXPRagenda if \u003cq-args\u003e!='' | call \u003csid\u003emdexpr_agenda(\u003cf-args\u003e) | elseif \u0026filetype=='markdown' | call \u003csid\u003emdexpr_agenda('%') | else | call \u003csid\u003emdexpr_agenda('*.md') | endif\ncommand MDEXPRclose lclose | lexpr []\n\" call scommands#map('m', 'MDEXPR', \"n\") \"see https://github.com/jaandrle/vim-scommands\n```\n\n\u003c/details\u003e\n\n\n### ? Synchronization with calendars (google)\n{TODO *phase2* agenda}$\n\n\n[^prepinani]: For example TODO/NEXT/DONE\n[^node]: Alternatively `curl -sL install-node.vercel.app/17.0.1 | bash`\n\n\u003cdetails\u003e\n\u003csummary\u003e`{… cmd}$` explanation\u003c/summary\u003e\n\nThis is [mdexpr](https://github.com/jaandrle/mdexpr) syntax. This document uses:\n- {use [agenda](https://github.com/jaandrle/mdexpr-agenda) with states=TODO,NEXT|DONE mdexpr}$\n\n\u003c/details\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjaandrle%2Fmdexpr-agenda","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjaandrle%2Fmdexpr-agenda","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjaandrle%2Fmdexpr-agenda/lists"}