Releases: darrenldl/docfd
12.0.0-alpha.10
-
Added basic autocomplete to filter field
-
Improved script save autocomplete to insert longest common prefix
-
Fixed script save autocomplete so it no longer erases original text when no recommendations are available
12.0.0-alpha.9
-
Disabled
Tab
handling in edit fields to reduce friction in UX -
Added
nano
-style autocomplete to save commands field with listing of existing scripts
12.0.0-alpha.8
-
Changed
--commands-from
to--script
-
Added "save commands as script" and "load script" functionality to streamline reusing of commands
- Try it by searching as usual, then press
Ctrl+S
to save andCtrl+O
to load - Feel free to leave a comment at GitHub discussion here to let me know your thoughts
- Try it by searching as usual, then press
-
Improved content view pane scrolling control
- The internal counter no longer scrolls past the limit
12.0.0-alpha.7
-
Fixed interactive use of
--commands-from
-
Added
mark listed
andunmark listed
to template command history file help info
12.0.0-alpha.6
-
Fixed
not
operator parsing-
Previously
not ext:txt and not ext:md
would be parsed asnot (ext:txt and not ext:md)
, which is not what is typically expected -
not
now binds tightly, sonot ext:txt and not ext:md
is parsed as(not ext:txt) and (not ext:md)
-
12.0.0-alpha.5
-
Added content view pane scrolling
- Controlled by
-
/=
- Controlled by
-
Removed extraneous marking functionality
mark unlisted
unmark unlisted
-
Added
"..."
as a shorthand tocontent:"..."
to filter expression-
For example,
content:keyword AND path-date:>2025-01-01
can be written as"keyword" AND path-date:>2025-01-01
-
The quotation is necessary to differentiate between typos
and actual query, otherwise incorrect input like
pathfuzzy:...
would be parsed as content queries instead
-
12.0.0-alpha.4
-
Added additional marking functionality
mark listed
(ml
) marks all currently listed documentsmark unlisted
(mL
) marks all currently unlisted documentsunmark listed
(Ml
) unmarks all currently listed documentsunmark unlisted
(ML
) unmarks all currently unlisted documents
-
unmark all
is moved to key bindingMa
-
Reworked key binding info grid to pack columns more tightly
-
Added WSL clipboard integration
-
Minor fix in command history file template help text
-
Added
Tab
key to key binding info grid -
Added key binding info about scrolling through document list and search result list
-
Minor fix for
{line_num}
placeholder handling in--open-with
-
This should always be usable for text files but previously
Docfd crashes when{line_num}
is specified in--open-with
and user opens a text file when no search has been made -
This is fixed by defaulting
{line_num}
to 1 when
there are no search results present
-
-
Minor fix for
{page_num}
and{search_word}
placeholders handling in--open-with
-
This should always be usable for PDF files but previously
Docfd crashes when{page_num}
or{search_word}
is specified in--open-with
and user opens a PDF file when no search has been made -
This is fixed by defaulting
{page_num}
to 1
and{search_word}
to empty string when
there are no search results present
-
12.0.0-alpha.3
-
Users are advised to recreate the index DB
-
Adjusted SQL indices and swapped to specialized SQL queries
for exact and prefix search terms, e.g.'hello
,^worl
- Handling of these terms is now 10-20% faster depending on the document
-
Fixed command history recomputation not using the reloaded version
of document store-
This issue is most noticeable when you've edited a text file after hitting
Enter
in Docfd (after which Docfd reloads the file for you),
and you hith
to modify the command history -
The replaying of the command history would use the old copy of the file instead of the new edited version of the text file
-
-
Added missing SQL transaction in code path for reloading a single document
- Previously, reloading a single document was incredibly slow, which was very noticeable if you edited a text file
after hittingEnter
in Docfd, unless the text file was very small
- Previously, reloading a single document was incredibly slow, which was very noticeable if you edited a text file
-
Updated
--paths-from
argument handling-
Added
--paths-from -
for accepting list of paths from stdin -
Adjusted to accept comma separated list of paths, e.g.
--paths-from path-list0.txt,path-list1.txt
-
-
Removed builtin piping to fzf triggered by providing
?
as a file path, e.g.docfd ?
- The
--paths-from -
handling makes this obsolete and a lot less flexible by comparison
- The
-
Fixed interaction between search and filter
-
Previously, starting a search would incorrectly cancel an ongoing filtering operation.
Now only a new filtering operation can cancel an ongoing filtering operation.
A new search still cancels an ongoing search. -
Starting a new filtering operation also still cancels any ongoing search. This is fine since the search results
are refreshed after the filtering has been completed.-
The refreshing of the search results also means that the following sequences of events are still handled correctly,
namely they still arrive at the same normal form of the document store:-
Example 1:
- (0) Filter
f_exp0
(filtering is canceled by step (2), but the updating of filter expression is never canceled) - (1) Search
s_exp0
(search is canceled by step (2), but the updating of search expression is never canceled) - (2) Filter
f_exp1
(refreshes search results usings_exp0
)
- (0) Filter
-
Example 2:
- (0) Search
s_exp0
(search is canceled by step (1), but updating of search expression is never canceled) - (1) Filter
f_exp0
(this stage is canceled by step (2),
either during the filtering or during the
refreshing of search results, but the updating
of filter expression is never canceled) - (2) Filter
f_exp1
(refreshes search results usings_exp0
)
- (0) Search
-
-
-
-
Renaming query expression/language to filter expression/language in help text and documentation
-
Added a separate loading indicator for filter field
-
Fixed concurrency issue where an update of document store may cause the
filter field and search field in UI to be out of sync with the actual
filter expression and search expression used by the underlying document store-
Suppose we have the following sequence of events:
-
(0) Document store
store0
carries filter expression
f_exp0
and search expressions_exp0
, which we write
as pair(f_exp0, s_exp0)
-
(1) User initiates filter/search operation by placing
(f_exp1, s_exp1)
into the input fields.We name the document store resulting from this filter/search operation as
store1a
,
which carries(f_exp1, s_exp1)
when finalized. -
(2) While filter/search operation is ongoing,
user drops a set of documents from the
current document store. Sincestore1a
is not
finalized yet, the current document store is stillstore0
, thus the new document store encoding the result of the drop operation,store1b
, is computed fromstore0
instead ofstore1a
.In other words, both
store1a
andstore1b
share
store0
as their parent.
Note thatstore1b
carries(f_exp0, s_exp0)
as
inherited fromstore0
,
since a drop operation does not alter the filter expression or search expression. -
(3) As a drop operation immediately updates the document store
and cancels ongoing filter/search operation, step (2) canceled the computation ofstore1a
, and instead placesstore1b
as the current document store.
-
-
However, this means the input fields are
(f_exp1, s_exp1)
while the current document storestore1b
actually carries
(f_exp0, s_exp0)
.The fix in this update is then to add an
extra "sync from input fields" step whenever a document store
is updated. To illustrate, we continue from the above
sequence of events, where the updated version of Docfd
carries out the following step missing from previous
versions.- (4) Update input fields to
(f_exp0, s_exp0)
- (4) Update input fields to
-
This addresses the mismatch between the underlying document store and the UI input fields.
-
In practice this is very unlikely to occur with human input, as the modes that update document store
are disabled if document store manager is carrying out any ongoing filtering or search.However, since the UI is async, there will be gaps in timing between UI input/feedback and actual updates of values,
opening up to TOCTOU problems.
So there is always a chance that a document store update will be requested before the modes are are disabled.
-
-
Made interrupted filter/search operation to not yield a document store at all instead of yielding an empty document store
to simplify reasoning about filter/search cancellations and UI fields being in sync
12.0.0-alpha.2
-
Added
path-date
clause to query expression-
This allows filtering based on date recognized from document path, for example,
path-date:>=2025-01-01 AND path-date:<2025-02-01
would allow/home/user/meeting-notes-2025-01-10.md
to pass through -
This gives a very lightweight method of attaching date information to any document
-
See relevant Wiki page for details
-
12.0.0-alpha.1
-
Added a more powerful filter query mode that replaces the filter glob mode and "pipe to fzf" feature
-
Filter query mode uses a proper query language that supports file path globbing and file path fuzzy matching among other features
-
This mode uses key binding
f
-
-
Removed
q
exit key binding to avoid accidental exiting