/*
- * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2007 Hiroyuki Yamamoto and the Claws Mail Team
+ * Claws Mail -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 1999-2020 The Claws Mail Team and Hiroyuki Yamamoto
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
#include "quote_fmt.h"
#include "quote_fmt_lex.h"
#include "account.h"
+#include "file-utils.h"
/* decl */
/*
if (fp == NULL)
g_warning("Can't get text part");
else {
+ account_sigsep_matchlist_create();
while (fgets(buf, sizeof(buf), fp) != NULL) {
strcrchomp(buf);
-
- if (!signature && strncmp(buf, "-- \n", 4) == 0)
+
+ if (!signature && account_sigsep_matchlist_nchar_found(buf, "%s\n"))
break;
if (quoted && quote_str)
INSERT(buf);
}
+ account_sigsep_matchlist_delete();
fclose(fp);
}
}
static void quote_fmt_insert_file(const gchar *filename)
{
FILE *file;
- char buffer[256];
+ char buffer[PATH_MAX];
if ((file = g_fopen(filename, "rb")) != NULL) {
while (fgets(buffer, sizeof(buffer), file)) {
static void quote_fmt_insert_program_output(const gchar *progname)
{
FILE *file;
- char buffer[256];
+ char buffer[BUFFSIZE];
- if ((file = popen(progname, "r")) != NULL) {
+ if ((file = get_command_output_stream(progname)) != NULL) {
while (fgets(buffer, sizeof(buffer), file)) {
INSERT(buffer);
}
- pclose(file);
+ close(file);
}
}
static void quote_fmt_insert_user_input(const gchar *varname)
{
- gchar *buf = NULL;
- gchar *text = NULL;
-
- if (dry_run)
- return;
-
- if ((text = g_hash_table_lookup(var_table, varname)) == NULL) {
- buf = g_strdup_printf(_("Enter text to replace '%s'"), varname);
- text = input_dialog(_("Enter variable"), buf, "");
- g_free(buf);
- if (!text)
- return;
- g_hash_table_insert(var_table, g_strdup(varname), g_strdup(text));
- } else {
- /* don't free the one in hashtable at the end */
- text = g_strdup(text);
- }
-
- if (!text)
- return;
- INSERT(text);
- g_free(text);
+ gchar *buf = NULL;
+ gchar *text = NULL;
+
+ if (dry_run)
+ return;
+
+ if ((text = g_hash_table_lookup(var_table, varname)) == NULL) {
+ buf = g_strdup_printf(_("Enter text to replace '%s'"), varname);
+ text = input_dialog(_("Enter variable"), buf, "");
+ g_free(buf);
+ if (!text)
+ return;
+ g_hash_table_insert(var_table, g_strdup(varname), g_strdup(text));
+ } else {
+ /* don't free the one in hashtable at the end */
+ text = g_strdup(text);
+ }
+
+ if (!text)
+ return;
+ INSERT(text);
+ g_free(text);
}
static void quote_fmt_attach_file(const gchar *filename)
attachments = g_list_append(attachments, g_strdup(filename));
}
+static void quote_fmt_attach_file_program_output(const gchar *progname)
+{
+ FILE *file;
+ char buffer[BUFFSIZE];
+
+ if ((file = get_command_output_stream(progname)) != NULL) {
+ /* get first line only */
+ if (fgets(buffer, sizeof(buffer), file)) {
+ /* trim trailing CR/LF */
+ strretchomp(buffer);
+ attachments = g_list_append(attachments, g_strdup(buffer));
+ }
+ close(file);
+ }
+}
+
static gchar *quote_fmt_complete_address(const gchar *addr)
{
gint count;
%token QUERY_NOT_TO_FOUND_IN_ADDRESSBOOK
/* other tokens */
%token INSERT_FILE INSERT_PROGRAMOUTPUT INSERT_USERINPUT
-%token ATTACH_FILE
+%token ATTACH_FILE ATTACH_PROGRAMOUTPUT
%token OPARENT CPARENT
%token CHARACTER
%token SHOW_DATE_EXPR
if (!dry_run) {
quote_fmt_attach_file(sub_expr.buffer);
}
+ }
+ | ATTACH_PROGRAMOUTPUT
+ {
+ current = &sub_expr;
+ clear_buffer();
+ }
+ OPARENT sub_expr CPARENT
+ {
+ current = &main_expr;
+ if (!dry_run) {
+ quote_fmt_attach_file_program_output(sub_expr.buffer);
+ }
};
+;