mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 00:56:10 +00:00 
			
		
		
		
	Merge branch 'obsd-master'
Sync from OpenBSD.
This commit is contained in:
		
							
								
								
									
										36
									
								
								cmd.c
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								cmd.c
									
									
									
									
									
								
							@@ -115,6 +115,7 @@ const struct cmd_entry *cmd_table[] = {
 | 
			
		||||
	NULL
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
int		 cmd_session_better(struct session *, struct session *, int);
 | 
			
		||||
struct session	*cmd_choose_session_list(struct sessionslist *);
 | 
			
		||||
struct session	*cmd_choose_session(int);
 | 
			
		||||
struct client	*cmd_choose_client(struct clients *);
 | 
			
		||||
@@ -370,6 +371,24 @@ cmd_current_session(struct cmd_ctx *ctx, int prefer_unattached)
 | 
			
		||||
	return (cmd_choose_session(prefer_unattached));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Is this session better? */
 | 
			
		||||
int
 | 
			
		||||
cmd_session_better(struct session *s, struct session *best,
 | 
			
		||||
    int prefer_unattached)
 | 
			
		||||
{
 | 
			
		||||
	if (best == NULL)
 | 
			
		||||
		return 1;
 | 
			
		||||
	if (prefer_unattached) {
 | 
			
		||||
		if (!(best->flags & SESSION_UNATTACHED) &&
 | 
			
		||||
		    (s->flags & SESSION_UNATTACHED))
 | 
			
		||||
			return 1;
 | 
			
		||||
		else if ((best->flags & SESSION_UNATTACHED) &&
 | 
			
		||||
		    !(s->flags & SESSION_UNATTACHED))
 | 
			
		||||
			return 0;
 | 
			
		||||
	}
 | 
			
		||||
	return (timercmp(&s->activity_time, &best->activity_time, >));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Find the most recently used session, preferring unattached if the flag is
 | 
			
		||||
 * set.
 | 
			
		||||
@@ -377,21 +396,14 @@ cmd_current_session(struct cmd_ctx *ctx, int prefer_unattached)
 | 
			
		||||
struct session *
 | 
			
		||||
cmd_choose_session(int prefer_unattached)
 | 
			
		||||
{
 | 
			
		||||
	struct session	*s, *sbest;
 | 
			
		||||
	struct timeval	*tv = NULL;
 | 
			
		||||
	struct session	*s, *best;
 | 
			
		||||
 | 
			
		||||
	sbest = NULL;
 | 
			
		||||
	best = NULL;
 | 
			
		||||
	RB_FOREACH(s, sessions, &sessions) {
 | 
			
		||||
		if (tv == NULL || timercmp(&s->activity_time, tv, >) ||
 | 
			
		||||
		    (prefer_unattached &&
 | 
			
		||||
		    !(sbest->flags & SESSION_UNATTACHED) &&
 | 
			
		||||
		    (s->flags & SESSION_UNATTACHED))) {
 | 
			
		||||
			sbest = s;
 | 
			
		||||
			tv = &s->activity_time;
 | 
			
		||||
		}
 | 
			
		||||
		if (cmd_session_better(s, best, prefer_unattached))
 | 
			
		||||
			best = s;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return (sbest);
 | 
			
		||||
	return (best);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Find the most recently used session from a list. */
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user