diff options
author | Thiago de Arruda <tpadilha84@gmail.com> | 2014-05-11 00:06:39 -0300 |
---|---|---|
committer | Thiago de Arruda <tpadilha84@gmail.com> | 2014-05-13 14:11:31 -0300 |
commit | 60043da29fed70a9d4aa503ae6c73fd6f4e14a40 (patch) | |
tree | c83c395554f471119fd632ddf81100806923554e /src/api/buffer.c | |
parent | 6afc24530539df16738de1697cdf1f3cb5f2e02a (diff) | |
download | rneovim-60043da29fed70a9d4aa503ae6c73fd6f4e14a40.tar.gz rneovim-60043da29fed70a9d4aa503ae6c73fd6f4e14a40.tar.bz2 rneovim-60043da29fed70a9d4aa503ae6c73fd6f4e14a40.zip |
API: Implement `buffer_get_mark`
Diffstat (limited to 'src/api/buffer.c')
-rw-r--r-- | src/api/buffer.c | 36 |
1 files changed, 34 insertions, 2 deletions
diff --git a/src/api/buffer.c b/src/api/buffer.c index 6dde6d6ae0..aeb507ac6e 100644 --- a/src/api/buffer.c +++ b/src/api/buffer.c @@ -321,9 +321,41 @@ void buffer_insert(Buffer buffer, int64_t index, StringArray lines, Error *err) buffer_set_slice(buffer, index, index, false, true, lines, err); } -Position buffer_mark(Buffer buffer, String name, Error *err) +Position buffer_get_mark(Buffer buffer, String name, Error *err) { - abort(); + Position rv; + buf_T *buf = find_buffer(buffer, err); + + if (!buf) { + return rv; + } + + if (name.size != 0) { + set_api_error("mark name must be a single character", err); + return rv; + } + + pos_T *posp; + buf_T *savebuf; + char mark = *name.data; + + try_start(); + switch_buffer(&savebuf, buf); + posp = getmark(mark, false); + restore_buffer(savebuf); + + if (try_end(err)) { + return rv; + } + + if (posp == NULL) { + set_api_error("invalid mark name", err); + return rv; + } + + rv.row = posp->lnum; + rv.col = posp->col; + return rv; } static void switch_to_win_for_buf(buf_T *buf, |