diff --git a/.gitignore b/.gitignore
index 2a8f86a..7105875 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,3 +3,4 @@ qmldiff
hashchange
.DS_Store
DOC.md
+.opencode/skills/qmd-port/SKILL.md
diff --git a/3.27.3.0/batteryPercentage.qmd b/3.27.3.0/batteryPercentage.qmd
new file mode 100644
index 0000000..111878d
--- /dev/null
+++ b/3.27.3.0/batteryPercentage.qmd
@@ -0,0 +1,14 @@
+AFFECT [[16664384747789373392]]
+ TRAVERSE [[3819512207256720568]] > [[7081645463424]]#[[14500576802168220354]] > [[254494525842443467]] > [[254501558939456351]]#[[16044303013921817534]]
+ LOCATE AFTER ALL
+ INSERT {
+ ~&6503165774&~ {
+ ~&6504315758&~: ~&12464413590283098527&~.~&233722187800420&~.~&8399929542203138183&~ + ~&"180910&~
+ ~&214622605608&~: ~&7082020628281&~.~&8399340017235344933&~
+ ~&6503823200&~.~&254543497768871654&~: 24
+ ~&6014474628714890946&~: ~&6503165774&~.~&14019785292674113803&~
+ ~&7081629735527&~.~&254522510204479688&~: ~&5971598&~.~&14019785292674113803&~
+ }
+ }
+ END TRAVERSE
+END AFFECT
diff --git a/3.27.3.0/clock.qmd b/3.27.3.0/clock.qmd
new file mode 100644
index 0000000..6fccb44
--- /dev/null
+++ b/3.27.3.0/clock.qmd
@@ -0,0 +1,62 @@
+; credit for the original clock implementation: https://github.com/StarNumber12046/xovi-qmd-extensions/blob/main/clock.qmd
+AFFECT /qml/device/view/navigator/Sidebar.qml
+ TRAVERSE DeviceKeyboardNavigationHandler > ColumnLayout#filterColumn
+ LOCATE BEFORE SidebarFilterItem#filterMyFiles
+ INSERT {
+ SidebarFilterItem {
+ id: clockSidebarItem
+ objectName: "clockSidebarObject"
+ title: Qt.formatDateTime(getCestTime(), set_Format_Date)
+ iconSource: "qrc:/ark/icons/system_clock"
+ active: false
+ enabled: true
+
+ /* 1000 = 1 second / 60000 = 1 minute */
+ property int set_Timer: 60000
+ property string set_Format_Date: "dd/MM hh:mm"
+
+ function getCestTime() {
+ return new Date();
+ }
+
+ Component.onCompleted: {
+ title = Qt.formatDateTime(getCestTime(), set_Format_Date);
+ }
+
+ onClicked: {
+
+ if (clockSidebarItem.set_Timer === 60000) {
+ clockSidebarItem.set_Timer = 1000;
+ clockSidebarItem.set_Format_Date = "dd/MM hh:mm:ss";
+ } else {
+ clockSidebarItem.set_Timer = 60000;
+ clockSidebarItem.set_Format_Date = "dd/MM hh:mm";
+ }
+
+ timer.interval = clockSidebarItem.set_Timer
+ clockSidebarItem.title = Qt.formatDateTime(clockSidebarItem.getCestTime(), clockSidebarItem.set_Format_Date);
+ }
+
+ /* Timer for update time */
+ Timer {
+ id: timer
+ interval: clockSidebarItem.set_Timer
+ repeat: true
+ running: true
+
+ onTriggered: {
+ clockSidebarItem.title = Qt.formatDateTime(clockSidebarItem.getCestTime(), clockSidebarItem.set_Format_Date);
+ }
+ }
+
+ Layout.preferredHeight: Values.navigatorSidebarItemHeight
+ Layout.preferredWidth: parent.width
+ navigationHandler: root
+
+ function activate() {
+ toggle();
+ }
+ }
+ }
+ END TRAVERSE
+END AFFECT
diff --git a/3.27.3.0/convertToText_remover.qmd b/3.27.3.0/convertToText_remover.qmd
new file mode 100644
index 0000000..a878604
--- /dev/null
+++ b/3.27.3.0/convertToText_remover.qmd
@@ -0,0 +1,11 @@
+AFFECT [[3197972396468700595]]
+ TRAVERSE [[6502786168]]#[[10742505294233322867]]
+ TRAVERSE [[12395602925408354507]]#[[214642769434]]
+ REMOVE [[425121728314878811.16765000136167945189.7081261925573]]#[[3012293087768835154]]
+ END TRAVERSE
+ END TRAVERSE
+END AFFECT
+
+AFFECT [[3513522976947834303]]
+ REMOVE [[454089850271038938]]
+END AFFECT
diff --git a/3.27.3.0/quickSettingsClock.qmd b/3.27.3.0/quickSettingsClock.qmd
new file mode 100644
index 0000000..bd8afd9
--- /dev/null
+++ b/3.27.3.0/quickSettingsClock.qmd
@@ -0,0 +1,68 @@
+; credit for the original clock implementation: https://github.com/StarNumber12046/xovi-qmd-extensions/blob/main/quickSettingsClock.qmd
+AFFECT [[12542166428983872557]]
+ IMPORT [[7082573613689.5972775.6504315758]] [[180922.180921]]
+
+ TRAVERSE [[7711468349764991]] > [[6502786168]] > [[8397788359424131273]] > [[14125623155555875541]]#[[233718721544006]]
+
+ LOCATE AFTER [[6502786168]] > [[425121728314878811.15389500557572665857]]#[[6026822765657717152]]
+
+ INSERT {
+ ~&6502786168&~ {
+ ~&7081629735527&~.~&17520348323745447649&~: ~&7082020628281&~.~&10286380502125731829&~
+ ~&7081629735527&~.~&8399743405844438450&~: ~&254477762679831355&~.~&214603824602&~.~&7713684474795983&~.~&7713442318223278&~.~&233740248806464&~.~&7083363878252&~
+ ~&7081629735527&~.~&499747351624466981&~: ~&254477762679831355&~.~&214603824602&~.~&7713684474795983&~.~&7713442318223278&~.~&233740248806464&~.~&7083363878252&~
+ ~&7081629735527&~.~&254529418434902000&~: ~&6504329801&~
+
+ ~&14397210151462632996&~ {
+ ~&5972374&~: quickSettingsClock
+ ~&233721384511543&~ {
+ ~&6504027668&~: ~&7083038346995&~.~&6504027668&~
+ ~&3441383163516681764&~: ~&7083038346995&~.~&3441383163516681764&~
+ }
+
+ property ~&6503679477&~ showSeconds: ~&214625660372&~
+ property ~&7083178290016&~ minuteFormat: "dd/MM hh:mm"
+ property ~&7083178290016&~ secondFormat: "dd/MM hh:mm:ss"
+ property ~&197088788&~ minuteInterval: 60000
+ property ~&197088788&~ secondInterval: 1000
+
+ ~&6504315758&~: ~&5971598&~.~&6460516198169535423&~( new ~&6502586279&~(), minuteFormat)
+
+ function updateClock() {
+ ~&6504315758&~ = ~&5971598&~.~&6460516198169535423&~( new ~&6502586279&~(), showSeconds ? secondFormat : minuteFormat);
+ }
+
+ ~&254480451320573660&~.~&495334332051582499&~: {
+ updateClock();
+ }
+
+ onShowSecondsChanged: {
+ quickSettingsClockTimer.~&233743006639214&~();
+ updateClock();
+ }
+
+ ~&214604601930&~ {
+ ~&5972374&~: quickSettingsClockTimer
+ ~&7713147298280334&~: quickSettingsClock.showSeconds ? quickSettingsClock.secondInterval : quickSettingsClock.minuteInterval
+ ~&7083121289162&~: ~&6504329801&~
+ ~&233743626668842&~: ~&6504329801&~
+
+ ~&495358363329399331&~: {
+ quickSettingsClock.updateClock();
+ }
+ }
+
+ ~&254494525842443467&~ {
+ ~&233721384511543&~.~&6503816592&~: ~&7083038346995&~
+ ~&477346538929698200&~: ~&5971598&~.PointingHandCursor
+ ~&254542236275632405&~: {
+ quickSettingsClock.showSeconds = !quickSettingsClock.showSeconds;
+ }
+ }
+ }
+ }
+ }
+
+ END TRAVERSE
+
+END AFFECT
diff --git a/3.27.3.0/uncompressDock.qmd b/3.27.3.0/uncompressDock.qmd
new file mode 100644
index 0000000..3c6b361
--- /dev/null
+++ b/3.27.3.0/uncompressDock.qmd
@@ -0,0 +1,89 @@
+; ported from 3.23.0.64
+; In 3.22/3.23 the create buttons were emitted by a C++ Repeater (not QML).
+; By 3.27 the firmware migrated to a QML Repeater backed by createWidgets model,
+; so this QMD was rewritten: it keeps the Repeater (search, calendar, quick-sheet)
+; and inserts the notebook, folder and quick-sheet buttons inline after it.
+AFFECT [[13636194074538366841]]
+ TRAVERSE [[6502786168]]#[[6504254477]]
+ TRAVERSE [[254501108490678590]]#[[16596251247453125840]] > [[254501558939456351]]#[[6391657810197849963]]
+ LOCATE AFTER ALL
+ INSERT {
+ ~&254501108490678590&~ {
+ ~&7081629735527&~.~&8399470807760157065&~: ~&6504329801&~
+ ~&7081629735527&~.~&16239278111605497701&~: 2
+ ~&214622605608&~: ~&"214621299494&~
+ ~&233748328658231&~: ~&6504254477&~.~&6504391364&~ === ~&"233737316206498&~ || ~&6504254477&~.~&6504391364&~ === ~&"7834776425552261693&~
+ }
+ ~&254494525842443467&~ {
+ ~&5972374&~: _notebookBtn
+ ~&7081629735527&~.~&254522510204479688&~: ~&5971598&~.~&14019785274593562237&~
+ ~&7081629735527&~.~&16239278111605497701&~: 64
+ ~&7081629735527&~.~&8399470807760157065&~: ~&6504329801&~
+ ~&7081629735527&~.~&8399743405844438450&~: 40
+ ~&233748328658231&~: ~&6504254477&~.~&6504391364&~ === ~&"233737316206498&~ || ~&6504254477&~.~&6504391364&~ === ~&"7834776425552261693&~
+ ~&14125623155555875541&~ {
+ ~&233721384511543&~.~&7712879746914881&~: ~&7083038346995&~
+ ~&233744706647566&~: 0
+ ~&425121728314878811&~.~&6502767986&~ {
+ ~&7081629735527&~.~&254522510204479688&~: ~&5971598&~.~&14019785274593562237&~
+ ~&6504284228&~: ~&425121728314878811&~.~&7082020628281&~.~&7713132906001613&~.~&7082925185962&~
+ ~&7083172477658&~: ~&"8609871731041592465&~
+ }
+ }
+ ~&254542236275632405&~: {
+ ~&197102514&~ ~&197093806&~ = ~&7083038346995&~.~&7083038346995&~.~&7083038346995&~.~&7083038346995&~;
+ ~&197093806&~.~&11689254259907176254&~();
+ }
+ }
+ ~&254494525842443467&~ {
+ ~&5972374&~: _folderBtn
+ ~&7081629735527&~.~&254522510204479688&~: ~&5971598&~.~&14019785274593562237&~
+ ~&7081629735527&~.~&16239278111605497701&~: 64
+ ~&7081629735527&~.~&8399470807760157065&~: ~&6504329801&~
+ ~&7081629735527&~.~&8399743405844438450&~: 40
+ ~&233748328658231&~: ~&6504254477&~.~&6504391364&~ === ~&"233737316206498&~
+ ~&14125623155555875541&~ {
+ ~&233721384511543&~.~&7712879746914881&~: ~&7083038346995&~
+ ~&233744706647566&~: 0
+ ~&425121728314878811&~.~&6502767986&~ {
+ ~&7081629735527&~.~&254522510204479688&~: ~&5971598&~.~&14019785274593562237&~
+ ~&6504284228&~: ~&425121728314878811&~.~&7082020628281&~.~&7713132906001613&~.~&7082925185962&~
+ ~&7083172477658&~: ~&"1888152859110688812&~
+ }
+ }
+ ~&254542236275632405&~: {
+ ~&197102514&~ ~&197093806&~ = ~&7083038346995&~.~&7083038346995&~.~&7083038346995&~.~&7083038346995&~;
+ ~&197093806&~.~&1343967321191992457&~(~&"477188259920763378&~);
+ }
+ }
+ ~&254494525842443467&~ {
+ ~&5972374&~: _quickSheetBtn
+ ~&7081629735527&~.~&254522510204479688&~: ~&5971598&~.~&14019785274593562237&~
+ ~&7081629735527&~.~&16239278111605497701&~: 64
+ ~&7081629735527&~.~&8399470807760157065&~: ~&6504329801&~
+ ~&7081629735527&~.~&8399743405844438450&~: 40
+ ~&7081629735527&~.~&499747351624466981&~: 40
+ ~&233748328658231&~: ~&6504254477&~.~&6504391364&~ !== ~&"214642862219&~
+ ~&14125623155555875541&~ {
+ ~&233721384511543&~.~&7712879746914881&~: ~&7083038346995&~
+ ~&233744706647566&~: 0
+ ~&425121728314878811&~.~&6502767986&~ {
+ ~&7081629735527&~.~&254522510204479688&~: ~&5971598&~.~&14019785274593562237&~
+ ~&6504284228&~: ~&425121728314878811&~.~&7082020628281&~.~&7713132906001613&~.~&7082925185962&~
+ ~&7083172477658&~: ~&"5726907772531472741&~
+ }
+ }
+ ~&254542236275632405&~: {
+ ~&197102514&~ doc = ~&2918312801265623842&~.~&498775298796480658&~();
+ ~&5972376&~ (doc && doc.~&6504337259&~ === 1) {
+ ~&197102514&~ ~&197093806&~ = ~&7083038346995&~.~&7083038346995&~.~&7083038346995&~.~&7083038346995&~;
+ ~&197093806&~.~&2766288418351025740&~.~&6504147419&~(~&"80852525132738217&~, {
+ ~&8399386052748489877&~: doc.~&5972374&~,
+ ~&6504167078&~: doc.~&254543134818768527&~ - 1
+ });
+ }
+ }
+ }
+ }
+ END TRAVERSE
+END AFFECT
diff --git a/README.md b/README.md
index d084d4f..b223681 100644
--- a/README.md
+++ b/README.md
@@ -20,41 +20,66 @@ Beta releases are not tested nor supported.
## Extensions
+### Version 3.27.3.0
+
+#### `batteryPercentage.qmd`
+- Shows the battery percentage next to the battery icon in the main view header.
+
+
+
+#### `clock.qmd`
+- Adds a live clock to the library sidebar; tap the entry to toggle seconds display.
+
+
+
+Note: You have to set the right timezone on the tablet (you can use [reManager](https://github.com/rmitchellscott/reManager) to set it)
+
+#### `convertToText_remover.qmd`
+- Removes the `Convert to text` option from selection menus and the toolbar (ported from 3.23.0.64).
+
+
+
+#### `uncompressDock.qmd`
+- Replaces the widget-based create menu with dedicated buttons for notebook, folder, and quick sheet creation.
+- **Rewritten** for the new `HomeScreen.CreateMenu` — the old `Navigator.CreateMenu` is no longer used in 3.27.
+- Note: Notebook and Folder use Navigator methods; Quicksheet uses `LibraryController` (experimental).
+
+
+
+#### `quickSettingsClock.qmd`
+- Injects a tappable clock into the Quick Settings header; tap to toggle between minute and second precision.
+
+
+
+### `tagButton.qmd` & `favoriteButton.qmd`
+- Those tweaks have been implemented by the reMarkable team in the latest update, so they are no longer needed :)
+
### Version 3.23.0.64
#### `clock.qmd`
- Adds a live clock to the library sidebar; tap the entry to toggle seconds display.
-
-
-Note: You can add a timezone by editing the `clock.qmd` file and changing the timezone string in the line:
-```
-~&197102514&~ utc = now.getTime() + (now.getTimezoneOffset() * 60000);
-```
#### `quickSettingsClock.qmd`
- Injects a tappable clock into the Quick Settings header; tap to toggle between minute and second precision.
-
-Note: You can add a timezone by editing the `quickSettingsClock.qmd`, see above for details.
#### `forceSync.qmd`
- Adds a cloud button in Quick Settings that forces a library sync when tapped (need further testing to confirm it works as intended).
-
+
#### `favoriteButton.qmd`
- Restores a `Favorite` action in the document list header for faster pinning.
-
+
#### `tagButton.qmd`
- Puts a `Tag` action next to other list controls to open the tag editor directly.
-
+
#### `convertToText_remover.qmd`
- Removes the `Convert to text` option from selection menus and the toolbar.
-
#### `uncompressDock.qmd`
- Replaces the condensed `More` menu in the new document dock with dedicated buttons for notebook, folder, and quick sheet creation.
-
+
#### `hideDocumentClose.qmd`
- Hides the close button in the document toolbar to prevent accidental exits.
\ No newline at end of file
diff --git a/images/batteryPercentage.png b/images/batteryPercentage.png
new file mode 100644
index 0000000..ab20c77
Binary files /dev/null and b/images/batteryPercentage.png differ
diff --git a/images/clock_1.png b/images/clock_1.png
index 9892eec..8dff42c 100644
Binary files a/images/clock_1.png and b/images/clock_1.png differ
diff --git a/images/clock_2.png b/images/clock_2.png
index a9e023a..6740c04 100644
Binary files a/images/clock_2.png and b/images/clock_2.png differ
diff --git a/images/convertToText_remover.png b/images/convertToText_remover.png
index 203dc28..c8ff513 100644
Binary files a/images/convertToText_remover.png and b/images/convertToText_remover.png differ
diff --git a/images/quickSettingsClock.png b/images/quickSettingsClock.png
index e595603..f2b601e 100644
Binary files a/images/quickSettingsClock.png and b/images/quickSettingsClock.png differ
diff --git a/images/uncompressDock.png b/images/uncompressDock.png
index a8d41ff..5dee4a8 100644
Binary files a/images/uncompressDock.png and b/images/uncompressDock.png differ
diff --git a/images/uncompressDock_old.png b/images/uncompressDock_old.png
new file mode 100644
index 0000000..a8d41ff
Binary files /dev/null and b/images/uncompressDock_old.png differ