{"id":15027051,"url":"https://github.com/novoid/memacs","last_synced_at":"2026-10-19T16:44:47.867Z","repository":{"id":646042,"uuid":"2092708","full_name":"novoid/Memacs","owner":"novoid","description":"What did I do on February 14th 2007? Visualize your (digital) life in Org-mode","archived":false,"fork":false,"pushed_at":"2026-05-25T17:20:58.000Z","size":1416,"stargazers_count":1116,"open_issues_count":20,"forks_count":67,"subscribers_count":44,"default_branch":"master","last_synced_at":"2026-10-17T11:50:39.399Z","etag":null,"topics":["emacs","email","files","filesystem","git","org-mode","orgmode","personal-information-management","pim","python","quantified-self","search"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/novoid.png","metadata":{"files":{"readme":"README.org","changelog":null,"contributing":null,"funding":null,"license":"license.txt","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}},"created_at":"2011-07-23T10:52:49.000Z","updated_at":"2026-10-12T20:20:17.000Z","dependencies_parsed_at":"2024-10-27T23:46:20.396Z","dependency_job_id":"03be457f-caca-4cd0-805a-ed6607d07fbe","html_url":"https://github.com/novoid/Memacs","commit_stats":{"total_commits":624,"total_committers":26,"mean_commits":24.0,"dds":0.641025641025641,"last_synced_commit":"c0fc3a9e1f09a2b1959371e8324729fdd359df57"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/novoid/Memacs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/novoid%2FMemacs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/novoid%2FMemacs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/novoid%2FMemacs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/novoid%2FMemacs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/novoid","download_url":"https://codeload.github.com/novoid/Memacs/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/novoid%2FMemacs/sbom","scorecard":{"id":695721,"data":{"date":"2025-08-11","repo":{"name":"github.com/novoid/Memacs","commit":"319e498a50d5fd4e86f80d8132eb06e5eeb3ee6c"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.3,"checks":[{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":4,"reason":"Found 9/20 approved changesets -- score normalized to 4","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: license.txt:0","Info: FSF or OSI recognized license: GNU General Public License v3.0: license.txt:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 19 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"58 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: PYSEC-2011-18 / GHSA-3mwg-gp5g-fv3q","Warn: Project is vulnerable to: PYSEC-2012-14 / GHSA-hjf3-r7gw-9rwg","Warn: Project is vulnerable to: PYSEC-2011-19","Warn: Project is vulnerable to: PYSEC-2011-20","Warn: Project is vulnerable to: PYSEC-2011-21","Warn: Project is vulnerable to: GHSA-3c5c-7235-994j","Warn: Project is vulnerable to: GHSA-3f63-hfp8-52jq","Warn: Project is vulnerable to: PYSEC-2021-41 / GHSA-3wvg-mj6g-m9cv","Warn: Project is vulnerable to: PYSEC-2020-77 / GHSA-3xv8-3j54-hgrp","Warn: Project is vulnerable to: PYSEC-2020-80 / GHSA-43fq-w8qq-v88h","Warn: Project is vulnerable to: GHSA-44wm-f244-xhp3","Warn: Project is vulnerable to: GHSA-4fx9-vc88-q2xc","Warn: Project is vulnerable to: PYSEC-2021-35 / GHSA-57h3-9rgr-c24m","Warn: Project is vulnerable to: PYSEC-2020-172 / GHSA-5gm3-px64-rw72","Warn: Project is vulnerable to: PYSEC-2021-331 / GHSA-7534-mm45-c74v","Warn: Project is vulnerable to: PYSEC-2021-92 / GHSA-7r7m-5h27-29hp","Warn: Project is vulnerable to: PYSEC-2020-78 / GHSA-8843-m7mw-mxqm","Warn: Project is vulnerable to: PYSEC-2023-227 / GHSA-8ghj-p4vj-mr35","Warn: Project is vulnerable to: PYSEC-2014-87 / GHSA-8m9x-pxwq-j236","Warn: Project is vulnerable to: PYSEC-2022-10 / GHSA-8vj2-vxx3-667w","Warn: Project is vulnerable to: PYSEC-2021-36 / GHSA-8xjq-8fcg-g5hw","Warn: Project is vulnerable to: PYSEC-2016-6 / GHSA-8xjv-v9xq-m5h9","Warn: Project is vulnerable to: PYSEC-2021-42 / GHSA-95q3-8gr9-gm8w","Warn: Project is vulnerable to: PYSEC-2022-168 / GHSA-9j59-75qj-795w","Warn: Project is vulnerable to: PYSEC-2014-10 / GHSA-cfmr-38g9-f2h7","Warn: Project is vulnerable to: PYSEC-2020-76 / GHSA-cqhg-xjhh-p8hf","Warn: Project is vulnerable to: PYSEC-2021-40 / GHSA-f4w8-cv6p-x6r5","Warn: Project is vulnerable to: PYSEC-2021-69 / GHSA-f5g8-5qq7-938w","Warn: Project is vulnerable to: PYSEC-2021-139 / GHSA-g6rj-rv7j-xwp4","Warn: Project is vulnerable to: PYSEC-2015-16 / GHSA-h5rf-vgqx-wjv2","Warn: Project is vulnerable to: PYSEC-2016-5 / GHSA-hggx-3h72-49ww","Warn: Project is vulnerable to: PYSEC-2020-84 / GHSA-hj69-c76v-86wr","Warn: Project is vulnerable to: PYSEC-2016-7 / GHSA-hvr8-466p-75rh","Warn: Project is vulnerable to: PYSEC-2015-15 / GHSA-j6f7-g425-4gmx","Warn: Project is vulnerable to: GHSA-j7hp-h8jx-5ppr","Warn: Project is vulnerable to: PYSEC-2019-110 / GHSA-j7mj-748x-7p78","Warn: Project is vulnerable to: GHSA-jgpv-4h4c-xhw3","Warn: Project is vulnerable to: PYSEC-2022-42979 / GHSA-m2vv-5vj5-2hm7","Warn: Project is vulnerable to: PYSEC-2021-37 / GHSA-mvg9-xffr-p774","Warn: Project is vulnerable to: PYSEC-2020-83 / GHSA-p49h-hjvm-jg3h","Warn: Project is vulnerable to: PYSEC-2022-8 / GHSA-pw3c-h7wp-cvhx","Warn: Project is vulnerable to: PYSEC-2021-93 / GHSA-q5hq-fp76-qmrc","Warn: Project is vulnerable to: PYSEC-2020-82 / GHSA-r7rm-8j6h-r933","Warn: Project is vulnerable to: PYSEC-2014-23 / GHSA-r854-96gq-rfg3","Warn: Project is vulnerable to: PYSEC-2016-8 / GHSA-rwr3-c2q8-gm56","Warn: Project is vulnerable to: PYSEC-2020-81 / GHSA-vcqg-3p29-xw73","Warn: Project is vulnerable to: PYSEC-2020-79 / GHSA-vj42-xq3r-hr3r","Warn: Project is vulnerable to: PYSEC-2021-70 / GHSA-vqcj-wrf2-7v73","Warn: Project is vulnerable to: PYSEC-2016-9 / GHSA-w4vg-rf63-f3j3","Warn: Project is vulnerable to: PYSEC-2014-22 / GHSA-x895-2wrm-hvp7","Warn: Project is vulnerable to: PYSEC-2022-9 / GHSA-xrcv-f9gm-v42c","Warn: Project is vulnerable to: PYSEC-2021-137","Warn: Project is vulnerable to: PYSEC-2021-138","Warn: Project is vulnerable to: PYSEC-2021-317","Warn: Project is vulnerable to: PYSEC-2021-38","Warn: Project is vulnerable to: PYSEC-2021-39","Warn: Project is vulnerable to: PYSEC-2021-94","Warn: Project is vulnerable to: PYSEC-2023-175"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-22T03:37:35.797Z","repository_id":646042,"created_at":"2025-08-22T03:37:35.798Z","updated_at":"2025-08-22T03:37:35.798Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":344872684,"owners_count":38362277,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-10-03T21:59:58.778Z","status":"online","status_checked_at":"2026-10-19T02:00:06.414Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["emacs","email","files","filesystem","git","org-mode","orgmode","personal-information-management","pim","python","quantified-self","search"],"created_at":"2024-09-24T20:05:41.578Z","updated_at":"2026-10-19T16:44:47.853Z","avatar_url":"https://github.com/novoid.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"*What were you doing* on February 14th of 2007? On *which tasks* were\nyou working on that very day you met your girl friend? When was the\n*last appointments* with your dentist? *Who called* you on telephone\nduring that meeting with your customer last month?\n\nMost people can not answer such questions. *With Memacs you can!*\n\nMemacs extracts metadata (subjects, timestamps, contact information,\n...) from many different existing data sources (file names, emails,\ntweets, bookmarks, ...) on your computer and generates files which are\nreadable by [[http://en.wikipedia.org/wiki/Emacs][GNU Emacs]] with [[http://orgmode.org/][Org mode]].\n\nExample:\n:    emails              -\u003e memacs-maildir.py  \\\n:    firefox history     -\u003e memacs-firefox.py   |\n:    SMS                 -\u003e memacs-sms.py       |\n:    RSS-feeds           -\u003e memacs_rss.py       |\n:    bank statements     -\u003e memacs-easybank.py  |\u003e  Memacs\n:    postings            -\u003e memacs-slrn.org     |\n:    git repository logs -\u003e memacs_git.py       |\n:    svn repository logs -\u003e memacs_svn.py      /\n:    |_________________|   |_________________|     |______|\n:    your personal data      Memacs modules        Org mode\n\nMemacs - as the central component of the system - is a hub for all the\nconnectors that add data from individual data sources. Those connectors\nare called *Memacs modules* or short /module/.\n\nYour agenda automatically gets populated with entries similar to the example shown in the screenshot from [[http://arxiv.org/abs/1304.1332][the white paper]]:\n\n[[file:https://github.com/novoid/screencasts/raw/master/memacs/2012-04-08_Memacs_2008-09-15_archive.png]]\n\nYou can see some demo data using the modulees for SMS, filenamedatestamps, Twitter, RSS, imap, phonecalls, and git.\n\n- *target group*: Users of  [[http://en.wikipedia.org/wiki/Emacs][Emacs]] and [[http://orgmode.org/][Org mode]]\n- *skills necessary*: creating/modifying shell script code; creating\n  scheduled tasks\n- *project hosted on* https://github.com/novoid/Memacs\n\n\n** Table of Contents\n- [[#installation][Installation]]\n- [[#getting-started][Getting started]]\n- [[#workflows][Workflows]]\n- [[#memacs-modules][Memacs modules]]\n- [[#changelog][Changelog]]\n- [[#example-story][Example story]]\n- [[#background][Background]]\n- [[#contribute][Contribute]]\n- [[#license][License]]\n\n** Installation\n\nMemacs requires *Python 3.9 or newer*. Project management is handled\nby [[https://docs.astral.sh/uv/][uv]]. See [[file:INSTALL.org][INSTALL.org]] for the long-form walkthrough.\n\n*** Install with uv (recommended)\n\nFor end users who just want to run the modules:\n\n: uv tool install memacs\n\nThis installs all ~memacs_*~ commands globally on your ~PATH~. Add\nmodule-specific deps with ~--with~ (e.g.\n~uv tool install memacs --with feedparser --with icalendar~).\n\nFor contributors, or to get everything pre-wired:\n\n: git clone https://github.com/novoid/Memacs.git\n: cd Memacs\n: uv sync --all-groups\n: uv run memacs_rss --help\n\nThe dependency groups defined in ~pyproject.toml~ are: =gps=, =rss=,\n=ical=, =lastfm=, =battery=, =twitter=, =photos=, =contacts=,\n=podcastaddict=, =dev=. Install a subset with e.g.\n~uv sync --group rss --group ical~.\n\n*** Installing with pip\n\nPlain ~pip install memacs~ still works and pulls in the core\ndependencies, but be aware: the per-module extras (~gps~, ~rss~, ...)\nwere moved from ~setup.py~'s ~extras_require~ to PEP 735\n~[dependency-groups]~ in ~pyproject.toml~. That means *the old\n~pip install memacs[rss]~ syntax no longer works.* If you install via\npip, install module dependencies yourself (e.g. ~pip install feedparser~).\nFor the original \"install everything\" experience, use the uv workflow\nabove.\n\n*** Development\n\nSee [[file:AGENTS.md][AGENTS.md]] for the framework overview and module-authoring\nconventions. To run the full test suite:\n\n: ./run_all_unit_tests.sh\n\n(equivalent to ~uv run --group dev pytest --exitfirst memacs/tests memacs/lib/tests~).\n\n** Getting Started\n\nThe basic concept of using a Memacs module is following:\n\n1. Choose a Memacs module you want to use and set it up:\n   - Read the module descripion files in the ~docs~ folder.\n   - Each [[#memacs-modules][module]] shares global options but also comes with its very\n     own set of custom arguments.\n   - Manually start the module of your choice from the ~bin~ folder of\n     Memacs with the argument ~--help~, e.g. ~bin/memacs_csv.py\n     --help~ in your command line in order to get an overview of the\n     arguments of this module.\n   - You probably want to *develop and test a script (=.bat= or =.sh=)\n     for the module invocation* in the command line and ...\n2. When this script works as expected, set up a periodical invocation\n   so that your data gets converted to Org mode via Memacs regularily.\n   - This is usually done via operating system dependent methods:\n     - Windows: [[https://docs.microsoft.com/en-us/windows/desktop/taskschd/task-scheduler-start-page][Task Scheduler]]\n     - GNU/Linux: [[https://en.wikipedia.org/wiki/Cron][cron job]] or via [[https://wiki.archlinux.org/index.php/Systemd/Timers][systemd]]\n     - macOS: [[http://www.launchd.info/][launchd]]\n3. For an update from a running instance of Emacs, independent of a\n   recurrent schedule (e.g., Memacs' photo module after returning from\n   an excursion), you may add a key binding to Emacs, e.g. =C-c m p=\n   to your configuration\n\n   #+begin_src emacs-lisp\n     (defun mp-update-memacs-photos ()\n       \"An extra (i.e., not cron-scheduled) run of Memacs' photo module.\"\n       (interactive)\n\t (shell-command\n\t   (format \"~/org/update-memacs-photos.sh\")\n\t )\n     )\n\n     (global-set-key (kbd \"C-c m p\") 'mp-update-memacs-photos)\n   #+end_src\n\n   The script called requires the provision of the executable bit.\n   Additional background of this technique is compiled by Mickey\n   Petersen in [[https://www.masteringemacs.org/article/mastering-key-bindings-emacs][Mastering Key Bindings in Emacs]].\n4. Think of another Memacs module you might want to try ;-)\n\nPlease make sure you also read the [[docs/FAQs_and_Best_Practices.org][FAQ's and best practices]], as it\ncontains many tips and tricks on how to meet your requirements and on\nhow to choose a reasonable setup.\n\n** Workflows\n\nHere are some workflows just to give you an initial impression how\nMemacs may give you much for digital fun.\n\n*** The Basics\n\nWhen one or more Memacs modules are set-up and data starts flowing in\nto your Memacs Org mode files, you have many options to use Memacs for\nyour personal workflows.\n\nThe most basic thing that changes with Memacs is that you might want\nto see Memacs-processed data in your agenda:\n\nEither you are generating (1) Org mode files that are within your\n[[https://orgmode.org/manual/Agenda-files.html][agenda files]] or you are generating (2) [[https://orgmode.org/manual/Archiving.html#Archiving][archive files]] whose more or\nless empty Org mode file stub is within your agenda files (as\ndescribed in the [[https://github.com/novoid/Memacs/blob/master/docs/FAQs_and_Best_Practices.org#performance-and-scalability][FAQs]]).\n\nThis way, the generated time-stamp information gets into your normal\nagenda (1) or in the [[https://orgmode.org/manual/Agenda-commands.html][extended in archives-mode]] (by pressing =v A= in\nyour agenda) that also shows content of the archive files (2).\n\n*** Filename Time-Stamp and Friends\n\nA Memacs feature I personally use all the time provides a somewhat\nmore complex workflow whose basic data is provided by the [[docs/memacs_filenametimestamps.org][filename\ntime-stamp module]]. The module indexes all my files that contain\nISO-datestamps or ISO-timestamps in their file names just like\n[[http://linux-sxs.org/utilities/updatedb.html][updatedb]] does for \"locate\".\n\nThe fun starts, when this module is set-up and the file index is\ngenerated (nightly). With the elisp snippets mentioned in the module\ndocumentation, I am able to link to any of those files just by\nspecifying their file name. This links never get broken since it does\nnot matter in which folder files are located in any more.\n\nPlease refer to [[https://github.com/novoid/dot-emacs/blob/master/config.org#handling-tsfile-links-memacs][my Emacs configuration]] and look out for all\noccurrences of =tsfile= (time-stamp file) which is my custom link for\nthose files.\n\nI even extended this workflow such that my [[https://github.com/novoid/lazyblorg][blog system]] is able to [[https://github.com/novoid/lazyblorg/wiki/Images#embedding-tsfile-image-files][link\nto =tsfile:= images]] independent of their location. Awesome stuff.\n\n** Memacs Modules\n\n- [[docs/memacs_arbtt.org][arbtt]]\n- [[docs/memacs_battery.org][battery]]\n- [[docs/memacs_csv.org][csv]]\n- [[docs/memacs_filenametimestamps.org][filenametimestamps]]\n- [[file:docs/memacs_firefox_history.org][firefox_history]]\n- [[file:docs/memacs_chrome_history.org][chrome_history]]\n- [[docs/memacs_git.org][git]]\n- [[docs/memacs_gpx.org][gpx]]\n- [[docs/memacs_ical.org][ical]]\n- [[docs/memacs_imap.org][imap]]\n- [[docs/memacs_lastfm.org][lastfm]]\n- [[docs/memacs_mumail.org][mu]]\n- [[docs/memacs_phonecalls.org][phonecalls]]\n- [[docs/memacs_photos.org][photos]]\n- [[docs/memacs_podcastaddict.org][podcastaddict]]\n- [[docs/memacs_rss.org][rss]]\n- [[docs/memacs_simplephonelogs.org][simplephonelogs]]\n- [[docs/memacs_sms.org][sms]]\n- [[docs/memacs_svn.org][svn]]\n- [[docs/memacs_twitter.org][twitter]]\n- [[docs/memacs_whatsapp.org][whatsapp]]\n- [[docs/memacs_kodi.org][KODI logs]]\n\nThis module is an example for developers: [[docs/memacs_csv.org]]\n\nThose modules are *not* adopted to the new unified framework yet:\n\n- [[tmp/emails/maildir/memacs-maildir.org][maildir]]\n- [[tmp/emails/mbox/memacs-mbox.org][mbox]] (also useful for newsgroups)\n  - see also [[tmp/emails/mbox/works-for-me-hack/memacs-mbox.org]]\n\n- *bank account*:\n  - [[http://www.easybank.at][easybank.at]]: see [[tmp/bank_statements/easybank.at/memacs-easybank.org]]\n\n- *newsgroups*\n  - *[[http://en.wikipedia.org/wiki/Slrn][slrn]]*: see [[tmp/emails/mbox/works-for-me-hack/memacs-mbox.org]]\n\nFollowing modules exist as a rough idea only and might get implemented\nsome day (by you?):\n\n- *[[http://karl-voit.at/tagstore/][tagstore]]*: see [[tmp/tagstore/memacs-tagstore.org]]\n\n- *calendar*:\n  - [[http://www.jpilot.org/][JPilot]]-datebook: see [[tmp/calendars/memacs-jpilot-datebook.org]]\n\n- *tasks*:\n  - [[http://www.jpilot.org/][JPilot]]-todos: see [[tmp/tasklists/jpilot-todos/memacs-jpilot-todos.org]]\n\n- *blog_systems*:\n  - [[http://en.wikipedia.org/wiki/Serendipity_(weblog_software)][Serendipity]]: see [[tmp/blog_systems/serendipity/memacs-serendipity.org]]\n\n** Changelog\n\n- Version 2026.05.25\n  - Features\n    - New module: [[file:docs/memacs_podcastaddict.org][memacs_podcastaddict]]. Reads\n      PodcastAddict Android backup files (~*.backup~ ZIP archives\n      containing the app's SQLite database) and emits an Org-mode\n      entry per finished podcast episode. HTML shownotes are\n      converted to Org via [[https://pandoc.org/][pandoc]] (~pypandoc~).\n  - Build system\n    - Migrated from ~setup.py~ + ~requirements.txt~ to ~pyproject.toml~\n      with the [[https://hatch.pypa.io/][hatchling]] build backend, managed by [[https://docs.astral.sh/uv/][uv]].\n    - Minimum supported Python is now *3.9*.\n    - Optional per-module dependencies moved from setuptools extras to\n      PEP 735 ~[dependency-groups]~. Downstream pip users must now\n      install module deps manually; see Installation.\n  - Compatibility\n    - Python 3.13 fixes: replaced removed stdlib modules ~distutils~\n      (arbtt module) and ~imghdr~ (photos module).\n    - Cleaned up ~SyntaxWarning~s for invalid escape sequences and the\n      deprecated ~is~-with-string-literal idiom.\n  - Tooling\n    - ~run_all_unit_tests.sh~ now drives pytest via ~uv run~.\n    - ~Makefile~ ~test~/~upload~ targets updated for uv / ~uv build~ /\n      ~uv publish~.\n    - Added [[file:AGENTS.md][AGENTS.md]] documenting the Memacs framework for\n      human contributors and AI agents.\n\n- Version 2020.06.05.1\n  - Features\n    - New module: [[https://github.com/novoid/Memacs/blob/master/docs/memacs_kodi.org][memacs_kodi]]\n    - Andrea Ghensi [[https://github.com/novoid/Memacs/pull/100][provided an improved pip setup method]]\n  - Bugfixes\n    - fix chrome.py output to include url and title for org headings\n    - many improvements for the Chrome module\n    - filenametimestamps: fixed check_datestamp_correctness ([[https://github.com/novoid/Memacs/issues/97][#97]])\n\n- Version 2019.11.06.1\n  - Features\n    - [[https://github.com/novoid/orgformat][orgformat is now an external library]]\n  - Bugfixes\n    - Fix problems when locale is not en_US\n\n- Versions prior to 2019-10-09.1 are not documented using this\n  changelog. Please read the git commit messages.\n\n* Example Story\n\nImagine you are already using Memacs.\n\nWhen remembering that day, when you joined an interesting talk about\n«[[http://en.wikipedia.org/wiki/Getting_Things_Done][Getting Things Done]]» (GTD), you start up your GNU Emacs with your main\nOrg mode file. There you go to the Agenda-view and select this\nspecific day a couple of months ago.\n\nThere it is, from 2pm to 3pm you scheduled this talk in your calendar.\nAnd then you realize that within this time frame, there appear some\n[[http://en.wikipedia.org/wiki/Jpeg][JPEG files]] containing an [[http://www.cl.cam.ac.uk/~mgk25/iso-time.html][ISO 8601]] time stamp[1] are indexed by one\nmodule. (filenametimestamp-module)\n\nThis image contains a slide you found interesting and which you\nphotographed using your sleek smartphone. Who would remember having\ntaken a picture during a talk?\n\nTen minutes after the talk you wrote a short message on [[http://Twitter.com][Twitter]] where\nyou mentioned useful URLs for your followers. This time those URLs are\nhandy for yourself too! (Twitter-module)\n\nOn the evening of that day you see an entry of an incoming email from\nthe author of the talk. Now you remember having had a cool\nconversation at the end of the talk where he promised you some\nadditional information about that nice little GTD tool on his\ncomputer. Great that you got that link to that email too. Without\nMemacs you would probably never remembered that email again.\n(Maildir-module)\n\nAnd then there were some bookmarks you saved this day, almost all\nrelated to great ideas you got from the GTD talk. (delicious-module)\n\nThis small story shows only a few use cases where different modules\ncombine given data sources and their information to provide an overall\nview related to an event. Since Org mode has got links, no actual data\nhas to be duplicated (except the meta data extracted by Memacs).\nEmails, files, bookmarks, and so forth are linked rather than copied.\n\n[1] with periods instead of colons - just because the [[http://msdn.microsoft.com/en-us/library/aa365247(v%3Dvs.85).aspx#naming_conventions][ancient\nlimitations of Microsoft based file systems]]; like «2011-02-14T14.35.42\nideas.jpg»\n\n* Background\n\nIn 1945, [[http://en.wikipedia.org/wiki/Vannevar_Bush][Vannevar Bush]] wrote a famous article «[[http://en.wikipedia.org/wiki/As_We_May_Think][As We May Think]]» where\nhe develops the idea of having a «memory extender» called *Memex*. The\nmemex can store all letters, books, and other information which are\nrelated to a person.\n\nBesides having foreseen several technologies like hypertext, he\ndefined a device that holds all metadata and data and provides\nassociative trails to access information.\n\nIn the last decade of the previous century Microsoft Research had a\nresearch program that resulted in [[http://en.wikipedia.org/wiki/MyLifeBits][MyLifeBits]]. This software tried to\nstore each information of the user like office documents, screenshots,\nname of active windows on the desktop computer, and even automatically\ntook photographs ([[http://en.wikipedia.org/wiki/Sensecam][SenseCam]]). This word did not result in any (open)\nsoftware product. Bell and Gemmell wrote a book called «[[http://www.amazon.de/gp/product/0525951342/ref%3Das_li_ss_tl?ie%3DUTF8\u0026tag%3Dkarlssuder-21\u0026linkCode%3Das2\u0026camp%3D1638\u0026creative%3D19454\u0026creativeASIN%3D0525951342][Total Recall]]».\n\nThe Memacs project tries to implement the ideas of Vannevar Bush's\nvision with open source and open standards. Hence, it's name «Memacs»\nis the obvious combination of «[[http://www.gnu.org/software/emacs/][GNU Emacs]]» and «Memex».\n\nMemacs uses GNU Emacs Org mode to visualize and access information\nextracted by Memacs modules: using tags, time stamps, full text\nsearch, and so forth GNU Emacs is able to derive different\nviews. The most important view probably is the [[http://orgmode.org/org.html#Agenda-Views][Agenda-view]] where you\ncan see anything that happened during a specific day/week/month\naccording to the time frame selected. But you can derive other views\ntoo. For example you can choose to generate a condensed search result\nusing a [[http://en.wikipedia.org/wiki/Boolean_algebra_(logic)][boolean combination]] of tags.\n\nRelated to Memacs, the project founder developed a research software\ncalled *[[http://karl-voit.at/tagstore/][tagstore]]*. This system allows users to store (local) files\nusing tags without a hierarchy of folders. As a natural extension,\ntagstore targets associative access for (local) files. You might want\nto check out tagstore too. Memacs and tagstore are a very useful\ncombination.\n\nIf you do like to know how to efficiently organize digital files in a\nsimple and operating system independent way, read [[http://karl-voit.at/managing-digital-photographs/][this blog post]] from\nKarl. It might give you ideas for your workflows as well.\n\nKarl also wrote [[http://arxiv.org/abs/1304.1332][a whitepaper on Memacs]] which describes Memacs from a\nscientists point of view.\n\n* Similar Projects\n\n- In https://github.com/novoid/Memacs/issues/88, Alex links to a\n  browser extension from [[https://worldbrain.io/][WorldBrain]] called [[https://github.com/WorldBrain/Memex][Memex]].\n- https://github.com/karlicoss/orger has similar goals: converting\n  data into Org mode\n\n* Contribute! We are looking for your ideas:\n\nIf you want to contribute to this cool project, please fork and\ncontribute or write an additional module!\n\nSee [[docs/FAQs_and_Best_Practices.org]] for more developing information.\n\nWe are sure that there are a *lot* of cool ideas for other modules out\nthere! This is just the beginning!\n\nMemacs is designed with respect to minimal effort for new modules.\n\nWe are using [[http://www.python.org/dev/peps/pep-0008/][Python PEP8]] and [[http://en.wikipedia.org/wiki/Test-driven_development][Test Driven Development (TDD)]].\n\n* License\n\nMemacs is licensed under the GPLv3 [[license.txt][license]].\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnovoid%2Fmemacs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnovoid%2Fmemacs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnovoid%2Fmemacs/lists"}