mirror of
https://github.com/irssi/irssi.git
synced 2024-09-01 04:14:16 -04:00
Merge pull request #1387 from ailin-nemui/textbufferview
Textbufferview
(cherry picked from commit 783dd37533
)
This commit is contained in:
parent
3404d822c8
commit
f17fb68257
6
.github/workflows/clangformat.yml
vendored
6
.github/workflows/clangformat.yml
vendored
@ -2,10 +2,10 @@ on: [pull_request]
|
|||||||
name: clang-format
|
name: clang-format
|
||||||
jobs:
|
jobs:
|
||||||
check-clang-format:
|
check-clang-format:
|
||||||
runs-on: ubuntu-20.04
|
runs-on: ubuntu-22.04
|
||||||
steps:
|
steps:
|
||||||
- name: install clang-format
|
- name: install clang-format
|
||||||
run: sudo apt install clang-format-11
|
run: sudo apt install clang-format-14
|
||||||
- uses: actions/checkout@main
|
- uses: actions/checkout@main
|
||||||
- name: fetch target ref
|
- name: fetch target ref
|
||||||
run:
|
run:
|
||||||
@ -20,7 +20,7 @@ jobs:
|
|||||||
- name: run git-clang-format and Check if no changes are needed
|
- name: run git-clang-format and Check if no changes are needed
|
||||||
run:
|
run:
|
||||||
|
|
|
|
||||||
CLANG_FORMAT=clang-format-11 git-clang-format-11 --diff FETCH_HEAD HEAD | tee git-clang-format.diff
|
CLANG_FORMAT=clang-format-14 git-clang-format-14 --diff FETCH_HEAD HEAD | tee git-clang-format.diff
|
||||||
cmp -s <(echo no modified files to format) git-clang-format.diff || cmp -s <(echo -n) git-clang-format.diff
|
cmp -s <(echo no modified files to format) git-clang-format.diff || cmp -s <(echo -n) git-clang-format.diff
|
||||||
- uses: actions/upload-artifact@v1
|
- uses: actions/upload-artifact@v1
|
||||||
if: failure()
|
if: failure()
|
||||||
|
@ -393,6 +393,7 @@ static void cmd_scrollback_redraw(void)
|
|||||||
|
|
||||||
term_refresh_freeze();
|
term_refresh_freeze();
|
||||||
textbuffer_view_reset_cache(gui->view);
|
textbuffer_view_reset_cache(gui->view);
|
||||||
|
textbuffer_view_resize(gui->view, gui->view->width, gui->view->height);
|
||||||
gui_window_redraw(active_win);
|
gui_window_redraw(active_win);
|
||||||
term_refresh_thaw();
|
term_refresh_thaw();
|
||||||
}
|
}
|
||||||
|
@ -402,10 +402,9 @@ view_update_line_cache(TEXT_BUFFER_VIEW_REC *view, LINE_REC *line)
|
|||||||
|
|
||||||
if (rec->count > 1) {
|
if (rec->count > 1) {
|
||||||
for (pos = 0; lines != NULL; pos++) {
|
for (pos = 0; lines != NULL; pos++) {
|
||||||
void *data = lines->data;
|
LINE_CACHE_SUB_REC *data = lines->data;
|
||||||
|
|
||||||
memcpy(&rec->lines[pos], data,
|
memcpy(&rec->lines[pos], data, sizeof(LINE_CACHE_SUB_REC));
|
||||||
sizeof(LINE_CACHE_SUB_REC));
|
|
||||||
|
|
||||||
lines = g_slist_remove(lines, data);
|
lines = g_slist_remove(lines, data);
|
||||||
g_free(data);
|
g_free(data);
|
||||||
@ -427,7 +426,7 @@ static void view_remove_cache(TEXT_BUFFER_VIEW_REC *view, LINE_REC *line,
|
|||||||
|
|
||||||
cache = g_hash_table_lookup(view->cache->line_cache, line);
|
cache = g_hash_table_lookup(view->cache->line_cache, line);
|
||||||
if (cache != NULL) {
|
if (cache != NULL) {
|
||||||
g_free(cache);
|
line_cache_destroy(NULL, cache);
|
||||||
g_hash_table_remove(view->cache->line_cache, line);
|
g_hash_table_remove(view->cache->line_cache, line);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -438,7 +437,7 @@ static void view_update_cache(TEXT_BUFFER_VIEW_REC *view, LINE_REC *line,
|
|||||||
view_remove_cache(view, line, update_counter);
|
view_remove_cache(view, line, update_counter);
|
||||||
|
|
||||||
if (view->buffer->cur_line == line)
|
if (view->buffer->cur_line == line)
|
||||||
view->cache->last_linecount = view_get_linecount(view, line);
|
view_get_linecount(view, line);
|
||||||
}
|
}
|
||||||
|
|
||||||
void textbuffer_view_reset_cache(TEXT_BUFFER_VIEW_REC *view)
|
void textbuffer_view_reset_cache(TEXT_BUFFER_VIEW_REC *view)
|
||||||
@ -467,6 +466,7 @@ static int view_line_draw(TEXT_BUFFER_VIEW_REC *view, LINE_REC *line,
|
|||||||
unichar chr;
|
unichar chr;
|
||||||
int xpos, color, drawcount, first, need_move, need_clrtoeol, char_width;
|
int xpos, color, drawcount, first, need_move, need_clrtoeol, char_width;
|
||||||
unsigned int fg24, bg24;
|
unsigned int fg24, bg24;
|
||||||
|
fg24 = bg24 = UINT_MAX;
|
||||||
|
|
||||||
if (view->dirty) /* don't bother drawing anything - redraw is coming */
|
if (view->dirty) /* don't bother drawing anything - redraw is coming */
|
||||||
return 0;
|
return 0;
|
||||||
@ -767,7 +767,6 @@ static void view_unregister_indent_func(TEXT_BUFFER_VIEW_REC *view,
|
|||||||
/* recreate cache so it won't contain references
|
/* recreate cache so it won't contain references
|
||||||
to the indent function */
|
to the indent function */
|
||||||
textbuffer_view_reset_cache(view);
|
textbuffer_view_reset_cache(view);
|
||||||
view->cache = textbuffer_cache_get(view->siblings, view->width);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void textbuffer_views_unregister_indent_func(INDENT_FUNC indent_func)
|
void textbuffer_views_unregister_indent_func(INDENT_FUNC indent_func)
|
||||||
@ -1033,13 +1032,17 @@ void textbuffer_view_clear(TEXT_BUFFER_VIEW_REC *view)
|
|||||||
/* Scroll the view up/down */
|
/* Scroll the view up/down */
|
||||||
void textbuffer_view_scroll(TEXT_BUFFER_VIEW_REC *view, int lines)
|
void textbuffer_view_scroll(TEXT_BUFFER_VIEW_REC *view, int lines)
|
||||||
{
|
{
|
||||||
int count;
|
int count, ypos;
|
||||||
|
|
||||||
g_return_if_fail(view != NULL);
|
g_return_if_fail(view != NULL);
|
||||||
|
|
||||||
|
count = view_scroll(view, &view->startline, &view->subline, lines, TRUE);
|
||||||
|
|
||||||
|
ypos = view->ypos + (lines < 0 ? count : -count);
|
||||||
|
textbuffer_view_init_ypos(view);
|
||||||
|
if (ypos != view->ypos)
|
||||||
|
textbuffer_view_resize(view, view->width, view->height);
|
||||||
|
|
||||||
count = view_scroll(view, &view->startline, &view->subline,
|
|
||||||
lines, TRUE);
|
|
||||||
view->ypos += lines < 0 ? count : -count;
|
|
||||||
view->bottom = view_is_bottom(view);
|
view->bottom = view_is_bottom(view);
|
||||||
if (view->bottom) view->more_text = FALSE;
|
if (view->bottom) view->more_text = FALSE;
|
||||||
|
|
||||||
@ -1079,10 +1082,10 @@ LINE_CACHE_REC *textbuffer_view_get_line_cache(TEXT_BUFFER_VIEW_REC *view,
|
|||||||
cache = g_hash_table_lookup(view->cache->line_cache, line);
|
cache = g_hash_table_lookup(view->cache->line_cache, line);
|
||||||
if (cache == NULL)
|
if (cache == NULL)
|
||||||
cache = view_update_line_cache(view, line);
|
cache = view_update_line_cache(view, line);
|
||||||
else
|
else
|
||||||
cache->last_access = time(NULL);
|
cache->last_access = time(NULL);
|
||||||
|
|
||||||
return cache;
|
return cache;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void view_insert_line(TEXT_BUFFER_VIEW_REC *view, LINE_REC *line)
|
static void view_insert_line(TEXT_BUFFER_VIEW_REC *view, LINE_REC *line)
|
||||||
@ -1263,12 +1266,13 @@ static void view_remove_line(TEXT_BUFFER_VIEW_REC *view, LINE_REC *line,
|
|||||||
view_bookmarks_check(view, line);
|
view_bookmarks_check(view, line);
|
||||||
|
|
||||||
if (view->buffer->cur_line == line) {
|
if (view->buffer->cur_line == line) {
|
||||||
/* the last line is being removed */
|
/* the last line is being removed */
|
||||||
LINE_REC *prevline;
|
LINE_REC *prevline;
|
||||||
|
|
||||||
prevline = view->buffer->first_line == line ? NULL :
|
prevline = view->buffer->first_line == line ?
|
||||||
textbuffer_line_last(view->buffer)->prev;
|
NULL :
|
||||||
view->cache->last_linecount = prevline == NULL ? 0 :
|
textbuffer_line_last(view->buffer)->prev;
|
||||||
|
if (prevline != NULL)
|
||||||
view_get_linecount(view, prevline);
|
view_get_linecount(view, prevline);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1474,8 +1478,10 @@ void textbuffer_view_set_window(TEXT_BUFFER_VIEW_REC *view,
|
|||||||
|
|
||||||
if (view->window != window) {
|
if (view->window != window) {
|
||||||
view->window = window;
|
view->window = window;
|
||||||
if (window != NULL)
|
if (window != NULL) {
|
||||||
|
textbuffer_view_resize(view, view->width, view->height);
|
||||||
view->dirty = TRUE;
|
view->dirty = TRUE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1504,12 +1510,18 @@ static int line_cache_check_remove(void *key, LINE_CACHE_REC *cache,
|
|||||||
static int sig_check_linecache(void)
|
static int sig_check_linecache(void)
|
||||||
{
|
{
|
||||||
GSList *tmp, *caches;
|
GSList *tmp, *caches;
|
||||||
time_t now;
|
time_t now;
|
||||||
|
|
||||||
now = time(NULL); caches = NULL;
|
now = time(NULL);
|
||||||
|
caches = NULL;
|
||||||
for (tmp = views; tmp != NULL; tmp = tmp->next) {
|
for (tmp = views; tmp != NULL; tmp = tmp->next) {
|
||||||
TEXT_BUFFER_VIEW_REC *rec = tmp->data;
|
TEXT_BUFFER_VIEW_REC *rec = tmp->data;
|
||||||
|
|
||||||
|
if (rec->window != NULL) {
|
||||||
|
/* keep visible lines mapped */
|
||||||
|
view_get_lines_height(rec, rec->startline, rec->subline, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
if (g_slist_find(caches, rec->cache) != NULL)
|
if (g_slist_find(caches, rec->cache) != NULL)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -1519,7 +1531,7 @@ static int sig_check_linecache(void)
|
|||||||
&now);
|
&now);
|
||||||
}
|
}
|
||||||
|
|
||||||
g_slist_free(caches);
|
g_slist_free(caches);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user