diff options
author | Thiago de Arruda <tpadilha84@gmail.com> | 2014-05-10 23:36:49 -0300 |
---|---|---|
committer | Thiago de Arruda <tpadilha84@gmail.com> | 2014-05-13 14:11:27 -0300 |
commit | 0e3aa877c05c162807ed4da665b35c75c53fc639 (patch) | |
tree | 3d788901bd6c7d0c6725d6ec5f03a5af17115365 /src/api/buffer.c | |
parent | 978755eb90391e25cbb596dc562923680464325e (diff) | |
download | rneovim-0e3aa877c05c162807ed4da665b35c75c53fc639.tar.gz rneovim-0e3aa877c05c162807ed4da665b35c75c53fc639.tar.bz2 rneovim-0e3aa877c05c162807ed4da665b35c75c53fc639.zip |
API: Implement buffer_{get,set}_name
Diffstat (limited to 'src/api/buffer.c')
-rw-r--r-- | src/api/buffer.c | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/src/api/buffer.c b/src/api/buffer.c index a8a16ecf8f..956c88dd75 100644 --- a/src/api/buffer.c +++ b/src/api/buffer.c @@ -12,7 +12,9 @@ #include "memory.h" #include "misc1.h" #include "misc2.h" +#include "ex_cmds.h" #include "mark.h" +#include "fileio.h" #include "move.h" #include "../window.h" #include "undo.h" @@ -269,12 +271,43 @@ void buffer_set_option(Buffer buffer, String name, Object value, Error *err) String buffer_get_name(Buffer buffer, Error *err) { - abort(); + String rv = {.size = 0, .data = ""}; + buf_T *buf = find_buffer(buffer, err); + + if (!buf || buf->b_ffname == NULL) { + return rv; + } + + rv.data = xstrdup((char *)buf->b_ffname); + rv.size = strlen(rv.data); + return rv; } void buffer_set_name(Buffer buffer, String name, Error *err) { - abort(); + buf_T *buf = find_buffer(buffer, err); + + if (!buf) { + return; + } + + aco_save_T aco; + int ren_ret; + char *val = xstrndup(name.data, name.size); + + try_start(); + // Using aucmd_*: autocommands will be executed by rename_buffer + aucmd_prepbuf(&aco, buf); + ren_ret = rename_buffer((char_u *)val); + aucmd_restbuf(&aco); + + if (try_end(err)) { + return; + } + + if (ren_ret == FAIL) { + set_api_error("failed to rename buffer", err); + } } bool buffer_is_valid(Buffer buffer) |