2011-11-19 [pawel] 3.7.10cvs91
[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_("%x(%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         {"mimeview_tree_height", "60", &prefs_common.mimeview_tree_height, P_INT,
656          NULL, NULL, NULL},      
657         {"sourcewin_width", "600", &prefs_common.sourcewin_width, P_INT,
658          NULL, NULL, NULL},
659         {"sourcewin_height", "500", &prefs_common.sourcewin_height, P_INT,
660          NULL, NULL, NULL},
661         {"compose_width", "600", &prefs_common.compose_width, P_INT,
662          NULL, NULL, NULL},
663         {"compose_height", "560", &prefs_common.compose_height, P_INT,
664          NULL, NULL, NULL},
665 #else
666         {"mainwin_width", "700", &prefs_common.mainwin_width, P_INT,
667          NULL, NULL, NULL},
668         {"mainwin_height", "470", &prefs_common.mainwin_height, P_INT,
669          NULL, NULL, NULL},
670         {"messagewin_width", "700", &prefs_common.msgwin_width, P_INT,
671          NULL, NULL, NULL},
672         {"messagewin_height", "470", &prefs_common.msgwin_height, P_INT,
673          NULL, NULL, NULL},
674         {"sourcewin_width", "700", &prefs_common.sourcewin_width, P_INT,
675          NULL, NULL, NULL},
676         {"sourcewin_height", "470", &prefs_common.sourcewin_height, P_INT,
677          NULL, NULL, NULL},
678         {"compose_width", "700", &prefs_common.compose_width, P_INT,
679          NULL, NULL, NULL},
680         {"compose_height", "470", &prefs_common.compose_height, P_INT,
681          NULL, NULL, NULL},
682 #endif
683         {"compose_notebook_height", "130", &prefs_common.compose_notebook_height, P_INT,
684          NULL, NULL, NULL},
685         {"compose_x", "0", &prefs_common.compose_x, P_INT,
686          NULL, NULL, NULL},
687         {"compose_y", "0", &prefs_common.compose_y, P_INT,
688          NULL, NULL, NULL},
689         /* Message */
690         {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
691          NULL, NULL, NULL},
692
693         {"quote_level1_color", "#0000b3", &prefs_common.quote_level1_col, P_COLOR,
694          NULL, NULL, NULL},
695         {"quote_level2_color", "#0000b3", &prefs_common.quote_level2_col, P_COLOR,
696          NULL, NULL, NULL},
697         {"quote_level3_color", "#0000b3", &prefs_common.quote_level3_col, P_COLOR,
698          NULL, NULL, NULL},
699         {"enable_bgcolor", "FALSE", &prefs_common.enable_bgcolor, P_BOOL,
700          NULL, NULL, NULL},
701         {"quote_level1_bgcolor", "#cccccc", &prefs_common.quote_level1_bgcol, P_COLOR,
702          NULL, NULL, NULL},
703         {"quote_level2_bgcolor", "#d4d4d4", &prefs_common.quote_level2_bgcol, P_COLOR,
704          NULL, NULL, NULL},
705         {"quote_level3_bgcolor", "#dddddd", &prefs_common.quote_level3_bgcol, P_COLOR,
706          NULL, NULL, NULL},
707         {"uri_color", "#007f00", &prefs_common.uri_col, P_COLOR,
708          NULL, NULL, NULL},
709         {"emphasis_color", "#0000cf", &prefs_common.emphasis_col, P_COLOR,
710          NULL, NULL, NULL},
711         {"target_folder_color", "#da1cca", &prefs_common.tgt_folder_col, P_COLOR,
712          NULL, NULL, NULL},
713         {"signature_color", "#797979", &prefs_common.signature_col, P_COLOR,
714          NULL, NULL, NULL},
715         {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
716          P_BOOL, NULL, NULL, NULL},
717
718         {"display_header_pane", "FALSE", &prefs_common.display_header_pane,
719          P_BOOL, NULL, NULL, NULL},
720         {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
721          NULL, NULL, NULL},
722         {"display_xface", "TRUE", &prefs_common.display_xface,
723          P_BOOL, NULL, NULL, NULL},
724         {"render_html", "TRUE", &prefs_common.render_html, P_BOOL,
725          NULL, NULL, NULL},
726         {"invoke_plugin_on_html", "FALSE", &prefs_common.invoke_plugin_on_html, P_BOOL,
727          NULL, NULL, NULL},
728         {"promote_html_part", "FALSE", &prefs_common.promote_html_part, P_BOOL,
729          NULL, NULL, NULL},
730         {"line_space", "2", &prefs_common.line_space, P_INT,
731          NULL, NULL, NULL},
732         {"never_send_retrcpt", "FALSE", &prefs_common.never_send_retrcpt, P_BOOL,
733          NULL, NULL, NULL},
734
735         {"enable_smooth_scroll", "FALSE",
736          &prefs_common.enable_smooth_scroll, P_BOOL,
737          NULL, NULL, NULL},
738         {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
739          NULL, NULL, NULL},
740         {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
741          NULL, NULL, NULL},
742         {"hide_quoted", "TRUE",
743          &prefs_common.hide_quoted, P_BOOL,
744          NULL, NULL, NULL},
745         {"respect_flowed_format", "FALSE", &prefs_common.respect_flowed_format, P_BOOL,
746          NULL, NULL, NULL},
747         {"show_all_headers", "FALSE", &prefs_common.show_all_headers, P_BOOL,
748          NULL, NULL, NULL},
749
750         {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
751          NULL, NULL, NULL},
752
753         {"attach_desc", "TRUE", &prefs_common.attach_desc, P_BOOL,
754          NULL, NULL, NULL},
755         {"attach_save_directory", NULL,
756          &SPECIFIC_PREFS.attach_save_dir, P_STRING, NULL, NULL, NULL},
757         {"attach_load_directory", NULL,
758          &SPECIFIC_PREFS.attach_load_dir, P_STRING, NULL, NULL, NULL},
759
760         /* MIME viewer */
761         {"mime_textviewer",   NULL,
762          &SPECIFIC_PREFS.mime_textviewer,   P_STRING, NULL, NULL, NULL},
763         {"mime_open_command", "gedit '%s'",
764          &SPECIFIC_PREFS.mime_open_cmd,     P_STRING, NULL, NULL, NULL},
765         {"show_inline_attachments", "TRUE", 
766          &prefs_common.show_inline_attachments, P_BOOL, NULL, NULL, NULL},
767
768         /* Interface */
769 #ifndef GENERIC_UMPC
770         {"layout_mode", "0", &prefs_common.layout_mode, P_INT,
771          NULL, NULL, NULL},
772 #else
773         {"layout_mode", "5", &prefs_common.layout_mode, P_INT,
774          NULL, NULL, NULL},
775 #endif
776         /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
777          NULL, NULL, NULL}, */
778         {"always_show_message_when_selected", "0",
779          &prefs_common.always_show_msg,
780          P_ENUM, NULL, NULL, NULL},
781         {"select_on_entry", "3", &prefs_common.select_on_entry,
782          P_ENUM, NULL, NULL, NULL},
783         {"show_tooltips", "TRUE", &prefs_common.show_tooltips,
784          P_BOOL, NULL, NULL, NULL},
785
786         /* do it SUMMARY_OPEN_ACTIONS-1 times */
787         {"summary_select_prio1", "0", &prefs_common.summary_select_prio[0], P_ENUM,
788          NULL, NULL, NULL},
789         {"summary_select_prio2", "0", &prefs_common.summary_select_prio[1], P_ENUM,
790          NULL, NULL, NULL},
791         {"summary_select_prio3", "0", &prefs_common.summary_select_prio[2], P_ENUM,
792          NULL, NULL, NULL},
793         {"summary_select_prio4", "0", &prefs_common.summary_select_prio[3], P_ENUM,
794          NULL, NULL, NULL},
795         {"summary_select_prio5", "0", &prefs_common.summary_select_prio[4], P_ENUM,
796          NULL, NULL, NULL},
797         {"summary_select_prio6", "0", &prefs_common.summary_select_prio[5], P_ENUM,
798          NULL, NULL, NULL},
799         {"summary_select_prio7", "0", &prefs_common.summary_select_prio[6], P_ENUM,
800          NULL, NULL, NULL},
801
802         {"mark_as_read_on_new_window", "FALSE",
803          &prefs_common.mark_as_read_on_new_window,
804          P_BOOL, NULL, NULL, NULL},
805         {"mark_as_read_delay", "0",
806          &prefs_common.mark_as_read_delay, P_INT, 
807          NULL, NULL, NULL},
808         {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
809          NULL, NULL, NULL},
810         {"nextunreadmsg_dialog", "1", &prefs_common.next_unread_msg_dialog, P_ENUM,
811          NULL, NULL, NULL},
812         {"summary_from_show", "0", &prefs_common.summary_from_show, P_ENUM,
813          NULL, NULL, NULL},
814
815         {"pixmap_theme_path", DEFAULT_PIXMAP_THEME, 
816          &SPECIFIC_PREFS.pixmap_theme_path, P_STRING,
817          NULL, NULL, NULL},
818
819         {"ask_mark_all_read", "TRUE", &prefs_common.ask_mark_all_read, P_BOOL,
820          NULL, NULL, NULL},
821
822         {"ask_apply_per_account_filtering_rules", "TRUE", &prefs_common.ask_apply_per_account_filtering_rules, P_BOOL,
823          NULL, NULL, NULL},
824         {"apply_per_account_filtering_rules", "0", &prefs_common.apply_per_account_filtering_rules, P_ENUM,
825          NULL, NULL, NULL},
826
827         /* Addressbook */
828         {"addressbook_use_editaddress_dialog", "TRUE", &prefs_common.addressbook_use_editaddress_dialog,
829          P_BOOL, NULL, NULL, NULL},
830         {"addressbook_hpaned_pos", "-1", &prefs_common.addressbook_hpaned_pos,
831          P_INT, NULL, NULL, NULL},
832         {"addressbook_vpaned_pos", "-1", &prefs_common.addressbook_vpaned_pos,
833          P_INT, NULL, NULL, NULL},
834
835         /* Other */
836 #ifndef G_OS_WIN32
837         {"uri_open_command", DEFAULT_BROWSER_CMD,
838          &SPECIFIC_PREFS.uri_cmd, P_STRING, NULL, NULL, NULL},
839 #endif
840         {"ext_editor_command", DEFAULT_EDITOR_CMD,
841          &SPECIFIC_PREFS.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
842         {"cmds_use_system_default", "TRUE",
843          &prefs_common.cmds_use_system_default, P_BOOL, NULL, NULL, NULL},
844         {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
845          P_BOOL, NULL, NULL, NULL},
846         {"session_passwords", "FALSE", &prefs_common.session_passwords,
847          P_BOOL, NULL, NULL, NULL},
848         {"confirm_on_exit", "FALSE", &prefs_common.confirm_on_exit, P_BOOL,
849          NULL, NULL, NULL},
850         {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
851          NULL, NULL, NULL},
852         {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
853          NULL, NULL, NULL},
854         {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
855          P_BOOL, NULL, NULL, NULL},
856         {"work_offline", "FALSE", &prefs_common.work_offline, P_BOOL,
857          NULL, NULL, NULL},
858         {"summary_quicksearch_type", "0", &prefs_common.summary_quicksearch_type, P_INT,
859          NULL, NULL, NULL},
860 #ifndef GENERIC_UMPC
861         {"summary_quicksearch_recurse", "1", &prefs_common.summary_quicksearch_recurse, P_INT,
862          NULL, NULL, NULL},
863 #else
864         {"summary_quicksearch_recurse", "0", &prefs_common.summary_quicksearch_recurse, P_INT,
865          NULL, NULL, NULL},
866 #endif
867
868 #if defined(__OpenBSD__)
869         {"io_timeout_secs", "80", &prefs_common.io_timeout_secs,
870          P_INT, NULL, NULL, NULL},
871 #else
872         {"io_timeout_secs", "60", &prefs_common.io_timeout_secs,
873          P_INT, NULL, NULL, NULL},
874 #endif
875         {"hide_score", "-9999", &prefs_common.kill_score, P_INT,
876          NULL, NULL, NULL},
877         {"important_score", "1", &prefs_common.important_score, P_INT,
878          NULL, NULL, NULL},
879
880         {"clip_log", "TRUE", &prefs_common.cliplog, P_BOOL,
881          NULL, NULL, NULL},
882         {"log_length", "500", &prefs_common.loglength, P_INT,
883          NULL, NULL, NULL},
884 #ifndef GENERIC_UMPC
885         {"enable_log_standard", "TRUE", &prefs_common.enable_log_standard, P_BOOL,
886          NULL, NULL, NULL},
887         {"enable_log_warning", "TRUE", &prefs_common.enable_log_warning, P_BOOL,
888          NULL, NULL, NULL},
889         {"enable_log_error", "TRUE", &prefs_common.enable_log_error, P_BOOL,
890          NULL, NULL, NULL},
891         {"enable_log_status", "TRUE", &prefs_common.enable_log_status, P_BOOL,
892          NULL, NULL, NULL},
893 #else
894         {"enable_log_standard", "FALSE", &prefs_common.enable_log_standard, P_BOOL,
895          NULL, NULL, NULL},
896         {"enable_log_warning", "FALSE", &prefs_common.enable_log_warning, P_BOOL,
897          NULL, NULL, NULL},
898         {"enable_log_error", "FALSE", &prefs_common.enable_log_error, P_BOOL,
899          NULL, NULL, NULL},
900         {"enable_log_status", "FALSE", &prefs_common.enable_log_status, P_BOOL,
901          NULL, NULL, NULL},
902 #endif
903         {"log_msg_color", "#00af00", &prefs_common.log_msg_color, P_COLOR,
904          NULL, NULL, NULL},
905         {"log_warn_color", "#af0000", &prefs_common.log_warn_color, P_COLOR,
906          NULL, NULL, NULL},
907         {"log_error_color", "#af0000", &prefs_common.log_error_color, P_COLOR,
908          NULL, NULL, NULL},
909         {"log_in_color", "#000000", &prefs_common.log_in_color, P_COLOR,
910          NULL, NULL, NULL},
911         {"log_out_color", "#0000ef", &prefs_common.log_out_color, P_COLOR,
912          NULL, NULL, NULL},
913         {"log_status_ok_color", "#00af00", &prefs_common.log_status_ok_color, P_COLOR,
914          NULL, NULL, NULL},
915         {"log_status_nok_color", "#0000af", &prefs_common.log_status_nok_color, P_COLOR,
916          NULL, NULL, NULL},
917         {"log_status_skip_color", "#aa00aa", &prefs_common.log_status_skip_color, P_COLOR,
918          NULL, NULL, NULL},
919
920     {"enable_filtering_debug", "FALSE", &prefs_common.enable_filtering_debug, P_BOOL,
921          NULL, NULL, NULL},
922     {"filtering_debug_level", "1", &prefs_common.filtering_debug_level, P_INT,
923          NULL, NULL, NULL},
924     {"enable_filtering_debug_inc", "TRUE", &prefs_common.enable_filtering_debug_inc, P_BOOL,
925          NULL, NULL, NULL},
926     {"enable_filtering_debug_manual", "TRUE", &prefs_common.enable_filtering_debug_manual, P_BOOL,
927          NULL, NULL, NULL},
928     {"enable_filtering_debug_folder_proc", "FALSE", &prefs_common.enable_filtering_debug_folder_proc, P_BOOL,
929          NULL, NULL, NULL},
930     {"enable_filtering_debug_pre_proc", "FALSE", &prefs_common.enable_filtering_debug_pre_proc, P_BOOL,
931          NULL, NULL, NULL},
932     {"enable_filtering_debug_post_proc", "FALSE", &prefs_common.enable_filtering_debug_post_proc, P_BOOL,
933          NULL, NULL, NULL},
934     {"filtering_debug_clip_log", "TRUE", &prefs_common.filtering_debug_cliplog, P_BOOL,
935          NULL, NULL, NULL},
936         {"filtering_debug_log_length", "500", &prefs_common.filtering_debug_loglength, P_INT,
937          NULL, NULL, NULL},
938
939         {"gtk_can_change_accels", "FALSE", &prefs_common.gtk_can_change_accels, P_BOOL,
940          NULL, NULL, NULL},
941
942         {"color_new", "#0000b3", &prefs_common.color_new, P_COLOR,
943          NULL, NULL, NULL},
944
945         /* Some windows' sizes */
946         {"filteringwin_width", "500", &prefs_common.filteringwin_width, P_INT,
947          NULL, NULL, NULL},
948         {"filteringwin_height", "-1", &prefs_common.filteringwin_height, P_INT,
949          NULL, NULL, NULL},
950
951         {"filteringactionwin_width", "490", &prefs_common.filteringactionwin_width, P_INT,
952          NULL, NULL, NULL},
953         {"filteringactionwin_height", "-1", &prefs_common.filteringactionwin_height, P_INT,
954          NULL, NULL, NULL},
955
956         {"matcherwin_width", "520", &prefs_common.matcherwin_width, P_INT,
957          NULL, NULL, NULL},
958         {"matcherwin_height", "-1", &prefs_common.matcherwin_height, P_INT,
959          NULL, NULL, NULL},
960
961         {"templateswin_width", "480", &prefs_common.templateswin_width, P_INT,
962          NULL, NULL, NULL},
963         {"templateswin_height", "-1", &prefs_common.templateswin_height, P_INT,
964          NULL, NULL, NULL},
965
966         {"actionswin_width", "486", &prefs_common.actionswin_width, P_INT,
967          NULL, NULL, NULL},
968         {"actionswin_height", "-1", &prefs_common.actionswin_height, P_INT,
969          NULL, NULL, NULL},
970
971         {"tagswin_width", "486", &prefs_common.tagswin_width, P_INT,
972          NULL, NULL, NULL},
973         {"tagswin_height", "-1", &prefs_common.tagswin_height, P_INT,
974          NULL, NULL, NULL},
975
976         {"addressbookwin_width", "520", &prefs_common.addressbookwin_width, P_INT,
977          NULL, NULL, NULL},
978         {"addressbookwin_height", "-1", &prefs_common.addressbookwin_height, P_INT,
979          NULL, NULL, NULL},
980
981         {"addressbookeditpersonwin_width", "640", &prefs_common.addressbookeditpersonwin_width, P_INT,
982          NULL, NULL, NULL},
983         {"addressbookeditpersonwin_height", "320", &prefs_common.addressbookeditpersonwin_height, P_INT,
984          NULL, NULL, NULL},
985
986         {"addressbookeditgroupwin_width", "580", &prefs_common.addressbookeditgroupwin_width, P_INT,
987          NULL, NULL, NULL},
988         {"addressbookeditgroupwin_height", "340", &prefs_common.addressbookeditgroupwin_height, P_INT,
989          NULL, NULL, NULL},
990
991         {"pluginswin_width", "-1", &prefs_common.pluginswin_width, P_INT,
992          NULL, NULL, NULL},
993         {"pluginswin_height", "-1", &prefs_common.pluginswin_height, P_INT,
994          NULL, NULL, NULL},
995
996         {"prefswin_width", "600", &prefs_common.prefswin_width, P_INT,
997          NULL, NULL, NULL},
998         {"prefswin_height", "-1", &prefs_common.prefswin_height, P_INT,
999          NULL, NULL, NULL},
1000
1001         {"folderitemwin_width", "500", &prefs_common.folderitemwin_width, P_INT,
1002          NULL, NULL, NULL},
1003         {"folderitemwin_height", "-1", &prefs_common.folderitemwin_height, P_INT,
1004          NULL, NULL, NULL},
1005
1006         {"zero_replacement_char", "0", &prefs_common.zero_replacement, P_STRING,
1007          NULL, NULL, NULL},
1008
1009         {"editaccountwin_width", "500", &prefs_common.editaccountwin_width, P_INT,
1010          NULL, NULL, NULL},
1011         {"editaccountwin_height", "-1", &prefs_common.editaccountwin_height, P_INT,
1012          NULL, NULL, NULL},
1013
1014         {"accountswin_width", "500", &prefs_common.accountswin_width, P_INT,
1015          NULL, NULL, NULL},
1016         {"accountswin_height", "-1", &prefs_common.accountswin_height, P_INT,
1017          NULL, NULL, NULL},
1018
1019         {"logwin_width", "520", &prefs_common.logwin_width, P_INT,
1020          NULL, NULL, NULL},
1021         {"logwin_height", "-1", &prefs_common.logwin_height, P_INT,
1022          NULL, NULL, NULL},
1023
1024         {"filtering_debugwin_width", "600", &prefs_common.filtering_debugwin_width, P_INT,
1025          NULL, NULL, NULL},
1026         {"filtering_debugwin_height", "-1", &prefs_common.filtering_debugwin_height, P_INT,
1027          NULL, NULL, NULL},
1028
1029         {"folderselwin_width", "300", &prefs_common.folderselwin_width, P_INT,
1030          NULL, NULL, NULL},
1031         {"folderselwin_height", "-1", &prefs_common.folderselwin_height, P_INT,
1032          NULL, NULL, NULL},
1033
1034         {"addressaddwin_width", "300", &prefs_common.addressaddwin_width, P_INT,
1035          NULL, NULL, NULL},
1036         {"addressaddwin_height", "-1", &prefs_common.addressaddwin_height, P_INT,
1037          NULL, NULL, NULL},
1038
1039         {"addressbook_folderselwin_width", "300", &prefs_common.addressbook_folderselwin_width, P_INT,
1040          NULL, NULL, NULL},
1041         {"addressbook_folderselwin_height", "-1", &prefs_common.addressbook_folderselwin_height, P_INT,
1042          NULL, NULL, NULL},
1043
1044         {"aboutwin_width", "450", &prefs_common.aboutwin_width, P_INT,
1045          NULL, NULL, NULL},
1046         {"aboutwin_height", "500", &prefs_common.aboutwin_height, P_INT,
1047          NULL, NULL, NULL},
1048
1049         {"addrgather_width", "450", &prefs_common.addrgather_width, P_INT,
1050          NULL, NULL, NULL},
1051         {"addrgather_height", "-1", &prefs_common.addrgather_height, P_INT,
1052          NULL, NULL, NULL},
1053
1054         {"news_subscribe_width", "450", &prefs_common.news_subscribe_width, P_INT,
1055          NULL, NULL, NULL},
1056         {"news_subscribe_height", "400", &prefs_common.news_subscribe_height, P_INT,
1057          NULL, NULL, NULL},
1058
1059         /* Hidden */
1060         {"warn_dnd", "1", &prefs_common.warn_dnd, P_INT,
1061          NULL, NULL, NULL},
1062         {"utf8_instead_of_locale_for_broken_mail", "0", 
1063          &prefs_common.broken_are_utf8, P_INT,
1064          NULL, NULL, NULL},
1065         {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
1066          NULL, NULL, NULL},
1067         {"use_stripes_everywhere", "TRUE", &prefs_common.use_stripes_everywhere, P_BOOL,
1068          NULL, NULL, NULL},
1069         {"use_stripes_in_summaries", "TRUE", &prefs_common.use_stripes_in_summaries, P_BOOL,
1070          NULL, NULL, NULL},
1071         {"stripes_color_offset", "4000", &prefs_common.stripes_color_offset, P_INT,
1072          NULL, NULL, NULL},
1073         {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
1074          NULL, NULL, NULL},
1075         {"folderview_vscrollbar_policy", "0",
1076          &prefs_common.folderview_vscrollbar_policy, P_ENUM,
1077          NULL, NULL, NULL},
1078         {"textview_cursor_visible", "FALSE",
1079          &prefs_common.textview_cursor_visible, P_BOOL,
1080          NULL, NULL, NULL},
1081         {"hover_timeout", "500", &prefs_common.hover_timeout, P_INT,
1082          NULL, NULL, NULL},
1083 #ifndef GENERIC_UMPC
1084         {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
1085          NULL, NULL, NULL},
1086         {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
1087          NULL, NULL, NULL},
1088 #else
1089         {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
1090          NULL, NULL, NULL},
1091         {"cache_min_keep_time", "0", &prefs_common.cache_min_keep_time, P_INT,
1092          NULL, NULL, NULL},
1093 #endif
1094         {"thread_by_subject_max_age", "10", &prefs_common.thread_by_subject_max_age,
1095         P_INT, NULL, NULL, NULL },
1096         {"last_opened_folder", "", &prefs_common.last_opened_folder,
1097         P_STRING, NULL, NULL, NULL },
1098         {"goto_last_folder_on_startup", "FALSE", &prefs_common.goto_last_folder_on_startup,
1099         P_BOOL, NULL, NULL, NULL },
1100         {"summary_quicksearch_sticky", "1", &prefs_common.summary_quicksearch_sticky, P_INT,
1101          NULL, NULL, NULL},
1102         {"summary_quicksearch_dynamic", "0", &prefs_common.summary_quicksearch_dynamic, P_INT,
1103          NULL, NULL, NULL},
1104         {"summary_quicksearch_autorun", "0", &prefs_common.summary_quicksearch_autorun, P_INT,
1105          NULL, NULL, NULL},
1106         {"statusbar_update_step", "10", &prefs_common.statusbar_update_step, P_INT,
1107          NULL, NULL, NULL},
1108         {"compose_no_markup", "FALSE", &prefs_common.compose_no_markup, P_BOOL,
1109          NULL, NULL, NULL},
1110         {"skip_ssl_cert_check", "FALSE", &prefs_common.skip_ssl_cert_check, P_BOOL,
1111          NULL, NULL, NULL},
1112         {"live_dangerously", "FALSE", &prefs_common.live_dangerously, P_BOOL,
1113          NULL, NULL, NULL},
1114         {"save_parts_readwrite", "FALSE", &prefs_common.save_parts_readwrite, P_BOOL,
1115          NULL, NULL, NULL},
1116         {"hide_quotes", "0", &prefs_common.hide_quotes, P_INT,
1117          NULL, NULL, NULL},
1118         {"unsafe_ssl_certs", "FALSE", &prefs_common.unsafe_ssl_certs, P_BOOL,
1119          NULL, NULL, NULL},
1120 #ifndef GENERIC_UMPC
1121         {"real_time_sync", "FALSE", &prefs_common.real_time_sync, P_BOOL,
1122          NULL, NULL, NULL},
1123 #else
1124         {"real_time_sync", "TRUE", &prefs_common.real_time_sync, P_BOOL,
1125          NULL, NULL, NULL},
1126 #endif
1127
1128         {"print_paper_type", NULL, &prefs_common.print_paper_type, P_STRING,
1129          NULL, NULL, NULL},
1130         {"print_paper_orientation", "0", &prefs_common.print_paper_orientation, P_INT,
1131          NULL, NULL, NULL},
1132         {"print_margin_top", "-1", &prefs_common.print_margin_top, P_INT,
1133          NULL, NULL, NULL},
1134         {"print_margin_bottom", "-1", &prefs_common.print_margin_bottom, P_INT,
1135          NULL, NULL, NULL},
1136         {"print_margin_left", "-1", &prefs_common.print_margin_left, P_INT,
1137          NULL, NULL, NULL},
1138         {"print_margin_right", "-1", &prefs_common.print_margin_right, P_INT,
1139          NULL, NULL, NULL},
1140         {"print_use_color", "0", &prefs_common.print_use_color, P_INT,
1141          NULL, NULL, NULL},
1142         {"print_use_collate", "0", &prefs_common.print_use_collate, P_INT,
1143          NULL, NULL, NULL},
1144         {"print_use_reverse", "0", &prefs_common.print_use_reverse, P_INT,
1145          NULL, NULL, NULL},
1146         {"print_use_duplex", "0", &prefs_common.print_use_duplex, P_INT,
1147          NULL, NULL, NULL},
1148         {"print_imgs", "1", &prefs_common.print_imgs, P_INT,
1149          NULL, NULL, NULL},
1150         {"print_previewwin_width", "600", &prefs_common.print_previewwin_width, P_INT,
1151          NULL, NULL, NULL},
1152         {"print_previewwin_height", "-1", &prefs_common.print_previewwin_height, P_INT,
1153          NULL, NULL, NULL},
1154         {"use_networkmanager", "TRUE", &prefs_common.use_networkmanager, P_BOOL,
1155          NULL, NULL, NULL},
1156         {"use_shred", "FALSE", &prefs_common.use_shred, P_BOOL,
1157          NULL, NULL, NULL},
1158
1159         {"two_line_vertical", "TRUE", &prefs_common.two_line_vert,
1160         P_BOOL, NULL, NULL, NULL },
1161
1162         {"inherit_folder_properties", "FALSE", &prefs_common.inherit_folder_props, P_BOOL,
1163          NULL, NULL, NULL},
1164
1165         {"flush_metadata", "TRUE", &prefs_common.flush_metadata, P_BOOL,
1166          NULL, NULL, NULL},
1167
1168         {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
1169 };
1170
1171 /*
1172  * Read history list from the specified history file in the specified directory (subdir of rc_dir)
1173  * Fallback to default_list if history file is not found
1174  */
1175 GList *prefs_common_read_history_from_dir_with_defaults(const gchar *dirname, const gchar *history,
1176                                                                                                                           GList *default_list)
1177 {
1178         FILE *fp;
1179         gchar *path;
1180         gchar buf[PREFSBUFSIZE];
1181         GList *tmp = NULL;
1182
1183         if (dirname) {
1184                 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, dirname,
1185                                    G_DIR_SEPARATOR_S, history,
1186                                    NULL);
1187         } else {
1188         path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1189                            NULL);
1190         }
1191         if ((fp = g_fopen(path, "rb")) == NULL) {
1192                 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
1193                 g_free(path);
1194                 /* returns default list if set, otherwise NULL */
1195                 return default_list;
1196         }
1197         g_free(path);
1198         while (fgets(buf, sizeof(buf), fp) != NULL) {
1199                 g_strstrip(buf);
1200                 if (buf[0] == '\0') continue;
1201                 tmp = add_history(tmp, buf);
1202         }
1203         fclose(fp);
1204
1205         tmp = g_list_reverse(tmp);
1206
1207         return tmp;
1208 }
1209
1210 /*
1211  * Read history list from the specified history file in the specified directory (subdir of rc_dir)
1212  */
1213 static GList *prefs_common_read_history_from_dir(const gchar *dirname, const gchar *history) 
1214 {
1215         return prefs_common_read_history_from_dir_with_defaults(dirname, history, NULL);
1216 }
1217
1218 /*
1219  * Read history list from the specified history file
1220  */
1221 static GList *prefs_common_read_history(const gchar *history) 
1222 {
1223         return prefs_common_read_history_from_dir(NULL, history);
1224 }
1225
1226 void prefs_common_read_config(void)
1227 {
1228         gchar *rcpath;
1229         gchar *tmp;
1230
1231         rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMON_RC, NULL);
1232         prefs_read_config(param, "Common", rcpath, NULL);
1233 #ifdef G_OS_WIN32
1234         prefs_read_config(param_os_specific, "CommonWin32", rcpath, NULL);
1235 #endif
1236
1237         g_free(rcpath);
1238
1239         tmp = g_strdup(gettext(prefs_common.date_format));
1240         g_free(prefs_common.date_format);
1241         prefs_common.date_format = tmp;
1242
1243         prefs_common.mime_open_cmd_history =
1244                 prefs_common_read_history(COMMAND_HISTORY);
1245         prefs_common.summary_quicksearch_history =
1246                 prefs_common_read_history(QUICKSEARCH_HISTORY);
1247         prefs_common.summary_search_from_history =
1248                 prefs_common_read_history(SUMMARY_SEARCH_FROM_HISTORY);
1249         prefs_common.summary_search_to_history =
1250                 prefs_common_read_history(SUMMARY_SEARCH_TO_HISTORY);
1251         prefs_common.summary_search_subject_history =
1252                 prefs_common_read_history(SUMMARY_SEARCH_SUBJECT_HISTORY);
1253         prefs_common.summary_search_body_history =
1254                 prefs_common_read_history(SUMMARY_SEARCH_BODY_HISTORY);
1255         prefs_common.summary_search_adv_condition_history =
1256                 prefs_common_read_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY);
1257         prefs_common.message_search_history =
1258                 prefs_common_read_history(MESSAGE_SEARCH_HISTORY);
1259         prefs_common.compose_save_to_history =
1260                 prefs_common_read_history(COMPOSE_SAVE_TO_HISTORY);
1261
1262         prefs_common.addressbook_custom_attributes = addressbook_update_custom_attr_from_prefs();
1263
1264         colorlabel_update_colortable_from_prefs();
1265 }
1266
1267 #define TRY(func) \
1268 if (!(func)) \
1269 { \
1270         g_warning("failed to write\n"); \
1271         goto out;                       \
1272 } \
1273
1274 /*
1275  * Save history list to the specified history file in the specified directory (subdir of rc_dir)
1276  */
1277 static void prefs_common_save_history_to_dir(const gchar *dirname, const gchar *history, GList *list)
1278 {
1279         GList *cur;
1280         FILE *fp;
1281         gchar *path, *tmp_path;
1282
1283         if (dirname) {
1284                 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, dirname,
1285                                    G_DIR_SEPARATOR_S, history,
1286                                    NULL);
1287         } else {
1288         path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1289                            NULL);
1290         }
1291         tmp_path = g_strconcat(path, ".tmp", NULL);
1292
1293         if ((fp = g_fopen(tmp_path, "wb")) == NULL) {
1294                 FILE_OP_ERROR(tmp_path, "fopen");
1295                 goto out;
1296         }
1297
1298         for (cur = list; cur != NULL; cur = cur->next) {
1299                 TRY(fputs((gchar *)cur->data, fp) != EOF &&
1300                     fputc('\n', fp) != EOF);
1301         }
1302
1303         if (fclose(fp) == EOF) {
1304                 FILE_OP_ERROR(tmp_path, "fclose");
1305                 fp = NULL;
1306                 goto out;
1307         }
1308         fp = NULL;
1309 #ifdef G_OS_WIN32
1310         claws_unlink(path);
1311 #endif
1312         if (g_rename(tmp_path, path) < 0) {
1313                 FILE_OP_ERROR(path, "rename");
1314                 goto out;
1315         }
1316
1317 out:
1318         if (fp)
1319                 fclose(fp);
1320         g_free(tmp_path);
1321         g_free(path);
1322 }
1323
1324 /*
1325  * Save history list to the specified history file
1326  */
1327 static void prefs_common_save_history(const gchar *history, GList *list)
1328 {
1329         prefs_common_save_history_to_dir(NULL, history, list);
1330 }
1331
1332 #undef TRY
1333
1334 void prefs_common_write_config(void)
1335 {
1336         prefs_write_config(param, "Common", COMMON_RC);
1337 #ifdef G_OS_WIN32
1338         prefs_write_config(param_os_specific, "CommonWin32", COMMON_RC);
1339 #endif
1340
1341         prefs_common_save_history(COMMAND_HISTORY, 
1342                 prefs_common.mime_open_cmd_history);
1343         prefs_common_save_history(QUICKSEARCH_HISTORY, 
1344                 prefs_common.summary_quicksearch_history);
1345         prefs_common_save_history(SUMMARY_SEARCH_FROM_HISTORY, 
1346                 prefs_common.summary_search_from_history);
1347         prefs_common_save_history(SUMMARY_SEARCH_TO_HISTORY, 
1348                 prefs_common.summary_search_to_history);
1349         prefs_common_save_history(SUMMARY_SEARCH_SUBJECT_HISTORY, 
1350                 prefs_common.summary_search_subject_history);
1351         prefs_common_save_history(SUMMARY_SEARCH_BODY_HISTORY, 
1352                 prefs_common.summary_search_body_history);
1353         prefs_common_save_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY, 
1354                 prefs_common.summary_search_adv_condition_history);
1355         prefs_common_save_history(MESSAGE_SEARCH_HISTORY, 
1356                 prefs_common.message_search_history);
1357         prefs_common_save_history(COMPOSE_SAVE_TO_HISTORY, 
1358                 prefs_common.compose_save_to_history);
1359
1360         prefs_common_save_history_to_dir(ADDRBOOK_DIR,
1361                 ADDRESSBOOK_CUSTOM_ATTRIBUTES, 
1362                 prefs_common.addressbook_custom_attributes);
1363 }
1364
1365 /* make a copy of string 'in' into buffer 'out'. un-escape \ sequences.
1366    both 'in' and 'out' must be non-NULL.
1367    'out' must be a pointer to a buffer whose size is at least equal
1368    to strlen(txt)+1, this buffer will get cleared. out's contents
1369    will always get set to a valid string, even if it's "".*/
1370 void pref_get_unescaped_pref(gchar *out, const gchar *in)
1371 {
1372         const gchar *i;
1373         gchar *o;
1374
1375         *out = '\0';
1376
1377         cm_return_if_fail( in != NULL );
1378         cm_return_if_fail( out != NULL );
1379
1380         i = in;
1381         o = out;
1382         memset(out, 0, strlen(in)+1);
1383         while (*i != '\0') {
1384                 if (*i == '\\' && *(i+1) == 'n') {
1385                         *o++ = '\n';
1386                         i++;
1387                 } else if (*i == '\\' && *(i+1) == 't') {
1388                         *o++ = '\t';
1389                         i++;
1390                 } else if (*i == '\\' && *(i+1) == '\\') {
1391                         *o++ = '\\';
1392                         i++;
1393                 } else {
1394                         *o++ = *i;
1395                 }
1396                 i++;
1397         }
1398         *o='\0';
1399 }
1400
1401 /* make a copy of string 'in' into buffer 'out'. escape \ sequences.
1402    both 'in' and 'out' must be non-NULL.
1403    'out' must be a pointer to a buffer whose size is at least equal
1404    to 2*strlen(txt)+1. out's contents will always get set to a valid
1405    string, even if it's "". */
1406 void pref_get_escaped_pref(gchar *out, const gchar *in)
1407 {
1408         const gchar *i;
1409         gchar *o;
1410
1411         *out = '\0';
1412
1413         cm_return_if_fail( in != NULL );
1414         cm_return_if_fail( out != NULL );
1415
1416         i = in;
1417         o = out;
1418         while (*i != '\0') {
1419                 if (*i == '\n') {
1420                         *o++ = '\\';
1421                         *o++ = 'n';
1422                 } else if (*i == '\t') {
1423                         *o++ = '\\';
1424                         *o++ = 't';
1425                 } else if (*i == '\\') {
1426                         *o++ = '\\';
1427                         *o++ = '\\';
1428                 } else {
1429                         *o++ = *i;
1430                 }
1431                 i++;
1432         }
1433         *o = '\0';
1434 }
1435                 
1436 /* set the contents of a textview widget from the internal \-escaped
1437   representation of a pref string. both txt and textview must be non-NULL. */
1438 void pref_set_textview_from_pref(GtkTextView *textview, const gchar *txt)
1439 {
1440         GtkTextBuffer *buffer;
1441         gchar *out = NULL;
1442
1443         cm_return_if_fail( textview != NULL );
1444
1445         buffer = gtk_text_view_get_buffer(textview);
1446
1447         if (!txt) {
1448                 gtk_text_buffer_set_text(buffer, "", -1);
1449         } else {
1450                 out = g_malloc(strlen(txt)+1);
1451
1452                 pref_get_unescaped_pref(out, txt);
1453
1454                 gtk_text_buffer_set_text(buffer, out?out:"", -1);
1455                 g_free(out);
1456         }
1457 }
1458
1459 /* set the contents of a gtkentry widget from the internal \-escaped
1460   representation of a pref string. both txt and entry must be non-NULL. */
1461 void pref_set_entry_from_pref(GtkEntry *entry, const gchar *txt)
1462 {
1463         gchar *out = NULL;
1464
1465         cm_return_if_fail( entry != NULL );
1466         if (!txt) {
1467                 gtk_entry_set_text(entry, "");
1468         } else {
1469                 out = g_malloc(strlen(txt)+1);
1470
1471                 pref_get_unescaped_pref(out, txt);
1472
1473                 gtk_entry_set_text(entry, out?out:"");
1474                 g_free(out);
1475         }
1476 }
1477
1478 /* get the \-escaped internal representation of a pref from the contents of
1479    a textview widget. textview must be non-NULL. */
1480 gchar *pref_get_pref_from_textview(GtkTextView *textview) 
1481 {
1482         GtkTextBuffer *buffer;
1483         GtkTextIter start, end;
1484         gchar *out, *tmp;
1485         
1486         cm_return_val_if_fail( textview != NULL, "" );
1487
1488         buffer = gtk_text_view_get_buffer(textview);
1489         gtk_text_buffer_get_start_iter(buffer, &start);
1490         gtk_text_buffer_get_iter_at_offset(buffer, &end, -1);
1491         tmp = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
1492         out = malloc(2*strlen(tmp)+1);
1493         if (out)
1494                 pref_get_escaped_pref(out, tmp);
1495         g_free(tmp);
1496
1497         return out?out:"";
1498 }
1499
1500 /* get the \-escaped internal representation of a pref from the contents of
1501    a gtkentry widget. entry must be non-NULL. */
1502 gchar *pref_get_pref_from_entry(GtkEntry *entry) 
1503 {
1504         gchar *out, *tmp;
1505
1506         cm_return_val_if_fail( entry != NULL, "" );
1507
1508         tmp = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
1509         out = malloc(2*strlen(tmp)+1);
1510         
1511         if (out)
1512                 pref_get_escaped_pref(out, tmp);
1513         g_free(tmp);
1514
1515         return out?out:"";
1516 }
1517
1518 /* ugly hack to be able to get this pref from ssl_certificate.c */
1519 gboolean prefs_common_unsafe_ssl_certs(void)
1520 {
1521         return prefs_common.unsafe_ssl_certs;
1522 }
1523
1524 gboolean prefs_common_enable_log_standard(void)
1525 {
1526         return prefs_common.enable_log_standard;
1527 }
1528
1529 gboolean prefs_common_enable_log_warning(void)
1530 {
1531         return prefs_common.enable_log_warning;
1532 }
1533 gboolean prefs_common_enable_log_error(void)
1534 {
1535         return prefs_common.enable_log_error;
1536 }
1537 gboolean prefs_common_enable_log_status(void)
1538 {
1539         return prefs_common.enable_log_status;
1540 }
1541
1542 #ifdef MAEMO
1543 const gchar *prefs_common_get_data_root(void)
1544 {
1545         if (prefs_common.data_root && *prefs_common.data_root)
1546                 return prefs_common.data_root;
1547         else
1548                 return NULL;
1549 }
1550 #endif
1551 /**
1552    return the translated name of a header, if the translate_header option is
1553    set, otherwise return the untranslated header name (header_name itself).
1554    this function is provided for convenience, it's an interface to
1555    prefs_common.trans_hdr.
1556    works with header names either with or without trailing colon, provided
1557    that gettext found such header name in the sources (they should all be
1558    found in src/gtk/headers.h anyway).
1559 */
1560 const gchar *prefs_common_translated_header_name(const gchar *header_name)
1561 {
1562         if (header_name == NULL || *header_name == '\0')
1563                 return header_name;
1564
1565         return prefs_common.trans_hdr ? gettext(header_name) : header_name;
1566 }
1567
1568 const gchar *prefs_common_get_uri_cmd(void)
1569 {
1570 #ifdef G_OS_WIN32
1571         return NULL;
1572 #else
1573         gchar *tmp = NULL;
1574         
1575         if (!prefs_common.cmds_use_system_default)
1576                 return prefs_common.uri_cmd;
1577         
1578         tmp = g_find_program_in_path("xdg-open");
1579         if (!tmp) 
1580                 return prefs_common.uri_cmd;
1581         
1582         g_free(tmp);
1583         return "xdg-open %s";
1584 #endif
1585 }
1586
1587 const gchar *prefs_common_get_ext_editor_cmd(void)
1588 {
1589         return prefs_common.ext_editor_cmd;
1590 #if 0 /* we should do that, but it detaches the editor and breaks
1591          compose.c's external composition. */
1592         gchar *tmp = NULL;
1593         
1594         if (!prefs_common.cmds_use_system_default)
1595                 return prefs_common.ext_editor_cmd;
1596         
1597         tmp = g_find_program_in_path("xdg-open");
1598         if (!tmp) 
1599                 return prefs_common.ext_editor_cmd;
1600         
1601         g_free(tmp);
1602         return "xdg-open %s";
1603 #endif 
1604 }
1605
1606 gboolean prefs_common_get_use_shred(void)
1607 {
1608         return prefs_common.use_shred;
1609 }
1610
1611 gboolean prefs_common_get_flush_metadata (void)
1612 {
1613         return prefs_common.flush_metadata;
1614 }
1615
1616 PrefsCommon *prefs_common_get_prefs(void)
1617 {
1618         return &prefs_common;
1619 }