From 0e3aa877c05c162807ed4da665b35c75c53fc639 Mon Sep 17 00:00:00 2001 From: Thiago de Arruda Date: Sat, 10 May 2014 23:36:49 -0300 Subject: [PATCH] API: Implement buffer_{get,set}_name --- src/api/buffer.c | 37 +++++++++++++++++++++++++++++++++++-- 1 file 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)