mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-03 16:46:18 +00:00 
			
		
		
		
	Clock mode.
This commit is contained in:
		
							
								
								
									
										5
									
								
								CHANGES
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								CHANGES
									
									
									
									
									
								
							@@ -1,5 +1,8 @@
 | 
			
		||||
10 January 2009
 | 
			
		||||
 | 
			
		||||
* New mode to display a large clock. Entered with clock-mode command (bound to
 | 
			
		||||
  C-b t by default); two window options: clock-mode-colour and clock-mode-style
 | 
			
		||||
  (12 or 24). This will probably be used as the basis for window locking.
 | 
			
		||||
* New command, server-info, to show some server information and terminal
 | 
			
		||||
  details.
 | 
			
		||||
 | 
			
		||||
@@ -838,7 +841,7 @@
 | 
			
		||||
  (including mutt, emacs). No status bar yet and no key remapping or other
 | 
			
		||||
  customisation.
 | 
			
		||||
 | 
			
		||||
$Id: CHANGES,v 1.187 2009-01-10 01:51:21 nicm Exp $
 | 
			
		||||
$Id: CHANGES,v 1.188 2009-01-10 19:35:39 nicm Exp $
 | 
			
		||||
 | 
			
		||||
 LocalWords:  showw utf UTF fulvio ciriaco joshe OSC APC gettime abc DEF OA clr
 | 
			
		||||
 LocalWords:  rivo nurges lscm Erdely eol smysession mysession ek dstname RB
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										8
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								Makefile
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
# $Id: Makefile,v 1.84 2009-01-10 15:21:31 nicm Exp $
 | 
			
		||||
# $Id: Makefile,v 1.85 2009-01-10 19:35:39 nicm Exp $
 | 
			
		||||
 | 
			
		||||
.SUFFIXES: .c .o .y .h
 | 
			
		||||
.PHONY: clean update-index.html upload-index.html
 | 
			
		||||
@@ -36,8 +36,10 @@ SRCS= tmux.c server.c server-msg.c server-fn.c buffer.c buffer-poll.c status.c \
 | 
			
		||||
      cmd-show-buffer.c cmd-list-buffers.c cmd-delete-buffer.c \
 | 
			
		||||
      cmd-list-commands.c cmd-move-window.c cmd-select-prompt.c \
 | 
			
		||||
      cmd-respawn-window.c cmd-source-file.c cmd-server-info.c \
 | 
			
		||||
      window-scroll.c window-more.c window-copy.c options.c paste.c \
 | 
			
		||||
      tty.c tty-term.c tty-keys.c tty-write.c colour.c utf8.c options-cmd.c
 | 
			
		||||
      cmd-clock-mode.c \
 | 
			
		||||
      window-clock.c window-scroll.c window-more.c window-copy.c \
 | 
			
		||||
      options.c options-cmd.c paste.c colour.c utf8.c \
 | 
			
		||||
      tty.c tty-term.c tty-keys.c tty-write.c
 | 
			
		||||
 | 
			
		||||
CC?= cc
 | 
			
		||||
INCDIRS+= -I. -I- -I/usr/local/include
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								TODO
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								TODO
									
									
									
									
									
								
							@@ -62,7 +62,9 @@
 | 
			
		||||
- document xterm-keys
 | 
			
		||||
- document server-info
 | 
			
		||||
- document window options changes
 | 
			
		||||
- a window mode to show a clock
 | 
			
		||||
- document clock-mode
 | 
			
		||||
- automatic lock/screensaver after $time inactivity (switch all windows into
 | 
			
		||||
  clock mode/blank)
 | 
			
		||||
- a key binding to display the status line when it is turned off
 | 
			
		||||
- FAQ "Can I have some examples of cool things I can do with tmux?" -- linkw
 | 
			
		||||
- clone session command
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										55
									
								
								cmd-clock-mode.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								cmd-clock-mode.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,55 @@
 | 
			
		||||
/* $Id: cmd-clock-mode.c,v 1.1 2009-01-10 19:35:39 nicm Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2009 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this software for any
 | 
			
		||||
 * purpose with or without fee is hereby granted, provided that the above
 | 
			
		||||
 * copyright notice and this permission notice appear in all copies.
 | 
			
		||||
 *
 | 
			
		||||
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 | 
			
		||||
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 | 
			
		||||
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 | 
			
		||||
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 | 
			
		||||
 * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
 | 
			
		||||
 * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
 | 
			
		||||
 * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
 | 
			
		||||
#include "tmux.h"
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Enter clock mode.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
void	cmd_clock_mode_exec(struct cmd *, struct cmd_ctx *);
 | 
			
		||||
 | 
			
		||||
const struct cmd_entry cmd_clock_mode_entry = {
 | 
			
		||||
	"clock-mode", NULL,
 | 
			
		||||
	CMD_TARGET_WINDOW_USAGE,
 | 
			
		||||
	0,
 | 
			
		||||
	cmd_target_init,
 | 
			
		||||
	cmd_target_parse,
 | 
			
		||||
	cmd_clock_mode_exec,
 | 
			
		||||
       	cmd_target_send,
 | 
			
		||||
	cmd_target_recv,
 | 
			
		||||
	cmd_target_free,
 | 
			
		||||
	cmd_target_print
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
cmd_clock_mode_exec(struct cmd *self, struct cmd_ctx *ctx)
 | 
			
		||||
{
 | 
			
		||||
	struct cmd_target_data	*data = self->data;
 | 
			
		||||
	struct winlink		*wl;
 | 
			
		||||
 | 
			
		||||
	if ((wl = cmd_find_window(ctx, data->target, NULL)) == NULL)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	window_set_mode(wl->window, &window_clock_mode);
 | 
			
		||||
 | 
			
		||||
	if (ctx->cmdclient != NULL)
 | 
			
		||||
		server_write_client(ctx->cmdclient, MSG_EXIT, NULL, 0);
 | 
			
		||||
}
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: cmd-set-window-option.c,v 1.18 2009-01-10 01:51:21 nicm Exp $ */
 | 
			
		||||
/* $Id: cmd-set-window-option.c,v 1.19 2009-01-10 19:35:39 nicm Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2008 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -50,8 +50,14 @@ const struct cmd_entry cmd_set_window_option_entry = {
 | 
			
		||||
const char *set_option_mode_keys_list[] = {
 | 
			
		||||
	"emacs", "vi", NULL
 | 
			
		||||
};
 | 
			
		||||
const char *set_option_clock_mode_style_list[] = {
 | 
			
		||||
	"12", "24", NULL
 | 
			
		||||
};
 | 
			
		||||
const struct set_option_entry set_window_option_table[NSETWINDOWOPTION] = {
 | 
			
		||||
	{ "aggressive-resize", SET_OPTION_FLAG, 0, 0, NULL },
 | 
			
		||||
	{ "clock-mode-colour", SET_OPTION_COLOUR, 0, 0, NULL },
 | 
			
		||||
	{ "clock-mode-style",
 | 
			
		||||
	  SET_OPTION_CHOICE, 0, 0, set_option_clock_mode_style_list },
 | 
			
		||||
	{ "force-height", SET_OPTION_NUMBER, 0, INT_MAX, NULL },
 | 
			
		||||
	{ "force-width", SET_OPTION_NUMBER, 0, INT_MAX, NULL },
 | 
			
		||||
	{ "mode-bg", SET_OPTION_COLOUR, 0, 0, NULL },
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										3
									
								
								cmd.c
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								cmd.c
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: cmd.c,v 1.70 2009-01-10 01:51:21 nicm Exp $ */
 | 
			
		||||
/* $Id: cmd.c,v 1.71 2009-01-10 19:35:39 nicm Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -28,6 +28,7 @@
 | 
			
		||||
const struct cmd_entry *cmd_table[] = {
 | 
			
		||||
	&cmd_attach_session_entry,
 | 
			
		||||
	&cmd_bind_key_entry,
 | 
			
		||||
	&cmd_clock_mode_entry,
 | 
			
		||||
	&cmd_command_prompt_entry,
 | 
			
		||||
	&cmd_copy_mode_entry,
 | 
			
		||||
	&cmd_delete_buffer_entry,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: key-bindings.c,v 1.41 2009-01-07 22:52:33 nicm Exp $ */
 | 
			
		||||
/* $Id: key-bindings.c,v 1.42 2009-01-10 19:35:39 nicm Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -102,6 +102,7 @@ key_bindings_init(void)
 | 
			
		||||
		{ 'p', &cmd_previous_window_entry },
 | 
			
		||||
		{ 'r', &cmd_refresh_client_entry },
 | 
			
		||||
		{ 's', &cmd_list_sessions_entry },
 | 
			
		||||
		{ 't', &cmd_clock_mode_entry },
 | 
			
		||||
		{ 'w', &cmd_list_windows_entry },
 | 
			
		||||
		{ '\'', &cmd_select_prompt_entry },
 | 
			
		||||
		{ META, &cmd_send_prefix_entry },
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										28
									
								
								server.c
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								server.c
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: server.c,v 1.91 2009-01-10 01:51:22 nicm Exp $ */
 | 
			
		||||
/* $Id: server.c,v 1.92 2009-01-10 19:35:40 nicm Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -54,6 +54,7 @@ void		 server_lost_client(struct client *);
 | 
			
		||||
void	 	 server_lost_window(struct window *);
 | 
			
		||||
void		 server_check_redraw(struct client *);
 | 
			
		||||
void		 server_check_timers(struct client *);
 | 
			
		||||
void		 server_second_timers(void);
 | 
			
		||||
int		 server_update_socket(const char *);
 | 
			
		||||
 | 
			
		||||
/* Fork new server. */
 | 
			
		||||
@@ -168,9 +169,12 @@ server_main(const char *srv_path, int srv_fd)
 | 
			
		||||
	struct pollfd	*pfds, *pfd;
 | 
			
		||||
	int		 nfds, xtimeout;
 | 
			
		||||
	u_int		 i, n;
 | 
			
		||||
	time_t		 now, last;
 | 
			
		||||
 | 
			
		||||
	siginit();
 | 
			
		||||
 | 
			
		||||
	last = time(NULL);
 | 
			
		||||
 | 
			
		||||
	pfds = NULL;
 | 
			
		||||
	while (!sigterm) {
 | 
			
		||||
		/* Initialise pollfd array. */
 | 
			
		||||
@@ -211,6 +215,13 @@ server_main(const char *srv_path, int srv_fd)
 | 
			
		||||
		}
 | 
			
		||||
		pfd++;
 | 
			
		||||
 | 
			
		||||
		/* Call seconds-based timers. */
 | 
			
		||||
		now = time(NULL);
 | 
			
		||||
		if (now != last) {
 | 
			
		||||
			last = now;
 | 
			
		||||
			server_second_timers();
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/*
 | 
			
		||||
		 * Handle window and client sockets. Clients can create
 | 
			
		||||
		 * windows, so windows must come first to avoid messing up by
 | 
			
		||||
@@ -688,6 +699,21 @@ server_lost_window(struct window *w)
 | 
			
		||||
	recalculate_sizes();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Call any once-per-second timers. */
 | 
			
		||||
void
 | 
			
		||||
server_second_timers(void)
 | 
			
		||||
{
 | 
			
		||||
	struct window	*w;
 | 
			
		||||
	u_int		 i;
 | 
			
		||||
 | 
			
		||||
	for (i = 0; i < ARRAY_LENGTH(&windows); i++) {
 | 
			
		||||
		w = ARRAY_ITEM(&windows, i);
 | 
			
		||||
		if (w->mode != NULL && w->mode->timer != NULL)
 | 
			
		||||
			w->mode->timer(w);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Update socket execute permissions based on whether sessions are attached. */
 | 
			
		||||
int
 | 
			
		||||
server_update_socket(const char *path)
 | 
			
		||||
{
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										5
									
								
								tmux.c
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								tmux.c
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: tmux.c,v 1.89 2009-01-10 14:43:43 nicm Exp $ */
 | 
			
		||||
/* $Id: tmux.c,v 1.90 2009-01-10 19:35:40 nicm Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -248,6 +248,8 @@ main(int argc, char **argv)
 | 
			
		||||
	options_set_number(&global_window_options, "mode-keys", MODEKEY_EMACS);
 | 
			
		||||
	options_set_number(&global_window_options, "force-width", 0);
 | 
			
		||||
	options_set_number(&global_window_options, "force-height", 0);
 | 
			
		||||
	options_set_number(&global_window_options, "clock-mode-colour", 4);
 | 
			
		||||
	options_set_number(&global_window_options, "clock-mode-style", 1);
 | 
			
		||||
 | 
			
		||||
	if (cfg_file == NULL) {
 | 
			
		||||
		home = getenv("HOME");
 | 
			
		||||
@@ -302,6 +304,7 @@ main(int argc, char **argv)
 | 
			
		||||
	options_set_string(
 | 
			
		||||
	    &global_options, "default-command", "exec %s", shell);
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	if (argc == 0) {
 | 
			
		||||
		cmd = xmalloc(sizeof *cmd);
 | 
			
		||||
  		cmd->entry = &cmd_new_session_entry;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										9
									
								
								tmux.h
									
									
									
									
									
								
							
							
						
						
									
										9
									
								
								tmux.h
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: tmux.h,v 1.217 2009-01-10 18:37:08 nicm Exp $ */
 | 
			
		||||
/* $Id: tmux.h,v 1.218 2009-01-10 19:35:40 nicm Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -584,6 +584,7 @@ struct window_mode {
 | 
			
		||||
	void	(*free)(struct window *);
 | 
			
		||||
	void	(*resize)(struct window *, u_int, u_int);
 | 
			
		||||
	void	(*key)(struct window *, struct client *, int);
 | 
			
		||||
	void	(*timer)(struct window *);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Window structure. */
 | 
			
		||||
@@ -866,7 +867,7 @@ struct set_option_entry {
 | 
			
		||||
extern const struct set_option_entry set_option_table[];
 | 
			
		||||
extern const struct set_option_entry set_window_option_table[];
 | 
			
		||||
#define NSETOPTION 17
 | 
			
		||||
#define NSETWINDOWOPTION 10
 | 
			
		||||
#define NSETWINDOWOPTION 12
 | 
			
		||||
 | 
			
		||||
/* Edit keys. */
 | 
			
		||||
enum mode_key {
 | 
			
		||||
@@ -1043,6 +1044,7 @@ struct winlink	*cmd_find_window(
 | 
			
		||||
extern const struct cmd_entry *cmd_table[];
 | 
			
		||||
extern const struct cmd_entry cmd_attach_session_entry;
 | 
			
		||||
extern const struct cmd_entry cmd_bind_key_entry;
 | 
			
		||||
extern const struct cmd_entry cmd_clock_mode_entry;
 | 
			
		||||
extern const struct cmd_entry cmd_command_prompt_entry;
 | 
			
		||||
extern const struct cmd_entry cmd_copy_mode_entry;
 | 
			
		||||
extern const struct cmd_entry cmd_delete_buffer_entry;
 | 
			
		||||
@@ -1350,6 +1352,9 @@ void		 window_reset_mode(struct window *);
 | 
			
		||||
void		 window_parse(struct window *);
 | 
			
		||||
void		 window_key(struct window *, struct client *, int);
 | 
			
		||||
 | 
			
		||||
/* window-clock.c */
 | 
			
		||||
extern const struct window_mode window_clock_mode;
 | 
			
		||||
 | 
			
		||||
/* window-copy.c */
 | 
			
		||||
extern const struct window_mode window_copy_mode;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										235
									
								
								window-clock.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										235
									
								
								window-clock.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,235 @@
 | 
			
		||||
/* $Id: window-clock.c,v 1.1 2009-01-10 19:35:40 nicm Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2009 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
 *
 | 
			
		||||
 * Permission to use, copy, modify, and distribute this software for any
 | 
			
		||||
 * purpose with or without fee is hereby granted, provided that the above
 | 
			
		||||
 * copyright notice and this permission notice appear in all copies.
 | 
			
		||||
 *
 | 
			
		||||
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 | 
			
		||||
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 | 
			
		||||
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 | 
			
		||||
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 | 
			
		||||
 * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
 | 
			
		||||
 * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
 | 
			
		||||
 * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
#include "tmux.h"
 | 
			
		||||
 | 
			
		||||
struct screen *window_clock_init(struct window *);
 | 
			
		||||
void	window_clock_free(struct window *);
 | 
			
		||||
void	window_clock_resize(struct window *, u_int, u_int);
 | 
			
		||||
void	window_clock_key(struct window *, struct client *, int);
 | 
			
		||||
void	window_clock_timer(struct window *);
 | 
			
		||||
 | 
			
		||||
void	window_clock_draw_screen(struct window *);
 | 
			
		||||
 | 
			
		||||
const struct window_mode window_clock_mode = {
 | 
			
		||||
	window_clock_init,
 | 
			
		||||
	window_clock_free,
 | 
			
		||||
	window_clock_resize,
 | 
			
		||||
	window_clock_key,
 | 
			
		||||
	window_clock_timer
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct window_clock_mode_data {
 | 
			
		||||
	struct screen	        screen;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct screen *
 | 
			
		||||
window_clock_init(struct window *w)
 | 
			
		||||
{
 | 
			
		||||
	struct window_clock_mode_data	*data;
 | 
			
		||||
	struct screen			*s;
 | 
			
		||||
 | 
			
		||||
	w->modedata = data = xmalloc(sizeof *data);
 | 
			
		||||
 | 
			
		||||
	s = &data->screen;
 | 
			
		||||
	screen_init(s, screen_size_x(&w->base), screen_size_y(&w->base), 0);
 | 
			
		||||
	s->mode &= ~MODE_CURSOR;
 | 
			
		||||
 | 
			
		||||
	window_clock_draw_screen(w);
 | 
			
		||||
 | 
			
		||||
	return (s);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
window_clock_free(struct window *w)
 | 
			
		||||
{
 | 
			
		||||
	struct window_clock_mode_data	*data = w->modedata;
 | 
			
		||||
 | 
			
		||||
	screen_free(&data->screen);
 | 
			
		||||
	xfree(data);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
window_clock_resize(struct window *w, u_int sx, u_int sy)
 | 
			
		||||
{
 | 
			
		||||
	struct window_clock_mode_data	*data = w->modedata;
 | 
			
		||||
	struct screen			*s = &data->screen;
 | 
			
		||||
 | 
			
		||||
 	screen_resize(s, sx, sy);
 | 
			
		||||
	window_clock_draw_screen(w);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
window_clock_key(struct window *w, unused struct client *c, unused int key)
 | 
			
		||||
{
 | 
			
		||||
	window_reset_mode(w);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
window_clock_timer(struct window *w)
 | 
			
		||||
{
 | 
			
		||||
	window_clock_draw_screen(w);
 | 
			
		||||
	server_redraw_window(w);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
window_clock_draw_screen(struct window *w)
 | 
			
		||||
{
 | 
			
		||||
	struct window_clock_mode_data	*data = w->modedata;
 | 
			
		||||
	struct screen			*s = &data->screen;
 | 
			
		||||
	struct screen_write_ctx	 	 ctx;
 | 
			
		||||
	struct grid_cell		 gc;
 | 
			
		||||
	char				 tim[64], *ptr;
 | 
			
		||||
	time_t				 t;
 | 
			
		||||
	u_int				 colour, i, j, x, y, idx;
 | 
			
		||||
	char				 table[14][5][5] = {
 | 
			
		||||
 		{ { 1,1,1,1,1 }, /* 0 */
 | 
			
		||||
		  { 1,0,0,0,1 },
 | 
			
		||||
		  { 1,0,0,0,1 },
 | 
			
		||||
		  { 1,0,0,0,1 },
 | 
			
		||||
		  { 1,1,1,1,1 } },
 | 
			
		||||
 		{ { 0,0,0,0,1 }, /* 1 */
 | 
			
		||||
		  { 0,0,0,0,1 },
 | 
			
		||||
		  { 0,0,0,0,1 },
 | 
			
		||||
		  { 0,0,0,0,1 },
 | 
			
		||||
		  { 0,0,0,0,1 } },
 | 
			
		||||
 		{ { 1,1,1,1,1 }, /* 2 */
 | 
			
		||||
		  { 0,0,0,0,1 },
 | 
			
		||||
		  { 1,1,1,1,1 },
 | 
			
		||||
		  { 1,0,0,0,0 },
 | 
			
		||||
		  { 1,1,1,1,1 } },
 | 
			
		||||
 		{ { 1,1,1,1,1 }, /* 3 */
 | 
			
		||||
		  { 0,0,0,0,1 },
 | 
			
		||||
		  { 1,1,1,1,1 },
 | 
			
		||||
		  { 0,0,0,0,1 },
 | 
			
		||||
		  { 1,1,1,1,1 } },
 | 
			
		||||
 		{ { 1,0,0,0,1 }, /* 4 */
 | 
			
		||||
		  { 1,0,0,0,1 },
 | 
			
		||||
		  { 1,1,1,1,1 },
 | 
			
		||||
		  { 0,0,0,0,1 },
 | 
			
		||||
		  { 0,0,0,0,1 } },
 | 
			
		||||
 		{ { 1,1,1,1,1 }, /* 5 */
 | 
			
		||||
		  { 1,0,0,0,0 },
 | 
			
		||||
		  { 1,1,1,1,1 },
 | 
			
		||||
		  { 0,0,0,0,1 },
 | 
			
		||||
		  { 1,1,1,1,1 } },
 | 
			
		||||
 		{ { 1,1,1,1,1 }, /* 6 */
 | 
			
		||||
		  { 1,0,0,0,0 },
 | 
			
		||||
		  { 1,1,1,1,1 },
 | 
			
		||||
		  { 1,0,0,0,1 },
 | 
			
		||||
		  { 1,1,1,1,1 } },
 | 
			
		||||
 		{ { 1,1,1,1,1 }, /* 7 */
 | 
			
		||||
		  { 0,0,0,0,1 },
 | 
			
		||||
		  { 0,0,0,0,1 },
 | 
			
		||||
		  { 0,0,0,0,1 },
 | 
			
		||||
		  { 0,0,0,0,1 } },
 | 
			
		||||
 		{ { 1,1,1,1,1 }, /* 8 */
 | 
			
		||||
		  { 1,0,0,0,1 },
 | 
			
		||||
		  { 1,1,1,1,1 },
 | 
			
		||||
		  { 1,0,0,0,1 },
 | 
			
		||||
		  { 1,1,1,1,1 } },
 | 
			
		||||
 		{ { 1,1,1,1,1 }, /* 9 */
 | 
			
		||||
		  { 1,0,0,0,1 },
 | 
			
		||||
		  { 1,1,1,1,1 },
 | 
			
		||||
		  { 0,0,0,0,1 },
 | 
			
		||||
		  { 1,1,1,1,1 } },
 | 
			
		||||
 		{ { 0,0,0,0,0 }, /* : */
 | 
			
		||||
		  { 0,0,1,0,0 },
 | 
			
		||||
		  { 0,0,0,0,0 },
 | 
			
		||||
		  { 0,0,1,0,0 },
 | 
			
		||||
		  { 0,0,0,0,0 } },
 | 
			
		||||
 		{ { 1,1,1,1,1 }, /* A */
 | 
			
		||||
		  { 1,0,0,0,1 },
 | 
			
		||||
		  { 1,1,1,1,1 },
 | 
			
		||||
		  { 1,0,0,0,1 },
 | 
			
		||||
		  { 1,0,0,0,1 } },
 | 
			
		||||
 		{ { 1,1,1,1,1 }, /* P */
 | 
			
		||||
		  { 1,0,0,0,1 },
 | 
			
		||||
		  { 1,1,1,1,1 },
 | 
			
		||||
		  { 1,0,0,0,0 },
 | 
			
		||||
		  { 1,0,0,0,0 } },
 | 
			
		||||
 		{ { 1,0,0,0,1 }, /* M */
 | 
			
		||||
		  { 1,1,0,1,1 },
 | 
			
		||||
		  { 1,0,1,0,1 },
 | 
			
		||||
		  { 1,0,0,0,1 },
 | 
			
		||||
		  { 1,0,0,0,1 } },
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	colour = options_get_number(&w->options, "clock-mode-colour");
 | 
			
		||||
 | 
			
		||||
	t = time(NULL);
 | 
			
		||||
	if (options_get_number(&w->options, "clock-mode-style") == 0)
 | 
			
		||||
		strftime(tim, sizeof tim, "%l:%M %p", localtime(&t));
 | 
			
		||||
	else
 | 
			
		||||
		strftime(tim, sizeof tim, "%H:%M", localtime(&t));
 | 
			
		||||
 | 
			
		||||
	screen_write_start(&ctx, s, NULL, NULL);
 | 
			
		||||
	screen_write_clearscreen(&ctx);
 | 
			
		||||
	memcpy(&gc, &grid_default_cell, sizeof gc);
 | 
			
		||||
 | 
			
		||||
	if (screen_size_x(s) < 6 * strlen(tim) || screen_size_y(s) < 6) {
 | 
			
		||||
		if (screen_size_x(s) >= strlen(tim) && screen_size_y(s) != 0) {
 | 
			
		||||
			x = (screen_size_x(s) / 2) - (strlen(tim) / 2);
 | 
			
		||||
			y = screen_size_y(s) / 2;
 | 
			
		||||
			screen_write_cursormove(&ctx, x, y);
 | 
			
		||||
 | 
			
		||||
			gc.fg = colour;
 | 
			
		||||
			screen_write_puts(&ctx, &gc, "%s", tim);
 | 
			
		||||
		}
 | 
			
		||||
		screen_write_stop(&ctx);
 | 
			
		||||
		return;
 | 
			
		||||
	}		
 | 
			
		||||
 | 
			
		||||
	x = (screen_size_x(s) / 2) - 3 * strlen(tim);
 | 
			
		||||
	y = (screen_size_y(s) / 2) - 3;
 | 
			
		||||
 | 
			
		||||
	for (ptr = tim; *ptr != '\0'; ptr++) {
 | 
			
		||||
		if (*ptr >= '0' && *ptr <= '9')
 | 
			
		||||
			idx = *ptr - '0';
 | 
			
		||||
 		else if (*ptr == ':')
 | 
			
		||||
			idx = 10;
 | 
			
		||||
 		else if (*ptr == 'A')
 | 
			
		||||
			idx = 11;
 | 
			
		||||
 		else if (*ptr == 'P')
 | 
			
		||||
			idx = 12;
 | 
			
		||||
 		else if (*ptr == 'M')
 | 
			
		||||
			idx = 13;
 | 
			
		||||
		else {
 | 
			
		||||
			x += 6;
 | 
			
		||||
			continue;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		for (j = 0; j < 5; j++) {
 | 
			
		||||
			screen_write_cursormove(&ctx, x, y + j);
 | 
			
		||||
			for (i = 0; i < 5; i++) {
 | 
			
		||||
				if (table[idx][j][i])
 | 
			
		||||
					gc.bg = colour;
 | 
			
		||||
				else
 | 
			
		||||
					gc.bg = 0;
 | 
			
		||||
				screen_write_putc(&ctx, &gc, ' ');
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		x += 6;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	screen_write_stop(&ctx);
 | 
			
		||||
}
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: window-copy.c,v 1.36 2009-01-10 01:51:22 nicm Exp $ */
 | 
			
		||||
/* $Id: window-copy.c,v 1.37 2009-01-10 19:35:40 nicm Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -63,7 +63,8 @@ const struct window_mode window_copy_mode = {
 | 
			
		||||
	window_copy_init,
 | 
			
		||||
	window_copy_free,
 | 
			
		||||
	window_copy_resize,
 | 
			
		||||
	window_copy_key
 | 
			
		||||
	window_copy_key,
 | 
			
		||||
	NULL
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct window_copy_mode_data {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: window-more.c,v 1.22 2009-01-10 01:41:32 nicm Exp $ */
 | 
			
		||||
/* $Id: window-more.c,v 1.23 2009-01-10 19:35:40 nicm Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -38,7 +38,8 @@ const struct window_mode window_more_mode = {
 | 
			
		||||
	window_more_init,
 | 
			
		||||
	window_more_free,
 | 
			
		||||
	window_more_resize,
 | 
			
		||||
	window_more_key
 | 
			
		||||
	window_more_key,
 | 
			
		||||
	NULL
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct window_more_mode_data {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
/* $Id: window-scroll.c,v 1.25 2008-12-08 16:19:51 nicm Exp $ */
 | 
			
		||||
/* $Id: window-scroll.c,v 1.26 2009-01-10 19:35:40 nicm Exp $ */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
 | 
			
		||||
@@ -42,7 +42,8 @@ const struct window_mode window_scroll_mode = {
 | 
			
		||||
	window_scroll_init,
 | 
			
		||||
	window_scroll_free,
 | 
			
		||||
	window_scroll_resize,
 | 
			
		||||
	window_scroll_key
 | 
			
		||||
	window_scroll_key,
 | 
			
		||||
	NULL
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct window_scroll_mode_data {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user