i_command_target.hpp 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. #pragma once
  2. #include "lumacs/buffer.hpp"
  3. #include "lumacs/window.hpp"
  4. #include "lumacs/config.hpp"
  5. #include "lumacs/theme.hpp"
  6. #include <string>
  7. #include <memory>
  8. #include <vector>
  9. #include <optional>
  10. #include <filesystem>
  11. namespace lumacs {
  12. // Forward declarations
  13. class LuaApi;
  14. class KillRing;
  15. class KeyBindingManager;
  16. class ModelineManager;
  17. class MinibufferManager;
  18. class CommandSystem;
  19. class CompletionSystem;
  20. /// @brief Interface defining the essential editor services that commands can interact with.
  21. /// This interface aims to reduce the direct coupling of CommandSystem and individual commands
  22. /// to the entire EditorCore class, making them more testable and modular.
  23. class ICommandTarget {
  24. public:
  25. virtual ~ICommandTarget() = default;
  26. // Buffer Management
  27. virtual const Buffer& buffer() const noexcept = 0;
  28. virtual Buffer& buffer() noexcept = 0;
  29. virtual bool load_file(const std::filesystem::path& path) = 0;
  30. virtual void new_buffer(std::string name = "*scratch*") = 0;
  31. virtual std::vector<std::string> get_buffer_names() const = 0;
  32. virtual std::shared_ptr<Buffer> get_buffer_by_name(const std::string& name) = 0;
  33. virtual bool switch_buffer_in_window(const std::string& name) = 0;
  34. virtual bool close_buffer(const std::string& name) = 0;
  35. // Window Management
  36. virtual std::shared_ptr<Window> active_window() const = 0;
  37. virtual bool set_active_window(std::shared_ptr<Window> window) = 0;
  38. virtual void split_horizontally() = 0;
  39. virtual void split_vertically() = 0;
  40. virtual void close_active_window() = 0;
  41. virtual void next_window() = 0;
  42. // Cursor Management
  43. virtual Position cursor() const noexcept = 0;
  44. virtual void set_cursor(Position pos) = 0;
  45. // Basic Editing (proxied from EditorCore for commands)
  46. virtual void move_up() = 0;
  47. virtual void move_down() = 0;
  48. virtual void move_left() = 0;
  49. virtual void move_right() = 0;
  50. virtual void move_to_line_start() = 0;
  51. virtual void move_to_line_end() = 0;
  52. virtual void move_forward_word() = 0;
  53. virtual void move_backward_word() = 0;
  54. virtual void page_up() = 0;
  55. virtual void page_down() = 0;
  56. virtual void goto_beginning() = 0;
  57. virtual void goto_end() = 0;
  58. virtual void goto_line(size_t line) = 0;
  59. virtual void kill_line() = 0;
  60. virtual void kill_region() = 0;
  61. virtual void copy_region_as_kill() = 0;
  62. virtual void yank() = 0;
  63. virtual void yank_pop() = 0;
  64. virtual void kill_word() = 0;
  65. virtual void backward_kill_word() = 0;
  66. // Message Display
  67. virtual void set_message(std::string msg) = 0;
  68. // Quit
  69. virtual void request_quit() = 0;
  70. // Configuration
  71. virtual Config& config() = 0;
  72. virtual const Config& config() const = 0;
  73. // Theme Management
  74. virtual ThemeManager& theme_manager() = 0;
  75. virtual const ThemeManager& theme_manager() const = 0;
  76. };
  77. } // namespace lumacs