Code Monkey home page Code Monkey logo

consult-notes's People

Contributors

aaronjensen avatar gitrj95 avatar lcm337 avatar mclearc avatar mkvoya avatar mmarshall540 avatar oantolin avatar syohex avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

consult-notes's Issues

subdirectories

My denote-directory has possibly 3 level deep-nesting, i.e. ~/Document/notes/references/uuid-per-document/
When I try to activate consult-notes with setup using consult-notes-denote-mode, I'm seeing this error: Read error: Is a directory, ~/Documents/notes/references/20230828T084007. When I set the directories manually, it seems to work.

(use-package! consult-notes
  :commands (consult-notes)
  :config
  ;; (consult-notes-denote-mode)
  (setq consult-notes-file-dir-sources
        `(("References" ?b "~/Documents/notes/references"))))

Path is not a string?

Hi, this looks really useful. I tried to set the source as

(setq consult-notes-file-dir-sources
        '(("Org"  ?o  (concat no-littering-etc-directory "org/"))))

But I am greeted with

Wrong type argument: stringp, (concat no-littering-etc-directory "org/")

But my org directory is a string, according to type-of.

Any ideas?

Caching for Denote file titles

Hi @mclearc ,

First of all, thanks for consult-notes. I use it everyday.

I wanted to know your thoughts about having some sort of caching for Denote titles. I have around 750+ files and listing them
using "consult-notes" takes around 5-10 seconds. When I debugged the code, I found that its denote-retrieve-title-value which is causing the delay. This is understandable, as this reads each file to get its actual title from #title.

My use case of denote is to use it as a filing cabinet (along with regular note taking) where I keep adding different kinds of files and notes without ever (or rarely) removing them, so my collection will keep on increasing with time.

In my config, I have implemented a simple in memory cache using elisp advices which overrides certain Denote functions.
This is not perfect and invalidation can be better, but it makes the Denote notes listing instantaneous.
There are 3 cache, for titles, filetypes and modification times (so that I can also sort the results).

However, I feel that this can be better done within consult-notes. We can have a user option for enabling the cache as cache will be in the memory all the time and some users might not want that. Let me know what you think?

  ;;adding advices so that denote operations can be faster
  (defvar rlct/denote--titles-cache (make-hash-table :test 'equal) "titles cache")
  (defvar rlct/denote--filetype-cache (make-hash-table :test 'equal) "filetype cache")
  (defvar rlct/denote--ftime-cache (make-hash-table :test 'equal) "ftime cache")

  (defun rlct/denote--get-ftime (file)
    "get ftime for a file and cache it"
    (let* (
           (ftime-cached (gethash file rlct/denote--ftime-cache))
           (ftime (if (null ftime-cached)
                      (let ((ftime-fresh (file-attribute-modification-time (file-attributes file))))
                        (puthash file ftime-fresh rlct/denote--ftime-cache)
                        ftime-fresh                      
                        )
                    ftime-cached
                    )))
      ftime
      )
    )


  (defun rlct/denote--directory-files-sorted (orig-denote-directory-files)
    "get denote files but sort them first"
    (setq files (funcall orig-denote-directory-files))
    (sort files (lambda (a b)
                  (let* (
                         (ftime-a (rlct/denote--get-ftime a))
                         (ftime-b (rlct/denote--get-ftime b))
                         )
                    (time-less-p ftime-b ftime-a)
                    )
                  ))
    )


  (defun rlct/denote--filetype-heuristics-cached (orig-denote-filetype-heuristics file)
    "get file type"
    (let* (
           (filetype-from-cache (gethash file rlct/denote--filetype-cache))
           (filetype (if filetype-from-cache
                         filetype-from-cache
                       (let* (
                              (retrieved-filetype (funcall orig-denote-filetype-heuristics file))
                              )
                         (puthash file retrieved-filetype rlct/denote--filetype-cache)
                         retrieved-filetype
                         )
                       )
                     )
           )
      filetype
      )
    )

  (defun rlct/denote--get-title-value-cached (orig-denote-get-title-value file filetype)
    "get notes titles but cached"
    (let* (
           (title-from-cache (gethash file rlct/denote--titles-cache))
           (title (if (null title-from-cache)
                      (let* (
                             (retrieved-title (or (funcall orig-denote-get-title-value file (denote-filetype-heuristics file)) (denote-retrieve-filename-title file)))
                             )
                        (puthash file retrieved-title rlct/denote--titles-cache)
                        retrieved-title
                        )
                    title-from-cache
                    ))
           )
      title
      )
    )
  
  (defun rlct/denote--invalidate-cache ()
    "remove file from caches"
    (when-let* ((file (buffer-file-name))
                ((denote-file-is-note-p file))
                )
      ;;(message (concat "removing from cache " file))
      (remhash file rlct/denote--ftime-cache)
      (remhash file rlct/denote--titles-cache)
      (remhash file rlct/denote--filetype-cache)
      )
    )
  
  ;;add a hook when file is saved
  (add-hook 'after-save-hook #'rlct/denote--invalidate-cache)

  (defun rlct/denote-empty-cache()
    "Empty all the caches"
    (interactive)
    (clrhash rlct/denote--ftime-cache)
    (clrhash rlct/denote--titles-cache)
    (clrhash rlct/denote--filetype-cache)
    )

(defun rlct/consult-notes ()
   "Wrapper over consult-notes"
    (interactive)
    (advice-add 'denote-directory-files :around #'rlct/denote--directory-files-sorted)
    (advice-add 'denote-filetype-heuristics :around #'rlct/denote--filetype-heuristics-cached)
    (advice-add 'denote-retrieve-title-value :around #'rlct/denote--get-title-value-cached)
    (consult-notes)
    (advice-remove 'display-buffer #'his-tracing-function)
    (advice-remove 'denote-directory-files #'rlct/denote--directory-files-sorted)
    (advice-remove 'denote-filetype-heuristics #'rlct/denote--filetype-heuristics-cached)
    (advice-remove 'denote-retrieve-title-value #'rlct/denote--get-title-value-cached)    
    )

Ignore subdirs/file types in search

Hi,
I have a subdir with all of the images attached to org files. They get name automatically based on the file they are in, so they get a valid denote file name, but with an image file type. This means they get suggested as actual notes.
Is there a way to set ignored directories or file types to avoid this?

Thanks!

Using a variable in consult-notes-sources

Hi Colin,

When I use a variable name inside of consult-notes-sources I get an error that the content is not a string. I use denote-directory from Prot's Denote package, which is a string: (stringp denote-directory).

How can I use variable names in the declaration for consult-notes-sources?

Also, could the notes directory be recursive as Denote allows subdirectories?

consult-notes-file-dir-sources

Hi,

I have various subdirectories in my denote directory
and i would like to use narrowing for that.

Works fine, but I only have filenames when setting
my subdirectories ewith

consult-notes-file-dir-sources

How can I set the beautyful format set when using
(consult-notes-denote-mode)?

best wishes!

Marc

Not sure how to handle Denote silos and consult-notes-denote-mode

I have three denote silos and I'm not sure how to find the right balance of features and flexibility:

  • Doom Emacs
  • consult-notes-denote-mode enabled
  • My individual silo directories have strings for paths in .dir-locals.el.

I have Denote configured with denote-directory set to my main silo.

  • When I invoke consult-notes from anywhere in the filesystem except another silo, everything works as expected: The selection list gets the special Denote display treatment.
  • When I invoke consult-notes within a silo, everything works as expected.
  • When I invoke narrowing, I get two options, regardless of the silo I'm in: All or Denote notes. I'd like to be able to narrow to any of the silos.

So I tried configuring consult-notes-file-dir-sources and left consult-notes-denote-mode on:

  • Narrowing works from anywhere in the filesystem with all three silos, but I get the "untreated" standard format for the candidate list.
  • Unnarrowed, I get four sections and two kinds of results in the candidate list:
    1. One section for each silo of candidates in the "untreated" standard "filename + silo name + size + age + path" format
    2. A list of candidates from the current silo with the special Denote display treatment.
  • Unnarrowed, I get double results as I search: A version with the standard format, and a version with the Denote format. If I'm in a silo, the Denoted-formatted results are for that silo. If I'm somewhere else in the filesystem, I get results from the default silo.

What I would desire is:

  • Able to use consult-notes-denote-mode
  • Able to use narrowing to get a list of denote-treated candidates from any of the three silos
  • No double-listing of denote-treated and standard formatted candidates

I don't know how to configure that: consult-notes-file-dir-sources seems to exist independent of consult-notes-denote-mode (or vice versa)? It is not taken into account by consult-notes-denote-mode.

Embark integration from documentation not working

Hi,

the functions from the documentation for Embark integration don't seem to work:

(defun consult-notes-grep (cand)
  "Run grep in directory of notes file CAND."
  (interactive "fNote: ")
  (consult-grep (file-name-directory cand)))

"cand" does not look like a filename, it is merely the text of the line Embark is called from.
Is there a way to get the filename?

I want to create a function that appends the content various denotes to a buffer.

Marc

Retaining case in denote's note titles

Currently, consult-notes-denote--source presents titles that do not maintain the casing of the actual title of notes. This is because denote-retrieve-filename-title is used, which only desluggifies the note name (i.e. all but the first character is lowercased).

What should be used instead is denote-retrieve-title-value. So in consult-notes-denote--source, I would use (denote-retrieve-title-value f (denote-filetype-heuristics f)) instead of (denote-retrieve-filename-title f) where applicable.

Before:
image

After:
image

Error in post-command-hook (vertico--exhibit): (wrong-type-argument number-or-marker-p nil)

Hi,
yesterday I was getting this error when I execute consult-notes. After some investigation I found the problem in consult-notes-org-headings-annotations.
This line (fsize (file-size-human-readable (file-attribute-size attrs)))) when try to read the headers, attrs become nil and crash. I' ve solved whit (fsize (file-size-human-readable (or (file-attribute-size attrs) 0 )))), but i dont know if it's the best way to do it or it's a problem of my configuration.

I hope it's useful.

Regards.

Adding "#" before all tags/keywords

I use consult-notes with Denote, not sure how this is with org-roam.
When filtering with consult, sometime I want to filter for a keyword for which I use #keyword. However, it
works only for the first keyword and not for other keywords. It would be nice if we can have # before every keyword.

I have something like this in my fork for this:

81c41aee87f2d09eb133182123f3eaedce150ebb
Author:     relict007 <[email protected]>
AuthorDate: Fri Apr 21 20:22:53 2023 +0530
Commit:     relict007 <[email protected]>
CommitDate: Fri Apr 21 20:22:53 2023 +0530

Parent:     b1839e4 Revert "cache denote titles"
Merged:     main
Contained:  custom

use # before every tag

1 file changed, 1 insertion(+), 2 deletions(-)
consult-notes-denote.el | 3 +--

modified   consult-notes-denote.el
@@ -84,8 +84,7 @@
                                           (propertize " " 'display `(space :align-to (+ left ,(+ 2 max-width))))
                                           (format "%18s"
                                                   (if keywords
-                                                      (concat (propertize "#" 'face 'consult-notes-name)
-                                                              (propertize (mapconcat 'identity keywords " ") 'face 'consult-notes-name))
+                                                      (propertize (mapconcat #'(lambda (k) (concat "#" k)) keywords " ") 'face 'consult-notes-name)
                                                     ""))
                                           )))
                               cands)))

General feedback/questions

Random feedback/questions, in no particular order. The questions are genuine questions; some of which I've thought about myself in citar, or am now prompted to think about:

  1. if you require embark and marginalia, should you include them in the package header?
  2. I'm not sure how big marginalia is, but requiring it only for the faces?
  3. Am I right it's primarily an alternative note browsing UI, that exploits consults grouping and narrowing? And in fact, in org-roam, it replaces org-roam-ref-find? If yes, that's a good idea, and good, focused, story.
  4. how well does this degrade for Emacs 27, given consult exploits 28 features?
  5. As you might imagine I might ask, how could or should this overlap with citar/citar-org-roam?

Wrong type argument

Hi!
I'm not quite sure which package-update caused this but invoking consult-notes returns this error since this morning:

Error in post-command-hook (vertico--exhibit): (wrong-type-argument number-or-marker-p nil)``

I haven't changed anything in my config I believe. Is there anything that I can do about this?

consult-notes-search-in-all-notes does not uses consult-notes-file-dir-sources

Hello, this is my init.el config for consult-notes with org-roam as the only source:

(use-package consult-notes
  :commands (consult-notes
             consult-notes-search-in-all-notes
             consult-notes-org-roam-find-node
             consult-notes-org-roam-find-node-relation)
  :config
  (setq consult-notes-file-dir-sources '(("org-roam"  ?n "~/org-roam")))
  (consult-notes-org-roam-mode)
  :bind
  ("C-c n r" . consult-notes-search-in-all-notes))

It is pretty basic almost no changes from the sample config in the README.

The problem is in invoking consult-notes-search-in-all-notes. It seems that ripgrep takes current buffer's directory as the starting point instead searching in consult-notes-file-dir-sources. For example: when I have note buffer on my screen and hit C-c n r, ripgrep starts at the note folder: ~/org-roam and this is fine. But if I try to search in notes from any other buffer, ripgrep searches in that buffer's directory.

Is there a way to invoke consult-notes-search-in-all-notes from any buffer?

Error when using consult-notes from denote SILO

I use denote on Emacs 28.2.

(use-package denote
  :hook (dired-mode . denote-dired-mode)
  :custom (denote-directory pkb-path (denote-file-type 'org))
  )

I have set two directory sources:

(use-package consult-notes
  :commands (consult-notes
               consult-notes-search-in-all-notes)
  :config
  (setq consult-notes-file-dir-sources `(("PKB"  ?k  ,pkb-path)
					   ("MT" ?t ,(concat mandates-path "MandateTest"))))  
  (when (locate-library "denote")
    (consult-notes-denote-mode))
  :bind ("C-c d f" . consult-notes)
    )

In your documentation, you say:

To narrow to a particular source, use its designated narrowing key.

How is this done?

Also, when I'm in a note from MandateTest directory consult-notes doesn't work. I have the following error message: file-relative-name: Wrong type argument: stringp, default-directory

add a way to control the format of displayed notes?

I'm using denote, and I also like to have all of my buffers centered, so I have writeroom-mode (like olivetti) enabled everywhere including the minibuffer. this sets the maximum width of displayed text, and so makes the keywords invisible.
I'd love to have a way to set the amount of space between the file name and the keywords, so that won't happen.
Thanks!

Comments on `consult-notes-search-all`

Hello again!

Brief comments on consult-notes-search-all:

  • The consult-notes-all-notes declares :type 'string, though the doc
    string refers to a directory. Should be it be :type 'directory
    instead?

  • The default value of consult-notes-all-notes is an empty string. On
    my end this seems to grep through all directories, instead of just
    those which contain notes. I am not familiar with the consult-grep
    internals: perhaps it can accept a list of directories and collate the
    results?

  • The default value of consult-notes-grep-args does not work on my end
    (GNU/Linux) because the -S flag is unavailable. For reference, the
    consult-grep-args does not specify that flag.

Denote notes show filename rather instead of title

Many thanks for your package. I'm testing it with Denote notes, and noticed that the files listed are showing their filename rather than their title.

I was expecting to see titles, but I'm not sure whether that is a correct expectation on my end. The screenshots in the README show both (filenames and note titles) -- but perhaps that's specifically for Org-roam notes?

Is it possible to sort denote notes by title in consult-notes-denote-mode?

Question

Hello, I wonder if there is a way to sort the results by the name of denote titles in the consult's interface?

main idea

I used a form of recording similar to the card note-taking method, like 1a-computer.org 1b-philosophy.org. The main idea may be seed in the mail list:
https://lists.sr.ht/~protesilaos/denote/%3C1C75FF01-EC76-49DF-9AEB-ED718A2795FF%40gmail.com%3E

Related solution:

Prots provided a very good idea to utilize dired visual mode. It combines "ls" and "sort" to get a buffer and use dired-visual-mode to convert it to a dired mode. But I think the consult-notes interface may do a good job.

I know it might have something to do with the configuration of consult, but I'm not familiar with consult, so I don't know if I should ask a question here.

Thank you very much for your work, it is very useful to cooperate with denote

Consider named or basic faces instead of using Consult's own

Hello Colin,

I noticed the faces in this:

(defun consult-notes-annotate-note (name cand)
  "Annotate file CAND with its source NAME, size, and modification
time."
  (let* ((attrs (file-attributes cand))
         (fsize (file-size-human-readable (file-attribute-size attrs)))
         (ftime (consult-notes--time (file-attribute-modification-time attrs))))
    (put-text-property 0 (length name)  'face 'consult-separator name)
    (put-text-property 0 (length fsize) 'face 'consult-key fsize)
    (put-text-property 0 (length ftime) 'face 'consult-key ftime)
    (format "%s  %5s  %5s" name fsize ftime)))

The resulting presentation can be problematic in two ways:

  1. consult-key is used for key bindings. Some user/theme may style
    those in a pseudo-physical-key fashion, just as current Emacs master
    does for generic key bindings (e.g. C-h C-h). More broadly, an
    aesthetic for keybindings may not be suitable for the information you
    provide there.

  2. The consult-separator is supposed to style a thin line/border.
    This has different requirements than colourising text. A border that
    stretches from one side of the screen to the other can afford a very
    faint grey value, but text needs to be more legible.

Maybe you can use defface to provide your own faces? They may inherit
from the aforementioned, if you want.

Or, you can use basic faces from M-x find-library RET faces RET like
shadow and bold:

(defun consult-notes-annotate-note (name cand)
  "Annotate file CAND with its source NAME, size, and modification
time."
  (let* ((attrs (file-attributes cand))
         (fsize (file-size-human-readable (file-attribute-size attrs)))
         (ftime (consult-notes--time (file-attribute-modification-time attrs))))
    (put-text-property 0 (length name)  'face 'shadow name)
    (put-text-property 0 (length fsize) 'face 'bold fsize)
    (put-text-property 0 (length ftime) 'face 'bold ftime)
    (format "%s  %5s  %5s" name fsize ftime)))

Replace bold with success, error, warning for some added
colouration:

(defun consult-notes-annotate-note (name cand)
  "Annotate file CAND with its source NAME, size, and modification
time."
  (let* ((attrs (file-attributes cand))
         (fsize (file-size-human-readable (file-attribute-size attrs)))
         (ftime (consult-notes--time (file-attribute-modification-time attrs))))
    (put-text-property 0 (length name)  'face 'shadow name)
    (put-text-property 0 (length fsize) 'face 'warning fsize)
    (put-text-property 0 (length ftime) 'face 'success ftime)
    (format "%s  %5s  %5s" name fsize ftime)))

Thanks!

is `consult-notes` with `denote` broken?

it used to work, but after a recent update of my packages I get:

Invalid function: ("c:/Users/Jonathan/notes/20230323T111555--paper-summaries-from-guy__thesis.org" "c:/Users/Jonathan/notes/20230323T113003--knowledge-base__thesis.org" "c:/Users/Jonathan/notes/20230323T113249--action-modulates-perception__thesis.org" "c:/Users/Jonathan/notes/20230323T113609--action-modulates-preparatory-sensory-neural-activity__thesis.org" "c:/Users/Jonathan/notes/20230323T113638--action-sensory-modulation-is-learning-based__thesis.org" "c:/Users/Jonathan/notes/20230329T113432--stronger-modulation-in-ipsilateral-configuration__thesis.org" "c:/Users/Jonathan/notes/20230329T121953--enhanced-auditory-evoked-activity-to-self-generated-sounds-reznik-et-al__bib_thesis.org" "c:/Users/Jonathan/notes/20230329T135029--advantage-in-contralateral-configuration__thesis.org" "c:/Users/Jonathan/notes/20230329T155402--thesis-draft__thesis.org" "c:/Users/Jonathan/notes/20230331T070538--איך-לבחור-מניות__finance.org" ...)

Thanks!

consult-notes-search-in-all-notes throws error

hello,
after call the command this error occur.
i do not use org-roam.
is your package depending on it?

regards
poul

Debugger entered--Lisp error: (void-variable org-roam-directory) (expand-file-name org-roam-directory) (let* ((sources (mapcar 'expand-file-name (flatten-tree (mapcar 'cddr consult-notes-sources)))) (dirs (combine-and-quote-strings sources)) (roam (expand-file-name org-roam-directory)) (consult-grep-args (concat consult-notes-grep-args " " dirs " " (if consult-notes-org-roam-mode (progn roam)))) (consult-ripgrep-args (concat consult-notes-ripgrep-args " " dirs " " (if consult-notes-org-roam-mode (progn roam))))) (if consult-notes-use-rg (consult-ripgrep) (consult-grep))) consult-notes-search-in-all-notes() funcall-interactively(consult-notes-search-in-all-notes) call-interactively(consult-notes-search-in-all-notes record nil) command-execute(consult-notes-search-in-all-notes record) execute-extended-command(nil "consult-notes-search-in-all-notes" nil) funcall-interactively(execute-extended-command nil "consult-notes-search-in-all-notes" nil) call-interactively(execute-extended-command nil nil) command-execute(execute-extended-command)

consult-notes-org-roam-mode slows down org-roam-node-find from 0.2s to 3s

This is for 3200~ nodes with vertico/orderless/corfu/marginalia.

I need to delete a lot of my nodes, but this prevents me from being able to use this package until I do that.

Not sure if there's some low-hanging fruit here.

cpu profile
        1446  80% - command-execute
         830  46%  - byte-code
         830  46%   - read-extended-command
         830  46%    - read-extended-command-1
         830  46%     - completing-read-default
         830  46%      - apply
         830  46%       - vertico--advice
         801  44%        - #<subr completing-read-default>
         724  40%         - vertico--exhibit
         694  38%          - vertico--update
         649  36%           - vertico--recompute
         623  34%            - vertico--all-completions
         623  34%             - completion-all-completions
         623  34%              - apply
         623  34%               - #<subr completion-all-completions>
         623  34%                - completion--nth-completion
         623  34%                 - completion--some
         623  34%                  - #<compiled 0x127fd337cdfcb904>
         623  34%                   - orderless-all-completions
         623  34%                    - orderless-filter
         622  34%                     - #<subr F616e6f6e796d6f75732d6c616d626461_anonymous_lambda_54>
         622  34%                      - complete-with-action
         126   7%                       - all-completions
          65   3%                        - #<compiled -0x1b88939c782b11ef>
          53   2%                         - #<compiled -0xdb08408495e1d16>
           2   0%                          - commandp
           2   0%                           - interactive-form
           2   0%                            - oclosure-interactive-form
           1   0%                               apply
           1   0%                     - #<compiled 0xb98f4eae07b68c1>
           1   0%                        complete-with-action
          14   0%            - vertico-sort-history-length-alpha
          10   0%               #<subr F616e6f6e796d6f75732d6c616d626461_anonymous_lambda_13>
          44   2%             redisplay
           1   0%           - vertico--metadata-get
           1   0%            - completion-metadata-get
           1   0%               apply
          15   0%          - vertico--arrange-candidates
          14   0%           - vertico--affixate
          14   0%            - #<compiled -0xae2a243763ce1ff>
          14   0%             - apply
          14   0%              - marginalia--affixate
          14   0%               - marginalia--cached
          14   0%                - marginalia-annotate-command
          11   0%                 - marginalia--function-doc
          11   0%                  - documentation
           6   0%                     substitute-command-keys
           1   0%             vertico--format-candidate
          12   0%          - vertico--display-candidates
           1   0%           - vertico--resize-window
           1   0%            - window-resize
           1   0%             - window--resize-mini-window
           1   0%                window-min-size
           3   0%            vertico--display-count
           2   0%         - minibuffer-inactive-mode
           2   0%          - run-mode-hooks
           2   0%           - run-hooks
           1   0%            - global-font-lock-mode-enable-in-buffers
           1   0%             - turn-on-font-lock-if-desired
           1   0%                turn-on-font-lock
           1   0%              magit-auto-revert-mode-enable-in-buffers
           1   0%         - frame-windows-min-size
           1   0%          - window-min-size
           1   0%             window--min-size-1
           1   0%         - window--resize-root-window-vertically
           1   0%          - window-sizable
           1   0%           - window-min-size
           1   0%            - window--min-size-1
           1   0%             - window-size-fixed-p
           1   0%                window--size-fixed-1
           1   0%           blink-cursor-end
           1   0%         - timer-event-handler
           1   0%          - apply
           1   0%           - blink-cursor-start
           1   0%            - blink-cursor--start-timer
           1   0%             - run-with-timer
           1   0%                run-at-time
         616  34%  - funcall-interactively
         616  34%   - execute-extended-command
         616  34%    - command-execute
         616  34%     - funcall-interactively
         612  34%      - org-roam-node-find
         612  34%       - org-roam-node-read
         612  34%        - apply
         612  34%         - consult-org-roam-node-read
         612  34%          - let*
         605  33%           - org-roam-node-read--completions
         555  31%            - #<compiled 0x1cfccf9c1490b2af>
         553  30%             - org-roam-node-read--to-candidate
         552  30%              - org-roam-node--format-entry
         551  30%               - org-roam-format-template
         533  29%                - replace-regexp-in-string
         528  29%                 - #<compiled -0x602b4e54d5359bf>
         491  27%                  - #<compiled -0x17f183390edf03a6>
         361  20%                   - org-roam-node-blinks
         361  20%                    - apply
         360  20%                     - #<compiled 0x1114734727034293>
         318  17%                      - org-roam-db-query
         277  15%                       - emacsql
         277  15%                        - apply
         277  15%                         - #<compiled -0x98fd36ed67c3a24>
         140   7%                          - emacsql-wait
         140   7%                           - apply
         138   7%                            - #<compiled -0x1ca323dd243b61c1>
          60   3%                             - emacsql-waiting-p
          59   3%                              - apply
          20   1%                               - #<compiled -0xc6d17838f100ed9>
          20   1%                                - emacsql-buffer
          19   1%                                 - apply
          19   1%                                  - #<compiled 0x1cd3a205e032b2a>
          19   1%                                   - emacsql-process
          19   1%                                    - apply
          19   1%                                     - #<compiled -0x19a1627796912376>
          15   0%                                      - slot-boundp
          11   0%                                       - eieio-oref
          11   0%                                        - apply
          11   0%                                         - eieio-oref--closql-oref
           8   0%                                          - closql--closql-object-p
           8   0%                                           - closql-object--eieio-childp
           6   0%                                            - object-of-class-p
           4   0%                                               child-of-class-p
           4   0%                                      - eieio-oref
           4   0%                                       - apply
           4   0%                                        - eieio-oref--closql-oref
           4   0%                                         - closql--closql-object-p
           3   0%                                          - closql-object--eieio-childp
           3   0%                                             object-of-class-p
           3   0%                               accept-process-output
           3   0%                             - emacsql-process
           3   0%                              - apply
           3   0%                               - #<compiled -0x19a1627796912376>
           2   0%                                - slot-boundp
           1   0%                                 - eieio-oref
           1   0%                                  - apply
           1   0%                                   - eieio-oref--closql-oref
           1   0%                                    - closql--closql-object-p
           1   0%                                     - closql-object--eieio-childp
           1   0%                                        object-of-class-p
           1   0%                                - eieio-oref
           1   0%                                 - apply
           1   0%                                  - eieio-oref--closql-oref
           1   0%                                   - closql--closql-object-p
           1   0%                                    - closql-object--eieio-childp
           1   0%                                     - object-of-class-p
           1   0%                                        child-of-class-p
           1   0%                               #<compiled 0x1e35d98f7aafef>
          65   3%                          - apply
          65   3%                           - emacsql-compile
          57   3%                            - emacsql-format
          32   1%                             - emacsql-escape-scalar
          20   1%                              - emacsql-quote-scalar
          16   0%                               - #<compiled -0x1ddf150d84fc842f>
           3   0%                                  kill-buffer
           5   0%                            - emacsql-types
           5   0%                             - apply
           5   0%                              - #<compiled -0xcbd972c4bb48862>
           5   0%                               - slot-value
           5   0%                                - apply
           4   0%                                 - eieio-oref--closql-oref
           2   0%                                  - #<subr eieio-oref>
           1   0%                                     eieio--slot-name-index
           1   0%                                  - closql--closql-object-p
           1   0%                                   - closql-object--eieio-childp
           1   0%                                    - object-of-class-p
           1   0%                                       child-of-class-p
           1   0%                            - emacsql-prepare
           1   0%                             - emacsql-prepare--sexp
           1   0%                              - emacsql--*expr
           1   0%                               - #<compiled -0xe857faf42b0923e>
           1   0%                                - emacsql--*expr
           1   0%                                 - emacsql--!param
           1   0%                                    emacsql-escape-scalar
          33   1%                          - emacsql-parse
          33   1%                           - apply
          14   0%                            - #<compiled 0x6daf1def892e1aa>
          12   0%                             - emacsql-buffer
          12   0%                              - apply
          12   0%                               - #<compiled 0x1cd3a205e032b2a>
          12   0%                                - emacsql-process
          12   0%                                 - apply
          12   0%                                  - #<compiled -0x19a1627796912376>
           6   0%                                   - eieio-oref
           6   0%                                    - apply
           6   0%                                     - eieio-oref--closql-oref
           2   0%                                      - closql--closql-object-p
           1   0%                                         closql-object--eieio-childp
           1   0%                                        #<subr eieio-oref>
           6   0%                                   - slot-boundp
           3   0%                                    - eieio-oref
           3   0%                                     - apply
           3   0%                                      - eieio-oref--closql-oref
           1   0%                                       - closql--closql-object-p
           1   0%                                        - closql-object--eieio-childp
           1   0%                                           object-of-class-p
          22   1%                          - emacsql-send-message
          22   1%                           - apply
          20   1%                            - #<compiled -0x1f3d5346d8e5bfdc>
          20   1%                             - apply
          13   0%                              - #<compiled -0xecf8d1b3a0319e>
           3   0%                               - emacsql-process
           3   0%                                - apply
           3   0%                                 - #<compiled -0x19a1627796912376>
           3   0%                                  - eieio-oref
           3   0%                                   - apply
           3   0%                                      eieio-oref--closql-oref
           6   0%                              - #<compiled 0xd4d278f4880022d>
           6   0%                               - emacsql-log
           5   0%                                - apply
           4   0%                                 - #<compiled -0xad0ddb69f60e849>
           4   0%                                  - emacsql-log-buffer
           4   0%                                   - apply
           4   0%                                    - #<compiled -0x65a54e2377dbe47>
           1   0%                                     - eieio-oref
           1   0%                                      - apply
           1   0%                                         eieio-oref--closql-oref
           1   0%                                     - slot-boundp
           1   0%                                      - eieio-oref
           1   0%                                       - apply
           1   0%                                          eieio-oref--closql-oref
          15   0%                          - emacsql-clear
          15   0%                           - apply
          11   0%                            - #<compiled 0xddbac563167f43f>
           8   0%                             - emacsql-buffer
           8   0%                              - apply
           7   0%                               - #<compiled 0x1cd3a205e032b2a>
           7   0%                                - emacsql-process
           7   0%                                 - apply
           7   0%                                  - #<compiled -0x19a1627796912376>
           4   0%                                   - slot-boundp
           3   0%                                    - eieio-oref
           3   0%                                     - apply
           2   0%                                      - eieio-oref--closql-oref
           2   0%                                       - closql--closql-object-p
           2   0%                                        - closql-object--eieio-childp
           2   0%                                           object-of-class-p
           3   0%                                   - eieio-oref
           3   0%                                    - apply
           3   0%                                     - eieio-oref--closql-oref
           2   0%                                      - closql--closql-object-p
           2   0%                                       - closql-object--eieio-childp
           2   0%                                        - object-of-class-p
           2   0%                                           child-of-class-p
           2   0%                               erase-buffer
          40   2%                       - org-roam-db
           8   0%                        - emacsql-live-p
           8   0%                         - apply
           8   0%                          - #<compiled 0x12a13c253b3e187b>
           8   0%                           - emacsql-process
           7   0%                            - apply
           7   0%                             - #<compiled -0x19a1627796912376>
           5   0%                              - eieio-oref
           5   0%                               - apply
           5   0%                                - eieio-oref--closql-oref
           4   0%                                 - closql--closql-object-p
           4   0%                                  - closql-object--eieio-childp
           4   0%                                     object-of-class-p
           1   0%                              - slot-boundp
           1   0%                               - eieio-oref
           1   0%                                - apply
           1   0%                                 - eieio-oref--closql-oref
           1   0%                                  - closql--closql-object-p
           1   0%                                   - closql-object--eieio-childp
           1   0%                                      object-of-class-p
          42   2%                   - org-roam-node-sizes
          42   2%                    - apply
          40   2%                       #<compiled -0x1d03333d6f7080a4>
          21   1%                   - org-roam-node-fmtime
          20   1%                    - apply
          20   1%                     - #<compiled 0x8265b3e5fa562fc>
          14   0%                        consult-notes--time
          21   1%                   - org-roam-node-dir
          18   1%                    - apply
          18   1%                       #<compiled -0x55376feb737dd0c>
           8   0%                     mapconcat
           3   0%                     truncate-string-to-width
          25   1%            - org-roam-node-list
          23   1%             - org-roam-db-query
          22   1%              - emacsql
          22   1%               - apply
          22   1%                - #<compiled -0x98fd36ed67c3a24>
          12   0%                 - emacsql-parse
          12   0%                  - apply
          12   0%                     #<compiled 0x6daf1def892e1aa>
          10   0%                 - emacsql-wait
          10   0%                  - apply
          10   0%                   - #<compiled -0x1ca323dd243b61c1>
           2   0%                      accept-process-output
           1   0%                org-roam-db
           1   0%               #<compiled -0x76d583e9eeaf1b1>
          25   1%            - seq-sort
          25   1%             - apply
          25   1%              - #<compiled -0x94268704ab81d7b>
          24   1%                 sort
           7   0%           - consult--read
           7   0%            - consult--read-1
           7   0%             - consult--with-preview-1
           7   0%              - #<compiled -0x88f776f4a746420>
           7   0%               - completing-read
           7   0%                - completing-read-default
           7   0%                 - apply
           7   0%                  - vertico--advice
           5   0%                   - #<subr completing-read-default>
           1   0%                    - window--resize-root-window-vertically
           1   0%                     - window-sizable
           1   0%                        window-min-size
         337  18% + ...
           3   0% + redisplay_internal (C function)
           1   0% + timer-event-handler
i        1446  80% - command-execute
         830  46%  - byte-code
         830  46%   - read-extended-command
         830  46%    - read-extended-command-1
         830  46%     - completing-read-default
         830  46%      - apply
         830  46%       - vertico--advice
         801  44%        - #<subr completing-read-default>
         724  40%         - vertico--exhibit
         694  38%          - vertico--update
         649  36%           - vertico--recompute
         623  34%            - vertico--all-completions
         623  34%             - completion-all-completions
         623  34%              - apply
         623  34%               - #<subr completion-all-completions>
         623  34%                - completion--nth-completion
         623  34%                 - completion--some
         623  34%                  - #<compiled 0x127fd337cdfcb904>
         623  34%                   - orderless-all-completions
         623  34%                    - orderless-filter
         622  34%                     - #<subr F616e6f6e796d6f75732d6c616d626461_anonymous_lambda_54>
         622  34%                      - complete-with-action
         126   7%                       - all-completions
          65   3%                        - #<compiled -0x1b88939c782b11ef>
          53   2%                         - #<compiled -0xdb08408495e1d16>
           2   0%                          - commandp
           2   0%                           - interactive-form
           2   0%                            - oclosure-interactive-form
           1   0%                               apply
           1   0%                     - #<compiled 0xb98f4eae07b68c1>
           1   0%                        complete-with-action
          14   0%            - vertico-sort-history-length-alpha
          10   0%               #<subr F616e6f6e796d6f75732d6c616d626461_anonymous_lambda_13>
          44   2%             redisplay
           1   0%           - vertico--metadata-get
           1   0%            - completion-metadata-get
           1   0%               apply
          15   0%          - vertico--arrange-candidates
          14   0%           - vertico--affixate
          14   0%            - #<compiled -0xae2a243763ce1ff>
          14   0%             - apply
          14   0%              - marginalia--affixate
          14   0%               - marginalia--cached
          14   0%                - marginalia-annotate-command
          11   0%                 - marginalia--function-doc
          11   0%                  - documentation
           6   0%                     substitute-command-keys
           1   0%             vertico--format-candidate
          12   0%          - vertico--display-candidates
           1   0%           - vertico--resize-window
           1   0%            - window-resize
           1   0%             - window--resize-mini-window
           1   0%                window-min-size
           3   0%            vertico--display-count
           2   0%         - minibuffer-inactive-mode
           2   0%          - run-mode-hooks
           2   0%           - run-hooks
           1   0%            - global-font-lock-mode-enable-in-buffers
           1   0%             - turn-on-font-lock-if-desired
           1   0%                turn-on-font-lock
           1   0%              magit-auto-revert-mode-enable-in-buffers
           1   0%         - frame-windows-min-size
           1   0%          - window-min-size
           1   0%             window--min-size-1
           1   0%         - window--resize-root-window-vertically
           1   0%          - window-sizable
           1   0%           - window-min-size
           1   0%            - window--min-size-1
           1   0%             - window-size-fixed-p
           1   0%                window--size-fixed-1
           1   0%           blink-cursor-end
           1   0%         - timer-event-handler
           1   0%          - apply
           1   0%           - blink-cursor-start
           1   0%            - blink-cursor--start-timer
           1   0%             - run-with-timer
           1   0%                run-at-time
         616  34%  - funcall-interactively
         616  34%   - execute-extended-command
         616  34%    - command-execute
         616  34%     - funcall-interactively
         612  34%      - org-roam-node-find
         612  34%       - org-roam-node-read
         612  34%        - apply
         612  34%         - consult-org-roam-node-read
         612  34%          - let*
         605  33%           - org-roam-node-read--completions
         555  31%            - #<compiled 0x1cfccf9c1490b2af>
         553  30%             - org-roam-node-read--to-candidate
         552  30%              - org-roam-node--format-entry
         551  30%               - org-roam-format-template
         533  29%                - replace-regexp-in-string
         528  29%                 - #<compiled -0x602b4e54d5359bf>
         491  27%                  - #<compiled -0x17f183390edf03a6>
         361  20%                   - org-roam-node-blinks
         361  20%                    - apply
         360  20%                     - #<compiled 0x1114734727034293>
         318  17%                      - org-roam-db-query
         277  15%                       - emacsql
         277  15%                        - apply
         277  15%                         - #<compiled -0x98fd36ed67c3a24>
         140   7%                          - emacsql-wait
         140   7%                           - apply
         138   7%                            - #<compiled -0x1ca323dd243b61c1>
          60   3%                             - emacsql-waiting-p
          59   3%                              - apply
          20   1%                               - #<compiled -0xc6d17838f100ed9>
          20   1%                                - emacsql-buffer
          19   1%                                 - apply
          19   1%                                  - #<compiled 0x1cd3a205e032b2a>
          19   1%                                   - emacsql-process
          19   1%                                    - apply
          19   1%                                     - #<compiled -0x19a1627796912376>
          15   0%                                      - slot-boundp
          11   0%                                       - eieio-oref
          11   0%                                        - apply
          11   0%                                         - eieio-oref--closql-oref
           8   0%                                          - closql--closql-object-p
           8   0%                                           - closql-object--eieio-childp
           6   0%                                            - object-of-class-p
           4   0%                                               child-of-class-p
           4   0%                                      - eieio-oref
           4   0%                                       - apply
           4   0%                                        - eieio-oref--closql-oref
           4   0%                                         - closql--closql-object-p
           3   0%                                          - closql-object--eieio-childp
           3   0%                                             object-of-class-p
           3   0%                               accept-process-output
           3   0%                             - emacsql-process
           3   0%                              - apply
           3   0%                               - #<compiled -0x19a1627796912376>
           2   0%                                - slot-boundp
           1   0%                                 - eieio-oref
           1   0%                                  - apply
           1   0%                                   - eieio-oref--closql-oref
           1   0%                                    - closql--closql-object-p
           1   0%                                     - closql-object--eieio-childp
           1   0%                                        object-of-class-p
           1   0%                                - eieio-oref
           1   0%                                 - apply
           1   0%                                  - eieio-oref--closql-oref
           1   0%                                   - closql--closql-object-p
           1   0%                                    - closql-object--eieio-childp
           1   0%                                     - object-of-class-p
           1   0%                                        child-of-class-p
           1   0%                               #<compiled 0x1e35d98f7aafef>
          65   3%                          - apply
          65   3%                           - emacsql-compile
          57   3%                            - emacsql-format
          32   1%                             - emacsql-escape-scalar
          20   1%                              - emacsql-quote-scalar
          16   0%                               - #<compiled -0x1ddf150d84fc842f>
           3   0%                                  kill-buffer
           5   0%                            - emacsql-types
           5   0%                             - apply
           5   0%                              - #<compiled -0xcbd972c4bb48862>
           5   0%                               - slot-value
           5   0%                                - apply
           4   0%                                 - eieio-oref--closql-oref
           2   0%                                  - #<subr eieio-oref>
           1   0%                                     eieio--slot-name-index
           1   0%                                  - closql--closql-object-p
           1   0%                                   - closql-object--eieio-childp
           1   0%                                    - object-of-class-p
           1   0%                                       child-of-class-p
           1   0%                            - emacsql-prepare
           1   0%                             - emacsql-prepare--sexp
           1   0%                              - emacsql--*expr
           1   0%                               - #<compiled -0xe857faf42b0923e>
           1   0%                                - emacsql--*expr
           1   0%                                 - emacsql--!param
           1   0%                                    emacsql-escape-scalar
          33   1%                          - emacsql-parse
          33   1%                           - apply
          14   0%                            - #<compiled 0x6daf1def892e1aa>
          12   0%                             - emacsql-buffer
          12   0%                              - apply
          12   0%                               - #<compiled 0x1cd3a205e032b2a>
          12   0%                                - emacsql-process
          12   0%                                 - apply
          12   0%                                  - #<compiled -0x19a1627796912376>
           6   0%                                   - eieio-oref
           6   0%                                    - apply
           6   0%                                     - eieio-oref--closql-oref
           2   0%                                      - closql--closql-object-p
           1   0%                                         closql-object--eieio-childp
           1   0%                                        #<subr eieio-oref>
           6   0%                                   - slot-boundp
           3   0%                                    - eieio-oref
           3   0%                                     - apply
           3   0%                                      - eieio-oref--closql-oref
           1   0%                                       - closql--closql-object-p
           1   0%                                        - closql-object--eieio-childp
           1   0%                                           object-of-class-p
          22   1%                          - emacsql-send-message
          22   1%                           - apply
          20   1%                            - #<compiled -0x1f3d5346d8e5bfdc>
          20   1%                             - apply
          13   0%                              - #<compiled -0xecf8d1b3a0319e>
           3   0%                               - emacsql-process
           3   0%                                - apply
           3   0%                                 - #<compiled -0x19a1627796912376>
           3   0%                                  - eieio-oref
           3   0%                                   - apply
           3   0%                                      eieio-oref--closql-oref
           6   0%                              - #<compiled 0xd4d278f4880022d>
           6   0%                               - emacsql-log
           5   0%                                - apply
           4   0%                                 - #<compiled -0xad0ddb69f60e849>
           4   0%                                  - emacsql-log-buffer
           4   0%                                   - apply
           4   0%                                    - #<compiled -0x65a54e2377dbe47>
           1   0%                                     - eieio-oref
           1   0%                                      - apply
           1   0%                                         eieio-oref--closql-oref
           1   0%                                     - slot-boundp
           1   0%                                      - eieio-oref
           1   0%                                       - apply
           1   0%                                          eieio-oref--closql-oref
          15   0%                          - emacsql-clear
          15   0%                           - apply
          11   0%                            - #<compiled 0xddbac563167f43f>
           8   0%                             - emacsql-buffer
           8   0%                              - apply
           7   0%                               - #<compiled 0x1cd3a205e032b2a>
           7   0%                                - emacsql-process
           7   0%                                 - apply
           7   0%                                  - #<compiled -0x19a1627796912376>
           4   0%                                   - slot-boundp
           3   0%                                    - eieio-oref
           3   0%                                     - apply
           2   0%                                      - eieio-oref--closql-oref
           2   0%                                       - closql--closql-object-p
           2   0%                                        - closql-object--eieio-childp
           2   0%                                           object-of-class-p
           3   0%                                   - eieio-oref
           3   0%                                    - apply
           3   0%                                     - eieio-oref--closql-oref
           2   0%                                      - closql--closql-object-p
           2   0%                                       - closql-object--eieio-childp
           2   0%                                        - object-of-class-p
           2   0%                                           child-of-class-p
           2   0%                               erase-buffer
          40   2%                       - org-roam-db
           8   0%                        - emacsql-live-p
           8   0%                         - apply
           8   0%                          - #<compiled 0x12a13c253b3e187b>
           8   0%                           - emacsql-process
           7   0%                            - apply
           7   0%                             - #<compiled -0x19a1627796912376>
           5   0%                              - eieio-oref
           5   0%                               - apply
           5   0%                                - eieio-oref--closql-oref
           4   0%                                 - closql--closql-object-p
           4   0%                                  - closql-object--eieio-childp
           4   0%                                     object-of-class-p
           1   0%                              - slot-boundp
           1   0%                               - eieio-oref
           1   0%                                - apply
           1   0%                                 - eieio-oref--closql-oref
           1   0%                                  - closql--closql-object-p
           1   0%                                   - closql-object--eieio-childp
           1   0%                                      object-of-class-p
          42   2%                   - org-roam-node-sizes
          42   2%                    - apply
          40   2%                       #<compiled -0x1d03333d6f7080a4>
          21   1%                   - org-roam-node-fmtime
          20   1%                    - apply
          20   1%                     - #<compiled 0x8265b3e5fa562fc>
          14   0%                        consult-notes--time
          21   1%                   - org-roam-node-dir
          18   1%                    - apply
          18   1%                       #<compiled -0x55376feb737dd0c>
           8   0%                     mapconcat
           3   0%                     truncate-string-to-width
          25   1%            - org-roam-node-list
          23   1%             - org-roam-db-query
          22   1%              - emacsql
          22   1%               - apply
          22   1%                - #<compiled -0x98fd36ed67c3a24>
          12   0%                 - emacsql-parse
          12   0%                  - apply
          12   0%                     #<compiled 0x6daf1def892e1aa>
          10   0%                 - emacsql-wait
          10   0%                  - apply
          10   0%                   - #<compiled -0x1ca323dd243b61c1>
           2   0%                      accept-process-output
           1   0%                org-roam-db
           1   0%               #<compiled -0x76d583e9eeaf1b1>
          25   1%            - seq-sort
          25   1%             - apply
          25   1%              - #<compiled -0x94268704ab81d7b>
          24   1%                 sort
           7   0%           - consult--read
           7   0%            - consult--read-1
           7   0%             - consult--with-preview-1
           7   0%              - #<compiled -0x88f776f4a746420>
           7   0%               - completing-read
           7   0%                - completing-read-default
           7   0%                 - apply
           7   0%                  - vertico--advice
           5   0%                   - #<subr completing-read-default>
           1   0%                    - window--resize-root-window-vertically
           1   0%                     - window-sizable
           1   0%                        window-min-size
         337  18% + ...
           3   0% + redisplay_internal (C function)
           1   0% + timer-event-handler
mem profile
    117,013,987  77% - command-execute
     73,207,689  48%  - funcall-interactively
     73,207,641  48%   - execute-extended-command
     73,207,513  48%    - command-execute
     73,207,465  48%     - funcall-interactively
     69,513,563  45%      - org-roam-node-find
     69,513,563  45%       - org-roam-node-read
     69,513,563  45%        - apply
     69,513,563  45%         - consult-org-roam-node-read
     69,513,563  45%          - let*
     69,298,300  45%           - org-roam-node-read--completions
     50,441,369  33%            - #<compiled 0x1cfccf9c1490b2af>
     48,628,337  32%             - org-roam-node-read--to-candidate
     48,064,753  31%              - org-roam-node--format-entry
     47,476,305  31%               - org-roam-format-template
     44,128,729  29%                - replace-regexp-in-string
     41,343,164  27%                 - #<compiled -0x602b4e54d5359bf>
     35,309,624  23%                  - #<compiled 0x3796c41ba00907c>
     27,861,436  18%                   - org-roam-node-blinks
     27,861,436  18%                    - apply
     27,861,436  18%                     - #<compiled 0x1114734727034293>
     24,931,101  16%                      - org-roam-db-query
     23,662,453  15%                       - emacsql
     23,662,453  15%                        - apply
     23,662,453  15%                         - #<compiled -0x98fd36ed67c3a24>
     19,251,364  12%                          - apply
     18,818,260  12%                           - emacsql-compile
     18,642,949  12%                            - emacsql-format
     10,507,248   6%                             - emacsql-escape-scalar
      3,021,701   1%                              - emacsql-quote-scalar
         29,008   0%                                 #<compiled -0x1ddf15071cdf0c2f>
          2,310   0%                                 beacon--vanish
        136,752   0%                            - emacsql-types
        136,752   0%                             - apply
        136,752   0%                              - #<compiled -0xcbd972c4bb48862>
        136,752   0%                               - slot-value
        136,752   0%                                - apply
        136,752   0%                                   eieio-oref--closql-oref
         38,559   0%                            - emacsql-prepare
         38,559   0%                             - emacsql-prepare--sexp
         31,567   0%                              - emacsql--*expr
         30,297   0%                               - #<compiled -0xe857faf4170923e>
         30,297   0%                                - emacsql--*expr
         30,297   0%                                 - emacsql--!param
          1,024   0%                                    emacsql-escape-format
            105   0%                                  - emacsql-escape-scalar
            105   0%                                     emacsql-quote-scalar
          5,210   0%                              - #<subr F616e6f6e796d6f75732d6c616d626461_anonymous_lambda_36>
          5,210   0%                                 emacsql--!param
          1,152   0%                                emacsql--from-keyword
      1,921,689   1%                          - emacsql-send-message
      1,921,689   1%                           - apply
      1,921,689   1%                            - #<compiled -0x1f3d5346d8e5bfdc>
      1,921,689   1%                             - apply
      1,619,177   1%                              - #<compiled -0xecf8d1b3a0319e>
        261,072   0%                               - emacsql-process
        261,072   0%                                - apply
        261,072   0%                                 - #<compiled -0x19a1627796912376>
        157,472   0%                                  - slot-boundp
        157,472   0%                                   - eieio-oref
        157,472   0%                                    - apply
        157,472   0%                                       eieio-oref--closql-oref
        103,600   0%                                  - eieio-oref
        103,600   0%                                   - apply
        103,600   0%                                      eieio-oref--closql-oref
        302,512   0%                              - #<compiled 0xd4d278f4880022d>
        302,512   0%                               - emacsql-log
        302,512   0%                                - apply
        302,512   0%                                 - #<compiled -0xad0ddb69f60e849>
        302,512   0%                                  - emacsql-log-buffer
        302,512   0%                                   - apply
        302,512   0%                                    - #<compiled -0x65a54e2377dbe47>
        174,048   0%                                     - slot-boundp
        174,048   0%                                      - eieio-oref
        174,048   0%                                       - apply
        174,048   0%                                          eieio-oref--closql-oref
        128,464   0%                                     - eieio-oref
        128,464   0%                                      - apply
        128,464   0%                                         eieio-oref--closql-oref
      1,917,528   1%                          - emacsql-wait
      1,917,528   1%                           - apply
      1,901,568   1%                            - #<compiled -0x1ca323dd243b61c1>
      1,031,120   0%                             - emacsql-waiting-p
      1,031,120   0%                              - apply
        857,808   0%                               - #<compiled -0xc6d17838f100ed9>
        857,808   0%                                - emacsql-buffer
        857,808   0%                                 - apply
        857,808   0%                                  - #<compiled 0x1cd3a205e032b2a>
        857,808   0%                                   - emacsql-process
        857,808   0%                                    - apply
        857,808   0%                                     - #<compiled -0x19a1627796912376>
        571,872   0%                                      - slot-boundp
        571,872   0%                                       - eieio-oref
        571,872   0%                                        - apply
        571,872   0%                                           eieio-oref--closql-oref
        285,936   0%                                      - eieio-oref
        285,936   0%                                       - apply
        285,936   0%                                          eieio-oref--closql-oref
        261,072   0%                               accept-process-output
        190,624   0%                             - emacsql-process
        190,624   0%                              - apply
        190,624   0%                               - #<compiled -0x19a1627796912376>
        178,192   0%                                - eieio-oref
        178,192   0%                                 - apply
        178,192   0%                                    eieio-oref--closql-oref
         12,432   0%                                - slot-boundp
         12,432   0%                                 - eieio-oref
         12,432   0%                                  - apply
         12,432   0%                                     eieio-oref--closql-oref
        571,872   0%                          - emacsql-clear
        571,872   0%                           - apply
        571,872   0%                            - #<compiled 0xddbac563167f43f>
        314,944   0%                             - emacsql-buffer
        314,944   0%                              - apply
        314,944   0%                               - #<compiled 0x1cd3a205e032b2a>
        314,944   0%                                - emacsql-process
        314,944   0%                                 - apply
        314,944   0%                                  - #<compiled -0x19a1627796912376>
        261,072   0%                                   - slot-boundp
        261,072   0%                                    - eieio-oref
        261,072   0%                                     - apply
        261,072   0%                                        eieio-oref--closql-oref
         53,872   0%                                   - eieio-oref
         53,872   0%                                    - apply
         53,872   0%                                       eieio-oref--closql-oref
      1,268,648   0%                       - org-roam-db
        140,896   0%                        - emacsql-live-p
        140,896   0%                         - apply
        140,896   0%                          - #<compiled 0x12a13c253b3e187b>
        140,896   0%                           - emacsql-process
        140,896   0%                            - apply
        140,896   0%                             - #<compiled -0x19a1627796912376>
        116,032   0%                              - eieio-oref
        116,032   0%                               - apply
        116,032   0%                                  eieio-oref--closql-oref
         24,864   0%                              - slot-boundp
         24,864   0%                               - eieio-oref
         24,864   0%                                - apply
         24,864   0%                                   eieio-oref--closql-oref
        952,768   0%                   - org-roam-node-fmtime
        952,768   0%                    - apply
        952,768   0%                     - #<compiled 0x8265b3e5fa562fc>
        867,816   0%                      - consult-notes--time
          3,520   0%                         consult-notes--time-relative
        770,324   0%                   - org-roam-node-sizes
        770,324   0%                    - apply
        770,324   0%                       #<compiled -0x1d03333d6f7080a4>
        566,736   0%                     mapconcat
        535,584   0%                     truncate-string-to-width
        336,544   0%                   - org-roam-node-dir
        336,544   0%                    - apply
        336,544   0%                       #<compiled -0x55376feb737dd0c>
        863,952   0%                    apply
          4,701   0%                   match-string
     16,625,769  10%            - org-roam-node-list
     16,580,185  10%             - org-roam-db-query
     16,580,185  10%              - emacsql
     16,580,185  10%               - apply
     16,580,185  10%                - #<compiled -0x98fd36ed67c3a24>
      8,394,824   5%                 - emacsql-wait
      8,394,824   5%                  - apply
      8,394,824   5%                   - #<compiled -0x1ca323dd243b61c1>
         41,440   0%                      accept-process-output
      8,105,487   5%                 - emacsql-parse
      8,105,487   5%                  - apply
      8,105,487   5%                   - #<compiled 0x6daf1def892e1aa>
        319,088   0%                    - emacsql-buffer
        319,088   0%                     - apply
        319,088   0%                      - #<compiled 0x1cd3a205e032b2a>
        319,088   0%                       - emacsql-process
        319,088   0%                        - apply
        319,088   0%                         - #<compiled -0x19a1627796912376>
        174,048   0%                          - eieio-oref
        174,048   0%                           - apply
        174,048   0%                              eieio-oref--closql-oref
        145,040   0%                          - slot-boundp
        145,040   0%                           - eieio-oref
        145,040   0%                            - apply
        145,040   0%                               eieio-oref--closql-oref
          2,538   0%                      read
         79,831   0%                 - apply
         78,439   0%                  - emacsql-compile
         73,239   0%                     emacsql-format
          5,200   0%                   - emacsql-prepare
          3,808   0%                    - emacsql-prepare--string
          1,392   0%                       replace-regexp-in-string
             43   0%                 - emacsql-send-message
             43   0%                  - apply
             43   0%                   - #<compiled -0x1f3d5346d8e5bfdc>
             43   0%                    - apply
             43   0%                       #<compiled -0xecf8d1b3a0319e>
         45,584   0%               #<compiled -0x76d583e9eeaf1b1>
      2,182,510   1%            - seq-sort
      2,182,510   1%             - apply
      2,182,510   1%              - #<compiled -0x94268704ab81d7b>
      2,134,078   1%               - sort
          2,310   0%                  #<subr org-roam-node-read-sort-by-file-mtime>
         11,356   0%            - org-roam-node--process-display-format
         11,356   0%             - org-roam-format-template
         10,332   0%              - replace-regexp-in-string
         10,332   0%               - #<compiled -0x19cc4596e89fc540>
          2,040   0%                  #<compiled 0x12e838239fea219f>
          1,016   0%                  apply
        189,367   0%           - consult--read
        189,367   0%            - consult--read-1
        189,367   0%             - consult--with-preview-1
        189,367   0%              - #<compiled -0x88f776f4a746420>
        189,367   0%               - completing-read
        189,367   0%                - completing-read-default
        189,367   0%                 - apply
        189,367   0%                  - vertico--advice
        152,643   0%                   - #<subr completing-read-default>
         37,155   0%                    - vertico--exhibit
         34,985   0%                     - vertico--display-candidates
            633   0%                      - vertico--resize-window
            633   0%                         window-resize
          2,170   0%                       vertico--display-count
          8,288   0%                      marginalia--minibuffer-setup
          4,344   0%                    - timer-event-handler
          4,216   0%                     - apply
          4,144   0%                      - show-paren-function
          4,144   0%                       - show-paren--default
          4,144   0%                          syntax-ppss
             72   0%                      - blink-cursor-start
             72   0%                       - blink-cursor--start-timer
             72   0%                        - run-with-timer
             72   0%                         - run-at-time
             24   0%                            timer-set-time
             24   0%                          - timer-activate
             24   0%                             timer--activate
             80   0%                       timer-inc-time
             24   0%                     - timer-activate
             24   0%                        timer--activate
          1,024   0%                    - consult--preview-post-command
          1,024   0%                     - #<compiled -0x144ff09aa9d6805e>
          1,024   0%                      - #<lambda -0x57dd9ee48847c31>
          1,024   0%                       - if
          1,024   0%                        - funcall
          1,024   0%                         - and
          1,024   0%                          - funcall
          1,024   0%                             #<compiled 0xf5e508bf6a99382>
            252   0%                    - redisplay_internal (C function)
            252   0%                       eval
            184   0%                      minibuffer-setup
            160   0%                    - minibuffer-inactive-mode
            160   0%                     - run-mode-hooks
            160   0%                      - run-hooks
            160   0%                       - auto-revert--global-possibly-adopt-current-buffer
            160   0%                        - auto-revert--global-adopt-current-buffer
            160   0%                         - auto-revert-set-timer
            160   0%                          - run-with-timer
            160   0%                           - run-at-time
             96   0%                            - timer-activate
             96   0%                               timer--activate
             48   0%                              timer-set-time
             64   0%                    - minibuffer-mode
             64   0%                     - run-mode-hooks
             64   0%                      - run-hooks
             64   0%                       - auto-revert--global-possibly-adopt-current-buffer
             64   0%                        - auto-revert--global-adopt-current-buffer
             64   0%                         - auto-revert-set-timer
             64   0%                          - run-with-timer
             64   0%                           - run-at-time
             24   0%                              timer-set-time
             24   0%                            - timer-activate
             24   0%                               timer--activate
             16   0%                      command-execute
            128   0%    - run-at-time
             48   0%       timer-set-time
             48   0%     - timer-activate
             48   0%        timer--activate
             48   0%   - keyboard-quit
             48   0%    - apply
             48   0%     - lsp-ui-doc--hide-frame
             48   0%      - run-at-time
             24   0%         timer-set-time
             24   0%       - timer-activate
             24   0%          timer--activate
     43,806,298  28%  - byte-code
     43,806,298  28%   - read-extended-command
     43,806,298  28%    - read-extended-command-1
     43,806,298  28%     - completing-read-default
     43,806,298  28%      - apply
     43,806,298  28%       - vertico--advice
     43,638,034  28%        - #<subr completing-read-default>
     34,906,124  22%         - redisplay_internal (C function)
     17,439,432  11%            olivetti-set-window
          9,072   0%            eval
      7,374,214   4%         - vertico--exhibit
      4,809,712   3%          - vertico--arrange-candidates
      4,364,656   2%           - vertico--affixate
      4,360,512   2%            - #<compiled -0xae2a243763ce1ff>
      4,360,512   2%             - apply
      4,353,168   2%              - marginalia--affixate
      4,351,136   2%               - marginalia--cached
      4,337,928   2%                - marginalia-annotate-command
      2,815,111   1%                 - marginalia--function-doc
      2,723,639   1%                  - documentation
      2,435,264   1%                   - substitute-command-keys
         12,432   0%                      #<compiled -0x1ddf150a4aee3c2f>
          6,144   0%                      key-valid-p
          4,768   0%                    - describe-map-tree
          4,064   0%                     - describe-map
          1,016   0%                        describe-map--align-section
         32,768   0%                 - marginalia--documentation
         24,552   0%                  - marginalia--truncate
         16,368   0%                     truncate-string-to-width
          4,144   0%            - vertico--metadata-get
          4,144   0%             - completion-metadata-get
          4,144   0%              - apply
          4,144   0%                 marginalia--completion-metadata-get
        274,032   0%           - vertico--format-candidate
        128,352   0%              vertico--display-string
         38,664   0%           - #<compiled -0x142bf55220d223ce>
         30,480   0%              orderless-highlight-matches
      1,248,238   0%          - vertico--update
        641,350   0%           - vertico--recompute
        566,022   0%            - vertico--all-completions
        566,022   0%             - completion-all-completions
        566,022   0%              - apply
        566,022   0%               - #<subr completion-all-completions>
        561,878   0%                - completion--nth-completion
        561,878   0%                 - completion--some
        561,878   0%                  - #<compiled 0x127fd337cdfcb904>
        561,878   0%                   - orderless-all-completions
        561,878   0%                    - orderless-filter
        530,086   0%                     - #<subr F616e6f6e796d6f75732d6c616d626461_anonymous_lambda_54>
        530,086   0%                      - complete-with-action
        515,750   0%                       - all-completions
        515,750   0%                        - #<compiled -0x1b88939c782b11ef>
        399,102   0%                         - version-to-list
        399,102   0%                            error
         24,576   0%                     - orderless-pattern-compiler
         18,432   0%                        orderless-regexp
          3,072   0%                      - rx-to-string
          3,072   0%                       - rx--translate
          3,072   0%                        - rx--translate-form
          3,072   0%                         - rx--translate-or
          3,072   0%                          - rx--translate
          3,072   0%                             rx--translate-form
          3,072   0%                       isearch-no-upper-case-p
         42,880   0%              vertico-sort-history-length-alpha
        605,784   0%             redisplay
      1,238,144   0%          - vertico--display-candidates
          2,532   0%           - vertico--resize-window
          2,532   0%              window-resize
         78,120   0%            vertico--display-count
         32,192   0%         - command-execute
         11,000   0%          - funcall-interactively
          4,240   0%           - self-insert-command
          4,240   0%            - undo-auto--undoable-change
          4,240   0%             - undo-auto--boundary-ensure-timer
          4,240   0%              - run-at-time
          4,216   0%               - timer-activate
          4,216   0%                  timer--activate
             24   0%                 timer-set-time
            424   0%           - vertico-exit
            112   0%              vertico-insert
             96   0%           - delete-backward-char
             96   0%            - undo-auto--undoable-change
             96   0%             - undo-auto--boundary-ensure-timer
             96   0%              - run-at-time
             72   0%               - timer-activate
             72   0%                  timer--activate
             24   0%                 timer-set-time
         20,720   0%           marginalia--minibuffer-setup
          9,072   0%         - minibuffer-inactive-mode
          4,928   0%          - run-mode-hooks
          4,928   0%           - run-hooks
          4,928   0%            - auto-revert--global-possibly-adopt-current-buffer
          4,928   0%             - auto-revert--global-adopt-current-buffer
          4,928   0%              - auto-revert-set-timer
          4,928   0%               - run-with-timer
          4,928   0%                - run-at-time
          4,672   0%                 - timer-activate
          4,672   0%                    timer--activate
            192   0%                   timer-set-time
          4,144   0%            mode-local-on-major-mode-change
          8,288   0%           winner-save-unconditionally
          5,688   0%         - timer-event-handler
          4,432   0%          - apply
          4,432   0%           - blink-cursor-start
          4,432   0%            - blink-cursor--start-timer
          4,432   0%             - run-with-timer
          4,432   0%              - run-at-time
          4,288   0%               - timer-activate
          4,288   0%                  timer--activate
            144   0%                 timer-set-time
            680   0%            timer-inc-time
            360   0%          - timer-activate
            360   0%             timer--activate
          4,328   0%         - minibuffer-setup
          4,144   0%            vertico--setup
            432   0%         - minibuffer-mode
            432   0%          - run-mode-hooks
            432   0%           - run-hooks
            432   0%            - auto-revert--global-possibly-adopt-current-buffer
            432   0%             - auto-revert--global-adopt-current-buffer
            432   0%              - auto-revert-set-timer
            432   0%               - run-with-timer
            432   0%                - run-at-time
            336   0%                 - timer-activate
            336   0%                    timer--activate
             96   0%                   timer-set-time
            184   0%           minibuffer-setup
            184   0%           minibuffer-setup
            184   0%           minibuffer-setup
     34,902,868  22% + redisplay_internal (C function)
          4,224   0%   corfu--auto-post-command
          4,207   0% + help-command-error-confusable-suggestions
          4,144   0%   winner-save-old-configurations
            144   0% + timer-event-handler
              0   0%   ...

~consult-notes-sources~ does not search notes recursively

Consider this setup with some subdir inside personal and work. The notes in subdir like personal/book could not be searched.

(setq consult-notes-sources
      `(("Personal"  ?p "~/sync/org/personal"))
        ("Work"  ?w "~/sync/org/work")))

Is it by design?

`void-variable consult-notes-org-headings-files` in `consult-notes-search-in-all-notes`

With the latest changes from 6aef8b5, consult-notes-search-in-all-notes fails with

Debugger entered--Lisp error: (void-variable consult-notes-org-headings-files)
  consult-notes-search-in-all-notes()

if consult-notes-org-headings.el has not been loaded and consult-notes-org-headings-files hasn't been initialized manually.
Minimal example:

(use-package consult-notes)
(consult-notes-search-in-all-notes)

Is it possible to filter denote subdirectory like normal note source but remain denote display style?

As far as I know, there are two ways to add denote notes:

  1. add denote directory just like normal notes
    • I can filter notes by prefix ?key , and search notes in sub-directory by custom name
    • But lack of denote display style, keyword highlight, title etc.
  2. turn on the consult-notes-denote-mode, automatically import all denote notes including sub-directory
    • notes in sub-directory is searchable and with special styles
    • But can't search and filter sub-directory notes by name like normal notes

I tried to combine both methods, manually add denote sub-directory like this, and turn on denote mode at the same time:

  (setq consult-notes-sources '(
                                ("Casts"  ?c  "~/Documents/org/casts")  ;normal notes
				("Posts" ?p "~/Documents/org/notes/posts") ; notes/posts is sub-directory of denote directory notes/
                                )) ;; Set notes dir(s), see belo

It worked as I excepted, but produced duplicate candidates:
image

Is there a more elegant way to do this?

Filter candidates fails if search pattern occurs in directory path

Suppose I have these note source:

(setq consult-notes-sources
      '(("Org"             ?o "~/Dropbox/org-files")
        ("Org Refile"      ?r "~/Dropbox/Work/projects/notebook/org-refile")))

Patterns like D,Drop, Dropbox etc won't filter candidates.

This problem caused by below code:

(let ((idir (propertize (file-name-as-directory dir) 'invisible t)))

Although the dir is invisible, it can still be searched by consult, but it's invisible to user, so it looks like nothing happened. It will be a problem if note title contains those pattern, say, 2022-messagebox.org

I noticed that consult-notes-denote handles this situation differently, dir is put into text-property, maybe consult-note should do similar thing?

Search Recursively?

Can I use an option to specify some particular sources should be searched recursively?

For example, if there is a source directory named ~/notes and there are some sub-directories in it like ~/notes/books and ~/notes/journal. I do not want to set these sources explicitly, since I may create new sub-directories or remove them.

Enable future history with consult-notes

I've just added this to the consult--multi call in my version ofconsult-notes. It enables future history on the command, so hitting M-n will set the input as symbol-at-point or region if it's set.

:add-history (seq-some #'thing-at-point '(region symbol)) ; future history

Error with "consult-note-sources"

Hi,

I am using this simple code in order to set up consult-notes, but I get an error when launching the "consult-notes" command. Here is how I install and configure the package:

(use-package consult-notes
  :after (consult denote)
  :init (consult-notes-denote-mode 1)
  :config
  (setq consult-notes-sources '("Notes" ?n "~/Documents/Notes")))

When I evaluate these lines it seems to be fine. But when I do M-x consult-notes, I get the following error:

consult-notes--make-all-sources: Wrong type argument: listp, "Notes"

The "Notes" part do refers to the first argument, because if I enter anything else, let's say "Blah", it will say "Blah" is wrong type argument.

Also, reading the README.md, I though I could even not set the consult-notes-source variable, since the consult-notes-denote-mode command should set it automatically to denote-directory. But it doesn't seem to be the case.

What can I do to get consult-notes to work?

Thanks for your time and support.

Within content search

Thanks for this package.
Two questions:

  1. does it search only in the title of the files or also content?
  2. If it searches content: does it search two keywords on the same line of anywhere in the file?
    Thanks!

limit search to text and code type files?

I keep screen captures in org mode files in a way that produces an image file in the same dir and then inserts a link to it into the file.
When running consult-notes I find these image files in the list of notes displayed.
I think it's would be a good idea to add an ignore-filetypes-list (or a whitelist, conversly) to limit to scope of files displayed.

preview-key issue

Hello,

I'm not sure if this is specific to denote, or consult itself, but for some reason, I am not seeing live preview of the notes?

Normally, I would expect this to give previews during selections

(defun fake-notes (&optional sources)
  "Find a file in a notes directory with consult-multi, or from SOURCES."
  (interactive)
  (consult-notes--make-all-sources)
  (let* ((consult--buffer-display #'switch-to-buffer)
         (selected (consult--multi (or sources consult-notes--all-sources)
                                  :require-match
                                  (confirm-nonexistent-file-or-buffer)
                                  :prompt "potes: "
                                  :preview-key 'any
                                  :history 'consult-notes-history
                                  :sort nil)))
    ;; For non-matching candidates, fall back to buffer-file creation.
    (unless (plist-get (cdr selected) :match)
      (consult--file-action (car selected)))))

If you could provide some insight, I will surely appreciate it.

embark integration with consult-notes-org-headings-mode

consult-notes-org-headings-mode is great. It's allowed me to replace consult-org-agenda with consult-notes and get a combined interface for selecting org headings and file names. One items that is missing, however, is identification of the org heading as an org-heading target within embark. Currently it is identified as a consult-note target after calling embark-act.

FYI to @oantolin and @minad in case either of them would like to offer any ideas on how to fix this.

Be more resilient to "multiple nodes exists" errors

Right now if I have multiple nodes and I type that nodes name this error pops up in messages:

Error in post-command-hook (vertico--exhibit): (user-error "Multiple nodes exist with title or alias \"compare size of haskell docker container and nix built haskell docker container\"")

Sometimes when this happens my the consult-buffer/vertico window becomes unresponsive in the way of nothing I type shows up and I can't seem to select anything. I have to C-g to get out of it and re-enter it. This doesn't always happen though.

I'm not sure if this is something to be fixed consult-notes side, vertico side, or perhaps something problematic in my config.

For some context, I ideally I wouldn't have duplicates but they occur sometimes because of:

  • syncthing conflicts
  • making the wrong kind of links

New users of consult-notes with large messy org-roams might not want to spend a couple hours removing 50+ duplicates before using it either like I did 😅

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.