2
0
mirror of https://github.com/koreader/koreader synced 2024-11-10 01:10:34 +00:00
koreader/doc/Hacking.md
NiLuJe 2d12f8a8ee Mention that arguments are always evaluated, to curb enthusiasm at
putting too much fancy stuff in a logger call ;).

(Not actually an issue in our current codebase).
2021-08-09 02:32:58 +02:00

1.5 KiB

Hacking

How to Debug

We have a helper function called logger.dbg to help with debugging. You can use that function to print string and tables:

local logger = require("logger")
a = {"1", "2", "3"}
logger.dbg("table a: ", a)

Anything printed by logger.dbg starts with DEBUG.

04/06/17-21:44:53 DEBUG foo

In production code, remember that arguments are always evaluated in Lua, so, don't inline complex computations in logger functions' arguments. If you really have to, hide the whole thing behind a dbg.is_on branch, like in frontend/device/input.lua.

Bug hunting in KPV (KOReader's predecessor)

A real example of bug hunting in KPV's cache system: https://github.com/koreader/kindlepdfviewer/pull/475

Developing UI widgets

tools/wbuilder.lua is your friend, if you need to create new UI widgets. It sets up a minimal environment to bootstrap KOReader's UI framework to avoid starting the whole reader. This gives you quick feedback loop while iterating through your widget changes. It's also a handy tool for debugging widget issues.

To get a taste of how it works, try running this command at the root of KOReader's source tree:

./kodev wbuilder

It will spawn up an emulator window with a grid and simple timer widget for demonstration.

You can add more UIManager:show call at the end of tools/wbuilder.lua to test your new widgets.