neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

register.h (1970B)


      1 #pragma once
      2 
      3 #include "nvim/ascii_defs.h"
      4 #include "nvim/ex_cmds_defs.h"
      5 #include "nvim/macros_defs.h"
      6 #include "nvim/register_defs.h"
      7 
      8 #include "register.h.generated.h"
      9 #include "register.h.inline.generated.h"
     10 
     11 /// @see get_yank_register
     12 /// @return  true when register should be inserted literally
     13 /// (selection or clipboard)
     14 static inline bool is_literal_register(const int regname)
     15  FUNC_ATTR_CONST
     16 {
     17  return regname == '*' || regname == '+' || ASCII_ISALNUM(regname);
     18 }
     19 
     20 /// Convert register name into register index
     21 ///
     22 /// @param[in]  regname  Register name.
     23 ///
     24 /// @return Index in y_regs array or -1 if register name was not recognized.
     25 static inline int op_reg_index(const int regname)
     26  FUNC_ATTR_CONST
     27 {
     28  if (ascii_isdigit(regname)) {
     29    return regname - '0';
     30  } else if (ASCII_ISLOWER(regname)) {
     31    return CHAR_ORD_LOW(regname) + 10;
     32  } else if (ASCII_ISUPPER(regname)) {
     33    return CHAR_ORD_UP(regname) + 10;
     34  } else if (regname == '-') {
     35    return DELETION_REGISTER;
     36  } else if (regname == '*') {
     37    return STAR_REGISTER;
     38  } else if (regname == '+') {
     39    return PLUS_REGISTER;
     40  } else {
     41    return -1;
     42  }
     43 }
     44 
     45 static inline bool is_append_register(int regname)
     46  FUNC_ATTR_CONST
     47 {
     48  return ASCII_ISUPPER(regname);
     49 }
     50 
     51 /// @return  the character name of the register with the given number
     52 static inline int get_register_name(int num)
     53  FUNC_ATTR_CONST
     54 {
     55  if (num == -1) {
     56    return '"';
     57  } else if (num < 10) {
     58    return num + '0';
     59  } else if (num == DELETION_REGISTER) {
     60    return '-';
     61  } else if (num == STAR_REGISTER) {
     62    return '*';
     63  } else if (num == PLUS_REGISTER) {
     64    return '+';
     65  } else {
     66    return num + 'a' - 10;
     67  }
     68 }
     69 
     70 /// Check whether register is empty
     71 static inline bool reg_empty(const yankreg_T *const reg)
     72  FUNC_ATTR_PURE
     73 {
     74  return (reg->y_array == NULL
     75          || reg->y_size == 0
     76          || (reg->y_size == 1
     77              && reg->y_type == kMTCharWise
     78              && reg->y_array[0].size == 0));
     79 }