init.lua 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. -- zen-mode for lumacs
  2. -- ============================================================================
  3. -- Distraction-free writing mode. Enables visual-line-mode, increases font
  4. -- size, and provides a cleaner interface for focused writing.
  5. -- ============================================================================
  6. local M = {}
  7. -- Configuration
  8. M.config = {
  9. font_size_increase = 4, -- How much to increase font size
  10. enable_visual_line = true, -- Enable word wrap in zen mode
  11. width = 80, -- Target text width (for future centering)
  12. }
  13. -- State
  14. M.active = false
  15. M.saved_state = {}
  16. -- ============================================================================
  17. -- Core Functions
  18. -- ============================================================================
  19. function M.enable()
  20. if M.active then
  21. return {success = true, message = "Zen mode already active"}
  22. end
  23. -- Save current state
  24. M.saved_state = {
  25. font_size = editor:font_size(),
  26. visual_line_mode = editor:visual_line_mode(),
  27. }
  28. -- Apply zen mode settings
  29. local new_font_size = M.saved_state.font_size + M.config.font_size_increase
  30. editor:set_font_size(new_font_size)
  31. if M.config.enable_visual_line then
  32. editor:set_visual_line_mode(true)
  33. end
  34. M.active = true
  35. return {success = true, message = "Zen mode enabled (font: " .. new_font_size .. ")"}
  36. end
  37. function M.disable()
  38. if not M.active then
  39. return {success = true, message = "Zen mode not active"}
  40. end
  41. -- Restore saved state
  42. if M.saved_state.font_size then
  43. editor:set_font_size(M.saved_state.font_size)
  44. end
  45. if M.saved_state.visual_line_mode ~= nil then
  46. editor:set_visual_line_mode(M.saved_state.visual_line_mode)
  47. end
  48. M.active = false
  49. M.saved_state = {}
  50. return {success = true, message = "Zen mode disabled"}
  51. end
  52. function M.toggle()
  53. if M.active then
  54. return M.disable()
  55. else
  56. return M.enable()
  57. end
  58. end
  59. function M.is_active()
  60. return M.active
  61. end
  62. -- ============================================================================
  63. -- Setup
  64. -- ============================================================================
  65. function M.setup(opts)
  66. opts = opts or {}
  67. -- Merge user config
  68. for k, v in pairs(opts) do
  69. M.config[k] = v
  70. end
  71. -- Register commands
  72. editor:register_command("zen-mode", "Toggle distraction-free writing mode", function(args)
  73. return M.toggle()
  74. end)
  75. editor:register_command("zen-mode-enable", "Enable zen mode", function(args)
  76. return M.enable()
  77. end)
  78. editor:register_command("zen-mode-disable", "Disable zen mode", function(args)
  79. return M.disable()
  80. end)
  81. print("[zen-mode] Package loaded")
  82. end
  83. -- Auto-setup
  84. M.setup()
  85. return M