Warn when sending to more than N recipients. This features obeys
[claws.git] / src / prefs_common.c
1 /*
2  * Claws Mail -- a GTK+ based, lightweight, and fast e-mail client
3  * Copyright (C) 1999-2016 Hiroyuki Yamamoto and the Claws Mail team
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 3 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program. If not, see <http://www.gnu.org/licenses/>.
17  */
18
19 #ifdef HAVE_CONFIG_H
20 #include "config.h"
21 #include "claws-features.h"
22 #endif
23
24 #include "defs.h"
25
26 #include <glib.h>
27 #include <glib/gi18n.h>
28 #include <gtk/gtk.h>
29 #include <gdk/gdkkeysyms.h>
30 #include <stdio.h>
31 #include <stdlib.h>
32 #include <string.h>
33 #include <unistd.h>
34 #include <sys/types.h>
35 #include <sys/stat.h>
36 #include <errno.h>
37
38 #include "main.h"
39 #include "prefs_gtk.h"
40 #include "prefs_common.h"
41 #include "prefs_display_header.h"
42 #include "prefs_summary_column.h"
43 #include "prefs_folder_column.h"
44 #include "mainwindow.h"
45 #include "summaryview.h"
46 #include "folderview.h"
47 #include "messageview.h"
48 #include "manage_window.h"
49 #include "inc.h"
50 #include "menu.h"
51 #include "codeconv.h"
52 #include "utils.h"
53 #include "gtkutils.h"
54 #include "alertpanel.h"
55 #include "folder.h"
56 #include "socket.h"
57 #include "filesel.h"
58 #include "folderview.h"
59 #include "stock_pixmap.h"
60 #include "prefswindow.h"
61 #include "colorlabel.h"
62 #ifndef USE_ALT_ADDRBOOK
63         #include "addrcustomattr.h"
64 #endif
65
66 enum {
67         DATEFMT_FMT,
68         DATEFMT_TXT,
69         N_DATEFMT_COLUMNS
70 };
71
72 PrefsCommon prefs_common;
73
74 GtkWidget *notebook;
75
76 #ifdef G_OS_WIN32
77 /*
78  * In the Windows version prefs_common contains
79  *   - the non-OS-specific settings of the "Common" section and
80  *   - the OS-specific settings of the "CommonWin32" section
81  * The OS-specific settings of the "Common" section are not used
82  * but saved in prefs_unix.
83  */
84
85 #  define SPECIFIC_PREFS prefs_unix
86
87 static PrefsCommon prefs_unix;
88
89 static PrefParam param_os_specific[] = {
90         /* Receive */
91         {"ext_inc_path", "",
92          &prefs_common.extinc_cmd, P_STRING, NULL, NULL, NULL},
93         {"newmail_notify_cmd", "",
94          &prefs_common.newmail_notify_cmd, P_STRING, NULL, NULL, NULL},
95
96         /* new fonts */
97         {"widget_font_gtk2",    NULL,
98           &prefs_common.widgetfont,             P_STRING, NULL, NULL, NULL},
99         {"message_font_gtk2",   "Monospace 9",
100          &prefs_common.textfont,                P_STRING, NULL, NULL, NULL},
101         {"print_font_gtk2",     "Monospace 9",
102          &prefs_common.printfont,               P_STRING, NULL, NULL, NULL},
103         {"small_font_gtk2",     "Sans 9",
104           &prefs_common.smallfont,              P_STRING, NULL, NULL, NULL},
105         {"normal_font_gtk2",    "Sans 9",
106           &prefs_common.normalfont,             P_STRING, NULL, NULL, NULL},
107         {"bold_font_gtk2",      "Sans 9 Bold",
108           &prefs_common.boldfont,               P_STRING, NULL, NULL, NULL},
109         /* Message */
110         {"attach_save_directory", NULL,
111          &prefs_common.attach_save_dir, P_STRING, NULL, NULL, NULL},
112         {"attach_load_directory", NULL,
113          &prefs_common.attach_load_dir, P_STRING, NULL, NULL, NULL},
114
115         /* MIME viewer */
116         {"mime_textviewer", NULL,
117          &prefs_common.mime_textviewer,   P_STRING, NULL, NULL, NULL},
118         {"mime_open_command", "notepad '%s'",
119          &prefs_common.mime_open_cmd,     P_STRING, NULL, NULL, NULL},
120
121         /* Interface */
122         {"pixmap_theme_path", DEFAULT_PIXMAP_THEME, 
123          &prefs_common.pixmap_theme_path, P_STRING, NULL, NULL, NULL},
124
125         /* Other */
126         {"ext_editor_command", "notepad %s",
127          &prefs_common.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
128
129         {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
130 };
131 #else
132 #  define SPECIFIC_PREFS prefs_common
133 #endif
134
135 /*
136    parameter name, default value, pointer to the prefs variable, data type,
137    pointer to the widget pointer,
138    pointer to the function for data setting,
139    pointer to the function for widget setting
140  */
141
142 static PrefParam param[] = {
143         {"config_version", "0",
144          &prefs_common.config_version, P_INT, NULL, NULL, NULL},
145
146         /* Receive */
147         {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
148          NULL, NULL, NULL},
149         {"ext_inc_path", DEFAULT_INC_PATH, &SPECIFIC_PREFS.extinc_cmd, P_STRING,
150          NULL, NULL, NULL},
151
152         {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
153          NULL, NULL, NULL},
154         {"autochk_interval", "600", &prefs_common.autochk_itv, P_INT,
155          NULL, NULL, NULL},
156         {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
157          NULL, NULL, NULL},
158         {"open_inbox_on_inc", "FALSE", &prefs_common.open_inbox_on_inc,
159          P_BOOL, NULL, NULL, NULL},
160         {"scan_all_after_inc", "FALSE", &prefs_common.scan_all_after_inc,
161          P_BOOL, NULL, NULL, NULL},
162         {"newmail_notify_manu", "FALSE", &prefs_common.newmail_notify_manu,
163          P_BOOL, NULL, NULL, NULL},
164         {"newmail_notify_auto", "FALSE", &prefs_common.newmail_notify_auto,
165         P_BOOL, NULL, NULL, NULL},
166         {"newmail_notify_cmd", "", &SPECIFIC_PREFS.newmail_notify_cmd, P_STRING,
167          NULL, NULL, NULL},
168         {"receive_dialog_mode", "2", &prefs_common.recv_dialog_mode, P_ENUM,
169          NULL, NULL, NULL},
170         {"receivewin_width", "460", &prefs_common.receivewin_width, P_INT,
171          NULL, NULL, NULL},
172         {"receivewin_height", "-1", &prefs_common.receivewin_height, P_INT,
173          NULL, NULL, NULL},
174         {"no_receive_error_panel", "FALSE", &prefs_common.no_recv_err_panel,
175          P_BOOL, NULL, NULL, NULL},
176         {"close_receive_dialog", "TRUE", &prefs_common.close_recv_dialog,
177          P_BOOL, NULL, NULL, NULL},
178  
179         /* Send */
180         {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
181          NULL, NULL, NULL},
182         {"confirm_send_queued_messages", "FALSE", &prefs_common.confirm_send_queued_messages,
183          P_BOOL, NULL, NULL, NULL},
184 #ifndef GENERIC_UMPC
185         {"send_dialog_mode", "0", &prefs_common.send_dialog_invisible, P_BOOL,
186          NULL, NULL, NULL},
187 #else
188         {"send_dialog_mode", "1", &prefs_common.send_dialog_invisible, P_BOOL,
189          NULL, NULL, NULL},
190 #endif
191         {"sendwin_width", "460", &prefs_common.sendwin_width, P_INT,
192          NULL, NULL, NULL},
193         {"sendwin_height", "-1", &prefs_common.sendwin_height, P_INT,
194          NULL, NULL, NULL},
195
196         {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
197          NULL, NULL, NULL},
198         {"encoding_method", "0", &prefs_common.encoding_method, P_ENUM,
199          NULL, NULL, NULL},
200         {"outgoing_fallback_to_ascii", "TRUE", &prefs_common.outgoing_fallback_to_ascii, P_BOOL,
201          NULL, NULL, NULL},
202          {"rewrite_first_from", "TRUE", &prefs_common.rewrite_first_from,
203           P_BOOL, NULL, NULL, NULL},
204         {"warn_empty_subj", "TRUE", &prefs_common.warn_empty_subj,
205          P_BOOL, NULL, NULL, NULL},
206         {"warn_sending_many_recipients", "FALSE", &prefs_common.warn_sending_many_recipients,
207          P_BOOL, NULL, NULL, NULL},
208         {"warn_sending_many_recipients_num", "1", &prefs_common.warn_sending_many_recipients_num, P_INT,
209          NULL, NULL, NULL},
210         {"hide_timezone", "FALSE", &prefs_common.hide_timezone,
211          P_BOOL, NULL, NULL, NULL},
212         {"allow_jisx0201_kana", "FALSE", &prefs_common.allow_jisx0201_kana,
213          P_BOOL, NULL, NULL, NULL},
214
215         /* Compose */
216         {"auto_ext_editor", "FALSE", &prefs_common.auto_exteditor, P_BOOL,
217          NULL, NULL, NULL},
218         {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
219          P_BOOL, NULL, NULL, NULL},
220         {"redirect_keep_from", "FALSE",
221          &prefs_common.redirect_keep_from, P_BOOL,
222          NULL, NULL, NULL},
223         {"undo_level", "50", &prefs_common.undolevels, P_INT,
224          NULL, NULL, NULL},
225         {"compose_with_format", "FALSE", &prefs_common.compose_with_format, P_BOOL,
226          NULL, NULL, NULL},
227         {"compose_subject_format", "",
228          &prefs_common.compose_subject_format, P_STRING, NULL, NULL, NULL},
229         {"compose_body_format", N_("Hello,\\n"),
230          &prefs_common.compose_body_format, P_STRING, NULL, NULL, NULL},
231         {"show_compose_margin", "FALSE", &prefs_common.show_compose_margin, P_BOOL,
232          NULL, NULL, NULL},
233         {"type_any_header", "FALSE", &prefs_common.type_any_header, P_BOOL,
234          NULL, NULL, NULL},
235         
236
237         {"linewrap_length", "72", &prefs_common.linewrap_len, P_INT,
238          NULL, NULL, NULL},
239         {"linewrap_quotation", "TRUE", &prefs_common.linewrap_quote, P_BOOL,
240          NULL, NULL, NULL},
241         {"linewrap_pastes", "TRUE", &prefs_common.linewrap_pastes, P_BOOL,
242          NULL, NULL, NULL},
243         {"primary_paste_unselects", "FALSE", &prefs_common.primary_paste_unselects, P_BOOL,
244          NULL, NULL, NULL},
245         {"linewrap_auto", "TRUE", &prefs_common.autowrap, P_BOOL,
246          NULL, NULL, NULL},
247         {"auto_indent", "TRUE", &prefs_common.auto_indent, P_BOOL,
248          NULL, NULL, NULL},
249         {"autosave", "TRUE", &prefs_common.autosave,
250          P_BOOL, NULL, NULL, NULL},
251         {"autosave_length", "50", &prefs_common.autosave_length, P_INT,
252          NULL, NULL, NULL},
253         {"autosave_encrypted", "FALSE", &prefs_common.autosave_encrypted,
254          P_BOOL, NULL, NULL, NULL},
255         {"warn_large_insert", "TRUE", &prefs_common.warn_large_insert,
256          P_BOOL, NULL, NULL, NULL},
257         {"warn_large_insert_size", "500", &prefs_common.warn_large_insert_size,
258          P_INT, NULL, NULL, NULL},
259
260         {"enable_aspell", "TRUE", &prefs_common.enable_aspell, P_BOOL,
261          NULL, NULL, NULL},
262         {"dictionary",  "", &prefs_common.dictionary, P_STRING,
263          NULL, NULL, NULL},
264         {"alt_dictionary",  "", &prefs_common.alt_dictionary, P_STRING,
265          NULL, NULL, NULL},
266         {"use_alternate_dict", "FALSE", &prefs_common.use_alternate, P_BOOL,
267          NULL, NULL, NULL},
268         {"check_while_typing", "TRUE", &prefs_common.check_while_typing, P_BOOL,
269          NULL, NULL, NULL},
270         {"recheck_when_changing_dict", "TRUE", &prefs_common.recheck_when_changing_dict,
271          P_BOOL, NULL, NULL, NULL},
272         {"misspelled_color", "#ff0000", &prefs_common.misspelled_col, P_COLOR,
273          NULL, NULL, NULL},
274         {"use_both_dicts", "FALSE", &prefs_common.use_both_dicts, P_BOOL,
275          NULL, NULL, NULL},
276
277         {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
278          NULL, NULL, NULL},
279         {"compose_dnd_insert_or_attach", "0", &prefs_common.compose_dnd_mode, P_ENUM,
280          NULL, NULL, NULL},
281
282         /* Account autoselection */
283         {"reply_account_autoselect", "TRUE",
284          &prefs_common.reply_account_autosel, P_BOOL,
285          NULL, NULL, NULL},
286         {"forward_account_autoselect", "TRUE",
287          &prefs_common.forward_account_autosel, P_BOOL,
288          NULL, NULL, NULL},
289         {"reedit_account_autoselect", "TRUE",
290          &prefs_common.reedit_account_autosel, P_BOOL,
291          NULL, NULL, NULL},
292
293         {"default_reply_list", "TRUE", &prefs_common.default_reply_list, P_BOOL,
294          NULL, NULL, NULL},
295
296 #ifndef GENERIC_UMPC
297         {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
298          NULL, NULL, NULL},
299 #else
300         {"show_ruler", "FALSE", &prefs_common.show_ruler, P_BOOL,
301          NULL, NULL, NULL},
302 #endif
303
304         /* Quote */
305         {"reply_quote_mark", "> ", &prefs_common.quotemark, P_STRING,
306          NULL, NULL, NULL},
307         {"reply_quote_format", N_("On %d\\n%f wrote:\\n\\n%q\\n%X"),
308          &prefs_common.quotefmt, P_STRING, NULL, NULL, NULL},
309
310         {"forward_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
311          NULL, NULL, NULL},
312         {"forward_quote_format",
313          N_("\\n\\nBegin forwarded message:\\n\\n"
314          "?d{Date: %d\\n}?f{From: %f\\n}?t{To: %t\\n}?c{Cc: %c\\n}"
315          "?n{Newsgroups: %n\\n}?s{Subject: %s\\n}\\n\\n%M"),
316          &prefs_common.fw_quotefmt, P_STRING,
317          NULL, NULL, NULL},
318         {"quote_chars", ">", &prefs_common.quote_chars, P_STRING,
319          NULL, NULL, NULL},
320
321         /* Display */
322         /* Obsolete fonts. For coexisting with Gtk+-1.2 version */
323         {"widget_font",         NULL,
324           &prefs_common.widgetfont_gtk1,        P_STRING, NULL, NULL, NULL},
325         {"message_font",        "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
326          &prefs_common.textfont_gtk1,           P_STRING, NULL, NULL, NULL},
327         {"small_font",          "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
328           &prefs_common.smallfont_gtk1,         P_STRING, NULL, NULL, NULL},
329         {"bold_font",           "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
330           &prefs_common.boldfont_gtk1,          P_STRING, NULL, NULL, NULL},
331         {"normal_font",         "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
332           &prefs_common.normalfont_gtk1,        P_STRING, NULL, NULL, NULL},
333
334         /* new fonts */
335 #ifndef GENERIC_UMPC
336         {"widget_font_gtk2",    NULL,
337           &SPECIFIC_PREFS.widgetfont,           P_STRING, NULL, NULL, NULL},
338         {"message_font_gtk2",   "Monospace 9",
339          &SPECIFIC_PREFS.textfont,                      P_STRING, NULL, NULL, NULL},
340         {"print_font_gtk2",     "Monospace 9",
341          &SPECIFIC_PREFS.printfont,             P_STRING, NULL, NULL, NULL},
342         {"small_font_gtk2",     "Sans 9",
343           &SPECIFIC_PREFS.smallfont,            P_STRING, NULL, NULL, NULL},
344         {"normal_font_gtk2",    "Sans 9",
345           &SPECIFIC_PREFS.normalfont,           P_STRING, NULL, NULL, NULL},
346         {"bold_font_gtk2",      "Sans Bold 9",
347           &SPECIFIC_PREFS.boldfont,             P_STRING, NULL, NULL, NULL},
348 #else
349         {"widget_font_gtk2",    NULL,
350           &SPECIFIC_PREFS.widgetfont,           P_STRING, NULL, NULL, NULL},
351         {"message_font_gtk2",   "Monospace 8",
352          &SPECIFIC_PREFS.textfont,                      P_STRING, NULL, NULL, NULL},
353         {"print_font_gtk2",     "Monospace 8",
354          &SPECIFIC_PREFS.printfont,             P_STRING, NULL, NULL, NULL},
355         {"small_font_gtk2",     "Sans 8",
356           &SPECIFIC_PREFS.smallfont,            P_STRING, NULL, NULL, NULL},
357         {"normal_font_gtk2",    "Sans 8",
358           &SPECIFIC_PREFS.normalfont,           P_STRING, NULL, NULL, NULL},
359         {"bold_font_gtk2",      "Sans Bold 8",
360           &SPECIFIC_PREFS.boldfont,             P_STRING, NULL, NULL, NULL},
361 #endif
362
363         {"use_different_print_font", "FALSE", &prefs_common.use_different_print_font, P_BOOL,
364          NULL, NULL, NULL},
365         {"derive_from_normal_font", "TRUE", &prefs_common.derive_from_normal_font, P_BOOL,
366          NULL, NULL, NULL},
367
368         /* custom colors */
369         {"custom_color1", "#ff9900", &prefs_common.custom_colorlabel[0].color, P_COLOR,
370          NULL, NULL, NULL},
371         {"custom_colorlabel1", N_("Orange"), &prefs_common.custom_colorlabel[0].label, P_STRING,
372          NULL, NULL, NULL},
373         {"custom_color2", "#ff0000", &prefs_common.custom_colorlabel[1].color, P_COLOR,
374          NULL, NULL, NULL},
375         {"custom_colorlabel2", N_("Red"), &prefs_common.custom_colorlabel[1].label, P_STRING,
376          NULL, NULL, NULL},
377         {"custom_color3", "#ff66ff", &prefs_common.custom_colorlabel[2].color, P_COLOR,
378          NULL, NULL, NULL},
379         {"custom_colorlabel3", N_("Pink"), &prefs_common.custom_colorlabel[2].label, P_STRING,
380          NULL, NULL, NULL},
381         {"custom_color4", "#00ccff", &prefs_common.custom_colorlabel[3].color, P_COLOR,
382          NULL, NULL, NULL},
383         {"custom_colorlabel4", N_("Sky blue"), &prefs_common.custom_colorlabel[3].label, P_STRING,
384          NULL, NULL, NULL},
385         {"custom_color5", "#0000ff", &prefs_common.custom_colorlabel[4].color, P_COLOR,
386          NULL, NULL, NULL},
387         {"custom_colorlabel5", N_("Blue"), &prefs_common.custom_colorlabel[4].label, P_STRING,
388          NULL, NULL, NULL},
389         {"custom_color6", "#009900", &prefs_common.custom_colorlabel[5].color, P_COLOR,
390          NULL, NULL, NULL},
391         {"custom_colorlabel6", N_("Green"), &prefs_common.custom_colorlabel[5].label, P_STRING,
392          NULL, NULL, NULL},
393         {"custom_color7", "#663333", &prefs_common.custom_colorlabel[6].color, P_COLOR,
394          NULL, NULL, NULL},
395         {"custom_colorlabel7", N_("Brown"), &prefs_common.custom_colorlabel[6].label, P_STRING,
396          NULL, NULL, NULL},
397         {"custom_color8", "#aaaaaa", &prefs_common.custom_colorlabel[7].color, P_COLOR,
398          NULL, NULL, NULL},
399         {"custom_colorlabel8", N_("Grey"), &prefs_common.custom_colorlabel[7].label, P_STRING,
400          NULL, NULL, NULL},
401         {"custom_color9", "#c07254", &prefs_common.custom_colorlabel[8].color, P_COLOR,
402          NULL, NULL, NULL},
403         {"custom_colorlabel9", N_("Light brown"), &prefs_common.custom_colorlabel[8].label, P_STRING,
404          NULL, NULL, NULL},
405         {"custom_color10", "#c00000", &prefs_common.custom_colorlabel[9].color, P_COLOR,
406          NULL, NULL, NULL},
407         {"custom_colorlabel10", N_("Dark red"), &prefs_common.custom_colorlabel[9].label, P_STRING,
408          NULL, NULL, NULL},
409         {"custom_color11", "#cc1074", &prefs_common.custom_colorlabel[10].color, P_COLOR,
410          NULL, NULL, NULL},
411         {"custom_colorlabel11", N_("Dark pink"), &prefs_common.custom_colorlabel[10].label, P_STRING,
412          NULL, NULL, NULL},
413         {"custom_color12", "#5094cd", &prefs_common.custom_colorlabel[11].color, P_COLOR,
414          NULL, NULL, NULL},
415         {"custom_colorlabel12", N_("Steel blue"), &prefs_common.custom_colorlabel[11].label, P_STRING,
416          NULL, NULL, NULL},
417         {"custom_color13", "#ffd500", &prefs_common.custom_colorlabel[12].color, P_COLOR,
418          NULL, NULL, NULL},
419         {"custom_colorlabel13", N_("Gold"), &prefs_common.custom_colorlabel[12].label, P_STRING,
420          NULL, NULL, NULL},
421         {"custom_color14", "#00d800", &prefs_common.custom_colorlabel[13].color, P_COLOR,
422          NULL, NULL, NULL},
423         {"custom_colorlabel14", N_("Bright green"), &prefs_common.custom_colorlabel[13].label, P_STRING,
424          NULL, NULL, NULL},
425         {"custom_color15", "#c060c0", &prefs_common.custom_colorlabel[14].color, P_COLOR,
426          NULL, NULL, NULL},
427         {"custom_colorlabel15", N_("Magenta"), &prefs_common.custom_colorlabel[14].label, P_STRING,
428          NULL, NULL, NULL},
429
430         /* image viewer */
431         {"display_image", "TRUE", &prefs_common.display_img, P_BOOL,
432          NULL, NULL, NULL},
433         {"resize_image", "TRUE", &prefs_common.resize_img, P_BOOL,
434          NULL, NULL, NULL},
435         {"inline_image", "TRUE", &prefs_common.inline_img, P_BOOL,
436          NULL, NULL, NULL},
437
438         {"display_folder_unread_num", "0",
439          &prefs_common.display_folder_unread, P_INT,
440          NULL, NULL, NULL},
441         {"newsgroup_abbrev_len", "16",
442          &prefs_common.ng_abbrev_len, P_INT,
443          NULL, NULL, NULL},
444
445         {"translate_header", "FALSE", &prefs_common.trans_hdr, P_BOOL,
446          NULL, NULL, NULL},
447
448         /* Display: Summary View */
449         {"default_sort_key", "3", &prefs_common.default_sort_key, P_ENUM,
450          NULL, NULL, NULL},
451         {"default_sort_type", "1", &prefs_common.default_sort_type, P_ENUM,
452          NULL, NULL, NULL},
453         {"use_address_book", "FALSE", &prefs_common.use_addr_book, P_BOOL,
454          NULL, NULL, NULL},
455         {"thread_by_subject", "TRUE", &prefs_common.thread_by_subject, P_BOOL,
456          NULL, NULL, NULL},
457         {"date_format", N_("%x(%a) %H:%M"), &prefs_common.date_format,
458          P_STRING, NULL, NULL, NULL},
459         {"msgview_date_format", "FALSE", &prefs_common.msgview_date_format, P_BOOL,
460          NULL, NULL, NULL},
461
462         {"next_on_delete", "FALSE", &prefs_common.next_on_delete, P_BOOL,
463          NULL, NULL, NULL},
464
465          {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
466          NULL, NULL, NULL},
467
468         {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
469          NULL, NULL, NULL},
470 #ifndef GENERIC_UMPC
471         {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
472          NULL, NULL, NULL},
473 #else
474         {"toolbar_style", "1", &prefs_common.toolbar_style, P_ENUM,
475          NULL, NULL, NULL},
476 #endif
477         {"toolbar_detachable", "FALSE", &prefs_common.toolbar_detachable, P_BOOL,
478          NULL, NULL, NULL},
479         {"show_col_headers", "TRUE", &prefs_common.show_col_headers, P_BOOL,
480          NULL, NULL, NULL},
481 #ifndef GENERIC_UMPC
482         {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
483          NULL, NULL, NULL},
484         {"show_searchbar", "TRUE", &prefs_common.show_searchbar, P_BOOL,
485          NULL, NULL, NULL},
486 #else
487         {"show_statusbar", "FALSE", &prefs_common.show_statusbar, P_BOOL,
488          NULL, NULL, NULL},
489         {"show_searchbar", "FALSE", &prefs_common.show_searchbar, P_BOOL,
490          NULL, NULL, NULL},
491 #endif
492
493         {"summary_col_show_mark", "TRUE",
494          &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
495         {"summary_col_show_unread", "TRUE",
496          &prefs_common.summary_col_visible[S_COL_STATUS], P_BOOL, NULL, NULL, NULL},
497         {"summary_col_show_subject", "TRUE",
498          &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
499         {"summary_col_show_from", "TRUE",
500          &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
501         {"summary_col_show_to", "FALSE",
502          &prefs_common.summary_col_visible[S_COL_TO], P_BOOL, NULL, NULL, NULL},
503         {"summary_col_show_date", "TRUE",
504          &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
505         {"summary_col_show_mime", "TRUE",
506          &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
507         {"summary_col_show_size", "TRUE",
508          &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
509         {"summary_col_show_number", "FALSE",
510          &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
511         {"summary_col_show_score", "FALSE",
512          &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL},
513         {"summary_col_show_locked", "FALSE",
514          &prefs_common.summary_col_visible[S_COL_LOCKED], P_BOOL, NULL, NULL, NULL},
515         {"summary_col_show_tags", "FALSE",
516          &prefs_common.summary_col_visible[S_COL_TAGS], P_BOOL, NULL, NULL, NULL},
517
518         {"summary_col_pos_mark", "0",
519           &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
520         {"summary_col_pos_unread", "1",
521           &prefs_common.summary_col_pos[S_COL_STATUS], P_INT, NULL, NULL, NULL},
522         {"summary_col_pos_mime", "2",
523           &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
524         {"summary_col_pos_subject", "3",
525           &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
526         {"summary_col_pos_from", "4",
527           &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
528         {"summary_col_pos_date", "5",
529           &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
530         {"summary_col_pos_size", "6",
531           &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
532         {"summary_col_pos_number", "7",
533           &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
534         {"summary_col_pos_score", "8",
535          &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL},
536         {"summary_col_pos_locked", "9",
537          &prefs_common.summary_col_pos[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
538         {"summary_col_pos_to", "10",
539           &prefs_common.summary_col_pos[S_COL_TO], P_INT, NULL, NULL, NULL},
540         {"summary_col_pos_tags", "11",
541           &prefs_common.summary_col_pos[S_COL_TAGS], P_INT, NULL, NULL, NULL},
542
543         {"summary_col_size_mark", "10",
544          &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
545         {"summary_col_size_unread", "13",
546          &prefs_common.summary_col_size[S_COL_STATUS], P_INT, NULL, NULL, NULL},
547         {"summary_col_size_mime", "10",
548          &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
549 #ifndef GENERIC_UMPC
550         {"summary_col_size_subject", "200",
551          &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
552         {"summary_col_size_from", "120",
553          &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
554         {"summary_col_size_to", "120",
555          &prefs_common.summary_col_size[S_COL_TO], P_INT, NULL, NULL, NULL},
556 #else
557         {"summary_col_size_subject", "300",
558          &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
559         {"summary_col_size_from", "150",
560          &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
561         {"summary_col_size_to", "150",
562          &prefs_common.summary_col_size[S_COL_TO], P_INT, NULL, NULL, NULL},
563
564 #endif
565         {"summary_col_size_date", "118",
566          &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
567         {"summary_col_size_size", "45",
568          &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
569         {"summary_col_size_number", "40",
570          &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
571         {"summary_col_size_score", "40",
572          &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL},
573         {"summary_col_size_locked", "13",
574          &prefs_common.summary_col_size[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
575         {"summary_col_size_tags", "150",
576          &prefs_common.summary_col_size[S_COL_TAGS], P_INT, NULL, NULL, NULL},
577
578         /* Widget size */
579         {"folderwin_x", "16", &prefs_common.folderwin_x, P_INT,
580          NULL, NULL, NULL},
581         {"folderwin_y", "16", &prefs_common.folderwin_y, P_INT,
582          NULL, NULL, NULL},
583         {"folderview_width", "270", &prefs_common.folderview_width, P_INT,
584          NULL, NULL, NULL},
585         {"folderview_height", "450", &prefs_common.folderview_height, P_INT,
586          NULL, NULL, NULL},
587         {"folderview_visible", "TRUE", &prefs_common.folderview_visible, P_BOOL,
588          NULL, NULL, NULL},
589
590         {"folder_col_show_folder", "TRUE",
591          &prefs_common.folder_col_visible[F_COL_FOLDER], P_BOOL, NULL, NULL, NULL},
592         {"folder_col_show_new", "TRUE",
593          &prefs_common.folder_col_visible[F_COL_NEW], P_BOOL, NULL, NULL, NULL},
594         {"folder_col_show_unread", "TRUE",
595          &prefs_common.folder_col_visible[F_COL_UNREAD], P_BOOL, NULL, NULL, NULL},
596         {"folder_col_show_total", "TRUE",
597          &prefs_common.folder_col_visible[F_COL_TOTAL], P_BOOL, NULL, NULL, NULL},
598
599         {"folder_col_pos_folder", "0",
600          &prefs_common.folder_col_pos[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
601         {"folder_col_pos_new", "1",
602          &prefs_common.folder_col_pos[F_COL_NEW], P_INT, NULL, NULL, NULL},
603         {"folder_col_pos_unread", "2",
604          &prefs_common.folder_col_pos[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
605         {"folder_col_pos_total", "3",
606          &prefs_common.folder_col_pos[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
607
608 #ifndef GENERIC_UMPC
609         {"folder_col_size_folder", "120",
610          &prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
611         {"folder_col_size_new", "32",
612          &prefs_common.folder_col_size[F_COL_NEW], P_INT, NULL, NULL, NULL},
613         {"folder_col_size_unread", "32",
614          &prefs_common.folder_col_size[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
615         {"folder_col_size_total", "32",
616          &prefs_common.folder_col_size[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
617 #else
618         {"folder_col_size_folder", "400",
619          &prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
620         {"folder_col_size_new", "32",
621          &prefs_common.folder_col_size[F_COL_NEW], P_INT, NULL, NULL, NULL},
622         {"folder_col_size_unread", "32",
623          &prefs_common.folder_col_size[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
624         {"folder_col_size_total", "32",
625          &prefs_common.folder_col_size[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
626 #endif
627         {"summaryview_width", "500", &prefs_common.summaryview_width, P_INT,
628          NULL, NULL, NULL},
629         {"summaryview_height", "244", &prefs_common.summaryview_height, P_INT,
630          NULL, NULL, NULL},
631
632         {"main_messagewin_x", "256", &prefs_common.main_msgwin_x, P_INT,
633          NULL, NULL, NULL},
634         {"main_messagewin_y", "210", &prefs_common.main_msgwin_y, P_INT,
635          NULL, NULL, NULL},
636         {"messageview_width", "500", &prefs_common.msgview_width, P_INT,
637          NULL, NULL, NULL},
638         {"messageview_height", "213", &prefs_common.msgview_height, P_INT,
639          NULL, NULL, NULL},
640         {"messageview_visible", "TRUE", &prefs_common.msgview_visible, P_BOOL,
641          NULL, NULL, NULL},
642
643         {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
644          NULL, NULL, NULL},
645         {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
646          NULL, NULL, NULL},
647         {"mainview_width", "500", &prefs_common.mainview_width, P_INT,
648          NULL, NULL, NULL},
649         {"mainview_height", "400", &prefs_common.mainview_height, P_INT,
650          NULL, NULL, NULL},
651         {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
652          NULL, NULL, NULL},
653         {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
654          NULL, NULL, NULL},
655         {"mainwin_maximised", "FALSE", &prefs_common.mainwin_maximised, P_BOOL,
656          NULL, NULL, NULL},
657         {"mainwin_fullscreen", "FALSE", &prefs_common.mainwin_fullscreen, P_BOOL,
658          NULL, NULL, NULL},
659         {"mainwin_menubar", "TRUE", &prefs_common.mainwin_menubar, P_BOOL,
660          NULL, NULL, NULL},
661 #ifndef GENERIC_UMPC
662         {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
663          NULL, NULL, NULL},
664         {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
665          NULL, NULL, NULL},
666         {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
667          NULL, NULL, NULL},
668         {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
669          NULL, NULL, NULL},
670         {"mimeview_tree_height", "60", &prefs_common.mimeview_tree_height, P_INT,
671          NULL, NULL, NULL},      
672         {"sourcewin_width", "600", &prefs_common.sourcewin_width, P_INT,
673          NULL, NULL, NULL},
674         {"sourcewin_height", "500", &prefs_common.sourcewin_height, P_INT,
675          NULL, NULL, NULL},
676         {"compose_width", "600", &prefs_common.compose_width, P_INT,
677          NULL, NULL, NULL},
678         {"compose_height", "560", &prefs_common.compose_height, P_INT,
679          NULL, NULL, NULL},
680 #else
681         {"mainwin_width", "700", &prefs_common.mainwin_width, P_INT,
682          NULL, NULL, NULL},
683         {"mainwin_height", "470", &prefs_common.mainwin_height, P_INT,
684          NULL, NULL, NULL},
685         {"messagewin_width", "700", &prefs_common.msgwin_width, P_INT,
686          NULL, NULL, NULL},
687         {"messagewin_height", "470", &prefs_common.msgwin_height, P_INT,
688          NULL, NULL, NULL},
689         {"sourcewin_width", "700", &prefs_common.sourcewin_width, P_INT,
690          NULL, NULL, NULL},
691         {"sourcewin_height", "470", &prefs_common.sourcewin_height, P_INT,
692          NULL, NULL, NULL},
693         {"compose_width", "700", &prefs_common.compose_width, P_INT,
694          NULL, NULL, NULL},
695         {"compose_height", "470", &prefs_common.compose_height, P_INT,
696          NULL, NULL, NULL},
697 #endif
698         {"compose_notebook_height", "130", &prefs_common.compose_notebook_height, P_INT,
699          NULL, NULL, NULL},
700         {"compose_x", "0", &prefs_common.compose_x, P_INT,
701          NULL, NULL, NULL},
702         {"compose_y", "0", &prefs_common.compose_y, P_INT,
703          NULL, NULL, NULL},
704         /* Message */
705         {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
706          NULL, NULL, NULL},
707
708         {"quote_level1_color", "#0000b3", &prefs_common.quote_level1_col, P_COLOR,
709          NULL, NULL, NULL},
710         {"quote_level2_color", "#0000b3", &prefs_common.quote_level2_col, P_COLOR,
711          NULL, NULL, NULL},
712         {"quote_level3_color", "#0000b3", &prefs_common.quote_level3_col, P_COLOR,
713          NULL, NULL, NULL},
714         {"enable_bgcolor", "FALSE", &prefs_common.enable_bgcolor, P_BOOL,
715          NULL, NULL, NULL},
716         {"quote_level1_bgcolor", "#cccccc", &prefs_common.quote_level1_bgcol, P_COLOR,
717          NULL, NULL, NULL},
718         {"quote_level2_bgcolor", "#d4d4d4", &prefs_common.quote_level2_bgcol, P_COLOR,
719          NULL, NULL, NULL},
720         {"quote_level3_bgcolor", "#dddddd", &prefs_common.quote_level3_bgcol, P_COLOR,
721          NULL, NULL, NULL},
722         {"uri_color", "#007f00", &prefs_common.uri_col, P_COLOR,
723          NULL, NULL, NULL},
724         {"emphasis_color", "#0000cf", &prefs_common.emphasis_col, P_COLOR,
725          NULL, NULL, NULL},
726         {"target_folder_color", "#da1cca", &prefs_common.tgt_folder_col, P_COLOR,
727          NULL, NULL, NULL},
728         {"signature_color", "#797979", &prefs_common.signature_col, P_COLOR,
729          NULL, NULL, NULL},
730         {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
731          P_BOOL, NULL, NULL, NULL},
732
733         {"default_header_color", "#000000", &prefs_common.default_header_color, P_COLOR,
734          NULL, NULL, NULL},
735         {"default_header_bgcolor", "#f5f6be", &prefs_common.default_header_bgcolor, P_COLOR,
736          NULL, NULL, NULL},
737         {"tags_color", "#000000", &prefs_common.tags_color, P_COLOR,
738          NULL, NULL, NULL},
739         {"tags_bgcolor", "#f5f6be", &prefs_common.tags_bgcolor, P_COLOR,
740          NULL, NULL, NULL},
741         {"qs_active_color", "#000000", &prefs_common.qs_active_color, P_COLOR,
742          NULL, NULL, NULL},
743         {"qs_active_bgcolor", "#f5f6be", &prefs_common.qs_active_bgcolor, P_COLOR,
744          NULL, NULL, NULL},
745         {"qs_error_color", "#000000", &prefs_common.qs_error_color, P_COLOR,
746          NULL, NULL, NULL},
747         {"qs_error_bgcolor", "#ff7070", &prefs_common.qs_error_bgcolor, P_COLOR,
748          NULL, NULL, NULL},
749
750         {"display_header_pane", "FALSE", &prefs_common.display_header_pane,
751          P_BOOL, NULL, NULL, NULL},
752         {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
753          NULL, NULL, NULL},
754         {"display_xface", "TRUE", &prefs_common.display_xface,
755          P_BOOL, NULL, NULL, NULL},
756         {"render_html", "TRUE", &prefs_common.render_html, P_BOOL,
757          NULL, NULL, NULL},
758         {"invoke_plugin_on_html", "FALSE", &prefs_common.invoke_plugin_on_html, P_BOOL,
759          NULL, NULL, NULL},
760         {"promote_html_part", "FALSE", &prefs_common.promote_html_part, P_BOOL,
761          NULL, NULL, NULL},
762         {"line_space", "2", &prefs_common.line_space, P_INT,
763          NULL, NULL, NULL},
764         {"never_send_retrcpt", "FALSE", &prefs_common.never_send_retrcpt, P_BOOL,
765          NULL, NULL, NULL},
766
767         {"enable_smooth_scroll", "FALSE",
768          &prefs_common.enable_smooth_scroll, P_BOOL,
769          NULL, NULL, NULL},
770         {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
771          NULL, NULL, NULL},
772         {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
773          NULL, NULL, NULL},
774         {"hide_quoted", "TRUE",
775          &prefs_common.hide_quoted, P_BOOL,
776          NULL, NULL, NULL},
777         {"respect_flowed_format", "FALSE", &prefs_common.respect_flowed_format, P_BOOL,
778          NULL, NULL, NULL},
779         {"show_all_headers", "FALSE", &prefs_common.show_all_headers, P_BOOL,
780          NULL, NULL, NULL},
781
782         {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
783          NULL, NULL, NULL},
784
785         {"attach_desc", "TRUE", &prefs_common.attach_desc, P_BOOL,
786          NULL, NULL, NULL},
787         {"attach_save_directory", NULL,
788          &SPECIFIC_PREFS.attach_save_dir, P_STRING, NULL, NULL, NULL},
789         {"attach_load_directory", NULL,
790          &SPECIFIC_PREFS.attach_load_dir, P_STRING, NULL, NULL, NULL},
791
792         /* MIME viewer */
793         {"mime_textviewer",   NULL,
794          &SPECIFIC_PREFS.mime_textviewer,   P_STRING, NULL, NULL, NULL},
795         {"mime_open_command", "gedit '%s'",
796          &SPECIFIC_PREFS.mime_open_cmd,     P_STRING, NULL, NULL, NULL},
797         {"show_inline_attachments", "TRUE", 
798          &prefs_common.show_inline_attachments, P_BOOL, NULL, NULL, NULL},
799
800         /* Interface */
801 #ifndef GENERIC_UMPC
802         {"layout_mode", "0", &prefs_common.layout_mode, P_INT,
803          NULL, NULL, NULL},
804 #else
805         {"layout_mode", "5", &prefs_common.layout_mode, P_INT,
806          NULL, NULL, NULL},
807 #endif
808         /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
809          NULL, NULL, NULL}, */
810         {"open_selected_message_on_folder_open", "FALSE",
811          &prefs_common.open_selected_on_folder_open,
812          P_BOOL, NULL, NULL, NULL},
813         {"always_show_message_when_selected", "0",
814          &prefs_common.always_show_msg,
815          P_ENUM, NULL, NULL, NULL},
816         {"select_on_entry", "3", &prefs_common.select_on_entry,
817          P_ENUM, NULL, NULL, NULL},
818         {"show_tooltips", "TRUE", &prefs_common.show_tooltips,
819          P_BOOL, NULL, NULL, NULL},
820
821         /* do it SUMMARY_OPEN_ACTIONS-1 times */
822         {"summary_select_prio1", "0", &prefs_common.summary_select_prio[0], P_ENUM,
823          NULL, NULL, NULL},
824         {"summary_select_prio2", "0", &prefs_common.summary_select_prio[1], P_ENUM,
825          NULL, NULL, NULL},
826         {"summary_select_prio3", "0", &prefs_common.summary_select_prio[2], P_ENUM,
827          NULL, NULL, NULL},
828         {"summary_select_prio4", "0", &prefs_common.summary_select_prio[3], P_ENUM,
829          NULL, NULL, NULL},
830         {"summary_select_prio5", "0", &prefs_common.summary_select_prio[4], P_ENUM,
831          NULL, NULL, NULL},
832         {"summary_select_prio6", "0", &prefs_common.summary_select_prio[5], P_ENUM,
833          NULL, NULL, NULL},
834         {"summary_select_prio7", "0", &prefs_common.summary_select_prio[6], P_ENUM,
835          NULL, NULL, NULL},
836
837         {"mark_as_read_on_new_window", "FALSE",
838          &prefs_common.mark_as_read_on_new_window,
839          P_BOOL, NULL, NULL, NULL},
840         {"mark_as_read_delay", "0",
841          &prefs_common.mark_as_read_delay, P_INT, 
842          NULL, NULL, NULL},
843         {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
844          NULL, NULL, NULL},
845         {"nextunreadmsg_dialog", "1", &prefs_common.next_unread_msg_dialog, P_ENUM,
846          NULL, NULL, NULL},
847         {"summary_from_show", "0", &prefs_common.summary_from_show, P_ENUM,
848          NULL, NULL, NULL},
849
850         {"pixmap_theme_path", DEFAULT_PIXMAP_THEME, 
851          &SPECIFIC_PREFS.pixmap_theme_path, P_STRING,
852          NULL, NULL, NULL},
853
854         {"ask_mark_all_read", "TRUE", &prefs_common.ask_mark_all_read, P_BOOL,
855          NULL, NULL, NULL},
856
857         {"ask_apply_per_account_filtering_rules", "TRUE", &prefs_common.ask_apply_per_account_filtering_rules, P_BOOL,
858          NULL, NULL, NULL},
859         {"apply_per_account_filtering_rules", "0", &prefs_common.apply_per_account_filtering_rules, P_ENUM,
860          NULL, NULL, NULL},
861
862         /* Addressbook */
863         {"addressbook_use_editaddress_dialog", "TRUE", &prefs_common.addressbook_use_editaddress_dialog,
864          P_BOOL, NULL, NULL, NULL},
865         {"addressbook_hpaned_pos", "-1", &prefs_common.addressbook_hpaned_pos,
866          P_INT, NULL, NULL, NULL},
867         {"addressbook_vpaned_pos", "-1", &prefs_common.addressbook_vpaned_pos,
868          P_INT, NULL, NULL, NULL},
869
870         /* Other */
871 #ifndef G_OS_WIN32
872         {"uri_open_command", DEFAULT_BROWSER_CMD,
873          &SPECIFIC_PREFS.uri_cmd, P_STRING, NULL, NULL, NULL},
874 #else
875         {"gtk_theme", DEFAULT_W32_GTK_THEME,
876          &SPECIFIC_PREFS.gtk_theme, P_STRING, NULL, NULL, NULL},
877 #endif
878         {"ext_editor_command", DEFAULT_EDITOR_CMD,
879          &SPECIFIC_PREFS.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
880         {"cmds_use_system_default", "TRUE",
881          &prefs_common.cmds_use_system_default, P_BOOL, NULL, NULL, NULL},
882         {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
883          P_BOOL, NULL, NULL, NULL},
884         {"session_passwords", "FALSE", &prefs_common.session_passwords,
885          P_BOOL, NULL, NULL, NULL},
886         {"confirm_on_exit", "FALSE", &prefs_common.confirm_on_exit, P_BOOL,
887          NULL, NULL, NULL},
888         {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
889          NULL, NULL, NULL},
890         {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
891          NULL, NULL, NULL},
892         {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
893          P_BOOL, NULL, NULL, NULL},
894         {"work_offline", "FALSE", &prefs_common.work_offline, P_BOOL,
895          NULL, NULL, NULL},
896         {"summary_quicksearch_type", "0", &prefs_common.summary_quicksearch_type, P_INT,
897          NULL, NULL, NULL},
898 #ifndef GENERIC_UMPC
899         {"summary_quicksearch_recurse", "1", &prefs_common.summary_quicksearch_recurse, P_INT,
900          NULL, NULL, NULL},
901 #else
902         {"summary_quicksearch_recurse", "0", &prefs_common.summary_quicksearch_recurse, P_INT,
903          NULL, NULL, NULL},
904 #endif
905
906 #if defined(__OpenBSD__)
907         {"io_timeout_secs", "80", &prefs_common.io_timeout_secs,
908          P_INT, NULL, NULL, NULL},
909 #else
910         {"io_timeout_secs", "60", &prefs_common.io_timeout_secs,
911          P_INT, NULL, NULL, NULL},
912 #endif
913         {"hide_score", "-9999", &prefs_common.kill_score, P_INT,
914          NULL, NULL, NULL},
915         {"important_score", "1", &prefs_common.important_score, P_INT,
916          NULL, NULL, NULL},
917
918         {"clip_log", "TRUE", &prefs_common.cliplog, P_BOOL,
919          NULL, NULL, NULL},
920         {"log_length", "500", &prefs_common.loglength, P_INT,
921          NULL, NULL, NULL},
922 #ifndef GENERIC_UMPC
923         {"enable_log_standard", "TRUE", &prefs_common.enable_log_standard, P_BOOL,
924          NULL, NULL, NULL},
925         {"enable_log_warning", "TRUE", &prefs_common.enable_log_warning, P_BOOL,
926          NULL, NULL, NULL},
927         {"enable_log_error", "TRUE", &prefs_common.enable_log_error, P_BOOL,
928          NULL, NULL, NULL},
929         {"enable_log_status", "TRUE", &prefs_common.enable_log_status, P_BOOL,
930          NULL, NULL, NULL},
931 #else
932         {"enable_log_standard", "FALSE", &prefs_common.enable_log_standard, P_BOOL,
933          NULL, NULL, NULL},
934         {"enable_log_warning", "FALSE", &prefs_common.enable_log_warning, P_BOOL,
935          NULL, NULL, NULL},
936         {"enable_log_error", "FALSE", &prefs_common.enable_log_error, P_BOOL,
937          NULL, NULL, NULL},
938         {"enable_log_status", "FALSE", &prefs_common.enable_log_status, P_BOOL,
939          NULL, NULL, NULL},
940 #endif
941         {"log_msg_color", "#00af00", &prefs_common.log_msg_color, P_COLOR,
942          NULL, NULL, NULL},
943         {"log_warn_color", "#af0000", &prefs_common.log_warn_color, P_COLOR,
944          NULL, NULL, NULL},
945         {"log_error_color", "#af0000", &prefs_common.log_error_color, P_COLOR,
946          NULL, NULL, NULL},
947         {"log_in_color", "#000000", &prefs_common.log_in_color, P_COLOR,
948          NULL, NULL, NULL},
949         {"log_out_color", "#0000ef", &prefs_common.log_out_color, P_COLOR,
950          NULL, NULL, NULL},
951         {"log_status_ok_color", "#00af00", &prefs_common.log_status_ok_color, P_COLOR,
952          NULL, NULL, NULL},
953         {"log_status_nok_color", "#0000af", &prefs_common.log_status_nok_color, P_COLOR,
954          NULL, NULL, NULL},
955         {"log_status_skip_color", "#aa00aa", &prefs_common.log_status_skip_color, P_COLOR,
956          NULL, NULL, NULL},
957
958     {"enable_filtering_debug", "FALSE", &prefs_common.enable_filtering_debug, P_BOOL,
959          NULL, NULL, NULL},
960     {"filtering_debug_level", "1", &prefs_common.filtering_debug_level, P_INT,
961          NULL, NULL, NULL},
962     {"enable_filtering_debug_inc", "TRUE", &prefs_common.enable_filtering_debug_inc, P_BOOL,
963          NULL, NULL, NULL},
964     {"enable_filtering_debug_manual", "TRUE", &prefs_common.enable_filtering_debug_manual, P_BOOL,
965          NULL, NULL, NULL},
966     {"enable_filtering_debug_folder_proc", "FALSE", &prefs_common.enable_filtering_debug_folder_proc, P_BOOL,
967          NULL, NULL, NULL},
968     {"enable_filtering_debug_pre_proc", "FALSE", &prefs_common.enable_filtering_debug_pre_proc, P_BOOL,
969          NULL, NULL, NULL},
970     {"enable_filtering_debug_post_proc", "FALSE", &prefs_common.enable_filtering_debug_post_proc, P_BOOL,
971          NULL, NULL, NULL},
972     {"filtering_debug_clip_log", "TRUE", &prefs_common.filtering_debug_cliplog, P_BOOL,
973          NULL, NULL, NULL},
974         {"filtering_debug_log_length", "500", &prefs_common.filtering_debug_loglength, P_INT,
975          NULL, NULL, NULL},
976
977         {"gtk_can_change_accels", "FALSE", &prefs_common.gtk_can_change_accels, P_BOOL,
978          NULL, NULL, NULL},
979
980         {"color_new", "#0000b3", &prefs_common.color_new, P_COLOR,
981          NULL, NULL, NULL},
982
983         /* Some windows' sizes */
984         {"filteringwin_width", "500", &prefs_common.filteringwin_width, P_INT,
985          NULL, NULL, NULL},
986         {"filteringwin_height", "-1", &prefs_common.filteringwin_height, P_INT,
987          NULL, NULL, NULL},
988
989         {"filteringactionwin_width", "490", &prefs_common.filteringactionwin_width, P_INT,
990          NULL, NULL, NULL},
991         {"filteringactionwin_height", "-1", &prefs_common.filteringactionwin_height, P_INT,
992          NULL, NULL, NULL},
993
994         {"matcherwin_width", "520", &prefs_common.matcherwin_width, P_INT,
995          NULL, NULL, NULL},
996         {"matcherwin_height", "-1", &prefs_common.matcherwin_height, P_INT,
997          NULL, NULL, NULL},
998
999         {"templateswin_width", "480", &prefs_common.templateswin_width, P_INT,
1000          NULL, NULL, NULL},
1001         {"templateswin_height", "-1", &prefs_common.templateswin_height, P_INT,
1002          NULL, NULL, NULL},
1003
1004         {"actionswin_width", "486", &prefs_common.actionswin_width, P_INT,
1005          NULL, NULL, NULL},
1006         {"actionswin_height", "-1", &prefs_common.actionswin_height, P_INT,
1007          NULL, NULL, NULL},
1008
1009         {"tagswin_width", "486", &prefs_common.tagswin_width, P_INT,
1010          NULL, NULL, NULL},
1011         {"tagswin_height", "-1", &prefs_common.tagswin_height, P_INT,
1012          NULL, NULL, NULL},
1013
1014         {"addressbookwin_width", "520", &prefs_common.addressbookwin_width, P_INT,
1015          NULL, NULL, NULL},
1016         {"addressbookwin_height", "-1", &prefs_common.addressbookwin_height, P_INT,
1017          NULL, NULL, NULL},
1018
1019         {"addressbookeditpersonwin_width", "640", &prefs_common.addressbookeditpersonwin_width, P_INT,
1020          NULL, NULL, NULL},
1021         {"addressbookeditpersonwin_height", "320", &prefs_common.addressbookeditpersonwin_height, P_INT,
1022          NULL, NULL, NULL},
1023
1024         {"addressbookeditgroupwin_width", "580", &prefs_common.addressbookeditgroupwin_width, P_INT,
1025          NULL, NULL, NULL},
1026         {"addressbookeditgroupwin_height", "340", &prefs_common.addressbookeditgroupwin_height, P_INT,
1027          NULL, NULL, NULL},
1028
1029         {"pluginswin_width", "-1", &prefs_common.pluginswin_width, P_INT,
1030          NULL, NULL, NULL},
1031         {"pluginswin_height", "-1", &prefs_common.pluginswin_height, P_INT,
1032          NULL, NULL, NULL},
1033
1034         {"prefswin_width", "600", &prefs_common.prefswin_width, P_INT,
1035          NULL, NULL, NULL},
1036         {"prefswin_height", "-1", &prefs_common.prefswin_height, P_INT,
1037          NULL, NULL, NULL},
1038
1039         {"folderitemwin_width", "500", &prefs_common.folderitemwin_width, P_INT,
1040          NULL, NULL, NULL},
1041         {"folderitemwin_height", "-1", &prefs_common.folderitemwin_height, P_INT,
1042          NULL, NULL, NULL},
1043
1044         {"zero_replacement_char", "0", &prefs_common.zero_replacement, P_STRING,
1045          NULL, NULL, NULL},
1046
1047         {"editaccountwin_width", "500", &prefs_common.editaccountwin_width, P_INT,
1048          NULL, NULL, NULL},
1049         {"editaccountwin_height", "-1", &prefs_common.editaccountwin_height, P_INT,
1050          NULL, NULL, NULL},
1051
1052         {"accountswin_width", "500", &prefs_common.accountswin_width, P_INT,
1053          NULL, NULL, NULL},
1054         {"accountswin_height", "-1", &prefs_common.accountswin_height, P_INT,
1055          NULL, NULL, NULL},
1056
1057         {"logwin_width", "520", &prefs_common.logwin_width, P_INT,
1058          NULL, NULL, NULL},
1059         {"logwin_height", "-1", &prefs_common.logwin_height, P_INT,
1060          NULL, NULL, NULL},
1061
1062         {"filtering_debugwin_width", "600", &prefs_common.filtering_debugwin_width, P_INT,
1063          NULL, NULL, NULL},
1064         {"filtering_debugwin_height", "-1", &prefs_common.filtering_debugwin_height, P_INT,
1065          NULL, NULL, NULL},
1066
1067         {"folderselwin_width", "300", &prefs_common.folderselwin_width, P_INT,
1068          NULL, NULL, NULL},
1069         {"folderselwin_height", "-1", &prefs_common.folderselwin_height, P_INT,
1070          NULL, NULL, NULL},
1071
1072         {"addressaddwin_width", "300", &prefs_common.addressaddwin_width, P_INT,
1073          NULL, NULL, NULL},
1074         {"addressaddwin_height", "-1", &prefs_common.addressaddwin_height, P_INT,
1075          NULL, NULL, NULL},
1076
1077         {"addressbook_folderselwin_width", "300", &prefs_common.addressbook_folderselwin_width, P_INT,
1078          NULL, NULL, NULL},
1079         {"addressbook_folderselwin_height", "-1", &prefs_common.addressbook_folderselwin_height, P_INT,
1080          NULL, NULL, NULL},
1081
1082         {"aboutwin_width", "450", &prefs_common.aboutwin_width, P_INT,
1083          NULL, NULL, NULL},
1084         {"aboutwin_height", "500", &prefs_common.aboutwin_height, P_INT,
1085          NULL, NULL, NULL},
1086
1087         {"addrgather_width", "450", &prefs_common.addrgather_width, P_INT,
1088          NULL, NULL, NULL},
1089         {"addrgather_height", "-1", &prefs_common.addrgather_height, P_INT,
1090          NULL, NULL, NULL},
1091
1092         {"news_subscribe_width", "450", &prefs_common.news_subscribe_width, P_INT,
1093          NULL, NULL, NULL},
1094         {"news_subscribe_height", "400", &prefs_common.news_subscribe_height, P_INT,
1095          NULL, NULL, NULL},
1096
1097         /* Hidden */
1098         {"warn_dnd", "1", &prefs_common.warn_dnd, P_INT,
1099          NULL, NULL, NULL},
1100         {"utf8_instead_of_locale_for_broken_mail", "0", 
1101          &prefs_common.broken_are_utf8, P_INT,
1102          NULL, NULL, NULL},
1103         {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
1104          NULL, NULL, NULL},
1105         {"use_stripes_everywhere", "TRUE", &prefs_common.use_stripes_everywhere, P_BOOL,
1106          NULL, NULL, NULL},
1107         {"use_stripes_in_summaries", "TRUE", &prefs_common.use_stripes_in_summaries, P_BOOL,
1108          NULL, NULL, NULL},
1109         {"stripes_color_offset", "4000", &prefs_common.stripes_color_offset, P_INT,
1110          NULL, NULL, NULL},
1111         {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
1112          NULL, NULL, NULL},
1113         {"folderview_vscrollbar_policy", "0",
1114          &prefs_common.folderview_vscrollbar_policy, P_ENUM,
1115          NULL, NULL, NULL},
1116         {"textview_cursor_visible", "FALSE",
1117          &prefs_common.textview_cursor_visible, P_BOOL,
1118          NULL, NULL, NULL},
1119         {"hover_timeout", "500", &prefs_common.hover_timeout, P_INT,
1120          NULL, NULL, NULL},
1121 #ifndef GENERIC_UMPC
1122         {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
1123          NULL, NULL, NULL},
1124         {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
1125          NULL, NULL, NULL},
1126 #else
1127         {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
1128          NULL, NULL, NULL},
1129         {"cache_min_keep_time", "0", &prefs_common.cache_min_keep_time, P_INT,
1130          NULL, NULL, NULL},
1131 #endif
1132         {"thread_by_subject_max_age", "10", &prefs_common.thread_by_subject_max_age,
1133         P_INT, NULL, NULL, NULL },
1134         {"last_opened_folder", "", &prefs_common.last_opened_folder,
1135         P_STRING, NULL, NULL, NULL },
1136         {"goto_last_folder_on_startup", "FALSE", &prefs_common.goto_last_folder_on_startup,
1137         P_BOOL, NULL, NULL, NULL },
1138         {"summary_quicksearch_sticky", "1", &prefs_common.summary_quicksearch_sticky, P_INT,
1139          NULL, NULL, NULL},
1140         {"summary_quicksearch_dynamic", "0", &prefs_common.summary_quicksearch_dynamic, P_INT,
1141          NULL, NULL, NULL},
1142         {"summary_quicksearch_autorun", "0", &prefs_common.summary_quicksearch_autorun, P_INT,
1143          NULL, NULL, NULL},
1144         {"statusbar_update_step", "10", &prefs_common.statusbar_update_step, P_INT,
1145          NULL, NULL, NULL},
1146         {"compose_no_markup", "FALSE", &prefs_common.compose_no_markup, P_BOOL,
1147          NULL, NULL, NULL},
1148         {"skip_ssl_cert_check", "FALSE", &prefs_common.skip_ssl_cert_check, P_BOOL,
1149          NULL, NULL, NULL},
1150         {"live_dangerously", "FALSE", &prefs_common.live_dangerously, P_BOOL,
1151          NULL, NULL, NULL},
1152         {"save_parts_readwrite", "FALSE", &prefs_common.save_parts_readwrite, P_BOOL,
1153          NULL, NULL, NULL},
1154         {"hide_quotes", "0", &prefs_common.hide_quotes, P_INT,
1155          NULL, NULL, NULL},
1156         {"unsafe_ssl_certs", "FALSE", &prefs_common.unsafe_ssl_certs, P_BOOL,
1157          NULL, NULL, NULL},
1158 #ifndef GENERIC_UMPC
1159         {"real_time_sync", "FALSE", &prefs_common.real_time_sync, P_BOOL,
1160          NULL, NULL, NULL},
1161 #else
1162         {"real_time_sync", "TRUE", &prefs_common.real_time_sync, P_BOOL,
1163          NULL, NULL, NULL},
1164 #endif
1165
1166         {"print_paper_type", NULL, &prefs_common.print_paper_type, P_STRING,
1167          NULL, NULL, NULL},
1168         {"print_paper_orientation", "0", &prefs_common.print_paper_orientation, P_INT,
1169          NULL, NULL, NULL},
1170         {"print_margin_top", "-1", &prefs_common.print_margin_top, P_INT,
1171          NULL, NULL, NULL},
1172         {"print_margin_bottom", "-1", &prefs_common.print_margin_bottom, P_INT,
1173          NULL, NULL, NULL},
1174         {"print_margin_left", "-1", &prefs_common.print_margin_left, P_INT,
1175          NULL, NULL, NULL},
1176         {"print_margin_right", "-1", &prefs_common.print_margin_right, P_INT,
1177          NULL, NULL, NULL},
1178         {"print_use_color", "0", &prefs_common.print_use_color, P_INT,
1179          NULL, NULL, NULL},
1180         {"print_use_collate", "0", &prefs_common.print_use_collate, P_INT,
1181          NULL, NULL, NULL},
1182         {"print_use_reverse", "0", &prefs_common.print_use_reverse, P_INT,
1183          NULL, NULL, NULL},
1184         {"print_use_duplex", "0", &prefs_common.print_use_duplex, P_INT,
1185          NULL, NULL, NULL},
1186         {"print_imgs", "1", &prefs_common.print_imgs, P_INT,
1187          NULL, NULL, NULL},
1188         {"print_previewwin_width", "600", &prefs_common.print_previewwin_width, P_INT,
1189          NULL, NULL, NULL},
1190         {"print_previewwin_height", "-1", &prefs_common.print_previewwin_height, P_INT,
1191          NULL, NULL, NULL},
1192         {"use_networkmanager", "TRUE", &prefs_common.use_networkmanager, P_BOOL,
1193          NULL, NULL, NULL},
1194         {"use_shred", "FALSE", &prefs_common.use_shred, P_BOOL,
1195          NULL, NULL, NULL},
1196
1197         {"two_line_vertical", "TRUE", &prefs_common.two_line_vert,
1198         P_BOOL, NULL, NULL, NULL },
1199
1200         {"inherit_folder_properties", "FALSE", &prefs_common.inherit_folder_props, P_BOOL,
1201          NULL, NULL, NULL},
1202
1203         {"flush_metadata", "TRUE", &prefs_common.flush_metadata, P_BOOL,
1204          NULL, NULL, NULL},
1205
1206         {"nav_history_length", "50", &prefs_common.nav_history_length, P_INT,
1207          NULL, NULL, NULL},
1208
1209         {"diff_added_color", "#008b8b", &prefs_common.diff_added_color, P_COLOR,
1210          NULL, NULL, NULL},
1211         {"diff_deleted_color", "#6a5acd", &prefs_common.diff_deleted_color, P_COLOR,
1212          NULL, NULL, NULL},
1213         {"diff_hunk_color", "#a52a2a", &prefs_common.diff_hunk_color, P_COLOR,
1214          NULL, NULL, NULL},
1215
1216         {"folder_search_wildcard", "TRUE", &prefs_common.folder_search_wildcard, P_BOOL,
1217          NULL, NULL, NULL},
1218         {"address_search_wildcard", "TRUE", &prefs_common.address_search_wildcard, P_BOOL,
1219          NULL, NULL, NULL},
1220         {"enable_avatars", "3", &prefs_common.enable_avatars, P_INT, NULL, NULL, NULL},
1221 #ifndef PASSWORD_CRYPTO_OLD
1222         {"use_master_passphrase", FALSE, &prefs_common.use_master_passphrase, P_BOOL, NULL, NULL, NULL },
1223         {"master_passphrase", "", &prefs_common.master_passphrase, P_STRING, NULL, NULL, NULL },
1224         {"master_passphrase_salt", "", &prefs_common.master_passphrase_salt, P_STRING, NULL, NULL, NULL },
1225         {"master_passphrase_pbkdf2_rounds", "50000", &prefs_common.master_passphrase_pbkdf2_rounds, P_INT, NULL, NULL, NULL},
1226 #endif
1227
1228         {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
1229 };
1230
1231 /*
1232  * Read history list from the specified history file in the specified directory (subdir of rc_dir)
1233  * Fallback to default_list if history file is not found
1234  */
1235 GList *prefs_common_read_history_from_dir_with_defaults(const gchar *dirname, const gchar *history,
1236                                                                                                                           GList *default_list)
1237 {
1238         FILE *fp;
1239         gchar *path;
1240         gchar buf[PREFSBUFSIZE];
1241         GList *tmp = NULL;
1242
1243         if (dirname) {
1244                 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, dirname,
1245                                    G_DIR_SEPARATOR_S, history,
1246                                    NULL);
1247         } else {
1248         path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1249                            NULL);
1250         }
1251         if ((fp = g_fopen(path, "rb")) == NULL) {
1252                 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
1253                 g_free(path);
1254                 /* returns default list if set, otherwise NULL */
1255                 return default_list;
1256         }
1257         g_free(path);
1258         while (fgets(buf, sizeof(buf), fp) != NULL) {
1259                 g_strstrip(buf);
1260                 if (buf[0] == '\0') continue;
1261                 tmp = add_history(tmp, buf);
1262         }
1263         fclose(fp);
1264
1265         tmp = g_list_reverse(tmp);
1266
1267         return tmp;
1268 }
1269
1270 /*
1271  * Read history list from the specified history file in the specified directory (subdir of rc_dir)
1272  */
1273 static GList *prefs_common_read_history_from_dir(const gchar *dirname, const gchar *history) 
1274 {
1275         return prefs_common_read_history_from_dir_with_defaults(dirname, history, NULL);
1276 }
1277
1278 /*
1279  * Read history list from the specified history file
1280  */
1281 static GList *prefs_common_read_history(const gchar *history) 
1282 {
1283         return prefs_common_read_history_from_dir(NULL, history);
1284 }
1285
1286 void prefs_common_read_config(void)
1287 {
1288         gchar *rcpath;
1289         gchar *tmp;
1290
1291         rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMON_RC, NULL);
1292         prefs_read_config(param, "Common", rcpath, NULL);
1293 #ifdef G_OS_WIN32
1294         prefs_read_config(param_os_specific, "CommonWin32", rcpath, NULL);
1295 #endif
1296
1297         g_free(rcpath);
1298
1299         tmp = g_strdup(gettext(prefs_common.date_format));
1300         g_free(prefs_common.date_format);
1301         prefs_common.date_format = tmp;
1302
1303         prefs_common.mime_open_cmd_history =
1304                 prefs_common_read_history(COMMAND_HISTORY);
1305         prefs_common.summary_quicksearch_history =
1306                 prefs_common_read_history(QUICKSEARCH_HISTORY);
1307         prefs_common.summary_search_from_history =
1308                 prefs_common_read_history(SUMMARY_SEARCH_FROM_HISTORY);
1309         prefs_common.summary_search_to_history =
1310                 prefs_common_read_history(SUMMARY_SEARCH_TO_HISTORY);
1311         prefs_common.summary_search_subject_history =
1312                 prefs_common_read_history(SUMMARY_SEARCH_SUBJECT_HISTORY);
1313         prefs_common.summary_search_body_history =
1314                 prefs_common_read_history(SUMMARY_SEARCH_BODY_HISTORY);
1315         prefs_common.summary_search_adv_condition_history =
1316                 prefs_common_read_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY);
1317         prefs_common.message_search_history =
1318                 prefs_common_read_history(MESSAGE_SEARCH_HISTORY);
1319         prefs_common.compose_save_to_history =
1320                 prefs_common_read_history(COMPOSE_SAVE_TO_HISTORY);
1321 #ifndef USE_ALT_ADDRBOOK
1322         prefs_common.addressbook_custom_attributes = addressbook_update_custom_attr_from_prefs();
1323 #endif
1324         colorlabel_update_colortable_from_prefs();
1325 }
1326
1327 #define TRY(func) \
1328 if (!(func)) \
1329 { \
1330         g_warning("failed to write"); \
1331         goto out;                       \
1332 } \
1333
1334 /*
1335  * Save history list to the specified history file in the specified directory (subdir of rc_dir)
1336  */
1337 static void prefs_common_save_history_to_dir(const gchar *dirname, const gchar *history, GList *list)
1338 {
1339         GList *cur;
1340         FILE *fp;
1341         gchar *path, *tmp_path;
1342
1343         if (dirname) {
1344                 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, dirname,
1345                                    G_DIR_SEPARATOR_S, history,
1346                                    NULL);
1347         } else {
1348         path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1349                            NULL);
1350         }
1351         tmp_path = g_strconcat(path, ".tmp", NULL);
1352
1353         if ((fp = g_fopen(tmp_path, "wb")) == NULL) {
1354                 FILE_OP_ERROR(tmp_path, "fopen");
1355                 goto out;
1356         }
1357
1358         for (cur = list; cur != NULL; cur = cur->next) {
1359                 TRY(fputs((gchar *)cur->data, fp) != EOF &&
1360                     fputc('\n', fp) != EOF);
1361         }
1362
1363         if (fclose(fp) == EOF) {
1364                 FILE_OP_ERROR(tmp_path, "fclose");
1365                 fp = NULL;
1366                 goto out;
1367         }
1368         fp = NULL;
1369 #ifdef G_OS_WIN32
1370         claws_unlink(path);
1371 #endif
1372         if (g_rename(tmp_path, path) < 0) {
1373                 FILE_OP_ERROR(path, "rename");
1374                 goto out;
1375         }
1376
1377 out:
1378         if (fp)
1379                 fclose(fp);
1380         g_free(tmp_path);
1381         g_free(path);
1382 }
1383
1384 /*
1385  * Save history list to the specified history file
1386  */
1387 static void prefs_common_save_history(const gchar *history, GList *list)
1388 {
1389         prefs_common_save_history_to_dir(NULL, history, list);
1390 }
1391
1392 #undef TRY
1393
1394 void prefs_common_write_config(void)
1395 {
1396         prefs_write_config(param, "Common", COMMON_RC);
1397 #ifdef G_OS_WIN32
1398         prefs_write_config(param_os_specific, "CommonWin32", COMMON_RC);
1399 #endif
1400
1401         prefs_common_save_history(COMMAND_HISTORY, 
1402                 prefs_common.mime_open_cmd_history);
1403         prefs_common_save_history(QUICKSEARCH_HISTORY, 
1404                 prefs_common.summary_quicksearch_history);
1405         prefs_common_save_history(SUMMARY_SEARCH_FROM_HISTORY, 
1406                 prefs_common.summary_search_from_history);
1407         prefs_common_save_history(SUMMARY_SEARCH_TO_HISTORY, 
1408                 prefs_common.summary_search_to_history);
1409         prefs_common_save_history(SUMMARY_SEARCH_SUBJECT_HISTORY, 
1410                 prefs_common.summary_search_subject_history);
1411         prefs_common_save_history(SUMMARY_SEARCH_BODY_HISTORY, 
1412                 prefs_common.summary_search_body_history);
1413         prefs_common_save_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY, 
1414                 prefs_common.summary_search_adv_condition_history);
1415         prefs_common_save_history(MESSAGE_SEARCH_HISTORY, 
1416                 prefs_common.message_search_history);
1417         prefs_common_save_history(COMPOSE_SAVE_TO_HISTORY, 
1418                 prefs_common.compose_save_to_history);
1419
1420 #ifndef USE_ALT_ADDRBOOK
1421                 prefs_common_save_history_to_dir(ADDRBOOK_DIR,
1422                 ADDRESSBOOK_CUSTOM_ATTRIBUTES, 
1423                 prefs_common.addressbook_custom_attributes);
1424 #endif
1425 }
1426
1427 /* make a copy of string 'in' into buffer 'out'. un-escape \ sequences.
1428    both 'in' and 'out' must be non-NULL.
1429    'out' must be a pointer to a buffer whose size is at least equal
1430    to strlen(txt)+1, this buffer will get cleared. out's contents
1431    will always get set to a valid string, even if it's "".*/
1432 void pref_get_unescaped_pref(gchar *out, const gchar *in)
1433 {
1434         const gchar *i;
1435         gchar *o;
1436
1437         *out = '\0';
1438
1439         cm_return_if_fail( in != NULL );
1440         cm_return_if_fail( out != NULL );
1441
1442         i = in;
1443         o = out;
1444         memset(out, 0, strlen(in)+1);
1445         while (*i != '\0') {
1446                 if (*i == '\\' && *(i+1) == 'n') {
1447                         *o++ = '\n';
1448                         i++;
1449                 } else if (*i == '\\' && *(i+1) == 't') {
1450                         *o++ = '\t';
1451                         i++;
1452                 } else if (*i == '\\' && *(i+1) == '\\') {
1453                         *o++ = '\\';
1454                         i++;
1455                 } else {
1456                         *o++ = *i;
1457                 }
1458                 i++;
1459         }
1460         *o='\0';
1461 }
1462
1463 /* make a copy of string 'in' into buffer 'out'. escape \ sequences.
1464    both 'in' and 'out' must be non-NULL.
1465    'out' must be a pointer to a buffer whose size is at least equal
1466    to 2*strlen(txt)+1. out's contents will always get set to a valid
1467    string, even if it's "". */
1468 void pref_get_escaped_pref(gchar *out, const gchar *in)
1469 {
1470         const gchar *i;
1471         gchar *o;
1472
1473         *out = '\0';
1474
1475         cm_return_if_fail( in != NULL );
1476         cm_return_if_fail( out != NULL );
1477
1478         i = in;
1479         o = out;
1480         while (*i != '\0') {
1481                 if (*i == '\n') {
1482                         *o++ = '\\';
1483                         *o++ = 'n';
1484                 } else if (*i == '\t') {
1485                         *o++ = '\\';
1486                         *o++ = 't';
1487                 } else if (*i == '\\') {
1488                         *o++ = '\\';
1489                         *o++ = '\\';
1490                 } else {
1491                         *o++ = *i;
1492                 }
1493                 i++;
1494         }
1495         *o = '\0';
1496 }
1497                 
1498 /* set the contents of a textview widget from the internal \-escaped
1499   representation of a pref string. both txt and textview must be non-NULL. */
1500 void pref_set_textview_from_pref(GtkTextView *textview, const gchar *txt)
1501 {
1502         GtkTextBuffer *buffer;
1503         gchar *out = NULL;
1504
1505         cm_return_if_fail( textview != NULL );
1506
1507         buffer = gtk_text_view_get_buffer(textview);
1508
1509         if (!txt) {
1510                 gtk_text_buffer_set_text(buffer, "", -1);
1511         } else {
1512                 out = g_malloc(strlen(txt)+1);
1513
1514                 pref_get_unescaped_pref(out, txt);
1515
1516                 gtk_text_buffer_set_text(buffer, out, -1);
1517                 g_free(out);
1518         }
1519 }
1520
1521 /* set the contents of a gtkentry widget from the internal \-escaped
1522   representation of a pref string. both txt and entry must be non-NULL. */
1523 void pref_set_entry_from_pref(GtkEntry *entry, const gchar *txt)
1524 {
1525         gchar *out = NULL;
1526
1527         cm_return_if_fail( entry != NULL );
1528         if (!txt) {
1529                 gtk_entry_set_text(entry, "");
1530         } else {
1531                 out = g_malloc(strlen(txt)+1);
1532
1533                 pref_get_unescaped_pref(out, txt);
1534
1535                 gtk_entry_set_text(entry, out);
1536                 g_free(out);
1537         }
1538 }
1539
1540 /* get the \-escaped internal representation of a pref from the contents of
1541    a textview widget. textview must be non-NULL. */
1542 gchar *pref_get_pref_from_textview(GtkTextView *textview) 
1543 {
1544         GtkTextBuffer *buffer;
1545         GtkTextIter start, end;
1546         gchar *out, *tmp;
1547         
1548         cm_return_val_if_fail( textview != NULL, "" );
1549
1550         buffer = gtk_text_view_get_buffer(textview);
1551         gtk_text_buffer_get_start_iter(buffer, &start);
1552         gtk_text_buffer_get_iter_at_offset(buffer, &end, -1);
1553         tmp = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
1554         out = malloc(2*strlen(tmp)+1);
1555         if (out)
1556                 pref_get_escaped_pref(out, tmp);
1557         g_free(tmp);
1558
1559         return out?out:"";
1560 }
1561
1562 /* get the \-escaped internal representation of a pref from the contents of
1563    a gtkentry widget. entry must be non-NULL. */
1564 gchar *pref_get_pref_from_entry(GtkEntry *entry) 
1565 {
1566         gchar *out, *tmp;
1567
1568         cm_return_val_if_fail( entry != NULL, "" );
1569
1570         tmp = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
1571         out = malloc(2*strlen(tmp)+1);
1572         
1573         if (out)
1574                 pref_get_escaped_pref(out, tmp);
1575         g_free(tmp);
1576
1577         return out?out:"";
1578 }
1579
1580 /* ugly hack to be able to get this pref from ssl_certificate.c */
1581 gboolean prefs_common_unsafe_ssl_certs(void)
1582 {
1583         return prefs_common.unsafe_ssl_certs;
1584 }
1585
1586 gboolean prefs_common_enable_log_standard(void)
1587 {
1588         return prefs_common.enable_log_standard;
1589 }
1590
1591 gboolean prefs_common_enable_log_warning(void)
1592 {
1593         return prefs_common.enable_log_warning;
1594 }
1595 gboolean prefs_common_enable_log_error(void)
1596 {
1597         return prefs_common.enable_log_error;
1598 }
1599 gboolean prefs_common_enable_log_status(void)
1600 {
1601         return prefs_common.enable_log_status;
1602 }
1603
1604 /**
1605    return the translated name of a header, if the translate_header option is
1606    set, otherwise return the untranslated header name (header_name itself).
1607    this function is provided for convenience, it's an interface to
1608    prefs_common.trans_hdr.
1609    works with header names either with or without trailing colon, provided
1610    that gettext found such header name in the sources (they should all be
1611    found in src/gtk/headers.h anyway).
1612 */
1613 const gchar *prefs_common_translated_header_name(const gchar *header_name)
1614 {
1615         if (header_name == NULL || *header_name == '\0')
1616                 return header_name;
1617
1618         return prefs_common.trans_hdr ? gettext(header_name) : header_name;
1619 }
1620
1621 const gchar *prefs_common_get_uri_cmd(void)
1622 {
1623 #ifdef G_OS_WIN32
1624         return NULL;
1625 #else
1626         gchar *tmp = NULL;
1627         
1628         if (!prefs_common.cmds_use_system_default)
1629                 return prefs_common.uri_cmd;
1630         
1631         tmp = g_find_program_in_path("xdg-open");
1632         if (!tmp) 
1633                 return prefs_common.uri_cmd;
1634         
1635         g_free(tmp);
1636         return "xdg-open %s";
1637 #endif
1638 }
1639
1640 const gchar *prefs_common_get_ext_editor_cmd(void)
1641 {
1642         return prefs_common.ext_editor_cmd;
1643 #if 0 /* we should do that, but it detaches the editor and breaks
1644          compose.c's external composition. */
1645         gchar *tmp = NULL;
1646         
1647         if (!prefs_common.cmds_use_system_default)
1648                 return prefs_common.ext_editor_cmd;
1649         
1650         tmp = g_find_program_in_path("xdg-open");
1651         if (!tmp) 
1652                 return prefs_common.ext_editor_cmd;
1653         
1654         g_free(tmp);
1655         return "xdg-open %s";
1656 #endif 
1657 }
1658
1659 gboolean prefs_common_get_use_shred(void)
1660 {
1661         return prefs_common.use_shred;
1662 }
1663
1664 gboolean prefs_common_get_flush_metadata (void)
1665 {
1666         return prefs_common.flush_metadata;
1667 }
1668
1669 PrefsCommon *prefs_common_get_prefs(void)
1670 {
1671         return &prefs_common;
1672 }