Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
225 commits
Select commit Hold shift + click to select a range
9c7149d
feat(wlx): Add mpv_wayland video player plugin
pplupo May 12, 2026
14f679b
feat(wlx): Add MDK multimedia player plugin
pplupo May 12, 2026
c99c214
feat(wlx): Add high-performance Log Viewer plugin
pplupo May 12, 2026
a3e8736
feat(wlx): Add KPart host "Universal Wrapper" plugin
pplupo May 12, 2026
84dd645
Use header files from top-level sdk directory
pplupo May 13, 2026
e662512
Use header files from top-level sdk directory
pplupo May 13, 2026
a1515e4
Use header files from top-level sdk directory
pplupo May 13, 2026
eca2f19
Use header files from top-level sdk directory
pplupo May 13, 2026
37a3aaa
Add lc_focus to top-level sdk header for consistency
pplupo May 13, 2026
91b2368
Merge branch 'master' into logview
alexx2000 May 19, 2026
46436a7
ADD: diagramview plugin branch
pplupo May 20, 2026
5f9f206
ADD: jsonview plugin branch
pplupo May 20, 2026
4725662
csvview: add Qt6 lister plugin with header row toggle, copy/paste/del…
pplupo May 20, 2026
228589d
Fix jsonview crash/error dialog on invalid json or non-json files
pplupo May 25, 2026
2beeae6
Merge branch 'master' into jsonview
pplupo May 26, 2026
137941d
feat(wlx/logview): implement regex-based line background and foregrou…
pplupo May 26, 2026
3779446
feat(wlx): Add Kate (KTextEditor) rich editor plugin
pplupo May 12, 2026
f73dd95
Use header files from top-level sdk directory
pplupo May 13, 2026
6c32aa1
feat(wlx/kate): group case conversions under submenu, add new case st…
pplupo May 27, 2026
756aaea
Merge branch 'fix-jsonview-invalid-number'
pplupo May 27, 2026
e286f5b
feat(wlx/logview): implement regex-based line background and foregrou…
pplupo May 26, 2026
8b5fbd6
Merge branch 'kate-case-conversion'
pplupo May 27, 2026
0b5197a
feat(wlx/kate): integrate all editor branches into kate base
pplupo May 28, 2026
c2256ba
Merge kate-merged: integrate editor-features, fix-redo-and-write-lock…
pplupo May 28, 2026
eb13b6c
refactor(wlx): replace custom focus command with native Qt focus prop…
pplupo May 28, 2026
073706f
build(csvview): statically link libenca
pplupo May 30, 2026
c519b98
feat(csvview): add row insertion logic to context menu
pplupo May 30, 2026
6d7370a
Save current state of csvview before focus fix
pplupo Jun 1, 2026
e975724
fix(wlx/csvview): resolve focus bounce, file selection, and navigatio…
pplupo Jun 2, 2026
ea93f1d
docs(csvview): update README with new features and fix screenshot links
pplupo Jun 2, 2026
57bb972
feat(wlx/csvview): add inline find/replace panel to table grid view
pplupo Jun 2, 2026
245f85c
fix(wlx/csvview): bypass key intercepts in Find/Replace panel and add…
pplupo Jun 2, 2026
1adf8a6
style(wlx/csvview): add push button borders and reduce toolbar button…
pplupo Jun 2, 2026
21197cf
fix(wlx/csvview): resolve key trapping inside find/replace inputs by …
pplupo Jun 2, 2026
401f93a
fix(wlx/csvview): refine click activation and focus proxy for Find/Re…
pplupo Jun 2, 2026
9608072
fix(wlx/csvview): check focusWidget to resolve event filter intercept…
pplupo Jun 2, 2026
e65fee7
fix(wlx/csvview): fix Find/Replace auto-quoting bug and update docume…
pplupo Jun 3, 2026
9eae794
Merge remote-tracking branch 'upstream/master' into csvview
pplupo Jun 3, 2026
d6702d0
Add wayland_qt_base: Qt6 Wayland plugin component library
pplupo Jun 6, 2026
106dcea
Refactor EditableGridWidget to QTableView + QAbstractItemModel
pplupo Jun 6, 2026
96e6e79
Add GridMode enum: MemoryDocument vs LiveDatabase strategy
pplupo Jun 6, 2026
e9e0119
structview: Unified Structured Text WLX plugin (JSON, XML, INI)
pplupo Jun 6, 2026
76445b7
dbview: Transactional Database WLX plugin (SQLite)
pplupo Jun 6, 2026
8f6d94e
structview: implement CBOR engine
pplupo Jun 8, 2026
bc17289
dbview: multi-engine architecture (SQLite, DuckDB, LevelDB, RocksDB)
pplupo Jun 8, 2026
bd0468c
wayland_qt_base: shared UI components for unified plugin layout
pplupo Jun 8, 2026
a5ade29
Merge plugin-platform: shared UI components (FilterRowWidget, PluginS…
pplupo Jun 8, 2026
db3d4ea
structview: hierarchical tree navigation + YAML/TOML/CBOR support
pplupo Jun 8, 2026
27314ae
Merge plugin-platform: shared UI components
pplupo Jun 8, 2026
87f3970
dbview: integrate shared UI components (FilterRowWidget, PluginStatus…
pplupo Jun 8, 2026
abe1720
dbview: integrate QSortFilterProxyModel for per-column filtering and …
pplupo Jun 8, 2026
9768cdd
wayland_qt_base: support QSortFilterProxyModel in EditableGridWidget …
pplupo Jun 8, 2026
ded3d6e
Merge branch 'plugin-platform' into structview
pplupo Jun 8, 2026
78f3726
Merge branch 'plugin-platform' into dbview
pplupo Jun 8, 2026
e32db05
Fix wayland_qt_base AUTOMOC by including headers in target sources
pplupo Jun 9, 2026
3a5bd53
Fix wayland_qt_base AUTOMOC by including headers in target sources
pplupo Jun 9, 2026
3f60e1d
Fix toml++ missing symbols by enabling header-only implementation
pplupo Jun 9, 2026
e4ac944
Fix AUTOMOC for structview by adding headers
pplupo Jun 9, 2026
d709900
Fix AUTOMOC for dbview by adding headers
pplupo Jun 9, 2026
61da147
Fix AUTOMOC: use explicit header listing instead of glob for reliable…
pplupo Jun 9, 2026
c2cfaf0
Fix AUTOMOC: explicitly list headers to exclude RocksDbEngine when di…
pplupo Jun 9, 2026
b2a82e7
Fix crash: create FocusManager before setupToolbar to prevent null de…
pplupo Jun 10, 2026
2aeb7d6
Fix crash: null-guard FocusManager in PluginToolBar + correct init or…
pplupo Jun 10, 2026
ad1fb07
Cherry-pick: null-guard FocusManager in PluginToolBar
pplupo Jun 10, 2026
7806aa9
Fix crash on table switch: detach model from view before engine delet…
pplupo Jun 10, 2026
f8379c5
Fix use-after-free: explicit destructor to detach model chain before …
pplupo Jun 10, 2026
b0df408
Fix crash: stop recreating EditableGridWidget on table switch (it rep…
pplupo Jun 10, 2026
d4495b0
Add global exception logger: CrashLogger in wayland_qt_base, wrap all…
pplupo Jun 10, 2026
4a8e6e9
Add global exception logger: CrashLogger in wayland_qt_base, wrap all…
pplupo Jun 10, 2026
9dd867b
Remove XHTML/CFG/CONF/SVG/PLIST from detect string; add YAML parse di…
pplupo Jun 10, 2026
b7c0f23
Fix null m_grid crash: create EditableGridWidget once in setupUi
pplupo Jun 10, 2026
8c669dd
Fix crash-on-close: disconnect signals in destructor; add diagnostics…
pplupo Jun 10, 2026
63e19f0
Fix crash-on-close: disconnect signals and deactivate FocusManager in…
pplupo Jun 10, 2026
eb80ebe
Fix filter alignment: add vertical header spacer; fix status bar overlap
pplupo Jun 10, 2026
74213a6
Replace FilterRowWidget with FilterableHeaderView: filters embedded i…
pplupo Jun 10, 2026
3d19363
Replace FilterRowWidget with FilterableHeaderView in dbview: filters …
pplupo Jun 10, 2026
b4a5b30
Fix YAML parsing by using system yaml-cpp package, and fix status bar…
pplupo Jun 10, 2026
34ef07a
Implement sequential row numbers and standardize column headers (remo…
pplupo Jun 11, 2026
2620160
Support optional header labels in FilterableHeaderView and use it in …
pplupo Jun 11, 2026
3bcc935
Rename wayland_qt_base to wlxbase_wlqt and update references
pplupo Jun 11, 2026
18600fd
docs: add Double Commander Plugin Manager architectural & functional …
pplupo Jun 11, 2026
34ca3af
Implement sorting support for DuckDB columns in dbview
pplupo Jun 11, 2026
55d379b
Fix DuckDB column sorting by delegating sort to source model in custo…
pplupo Jun 11, 2026
1ad7b23
Merge structview branch
pplupo Jun 11, 2026
6f0618c
Merge structview into dbview branch, renaming wayland_qt_base to wlxb…
pplupo Jun 11, 2026
cb7b9de
Merge dbview branch containing wlxbase_wlqt base rename and database …
pplupo Jun 11, 2026
85219e4
Implement toolbar icons, text, and fix structview compilation
pplupo Jun 12, 2026
ff9f18f
Add wlxbase_wlqt base library from plugman branch
pplupo Jun 12, 2026
ab1fd83
Refactor csvview to rely on wlxbase_wlqt library and use CMake build …
pplupo Jun 12, 2026
de9a185
Fix csvview crash on save by removing unsafe FocusManager parent widg…
pplupo Jun 12, 2026
a28d39f
Restore FocusManager parent focus redirection to fix trapped focus in…
pplupo Jun 12, 2026
4cb2b18
Use asynchronous QTimer focus redirection to fix csvview save/edit fo…
pplupo Jun 12, 2026
979ed51
Fix focus deactivation and destructor safety in csvview and shared Fo…
pplupo Jun 13, 2026
9490397
Refine FocusManager redirect condition to check for parentWidget, fix…
pplupo Jun 13, 2026
f9ff85d
fix(wlx/csvview): safer destructor signal disconnection and remove re…
pplupo Jun 13, 2026
cf4d9a2
Fix FocusManager focus redirection in csvview
pplupo Jun 15, 2026
e642231
Untrack build directory and binaries in csvview
pplupo Jun 15, 2026
d7b37bc
Fix FocusManager focus redirection in csvview using shutdown()
pplupo Jun 15, 2026
2be759c
Revert shutdown and match dbview FocusManager state
pplupo Jun 15, 2026
438d272
wlxbase_wlqt: Use QPointer and handle modal dialog focus loss
pplupo Jun 15, 2026
4b925c2
Fix modal dialog freeze and crash on switch
pplupo Jun 15, 2026
657474f
Fix crash on plugin destruction due to dangling pointers in FocusManager
pplupo Jun 15, 2026
b3b9a62
Fix crash: neutralize FocusManager event filter before child destruction
pplupo Jun 15, 2026
f444ec8
Fix focus loss after save: wrap save operations with setIgnoreFocusLo…
pplupo Jun 15, 2026
df96e5e
Change focus restore delay after save to 100ms
pplupo Jun 16, 2026
6f3ea66
Fix focus loss after save: use window()->activateWindow() in csvview
pplupo Jun 16, 2026
e068f8c
Fix focus trap during save using 500ms blind window
pplupo Jun 16, 2026
56d173a
Revert QPointer and remove setIgnoreFocusLoss from csvview
pplupo Jun 16, 2026
73979e2
Fix focus lock by removing window activation and deferring parent foc…
pplupo Jun 16, 2026
bd92620
Add debug logging to FocusManager
pplupo Jun 16, 2026
41b932a
Implement focus recovery on file reload after save
pplupo Jun 16, 2026
1c9a5cc
Refactor focus recovery on file reload to use base library FocusManager
pplupo Jun 16, 2026
6b06244
Add plugman from doublecmd_plugman
pplupo Jun 16, 2026
49bf54b
Implement virtual extension string for WCX plugins
pplupo Jun 16, 2026
d433e31
Merge pull request #2 from doublecmd/master
pplupo Jun 16, 2026
0dfed4c
wlx/structview: Resolve PR conflicts by clean rebuild off upstream/ma…
pplupo Jun 16, 2026
5a97ae5
wlx/dbview: Resolve PR conflicts by clean rebuild off upstream/master
pplupo Jun 16, 2026
1c41277
Fix compilation error with string splitting
pplupo Jun 16, 2026
3cf8a3c
Merge upstream/master
pplupo Jun 16, 2026
6624240
Added remotion of lines, clearing log file, icons on buttos for bette…
pplupo Jun 18, 2026
eca4aff
Merge branch 'master' into logview
pplupo Jun 18, 2026
7f3c231
Merge branch 'master' into logview
pplupo Jun 18, 2026
bb6f9c0
Making the default highlighting case-insensitive and removing a tempo…
pplupo Jun 22, 2026
ae8f13e
Merge remote-tracking branch 'origin/logview' into logview
pplupo Jun 22, 2026
12f2747
Fixing delete and ctrl+c keyboard shortcuts. Implement log clearing, …
pplupo Jun 22, 2026
2a036d9
Static link re2 using FetchContent
pplupo Jun 30, 2026
fe311d6
Fix scrolling and initial visibility for multi-line cells
pplupo Jun 30, 2026
5ddc715
Fix multi-line editing: use QPlainTextEdit in WrapAnywhereDelegate
pplupo Jun 30, 2026
925a300
Fix stale grid data on file reload
pplupo Jun 30, 2026
f2459c5
Fix multi-line editing: use QPlainTextEdit in WrapAnywhereDelegate
pplupo Jun 30, 2026
2500327
Swap Enter/Ctrl+Enter in multi-line cell editor
pplupo Jun 30, 2026
2a8a3f5
Swap Enter/Ctrl+Enter in multi-line cell editor
pplupo Jun 30, 2026
3d496b4
Fix Enter key in multi-line cell editor
pplupo Jun 30, 2026
d46b857
Fix Enter key in multi-line cell editor
pplupo Jun 30, 2026
3748718
Fix multi-line editing: use QPlainTextEdit in WrapAnywhereDelegate
pplupo Jun 30, 2026
6c06186
Swap Enter/Ctrl+Enter in multi-line cell editor
pplupo Jun 30, 2026
7b02454
Fix Enter key in multi-line cell editor
pplupo Jun 30, 2026
9748ca6
Fix Ctrl+Enter: let QPlainTextEdit handle newline natively
pplupo Jun 30, 2026
9c3488c
Fix Ctrl+Enter: let QPlainTextEdit handle newline natively
pplupo Jun 30, 2026
fc1c4d3
Fix Ctrl+Enter: let QPlainTextEdit handle newline natively
pplupo Jun 30, 2026
81784bd
Revert multi-line editing changes in dbview
pplupo Jun 30, 2026
87959d4
Fix focus loss and reload for LevelDB/RocksDB
pplupo Jun 30, 2026
2e815f7
Writable LevelDB/RocksDB with focus guard and commit/revert buttons
pplupo Jun 30, 2026
129a5be
Buffered commit/revert for all KV engines
pplupo Jun 30, 2026
1b64467
Discard uncommitted KV edits when widget is reused
pplupo Jun 30, 2026
9dd1639
Fix stale edits on widget reuse for all engine types
pplupo Jun 30, 2026
726293e
Remove debug prints from LogModel
pplupo Jul 1, 2026
e5603e3
Remove debug prints from structview
pplupo Jul 1, 2026
5b484b6
Commit compiled binary for csvview
pplupo Jul 1, 2026
9a9fd29
Commit compiled binary for mpv_wayland
pplupo Jul 1, 2026
50ec34e
Commit compiled binary for structview
pplupo Jul 1, 2026
329346f
Commit compiled binary for kate
pplupo Jul 1, 2026
b11e732
Commit compiled binary for kpart
pplupo Jul 1, 2026
48bd6b6
Update wlxplugin.h
alexx2000 Jul 5, 2026
c21e062
Delete wlx/logview/build/logviewer.wlx
alexx2000 Jul 5, 2026
63c2a9b
Delete wlx/jsonview/langs/ru/LC_MESSAGES/plugins.po
alexx2000 Jul 5, 2026
be89f74
Delete wlx/jsonview/langs/ru/LC_MESSAGES/plugins.mo
alexx2000 Jul 5, 2026
ca0328f
Delete wlx/jsonview/src/Makefile
alexx2000 Jul 5, 2026
5eb132e
Delete wlx/jsonview/src/plugin.cpp
alexx2000 Jul 5, 2026
ff377a7
Delete wlx/jsonview/jsonview1.png
alexx2000 Jul 5, 2026
3f16122
Delete wlx/jsonview/jsonview2.png
alexx2000 Jul 5, 2026
08542da
Delete wlx/jsonview/README.md
alexx2000 Jul 5, 2026
20b114e
Update build.sh
alexx2000 Jul 5, 2026
d0d8434
Add Ctrl+Q shortcut to close preview pane
pplupo Jul 5, 2026
7a45316
Add Ctrl+Q shortcut to close preview pane
pplupo Jul 5, 2026
306a1ec
Add Ctrl+Q shortcut to close preview pane
pplupo Jul 5, 2026
84f171b
Add Ctrl+Q shortcut to close preview pane
pplupo Jul 5, 2026
d2dd65e
Handle Ctrl+Q by posting to window
pplupo Jul 5, 2026
b881864
Handle Ctrl+Q by posting to window
pplupo Jul 5, 2026
6b60f48
Handle Ctrl+Q by posting to window
pplupo Jul 5, 2026
4c2f4a8
Handle Ctrl+Q by posting to window
pplupo Jul 5, 2026
ea442ca
Handle Ctrl+Q for logviewer
pplupo Jul 5, 2026
0e366bb
Rename kpart binary to kpart_host_qt6.wlx
pplupo Jul 6, 2026
406a658
Fix focus stealing, Kate navigation keys, and Ctrl+Q handling in kpar…
pplupo Jul 7, 2026
a6c07c7
Update compiled kpart_host_qt6.wlx binary
pplupo Jul 7, 2026
cbaea2b
Merge branch 'doublecmd:master' into dbview
pplupo Jul 7, 2026
cfcd7ff
Merge branch 'doublecmd:master' into kate
pplupo Jul 7, 2026
4597f28
Merge remote-tracking branch 'upstream/master' into kpart
pplupo Jul 7, 2026
1f81a12
Merge remote-tracking branch 'upstream/master' into mpv_wayland
pplupo Jul 7, 2026
8b0c22c
Merge remote-tracking branch 'upstream/master' into logview
pplupo Jul 7, 2026
2a8e5ca
Dynamically build detect string based on installed KParts
pplupo Jul 7, 2026
ad9add4
Use preferred suffix to avoid detect string truncation
pplupo Jul 7, 2026
2f315d8
Use flat extension list and include okular generators
pplupo Jul 7, 2026
1f5924b
Fix truncation by chopping preferredSuffix at last dot
pplupo Jul 7, 2026
0c7a936
Revert to full glob patterns with unique set to test truncation again
pplupo Jul 7, 2026
7459f94
Restore preferredSuffix logic
pplupo Jul 7, 2026
a33d722
Implement smart packing with priority list
pplupo Jul 7, 2026
dec9eb4
Add Fortran, Perl, Makefile, and LaTeX extensions to priority list
pplupo Jul 7, 2026
ab295bc
Fix markdownpart loading scrolled to bottom
pplupo Jul 7, 2026
22769f3
revert focus refactor and add Ctrl+Q shortcut with compiled binary
pplupo Jul 6, 2026
3216969
Dynamically generate detect string from Kate mime types
pplupo Jul 8, 2026
f6390bf
kpart: persist zoom settings, fix mutual exclusion, add Ctrl+Shift+S
pplupo Jul 9, 2026
4c924dc
Migrate office viewing plugin to Qt6 and add OnlyOffice support
pplupo Jul 12, 2026
3e435fb
Fix x2t fallback, LOK invisible characters, and render all slides lazily
pplupo Jul 13, 2026
d13d954
Add conversion logs and auto-populate configuration defaults
pplupo Jul 13, 2026
70cf71b
Fix x2t headless font paths and working directory
pplupo Jul 13, 2026
f33f27f
Fix LOKit shutdown hang and handle x2t non-fatal exit codes
pplupo Jul 13, 2026
ae74572
Fix x2t engine path resolution and LOKit atexit crash
pplupo Jul 13, 2026
b86f060
Add EngineForLegacyMS configuration option
pplupo Jul 13, 2026
a423a72
Fix officeview focus handling, per-sheet pagination, and config layout
pplupo Jul 14, 2026
9592fad
Replace QPdfView with MuPDF for real click-drag text selection
pplupo Jul 14, 2026
beca5a7
Add README documenting engine detection, config, and known limitations
pplupo Jul 14, 2026
ab9f0a3
Merge branch 'doublecmd:master' into officeview
pplupo Jul 14, 2026
e7b4072
Add Google Drive support to officeview via rclone stub export
pplupo Jul 14, 2026
355b491
Merge branch 'doublecmd:master' into dbview
pplupo Jul 15, 2026
38f714f
dbview: enable RTTI when building RocksDB
pplupo Jul 15, 2026
83bf7cb
Fix: statically link mupdf and fix x2t headless font bug via bwrap
pplupo Jul 27, 2026
c006f56
fix(wlx/kpart): fix Zoom to Fit checkable action restore behavior wit…
pplupo Jul 31, 2026
76f8a1c
Enhance LogViewerWidget UI spacing, search/filter logic, and datetime…
pplupo Aug 3, 2026
13d0c59
Enable text selection and fix popup focus for Okular
pplupo Aug 11, 2026
7d69806
Update compiled kpart plugin
pplupo Aug 11, 2026
97329f6
Merge csvview into master
pplupo Aug 13, 2026
100402b
Merge officeview into master
pplupo Aug 13, 2026
11e4336
Merge dbview into master
pplupo Aug 13, 2026
3ea04a0
Merge diagramview into master
pplupo Aug 13, 2026
6b012c8
Merge kate into master
pplupo Aug 13, 2026
1f034d6
Merge kpart into master
pplupo Aug 13, 2026
a957c96
Merge logview into master
pplupo Aug 13, 2026
67a56a5
Merge mdk into master
pplupo Aug 13, 2026
211feb0
Merge mpv_wayland into master
pplupo Aug 13, 2026
ae5bb45
Merge plugin-platform into master
pplupo Aug 13, 2026
d005fea
Merge plugman into master
pplupo Aug 13, 2026
4a9b653
Merge structview into master
pplupo Aug 13, 2026
03f7e53
Fix: Port structview Ctrl+Q shortcut to new architecture
pplupo Aug 13, 2026
03a23ea
dbview: static/vendored duckdb, lmdb, Berkeley DB; de-Qtify SQLite/Fi…
pplupo Aug 14, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 4 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
[submodule "plugin-platform"]
path = plugin-platform
url = https://github.com/pplupo/doublecmd_plugins
branch = plugin-platform
46 changes: 46 additions & 0 deletions build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,38 @@ install -m 644 wdx/mediainfo/luajit/*.lua release/wdx/mediainfo/
install -m 644 wdx/translitwdx/translitwdx.lua release/wdx/translitwdx/
install -m 644 wdx/translitwdx/readme.txt release/wdx/translitwdx/

# jsonview
mkdir -p release/wlx/jsonview
make -C wlx/jsonview/src clean all
install -m 644 wlx/jsonview/jsonview_qt6.wlx release/wlx/jsonview/
cp -r wlx/jsonview/langs release/wlx/jsonview/
install -m 644 wlx/jsonview/*.md release/wlx/jsonview/
install -m 644 wlx/jsonview/*.png release/wlx/jsonview/

# csvview
mkdir -p release/wlx/csvview
mkdir -p wlx/csvview/build
(cd wlx/csvview/build && cmake .. && make)
install -m 644 wlx/csvview/build/csvview_qt6.wlx release/wlx/csvview/
cp -r wlx/csvview/langs release/wlx/csvview/
install -m 644 wlx/csvview/*.md release/wlx/csvview/
install -m 644 wlx/csvview/*.png release/wlx/csvview/

# kpart
mkdir -p release/wlx/kpart
mkdir -p wlx/kpart/build
(cd wlx/kpart/build && cmake .. && make)
install -m 644 wlx/kpart/build/kpart_host_qt6.wlx release/wlx/kpart/
install -m 644 wlx/kpart/*.md release/wlx/kpart/
install -m 644 wlx/kpart/*.png release/wlx/kpart/

# officeview
mkdir -p release/wlx/officeview
mkdir -p wlx/officeview/build
(cd wlx/officeview/build && cmake .. && make)
install -m 644 wlx/officeview/build/officeview.wlx release/wlx/officeview/
install -m 644 wlx/officeview/*.md release/wlx/officeview/

# logview
mkdir -p release/wlx/logview
mkdir -p wlx/logview/build
Expand All @@ -96,6 +128,20 @@ install -m 644 wlx/kate/build/rich_editor_qt.wlx release/wlx/kate/
install -m 644 wlx/kate/*.md release/wlx/kate/
install -m 644 wlx/kate/*.png release/wlx/kate/

# diagramview
mkdir -p release/wlx/diagramview
make -C wlx/diagramview/src clean all
install -m 644 wlx/diagramview/diagramview_qt6.wlx release/wlx/diagramview/
install -m 644 wlx/diagramview/config.json release/wlx/diagramview/
install -m 644 wlx/diagramview/*.md release/wlx/diagramview/
install -m 644 wlx/diagramview/*.png release/wlx/diagramview/

# mdk
mkdir -p release/wlx/mdk
make -C wlx/mdk clean all
install -m 644 wlx/mdk/wlx_mdk_wayland.wlx release/wlx/mdk/
install -m 644 wlx/mdk/*.md release/wlx/mdk/

pushd release
tar -czpf ../plugins-$(date +%y.%m.%d)-$ARCH.tar.gz *
popd
1 change: 1 addition & 0 deletions plugin-platform
Submodule plugin-platform added at 96e6e7
12 changes: 12 additions & 0 deletions plugman/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
lib/
backup/
*.o
*.ppu
*.compiled
*.exe
*.res
plugman
link*.res
*.lps
test/test_core
test/test_core.o
42 changes: 42 additions & 0 deletions plugman/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# Double Commander Plugin Manager

Standalone Lazarus/Qt6 plugin manager for [Double Commander](https://doublecmd.sourceforge.io/).

## Features

- **Install** — extract archives, copy plugin binaries, register in `doublecmd.xml`
- **Uninstall** — remove XML nodes and plugin directories
- **Enable / Disable** — relocate nodes to `<DisabledPlugins>` (with JSON reconciliation)
- **Ordering** — reorder plugin priority in XML
- **Tweak** — WCX `<Flags>` bitmask and WLX/WDX `<DetectString>` editing
- **Updates** — URL binding, HTTP HEAD polling, backup/rollback
- **Restart** — graceful DC shutdown before config writes

Metadata (URLs, ETags, rollback state) is stored in `~/.config/doublecmd/plugman.json`.

## Build

Requirements: Lazarus 3.x / FPC 3.2+, `libQt6Pas`, OpenSSL.

```bash
cd doublecmd_plugman
lazbuild --build-mode=Release --widgetset=qt6 plugman.lpi
```

Run `./plugman`.

## Configuration

Settings are stored in `~/.config/doublecmd/plugman.ini`. Override:

- Config directory (where `doublecmd.xml` lives)
- Commander path / executable
- External editor for plugin `.ini`/`.conf` files

## JSON schema

See `default/plugman.json` for the template.

## Platform

Primary target: **Linux / Qt6 / Wayland**.
5 changes: 5 additions & 0 deletions plugman/default/plugman.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"schema_version": 1,
"last_updated": "2026-06-16T00:00:00Z",
"plugins": []
}
178 changes: 178 additions & 0 deletions plugman/plugman.lpi
Original file line number Diff line number Diff line change
@@ -0,0 +1,178 @@
<?xml version="1.0" encoding="UTF-8"?>
<CONFIG>
<ProjectOptions>
<Version Value="12"/>
<PathDelim Value="/"/>
<General>
<Flags>
<CompatibilityMode Value="True"/>
</Flags>
<SessionStorage Value="InProjectDir"/>
<AutoCreateForms Value="True"/>
<Title Value="Double Commander Plugin Manager"/>
<Scaled Value="True"/>
<ResourceType Value="res"/>
</General>
<BuildModes Count="2">
<Item1 Name="Debug" Default="True"/>
<Item2 Name="Release">
<CompilerOptions>
<Version Value="11"/>
<Target>
<Filename Value="plugman"/>
</Target>
<SearchPaths>
<OtherUnitFiles Value="src;src/core;src/ops;src/update;src/ui"/>
<UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)-$(LCLWidgetType)"/>
</SearchPaths>
<CodeGeneration>
<SmartLinkUnit Value="True"/>
<Optimizations>
<OptimizationLevel Value="3"/>
</Optimizations>
</CodeGeneration>
<Linking>
<Debugging>
<GenerateDebugInfo Value="False"/>
</Debugging>
</Linking>
<LCLWidgetType Value="qt6"/>
</CompilerOptions>
</Item2>
</BuildModes>
<RequiredPackages Count="1">
<Item1>
<PackageName Value="LCL"/>
</Item1>
</RequiredPackages>
<Units Count="21">
<Unit0>
<Filename Value="plugman.lpr"/>
<IsPartOfProject Value="True"/>
</Unit0>
<Unit1>
<Filename Value="src/uMainForm.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="frmMain"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="uMainForm"/>
</Unit1>
<Unit2>
<Filename Value="src/core/uPluginTypes.pas"/>
<IsPartOfProject Value="True"/>
</Unit2>
<Unit3>
<Filename Value="src/core/uDcPaths.pas"/>
<IsPartOfProject Value="True"/>
</Unit3>
<Unit4>
<Filename Value="src/core/uPlugmanJson.pas"/>
<IsPartOfProject Value="True"/>
</Unit4>
<Unit5>
<Filename Value="src/core/uDcXml.pas"/>
<IsPartOfProject Value="True"/>
</Unit5>
<Unit6>
<Filename Value="src/core/uPluginScanner.pas"/>
<IsPartOfProject Value="True"/>
</Unit6>
<Unit7>
<Filename Value="src/ops/uDcRestart.pas"/>
<IsPartOfProject Value="True"/>
</Unit7>
<Unit8>
<Filename Value="src/ops/uPluginInstall.pas"/>
<IsPartOfProject Value="True"/>
</Unit8>
<Unit9>
<Filename Value="src/ops/uPluginUninstall.pas"/>
<IsPartOfProject Value="True"/>
</Unit9>
<Unit10>
<Filename Value="src/ops/uPluginEnable.pas"/>
<IsPartOfProject Value="True"/>
</Unit10>
<Unit11>
<Filename Value="src/ops/uPluginOrder.pas"/>
<IsPartOfProject Value="True"/>
</Unit11>
<Unit12>
<Filename Value="src/ops/uPluginTweak.pas"/>
<IsPartOfProject Value="True"/>
</Unit12>
<Unit13>
<Filename Value="src/update/uHttpCheck.pas"/>
<IsPartOfProject Value="True"/>
</Unit13>
<Unit14>
<Filename Value="src/update/uPluginUpdate.pas"/>
<IsPartOfProject Value="True"/>
</Unit14>
<Unit15>
<Filename Value="src/update/uPluginRollback.pas"/>
<IsPartOfProject Value="True"/>
</Unit15>
<Unit16>
<Filename Value="src/ui/fTweakPacker.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="frmTweakPacker"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
</Unit16>
<Unit17>
<Filename Value="src/ui/fTweakLister.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="frmTweakLister"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
</Unit17>
<Unit18>
<Filename Value="src/ui/fUpdateConfirm.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="frmUpdateConfirm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
</Unit18>
<Unit19>
<Filename Value="src/ui/fUrlBind.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="frmUrlBind"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
</Unit19>
<Unit20>
<Filename Value="src/ui/fSettings.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="frmSettings"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
</Unit20>
</Units>
</ProjectOptions>
<CompilerOptions>
<Version Value="11"/>
<Target>
<Filename Value="plugman"/>
</Target>
<SearchPaths>
<OtherUnitFiles Value="src;src/core;src/ops;src/update;src/ui"/>
<UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)-$(LCLWidgetType)"/>
</SearchPaths>
<Parsing>
<SyntaxOptions>
<SyntaxMode Value="Delphi"/>
<AllowNestedProcVars Value="True"/>
</SyntaxOptions>
</Parsing>
<CodeGeneration>
<TargetCPU Value="x86_64"/>
<TargetOS Value="linux"/>
</CodeGeneration>
<LCLWidgetType Value="qt6"/>
</CompilerOptions>
<Debugging>
<IncludeSystemVars Value="True"/>
</Debugging>
</CONFIG>
20 changes: 20 additions & 0 deletions plugman/plugman.lpr
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
program plugman;

{$mode objfpc}{$H+}

uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Interfaces,
Forms,
uMainForm;

begin
RequireDerivedFormResource := True;
Application.Scaled := True;
Application.Title := 'Double Commander Plugin Manager';
Application.Initialize;
Application.CreateForm(TfrmMain, frmMain);
Application.Run;
end.
Loading