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