aboutsummaryrefslogtreecommitdiff
path: root/src/api/vim.c
diff options
context:
space:
mode:
authorThiago de Arruda <tpadilha84@gmail.com>2014-05-09 18:22:37 -0300
committerThiago de Arruda <tpadilha84@gmail.com>2014-05-13 09:33:41 -0300
commit73dbb97f8e51c77bb553a8af645b728543462d26 (patch)
tree2c989a2c8f3ec4ce74e24f4faef7748f5c8ae2a9 /src/api/vim.c
parent9dd1d2cd003d2567fcd47c8cb54603cc348dec01 (diff)
downloadrneovim-73dbb97f8e51c77bb553a8af645b728543462d26.tar.gz
rneovim-73dbb97f8e51c77bb553a8af645b728543462d26.tar.bz2
rneovim-73dbb97f8e51c77bb553a8af645b728543462d26.zip
API: Implement window/tabpage switching functions
Also moved `find_buffer` to 'api/helpers.c' and removed unnecessary declaration in 'window.h'
Diffstat (limited to 'src/api/vim.c')
-rw-r--r--src/api/vim.c76
1 files changed, 61 insertions, 15 deletions
diff --git a/src/api/vim.c b/src/api/vim.c
index 6b04c4b7a5..bf7db27110 100644
--- a/src/api/vim.c
+++ b/src/api/vim.c
@@ -9,6 +9,7 @@
#include "api/buffer.h"
#include "../vim.h"
#include "../buffer.h"
+#include "../window.h"
#include "types.h"
#include "ascii.h"
#include "ex_docmd.h"
@@ -209,42 +210,87 @@ void vim_set_current_buffer(Buffer buffer, Error *err)
int64_t vim_get_window_count(void)
{
- abort();
-}
+ tabpage_T *tp;
+ win_T *wp;
+ uint64_t rv = 0;
-Window vim_get_window(int64_t num, Error *err)
-{
- abort();
+ FOR_ALL_TAB_WINDOWS(tp, wp) {
+ rv++;
+ }
+
+ return rv;
}
Window vim_get_current_window(void)
{
+ tabpage_T *tp;
+ win_T *wp;
+ Window rv = 1;
+
+ FOR_ALL_TAB_WINDOWS(tp, wp) {
+ if (wp == curwin) {
+ return rv;
+ }
+
+ rv++;
+ }
+
+ // There should always be a current window
abort();
}
-void vim_set_current_window(Window window)
+void vim_set_current_window(Window window, Error *err)
{
- abort();
+ win_T *win = find_window(window, err);
+
+ if (!win) {
+ return;
+ }
+
+ try_start();
+ win_goto(win);
+
+ if (win != curwin) {
+ if (try_end(err)) {
+ return;
+ }
+ set_api_error("did not switch to the specified window", err);
+ return;
+ }
+
+ try_end(err);
}
int64_t vim_get_tabpage_count(void)
{
- abort();
-}
+ tabpage_T *tp = first_tabpage;
+ uint64_t rv = 0;
-Tabpage vim_get_tabpage(int64_t num, Error *err)
-{
- abort();
+ while (tp != NULL) {
+ tp = tp->tp_next;
+ rv++;
+ }
+
+ return rv;
}
Tabpage vim_get_current_tabpage(void)
{
- abort();
+ Tabpage rv = 1;
+ tabpage_T *t;
+
+ for (t = first_tabpage; t != NULL && t != curtab; t = t->tp_next) {
+ rv++;
+ }
+
+ return rv;
}
-void vim_set_current_tabpage(Tabpage tabpage)
+void vim_set_current_tabpage(Tabpage tabpage, Error *err)
{
- abort();
+ try_start();
+ goto_tabpage(tabpage);
+ try_end(err);
}
static void write_msg(String message, bool to_err)