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