mclear-tools / consult-notes Goto Github PK
View Code? Open in Web Editor NEWUse consult to search notes
License: GNU General Public License v3.0
Use consult to search notes
License: GNU General Public License v3.0
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"))))
Hi, can you tell me what the theme is in the screenshot in README? Thanks.
it would be great to have the note linking equivalent of the current functionality through the consult interface!
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?
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)
)
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!
It looks like consult-notes-denote-annotate-function
is defined but never used?
I tried: (setq consult-notes-denote-annotate-function nil)
but it didn't work.
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?
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
I have three denote silos and I'm not sure how to find the right balance of features and flexibility:
consult-notes-denote-mode
enabled.dir-locals.el
.I have Denote configured with denote-directory
set to my main silo.
consult-notes
from anywhere in the filesystem except another silo, everything works as expected: The selection list gets the special Denote display treatment.consult-notes
within a silo, everything works as expected.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:
What I would desire is:
consult-notes-denote-mode
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
.
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
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.
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.
oh, looks like my confusion is solved here:
(when (bound-and-true-p consult-notes-denote-mode)
(concat (expand-file-name denote-directory) " "))
the issue i'm running into is that consult-notes-search-in-all-notes always appears to set dir to the cwd, instead of using the dir set in denote-directory
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)))
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:
org-roam-ref-find
? If yes, that's a good idea, and good, focused, story.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?
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?
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
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!
Step 1: (find-file /path/to/notes/note1.org)
now the value of buffer-file-name is "/path/to/notes/note1.org
Step2: with setting /path/to/notes in consult-sources and then `M-x consult-notes' and open note1.org
now buffer-file-name is something like #("/path/to/notes/note1.org" 0 x (invisible t))
I think consult-notes should not affect the `buffer-file-name'
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.
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?
Hello, I wonder if there is a way to sort the results by the name of denote titles in the consult's interface?
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
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
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:
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.
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!
Don't automatically default to ripgrep if the user has it installed. Instead allow this to be set via customize.
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!
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)
Right now annotations are hard coded but they should all be user configurable.
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.
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
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% ...
Emacs cannot launch consult-notes but results in an error prompt: "consult--display-width: Symbol’s function definition is void: compat-string-widt"
Here's my config file: https://pastebin.com/WHrknfaW
Emacs version: GNU Emacs 29.0.50
I believe it is due to a mistake here:
consult-notes/consult-notes-denote.el
Line 116 in bfcc6b8
directory
should be subdirectory
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?
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)
It looks like the annotations don't align well in consult--multi. This seems like a known issue.
As far as I know, there are two ways to add denote notes:
consult-notes-denote-mode
, automatically import all denote notes including sub-directory
name
like normal notesI 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:
Is there a more elegant way to do this?
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:
consult-notes/consult-notes.el
Line 182 in da0cd41
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?
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.
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
when creating new notes, either through consult-notes
or through denote
itself, the created files are not considered as most recently changed in the sorting of the list of notes - although they're often what one would want to access most.
after deleting a note (possibly it was the last note opened through constult-notes
) I get
apply: Opening input file: No such file or directory, c:/Users/Jonathan/notes/20230409T130534--presentations-prep__bib_finance.org
and no completion pops up.
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.
Thanks for this package.
Two questions:
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.
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.
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.
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:
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 😅
Hi, what is the argument cand
short for?
https://github.com/mclear-tools/consult-notes/blob/main/consult-notes-org-headings.el#L109
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.