~martanne/devel

This thread contains a patchset. You're looking at the original emails, but you may wish to use the patch review UI. Review patch
5 4

[PATCH vis] decouple windows and files

Details
Message ID
<172531775856.20527.11598101958719368213-0@git.sr.ht>
DKIM signature
missing
Download raw message
Patch: +23 -20
From: urosm <urosm@kompot.si>

This allows keeping files with unsaved modifications in the state
without having to have them displayed in a window.

vis_window_close no longer frees win->file, this is moved to vis_free.
After closing the last window cmd_quit and cmd_qall check for modified
files in vis->files and open a new window for the found modified file
if necessary.
---
 vis-cmds.c | 40 +++++++++++++++++++++-------------------
 vis.c      |  3 ++-
 2 files changed, 23 insertions(+), 20 deletions(-)

diff --git a/vis-cmds.c b/vis-cmds.c
index 4cfb3bd..f94c8b7 100644
--- a/vis-cmds.c
+++ b/vis-cmds.c
@@ -463,10 +463,6 @@ static bool cmd_edit(Vis *vis, Win *win, Command *cmd, const char *argv[], Selec
	Win *oldwin = win;
	if (!oldwin)
		return false;
	if (cmd->flags != '!' && !vis_window_closable(oldwin)) {
		info_unsaved_changes(vis);
		return false;
	}
	if (!argv[1]) {
		if (oldwin->file->refcount > 1) {
			vis_info_show(vis, "Can not reload file being opened multiple times");
@@ -511,30 +507,36 @@ static bool has_windows(Vis *vis) {
	return false;
}

static bool cmd_quit(Vis *vis, Win *win, Command *cmd, const char *argv[], Selection *sel, Filerange *range) {
	if (cmd->flags != '!' && !vis_window_closable(win)) {
		info_unsaved_changes(vis);
		return false;
static bool find_modified_file(Vis *vis) {
	for (File *file = vis->files; file; file = file->next) {
		if (!file->internal && text_modified(file->text)) {
			vis_window_new(vis, file->name);
			info_unsaved_changes(vis);
			return true;
		}
	}
	return false;
}

static bool cmd_quit(Vis *vis, Win *win, Command *cmd, const char *argv[], Selection *sel, Filerange *range) {
	vis_window_close(win);
	if (!has_windows(vis))
		vis_exit(vis, argv[1] ? atoi(argv[1]) : EXIT_SUCCESS);
	if (has_windows(vis))
		return true;
	if (cmd->flags != '!' && find_modified_file(vis))
		return false;
	vis_exit(vis, argv[1] ? atoi(argv[1]) : EXIT_SUCCESS);
	return true;
}

static bool cmd_qall(Vis *vis, Win *win, Command *cmd, const char *argv[], Selection *sel, Filerange *range) {
	for (Win *next, *win = vis->windows; win; win = next) {
		next = win->next;
		if (!win->file->internal && (!text_modified(win->file->text) || cmd->flags == '!'))
	for (Win *win = vis->windows; win; win = win->next) {
		if (!win->file->internal)
			vis_window_close(win);
	}
	if (!has_windows(vis)) {
		vis_exit(vis, argv[1] ? atoi(argv[1]) : EXIT_SUCCESS);
		return true;
	} else {
		info_unsaved_changes(vis);
	if (cmd->flags != '!' && find_modified_file(vis))
		return false;
	}
	vis_exit(vis, argv[1] ? atoi(argv[1]) : EXIT_SUCCESS);
	return true;
}

static bool cmd_split(Vis *vis, Win *win, Command *cmd, const char *argv[], Selection *sel, Filerange *range) {
diff --git a/vis.c b/vis.c
index 7d3dd6a..9841516 100644
--- a/vis.c
+++ b/vis.c
@@ -547,7 +547,6 @@ void vis_window_close(Win *win) {
		return;
	Vis *vis = win->vis;
	vis_event_emit(vis, VIS_EVENT_WIN_CLOSE, win);
	file_free(vis, win->file);
	if (win->prev)
		win->prev->next = win->next;
	if (win->next)
@@ -626,6 +625,8 @@ void vis_free(Vis *vis) {
	file_free(vis, vis->command_file);
	file_free(vis, vis->search_file);
	file_free(vis, vis->error_file);
	while (vis->files)
		file_free(vis, vis->files);
	for (int i = 0; i < LENGTH(vis->registers); i++)
		register_release(&vis->registers[i]);
	ui_terminal_free(&vis->ui);
-- 
2.45.2

[vis/patches] build failed

builds.sr.ht <builds@sr.ht>
Details
Message ID
<D3W64LYN31QJ.1U5SKS71NHPS1@fra02>
In-Reply-To
<172531775856.20527.11598101958719368213-0@git.sr.ht> (view parent)
DKIM signature
missing
Download raw message
vis/patches: FAILED in 1m12s

[decouple windows and files][0] from [~urosm][1]

[0]: https://lists.sr.ht/~martanne/devel/patches/54844
[1]: urosm@kompot.si

✗ #1317760 FAILED  vis/patches/openbsd.yml https://builds.sr.ht/~martanne/job/1317760
✓ #1317758 SUCCESS vis/patches/debian.yml  https://builds.sr.ht/~martanne/job/1317758
✓ #1317757 SUCCESS vis/patches/alpine.yml  https://builds.sr.ht/~martanne/job/1317757
✓ #1317759 SUCCESS vis/patches/freebsd.yml https://builds.sr.ht/~martanne/job/1317759
Details
Message ID
<3FLK1OE3UUMUE.2RZRXQJOEAN93@rnpnr.xyz>
In-Reply-To
<172531775856.20527.11598101958719368213-0@git.sr.ht> (view parent)
DKIM signature
permerror
Download raw message
~urosm <urosm@git.sr.ht> wrote:
> From: urosm <urosm@kompot.si>
> 
> This allows keeping files with unsaved modifications in the state
> without having to have them displayed in a window.
> 
> vis_window_close no longer frees win->file, this is moved to vis_free.
> After closing the last window cmd_quit and cmd_qall check for modified
> files in vis->files and open a new window for the found modified file
> if necessary.
> ---
>  vis-cmds.c | 40 +++++++++++++++++++++-------------------
>  vis.c      |  3 ++-
>  2 files changed, 23 insertions(+), 20 deletions(-)

Sorry I didn't mean to overlook this one. A better motivation for
this is that this helps us move towards the Client-Server idea. It
should also help with improving support for multiple views of the
the same file.

I think all the changes look good to me but they introduce a bug.
After applying this modify a file and try to close it without
writing. The cursor will jump to position 0,0. I think the order
in which parts of the window are being destroyed was changed so
now the selection gets lost.

That will need to be fixed before I can apply this.

- Randy

-- 
https://rnpnr.xyz/
GPG Fingerprint: B8F0 CF4C B6E9 415C 1B27 A8C4 C8D2 F782 86DF 2DC5

Re: [vis/patches] build failed

Details
Message ID
<87e83e90-c1a3-4d63-9d35-22a97b6cc4c3@kompot.si>
In-Reply-To
<D3W64LYN31QJ.1U5SKS71NHPS1@fra02> (view parent)
Sender timestamp
1741469177
DKIM signature
pass
Download raw message
I want to revisit this and address the bug. The cursor problem is 
present also when switching between files that should already be in the 
state. The cursor position is stored in View, View is tied to Win, but 
files don't necessarily have a Win now, so they don't keep their cursor 
position.

Any ideas or preferences on how I should address this? You have a better 
idea about vis' structs.

-- 
u
Details
Message ID
<8d271a4d-61a1-42c4-a7c2-28ffb315a015@kompot.si>
In-Reply-To
<3FLK1OE3UUMUE.2RZRXQJOEAN93@rnpnr.xyz> (view parent)
Sender timestamp
1741472966
DKIM signature
pass
Download raw message
I want to revisit this and address the bug. The cursor problem is 
present also when switching between files that should already be in the 
state. The cursor position is stored in View, View is tied to Win, but 
files don't necessarily have a Win now, so they don't keep their cursor 
position.

Any ideas or preferences on how I should address this? You have a better 
idea about vis' structs.
-- 
u

Re: [vis/patches] build failed

Details
Message ID
<3VB40B7UMR88Q.2EB1APG1I67JK@rnpnr.xyz>
In-Reply-To
<87e83e90-c1a3-4d63-9d35-22a97b6cc4c3@kompot.si> (view parent)
Sender timestamp
1741445339
DKIM signature
permerror
Download raw message
Looking at this again and thinking it through a little more I
think I should just reject this. I don't think its a good idea -
if you have some modified file open in the background while you
are editing a different file in the foreground and vis crashes (we
still have bugs) you will lose changes in two separate files. If
you are like me and you tend to leave an editor open for a long
time you may even forget about the other file. I think I would
just prefer if we didn't have that as an option.

This does raise a further question about my server-client comment
that I don't think I though about before. I think in that case we
will also need to reject a window closure if there are no other
views.

- Randy

--
https://rnpnr.xyz/
GPG Fingerprint: B8F0 CF4C B6E9 415C 1B27 A8C4 C8D2 F782 86DF 2DC5
Reply to thread Export thread (mbox)