{"id":13836749,"url":"https://github.com/pprevos/denote-explore","last_synced_at":"2025-04-06T22:06:42.386Z","repository":{"id":87646475,"uuid":"536963089","full_name":"pprevos/denote-explore","owner":"pprevos","description":"Helper functions to analyse and visualise a collection of notes created with the Denote package.","archived":false,"fork":false,"pushed_at":"2025-02-15T21:02:11.000Z","size":1029,"stargazers_count":83,"open_issues_count":1,"forks_count":9,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-03-29T18:04:03.929Z","etag":null,"topics":["emacs"],"latest_commit_sha":null,"homepage":"https://lucidmanager.org/productivity/denote-explore/","language":"Emacs Lisp","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/pprevos.png","metadata":{"files":{"readme":"readme.org","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}},"created_at":"2022-09-15T09:53:16.000Z","updated_at":"2025-03-27T08:51:50.000Z","dependencies_parsed_at":null,"dependency_job_id":"7e9419bf-cdb8-4fe0-b8c0-3eb3b9977040","html_url":"https://github.com/pprevos/denote-explore","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pprevos%2Fdenote-explore","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pprevos%2Fdenote-explore/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pprevos%2Fdenote-explore/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pprevos%2Fdenote-explore/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pprevos","download_url":"https://codeload.github.com/pprevos/denote-explore/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247557767,"owners_count":20958047,"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":["emacs"],"created_at":"2024-08-04T15:00:53.684Z","updated_at":"2025-04-06T22:06:42.365Z","avatar_url":"https://github.com/pprevos.png","language":"Emacs Lisp","funding_links":[],"categories":["Emacs Lisp"],"sub_categories":[],"readme":"#+title:  Denote Explorer: Explore your Denote Digital Garden\n#+author: Peter Prevos\n\nThe Denote-Explorer package provides auxiliary functions to maintain and explore your collection of Denote files. Denote-Explore provides three groups of Emacs commands:\n\n1. /Summary statistics/: Count and visualise notes, attachments and keywords.\n2. /Random walks/: Generate new ideas using serendipity.\n3. /Janitor/: Manage your denote collection.\n4. /Knowledge graphs/: Visualise your Denote network  as a network graph.\n\nRead the [[https://lucidmanager.org/productivity/denote-explore][Denote-Explorer manual]] for a comprehensive explanation of all functionality (=C-h R denote-explore=).\n\nVisualising networks of Denote files with SVG or PDF files will require the [[https://graphviz.org/][GraphViz]] package to be available. The D3.js visualisation type downloads an external JavaScript file from [[https://d3js.org/][d3js.org]].\n\nDenote-Explore package is available on MELPA and is easily installed with the ~use-package~ macro:\n\nThe configuration below customises all available variables and binds all available commands to the =C-c e= prefix. To get started you don't need to configure anything. You should modify this configuration to suit your needs, as one person's sensible defaults are another person's nightmare.\n\n#+begin_src elisp\n  (use-package denote-explore\n    :custom\n    ;; Where to store network data and in which format\n    (denote-explore-network-directory \"\u003cfolder\u003e\")\n    (denote-explore-network-filename \"denote-network\")\n    (denote-explore-network-keywords-ignore \"\u003ckeywords list\u003e\")\n    (denote-explore-network-regex-ignore \"\u003cregex\u003e\")\n    (denote-explore-network-format 'd3.js)\n    (denote-explore-network-d3-colours 'SchemeObservable10)\n    (denote-explore-network-d3-js \"https://d3js.org/d3.v7.min.js\")\n    (denote-explore-network-d3-template \"\u003cfile path\u003e\")\n    (denote-explore-network-graphviz-header \"\u003cheader strings\u003e\")\n    (denote-explore-network-graphviz-filetype 'svg)\n    :bind\n    (;; Statistics\n     (\"C-c e s n\" . denote-explore-count-notes)\n     (\"C-c e s k\" . denote-explore-count-keywords)\n     (\"C-c e s e\" . denote-explore-barchart-filetypes)\n     (\"C-c e s w\" . denote-explore-barchart-keywords)\n     (\"C-c e s t\" . denote-explore-barchart-timeline)\n     ;; Random walks\n     (\"C-c e w n\" . denote-explore-random-note)\n     (\"C-c e w r\" . denote-explore-random-regex)\n     (\"C-c e w l\" . denote-explore-random-link)\n     (\"C-c e w k\" . denote-explore-random-keyword)\n     ;; Denote Janitor\n     (\"C-c e j d\" . denote-explore-duplicate-notes)\n     (\"C-c e j D\" . denote-explore-duplicate-notes-dired)\n     (\"C-c e j l\" . denote-explore-missing-links)\n     (\"C-c e j z\" . denote-explore-zero-keywords)\n     (\"C-c e j s\" . denote-explore-single-keywords)\n     (\"C-c e j r\" . denote-explore-rename-keywords)\n     (\"C-c e j y\" . denote-explore-sync-metadata)\n     (\"C-c e j i\" . denote-explore-isolated-files)\n     ;; Visualise denote\n     (\"C-c e n\" . denote-explore-network)\n     (\"C-c e r\" . denote-explore-network-regenerate)\n     (\"C-c e d\" . denote-explore-barchart-degree)\n     (\"C-c e b\" . denote-explore-barchart-backlinks)))\n#+end_src\n\nAlternatively, you can install it directly from GitHub:\n\n#+begin_src elisp :eval no\n  (unless (package-installed-p 'denote-explore)\n    (package-vc-install\n     '(denote-explore\n       :url \"https://github.com/pprevos/denote-explore/\")))\n#+end_src\n\n* Change Log\nMajor version numbers coincide with Denote major versions.\n\n** version 3.3.2\n- Refactoring of missing links functionality\n- Added table of missing file links in Denote files\n- Renamed ~denote-explore-dead-links~ to ~denote-explore-missing-links~\n\n** Version 3.3.1\n- Fixed issues in the manual.\n- Clarified duplicate detection.\n- Fixed bug in ~denote-explore-barchart-backlinks~.\n- Added ~denote-explore-random-regex-ignore~ variable to exclude files from random walks.\n\n** Version 3.3\n+ Knowledge Graphs\n  - New visualisation type: Sequences of Denote signatures\n    - Changed GraphViz geometry for sequence graphs\n  - Full rewrite of most functions.\n    - Increased efficiency in detecting edges (links between files)\n    - Ability to draw graphs without attachments by using the universal argument when generating and regenerating graphs\n  - D3.js Visualisations\n    - New slider to change the number of node labels (from none to every node)\n    - Added number of isolated notes to info tooltip (when isolated nodes \u003e 0)\n+ Janitor\n  - New function ~denote-explore-dead-links~ to find dead links\n  - Optimised single and zero keywords detection\n  - Change behaviour and optimisation for ~denote-explore-isolated-notes~\n  - ~denote-explore-sort-keywords~ replaced by ~denote-explore-sync-metadata~\n  - Refactored ~denote-explore-rename-keyword~\n  - Renamed duplicate notes functions to remove double verb and UI improvements.\n  - ~denote-explore-sync-metadata~ bug fix\n+ Statistics\n  - New function ~denote-explore-barchart-timeline~ to show number of nodes and/or attachment created per year\n  - The File type bar chart can also show only attachments.\n  - ~denote-explore-barchart-degree~ allows text-only option\n  - Added all used keywords to ~denote-explore-count-keywords~\n  - Fixed bug in random walk functions\n\n** Version 3.2\n- First version formally registered (for inclusion in Guin)\n- D3.js Visualisation\n  - Community graphs can filter out nodes where degree = 0 (isolated notes)\n  - Preview images and PDF files in tooltips\n- Updated manual\n- Bug fixes\n  - GraphViz network\n  - D3.js file type legend colours\n  - Random walk functions\n- Updated code commentary\n- Updated counting and related bar chart functions\n\n** Version 3.1\n- Removed dependency on R for D3.js graphs. D3 now uses a template in which a JSON file is inserted. This format is now the default.\n- Fixed bugs in renaming functions\n- Protection against using quotation marks in note title when visualising networks in GraphViz.\n- Fixed backlinks barchart visualisation\n- Updates documentation strings.\n\n** Version 3.0\n- Compatability with Denote 3.0 \n- Renamed barchart functions to all start with ~denote-explore-barchart-~.\n- Using universal argument with ~denote-explore-barchart-extensions~ visualises only attachment file types.\n- All functions that rename files updated for compatability with Denote 3.0\n- Enhanced info manual\n  \n** Version 1.6\n- New functions:\n  - ~denote-explore-backlinks-barchart~ to view top-n notes with backlinks\n  - ~denote-explore-random-regex~ to jump to random note matching a regular expression.\n  - ~denote-explore-identify-duplicate-notes-dired~: View notes with duplicates ID in Dired.\n  \n** Version 1.5.1\n- Fixed various compilation errors.\n- Enhanced output for ~denote-explore-identify-duplicate-notes~\n- Update customization types for note ignore variables\n- Updated ~defgroup~ definition and ~defcustom~ types\n\n** Version 1.5\n- Published Info mode manual\n- Clarified obsolete variables and functions\n- ~denote-explore-network-keywords~ no longer interactive\n- Updates to Denote functions\n\n** Version 1.4.2\n- Geneal code refactoring with assistance from Prot\n- Added ability to filter keywords network by minimum weight of edges\n- Added ability for free text in ~denote-explore-network-graphviz-filetype~\n- GEXF format now includes the total degree for each node\n- Enforced consistency with use of universal argument (its use will include attachments)\n- ~denote-explore--retrieve-title~ deprecated. Now using Denote function.\n- Updated manual with clarifications\n\n** Version 1.4.1\n- Fixed bugs with random links and keywords from nil file-name\n- New variable ~denote-explore-network-regex-ignore~ to ignore files matching a regular expression when creating neighbourhood or community graphs.\n\n** Version 1.4\n+ Network visualisation\n  - SVG output includes links to source file.\n  - Configure [[https://graphviz.org/docs/outputs/][GraphViz output format]] with ~denote-explore-network-graphviz-filetype~ (SVG (default) or PDF advised). \n  - Improved scaling of GraphViz graphics.\n  - ~denote-explore-network-regenerate~ recreates the previous graph\n+ New functions:\n  - ~denote-explore-isolated-notes~ to select Denote files without any links or backlinks.\n  - ~denote-explore-degree-barchart~ draws the distribution of total number of (back)links per file ([[https://en.wikipedia.org/wiki/Degree_distribution][Degree distribution - Wikipedia]]).\n+ Updated functions:\n  - ~denote-explore-rename-keyword~ allows renaming more than one keyword to a new version.\n  - ~denote-explore-sync-metadata~ enforces renaming confirmation.\n+ Minor bug fixes.\n\n** Version 1.3\n- Complete rewrite of the graph visualisation functionality. Now includes three formats (JavaScript, GraphViz and GEXF) and three graph types (notes that match a regular expression, note neighbourhood and keyword graph).\n- Fixed bugs in =denote-explore--retrieve-title= and =denote-explore--retrieve-keywords=.\n- Enhanced function and variable documentation.\n\n** Version 1.2\n- Removed =pandoc= dependency in network generation.\n-  ~denote-explore-identify-duplicate-notes~ replaces ~denote-explore-identify-duplicate-identifiers~. This new version either detects duplicate identifiers, or duplicate file names (using the universal argument). Comparing duplicate filenames ignores any duplicate identifiers caused by exporting Org mode files.\n\n** Version 1.1\n- Added helper function to call R script for network visualisation.\n- =denote-explore-dashboard.el= deprecated.\n- Added to MELPA.\n\n** Version 1.0\nThis version is a complete rewrite of the code to improve coding quality and compatibility with internal changes since Denote version 2.2.\n\nAlso major changes to the network visualisation, which can now take a regular expression for partial networks. Most of the code is now undertaken in Emacs Lisp, which saves the network in JSON format.\n\nThe functionality for a Dashboard widget has been moved to a separate file to not enforce the requirements for those users not seeking to implement the widget.\n\nNew functionality since the previous version:\n- ~denote-explore-identify-duplicate-identifiers~: Provide a list of duplicate identifiers.\n- ~denote-explore-single-keywords~: Select a note or attachment with a keyword that is only used once.\n- ~denote-explore-zero-keywords~: Select a note or attachment without any keywords.\n- ~denote-explore-sort-keywords~: Order the keywords of all Denote notes and attachments alphabetically.\n- ~denote-explore-rename-keyword~: Rename or remove a keyword across the whole Denote collection.\n- ~denote-explore-sync-metadata~: Synchronise the filenames with the metadata for all Denote files.\n\n* Ideas for future development\nSome random ideas for future development. Feel free to suggest other ideas.\n\n- [ ] Functions to rename Denote attachments using EXIF metadata.\n- [ ] Store the Denote metadata in a [[https://www.gnu.org/software/emacs/manual/html_node/elisp/Hash-Tables.html][hash table]] that is updated after every modification to a Denote file for more efficient visualisation.\n- [ ] Ring of previously-generated networks instead of overwriting ~denote-explore-network-previous~\n- [ ] Use [[https://github.com/alphapapa/org-graph-view/][org-graph-view]] for live neighbourhood view of the current buffer\n- [ ] [[https://graphviz.org/pdf/cluster.1.pdf][Community detection]]?\n- [ ] Create a Denote widget for the Emacs Dashboard with links to statistics.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpprevos%2Fdenote-explore","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpprevos%2Fdenote-explore","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpprevos%2Fdenote-explore/lists"}