degesch: add Meta-H to open the full log file
As opposed to just the visible backlog.
This commit is contained in:
		
							parent
							
								
									11aaf1b325
								
							
						
					
					
						commit
						bc54bf520d
					
				
							
								
								
									
										99
									
								
								degesch.c
									
									
									
									
									
								
							
							
						
						
									
										99
									
								
								degesch.c
									
									
									
									
									
								
							| @ -3037,12 +3037,9 @@ make_log_filename (const char *filename, struct str *output) | ||||
| 			str_append_c (output, tolower_ascii (*p)); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| buffer_open_log_file (struct app_context *ctx, struct buffer *buffer) | ||||
| static char * | ||||
| buffer_get_log_path (struct buffer *buffer) | ||||
| { | ||||
| 	if (!ctx->logging || buffer->log_file) | ||||
| 		return; | ||||
| 
 | ||||
| 	struct str path; | ||||
| 	str_init (&path); | ||||
| 	get_xdg_home_dir (&path, "XDG_DATA_HOME", ".local/share"); | ||||
| @ -3054,13 +3051,22 @@ buffer_open_log_file (struct app_context *ctx, struct buffer *buffer) | ||||
| 	str_append_c (&path, '/'); | ||||
| 	make_log_filename (buffer->name, &path); | ||||
| 	str_append (&path, ".log"); | ||||
| 	return str_steal (&path); | ||||
| } | ||||
| 
 | ||||
| 	if (!(buffer->log_file = fopen (path.str, "ab"))) | ||||
| static void | ||||
| buffer_open_log_file (struct app_context *ctx, struct buffer *buffer) | ||||
| { | ||||
| 	if (!ctx->logging || buffer->log_file) | ||||
| 		return; | ||||
| 
 | ||||
| 	char *path = buffer_get_log_path (buffer); | ||||
| 	if (!(buffer->log_file = fopen (path, "ab"))) | ||||
| 		log_global_error (ctx, "Couldn't open log file `#s': #s", | ||||
| 			path.str, strerror (errno)); | ||||
| 			path, strerror (errno)); | ||||
| 	else | ||||
| 		set_cloexec (fileno (buffer->log_file)); | ||||
| 	str_free (&path); | ||||
| 	free (path); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| @ -9046,18 +9052,9 @@ exec_backlog_helper (const char *command, FILE *backlog) | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| display_backlog (struct app_context *ctx) | ||||
| launch_backlog_helper (struct app_context *ctx, FILE *backlog) | ||||
| { | ||||
| 	hard_assert (!ctx->running_backlog_helper); | ||||
| 
 | ||||
| 	FILE *backlog = tmpfile (); | ||||
| 	set_cloexec (fileno (backlog)); | ||||
| 
 | ||||
| 	for (struct buffer_line *line = ctx->current_buffer->lines; | ||||
| 		line; line = line->next) | ||||
| 		buffer_line_write_to_backlog (ctx, line, backlog); | ||||
| 
 | ||||
| 	rewind (backlog); | ||||
| 	suspend_terminal (ctx); | ||||
| 
 | ||||
| 	pid_t child = fork (); | ||||
| @ -9083,6 +9080,47 @@ display_backlog (struct app_context *ctx) | ||||
| 	fclose (backlog); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| display_backlog (struct app_context *ctx) | ||||
| { | ||||
| 	FILE *backlog = tmpfile (); | ||||
| 	if (!backlog) | ||||
| 	{ | ||||
| 		log_global_error (ctx, "#s: #s", | ||||
| 			"Failed to create a temporary file", strerror (errno)); | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	for (struct buffer_line *line = ctx->current_buffer->lines; | ||||
| 		line; line = line->next) | ||||
| 		buffer_line_write_to_backlog (ctx, line, backlog); | ||||
| 
 | ||||
| 	rewind (backlog); | ||||
| 	set_cloexec (fileno (backlog)); | ||||
| 	launch_backlog_helper (ctx, backlog); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| display_full_log (struct app_context *ctx) | ||||
| { | ||||
| 	char *path = buffer_get_log_path (ctx->current_buffer); | ||||
| 	FILE *full_log = fopen (path, "rb"); | ||||
| 	free (path); | ||||
| 
 | ||||
| 	if (!full_log) | ||||
| 	{ | ||||
| 		log_global_error (ctx, "Failed to open log file for #s: #s", | ||||
| 			ctx->current_buffer->name, strerror (errno)); | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	if (ctx->current_buffer->log_file) | ||||
| 		fflush (ctx->current_buffer->log_file); | ||||
| 
 | ||||
| 	set_cloexec (fileno (full_log)); | ||||
| 	launch_backlog_helper (ctx, full_log); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| bind_common_keys (struct app_context *ctx) | ||||
| { | ||||
| @ -9095,6 +9133,7 @@ bind_common_keys (struct app_context *ctx) | ||||
| 		input_bind_meta (self, '0' + i, "goto-buffer"); | ||||
| 
 | ||||
| 	input_bind_meta (self, 'm', "insert-attribute"); | ||||
| 	input_bind_meta (self, 'h', "display-full-log"); | ||||
| 
 | ||||
| 	if (key_f5) | ||||
| 		input_bind (self, key_f5, "previous-buffer"); | ||||
| @ -9153,6 +9192,17 @@ on_readline_display_backlog (int count, int key) | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static int | ||||
| on_readline_display_full_log (int count, int key) | ||||
| { | ||||
| 	(void) count; | ||||
| 	(void) key; | ||||
| 
 | ||||
| 	struct app_context *ctx = g_ctx; | ||||
| 	display_full_log (ctx); | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static int | ||||
| on_readline_redraw_screen (int count, int key) | ||||
| { | ||||
| @ -9246,6 +9296,7 @@ app_readline_init (void) | ||||
| 	rl_add_defun ("next-buffer",      on_readline_next_buffer,      -1); | ||||
| 	rl_add_defun ("goto-buffer",      on_readline_goto_buffer,      -1); | ||||
| 	rl_add_defun ("display-backlog",  on_readline_display_backlog,  -1); | ||||
| 	rl_add_defun ("display-full-log", on_readline_display_full_log, -1); | ||||
| 	rl_add_defun ("redraw-screen",    on_readline_redraw_screen,    -1); | ||||
| 	rl_add_defun ("insert-attribute", on_readline_insert_attribute, -1); | ||||
| 	rl_add_defun ("send-line",        on_readline_return,           -1); | ||||
| @ -9314,6 +9365,15 @@ on_editline_display_backlog (EditLine *editline, int key) | ||||
| 	display_backlog (g_ctx); | ||||
| } | ||||
| 
 | ||||
| static unsigned char | ||||
| on_editline_display_full_log (EditLine *editline, int key) | ||||
| { | ||||
| 	(void) editline; | ||||
| 	(void) key; | ||||
| 
 | ||||
| 	display_full_log (g_ctx); | ||||
| } | ||||
| 
 | ||||
| static unsigned char | ||||
| on_editline_redraw_screen (EditLine *editline, int key) | ||||
| { | ||||
| @ -9430,7 +9490,8 @@ app_editline_init (struct input *self) | ||||
| 		{ "goto-buffer",      "Go to buffer",    on_editline_goto_buffer      }, | ||||
| 		{ "previous-buffer",  "Previous buffer", on_editline_previous_buffer  }, | ||||
| 		{ "next-buffer",      "Next buffer",     on_editline_next_buffer      }, | ||||
| 		{ "display-backlog",  "Display backlog", on_editline_display_backlog  }, | ||||
| 		{ "display-backlog",  "Show backlog",    on_editline_display_backlog  }, | ||||
| 		{ "display-full-log", "Show full log",   on_editline_display_full_log }, | ||||
| 		{ "redraw-screen",    "Redraw screen",   on_editline_redraw_screen    }, | ||||
| 		{ "insert-attribute", "mIRC formatting", on_editline_insert_attribute }, | ||||
| 		{ "send-line",        "Send line",       on_editline_return           }, | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user