diff options
Diffstat (limited to 'src/nvim/mark.h')
-rw-r--r-- | src/nvim/mark.h | 46 |
1 files changed, 41 insertions, 5 deletions
diff --git a/src/nvim/mark.h b/src/nvim/mark.h index ec6862b38f..2c1bf7c73c 100644 --- a/src/nvim/mark.h +++ b/src/nvim/mark.h @@ -1,15 +1,21 @@ #pragma once +#include <locale.h> + #include "nvim/ascii_defs.h" #include "nvim/ex_cmds_defs.h" // IWYU pragma: keep #include "nvim/extmark_defs.h" // IWYU pragma: keep #include "nvim/func_attr.h" #include "nvim/macros_defs.h" #include "nvim/mark_defs.h" // IWYU pragma: export +#include "nvim/os/time.h" + +#ifdef INCLUDE_GENERATED_DECLARATIONS +# include "mark.h.generated.h" +#endif static inline int mark_global_index(char name) REAL_FATTR_CONST; - /// Convert mark name to the offset static inline int mark_global_index(const char name) { @@ -22,7 +28,6 @@ static inline int mark_global_index(const char name) static inline int mark_local_index(char name) REAL_FATTR_CONST; - /// Convert local mark name to the offset static inline int mark_local_index(const char name) { @@ -40,6 +45,37 @@ static inline int mark_local_index(const char name) /// Global marks (marks with file number or name) EXTERN xfmark_T namedfm[NGLOBALMARKS] INIT( = { 0 }); -#ifdef INCLUDE_GENERATED_DECLARATIONS -# include "mark.h.generated.h" -#endif +#define SET_FMARK(fmarkp_, mark_, fnum_, view_) \ + do { \ + fmark_T *const fmarkp__ = fmarkp_; \ + fmarkp__->mark = mark_; \ + fmarkp__->fnum = fnum_; \ + fmarkp__->timestamp = os_time(); \ + fmarkp__->view = view_; \ + fmarkp__->additional_data = NULL; \ + } while (0) + +/// Free and set fmark using given value +#define RESET_FMARK(fmarkp_, mark_, fnum_, view_) \ + do { \ + fmark_T *const fmarkp___ = fmarkp_; \ + free_fmark(*fmarkp___); \ + SET_FMARK(fmarkp___, mark_, fnum_, view_); \ + } while (0) + +/// Set given extended mark (regular mark + file name) +#define SET_XFMARK(xfmarkp_, mark_, fnum_, view_, fname_) \ + do { \ + xfmark_T *const xfmarkp__ = xfmarkp_; \ + xfmarkp__->fname = fname_; \ + SET_FMARK(&(xfmarkp__->fmark), mark_, fnum_, view_); \ + } while (0) + +/// Free and set given extended mark (regular mark + file name) +#define RESET_XFMARK(xfmarkp_, mark_, fnum_, view_, fname_) \ + do { \ + xfmark_T *const xfmarkp__ = xfmarkp_; \ + free_xfmark(*xfmarkp__); \ + xfmarkp__->fname = fname_; \ + SET_FMARK(&(xfmarkp__->fmark), mark_, fnum_, view_); \ + } while (0) |