aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThiago de Arruda <tpadilha84@gmail.com>2015-01-13 21:19:59 -0300
committerThiago de Arruda <tpadilha84@gmail.com>2015-01-14 08:31:20 -0300
commit8596776bf68f0e95ba3ff7b5176ef62b56f37f47 (patch)
tree6b9c7e876cb29801e06f8cd97fd5e7ab7663e9fb
parentea771ac559054c138cda58e68daeb286f5c80e80 (diff)
downloadrneovim-8596776bf68f0e95ba3ff7b5176ef62b56f37f47.tar.gz
rneovim-8596776bf68f0e95ba3ff7b5176ef62b56f37f47.tar.bz2
rneovim-8596776bf68f0e95ba3ff7b5176ef62b56f37f47.zip
ui: Implement set_{title,icon}
-rw-r--r--src/nvim/msgpack_rpc/remote_ui.c16
-rw-r--r--src/nvim/os_unix.c13
-rw-r--r--src/nvim/ui.c12
-rw-r--r--src/nvim/ui.h2
-rw-r--r--test/functional/ui/screen.lua10
5 files changed, 49 insertions, 4 deletions
diff --git a/src/nvim/msgpack_rpc/remote_ui.c b/src/nvim/msgpack_rpc/remote_ui.c
index 8350ae252b..361e93a6da 100644
--- a/src/nvim/msgpack_rpc/remote_ui.c
+++ b/src/nvim/msgpack_rpc/remote_ui.c
@@ -98,6 +98,8 @@ static Object remote_ui_attach(uint64_t channel_id, uint64_t request_id,
ui->update_bg = remote_ui_update_bg;
ui->flush = remote_ui_flush;
ui->suspend = remote_ui_suspend;
+ ui->set_title = remote_ui_set_title;
+ ui->set_icon = remote_ui_set_icon;
pmap_put(uint64_t)(connected_uis, channel_id, ui);
ui_attach(ui);
return NIL;
@@ -325,3 +327,17 @@ static void remote_ui_suspend(UI *ui)
Array args = ARRAY_DICT_INIT;
push_call(ui, "suspend", args);
}
+
+static void remote_ui_set_title(UI *ui, char *title)
+{
+ Array args = ARRAY_DICT_INIT;
+ ADD(args, STRING_OBJ(cstr_to_string(title)));
+ push_call(ui, "set_title", args);
+}
+
+static void remote_ui_set_icon(UI *ui, char *icon)
+{
+ Array args = ARRAY_DICT_INIT;
+ ADD(args, STRING_OBJ(cstr_to_string(icon)));
+ push_call(ui, "set_icon", args);
+}
diff --git a/src/nvim/os_unix.c b/src/nvim/os_unix.c
index 7ec4059bce..c4d0e9c592 100644
--- a/src/nvim/os_unix.c
+++ b/src/nvim/os_unix.c
@@ -43,6 +43,7 @@
#include "nvim/syntax.h"
#include "nvim/tempfile.h"
#include "nvim/term.h"
+#include "nvim/ui.h"
#include "nvim/types.h"
#include "nvim/os/os.h"
#include "nvim/os/time.h"
@@ -181,22 +182,26 @@ void mch_settitle(char_u *title, char_u *icon)
* Note: if "t_ts" is set, title is set with escape sequence rather
* than x11 calls, because the x11 calls don't always work
*/
- if ((type || *T_TS != NUL) && title != NULL) {
+ if ((type || *T_TS != NUL || abstract_ui) && title != NULL) {
if (oldtitle == NULL
) /* first call but not in GUI, save title */
(void)get_x11_title(FALSE);
- if (*T_TS != NUL) /* it's OK if t_fs is empty */
+ if (abstract_ui) {
+ ui_set_title((char *)title);
+ } else if (*T_TS != NUL) /* it's OK if t_fs is empty */
term_settitle(title);
did_set_title = TRUE;
}
- if ((type || *T_CIS != NUL) && icon != NULL) {
+ if ((type || *T_CIS != NUL || abstract_ui) && icon != NULL) {
if (oldicon == NULL
) /* first call, save icon */
get_x11_icon(FALSE);
- if (*T_CIS != NUL) {
+ if (abstract_ui) {
+ ui_set_icon((char *)icon);
+ } else if (*T_CIS != NUL) {
out_str(T_CIS); /* set icon start */
out_str_nf(icon);
out_str(T_CIE); /* set icon end */
diff --git a/src/nvim/ui.c b/src/nvim/ui.c
index d13c7e5feb..a8ca58d633 100644
--- a/src/nvim/ui.c
+++ b/src/nvim/ui.c
@@ -139,6 +139,18 @@ void ui_suspend(void)
}
}
+void ui_set_title(char *title)
+{
+ UI_CALL(set_title, title);
+ UI_CALL(flush);
+}
+
+void ui_set_icon(char *icon)
+{
+ UI_CALL(set_icon, icon);
+ UI_CALL(flush);
+}
+
/*
* Try to get the current Vim shell size. Put the result in Rows and Columns.
* Use the new sizes as defaults for 'columns' and 'lines'.
diff --git a/src/nvim/ui.h b/src/nvim/ui.h
index 9ec10db75e..099f2643d5 100644
--- a/src/nvim/ui.h
+++ b/src/nvim/ui.h
@@ -36,6 +36,8 @@ struct ui_t {
void (*update_fg)(UI *ui, int fg);
void (*update_bg)(UI *ui, int bg);
void (*suspend)(UI *ui);
+ void (*set_title)(UI *ui, char *title);
+ void (*set_icon)(UI *ui, char *icon);
};
#ifdef INCLUDE_GENERATED_DECLARATIONS
diff --git a/test/functional/ui/screen.lua b/test/functional/ui/screen.lua
index 4163d8011a..3a39cd0aa6 100644
--- a/test/functional/ui/screen.lua
+++ b/test/functional/ui/screen.lua
@@ -115,6 +115,8 @@ function Screen.new(width, height)
_bell = false,
_visual_bell = false,
_suspended = true,
+ _title = nil,
+ _icon = nil,
_attrs = {},
_cursor = {
enabled = true, row = 1, col = 1
@@ -306,6 +308,14 @@ function Screen:_handle_suspend()
self._suspended = true
end
+function Screen:_handle_set_title(title)
+ self._title = title
+end
+
+function Screen:_handle_set_icon(icon)
+ self._icon = icon
+end
+
function Screen:_clear_block(top, lines, left, columns)
for i = top, top + lines - 1 do
self:_clear_row_section(i, left, left + columns - 1)