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