add option to avoid Face images being saved to addrbook
[claws.git] / src / prefs_common.c
1 /*
2  * Claws Mail -- a GTK+ based, lightweight, and fast e-mail client
3  * Copyright (C) 1999-2020 the Claws Mail team and Hiroyuki Yamamoto
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 #ifdef ENABLE_NLS
440         {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL,
441          NULL, NULL, NULL},
442 #else
443         {"translate_header", "FALSE", &prefs_common.trans_hdr, P_BOOL,
444          NULL, NULL, NULL},
445 #endif
446
447         /* Display: Summary View */
448         {"default_sort_key", "3", &prefs_common.default_sort_key, P_ENUM,
449          NULL, NULL, NULL},
450         {"default_sort_type", "1", &prefs_common.default_sort_type, P_ENUM,
451          NULL, NULL, NULL},
452         {"use_address_book", "FALSE", &prefs_common.use_addr_book, P_BOOL,
453          NULL, NULL, NULL},
454         {"thread_by_subject", "TRUE", &prefs_common.thread_by_subject, P_BOOL,
455          NULL, NULL, NULL},
456         {"date_format", N_("%x(%a) %H:%M"), &prefs_common.date_format,
457          P_STRING, NULL, NULL, NULL},
458         {"msgview_date_format", "FALSE", &prefs_common.msgview_date_format, P_BOOL,
459          NULL, NULL, NULL},
460
461         {"next_on_delete", "FALSE", &prefs_common.next_on_delete, P_BOOL,
462          NULL, NULL, NULL},
463
464          {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
465          NULL, NULL, NULL},
466
467 #ifndef GENERIC_UMPC
468         {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
469          NULL, NULL, NULL},
470 #else
471         {"toolbar_style", "1", &prefs_common.toolbar_style, P_ENUM,
472          NULL, NULL, NULL},
473 #endif
474         {"toolbar_detachable", "FALSE", &prefs_common.toolbar_detachable, P_BOOL,
475          NULL, NULL, NULL},
476         {"show_col_headers", "TRUE", &prefs_common.show_col_headers, P_BOOL,
477          NULL, NULL, NULL},
478 #ifndef GENERIC_UMPC
479         {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
480          NULL, NULL, NULL},
481         {"show_searchbar", "TRUE", &prefs_common.show_searchbar, P_BOOL,
482          NULL, NULL, NULL},
483 #else
484         {"show_statusbar", "FALSE", &prefs_common.show_statusbar, P_BOOL,
485          NULL, NULL, NULL},
486         {"show_searchbar", "FALSE", &prefs_common.show_searchbar, P_BOOL,
487          NULL, NULL, NULL},
488 #endif
489
490         {"summary_col_show_mark", "TRUE",
491          &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
492         {"summary_col_show_unread", "TRUE",
493          &prefs_common.summary_col_visible[S_COL_STATUS], P_BOOL, NULL, NULL, NULL},
494         {"summary_col_show_subject", "TRUE",
495          &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
496         {"summary_col_show_from", "TRUE",
497          &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
498         {"summary_col_show_to", "FALSE",
499          &prefs_common.summary_col_visible[S_COL_TO], P_BOOL, NULL, NULL, NULL},
500         {"summary_col_show_date", "TRUE",
501          &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
502         {"summary_col_show_mime", "TRUE",
503          &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
504         {"summary_col_show_size", "TRUE",
505          &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
506         {"summary_col_show_number", "FALSE",
507          &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
508         {"summary_col_show_score", "FALSE",
509          &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL},
510         {"summary_col_show_locked", "FALSE",
511          &prefs_common.summary_col_visible[S_COL_LOCKED], P_BOOL, NULL, NULL, NULL},
512         {"summary_col_show_tags", "FALSE",
513          &prefs_common.summary_col_visible[S_COL_TAGS], P_BOOL, NULL, NULL, NULL},
514
515         {"summary_col_lock", "FALSE", &prefs_common.summary_col_lock, P_BOOL,
516          NULL, NULL, NULL},
517
518          {"summary_col_pos_mark", "0",
519           &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
520         {"summary_col_pos_unread", "1",
521           &prefs_common.summary_col_pos[S_COL_STATUS], P_INT, NULL, NULL, NULL},
522         {"summary_col_pos_mime", "2",
523           &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
524         {"summary_col_pos_subject", "3",
525           &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
526         {"summary_col_pos_from", "4",
527           &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
528         {"summary_col_pos_date", "5",
529           &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
530         {"summary_col_pos_size", "6",
531           &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
532         {"summary_col_pos_number", "7",
533           &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
534         {"summary_col_pos_score", "8",
535          &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL},
536         {"summary_col_pos_locked", "9",
537          &prefs_common.summary_col_pos[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
538         {"summary_col_pos_to", "10",
539           &prefs_common.summary_col_pos[S_COL_TO], P_INT, NULL, NULL, NULL},
540         {"summary_col_pos_tags", "11",
541           &prefs_common.summary_col_pos[S_COL_TAGS], P_INT, NULL, NULL, NULL},
542
543         {"summary_col_size_mark", "10",
544          &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
545         {"summary_col_size_unread", "13",
546          &prefs_common.summary_col_size[S_COL_STATUS], P_INT, NULL, NULL, NULL},
547         {"summary_col_size_mime", "10",
548          &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
549 #ifndef GENERIC_UMPC
550         {"summary_col_size_subject", "200",
551          &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
552         {"summary_col_size_from", "120",
553          &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
554         {"summary_col_size_to", "120",
555          &prefs_common.summary_col_size[S_COL_TO], P_INT, NULL, NULL, NULL},
556 #else
557         {"summary_col_size_subject", "300",
558          &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
559         {"summary_col_size_from", "150",
560          &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
561         {"summary_col_size_to", "150",
562          &prefs_common.summary_col_size[S_COL_TO], P_INT, NULL, NULL, NULL},
563
564 #endif
565         {"summary_col_size_date", "118",
566          &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
567         {"summary_col_size_size", "45",
568          &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
569         {"summary_col_size_number", "40",
570          &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
571         {"summary_col_size_score", "40",
572          &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL},
573         {"summary_col_size_locked", "13",
574          &prefs_common.summary_col_size[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
575         {"summary_col_size_tags", "150",
576          &prefs_common.summary_col_size[S_COL_TAGS], P_INT, NULL, NULL, NULL},
577
578         /* Widget size */
579         {"folderwin_x", "16", &prefs_common.folderwin_x, P_INT,
580          NULL, NULL, NULL},
581         {"folderwin_y", "16", &prefs_common.folderwin_y, P_INT,
582          NULL, NULL, NULL},
583         {"folderview_width", "270", &prefs_common.folderview_width, P_INT,
584          NULL, NULL, NULL},
585         {"folderview_height", "450", &prefs_common.folderview_height, P_INT,
586          NULL, NULL, NULL},
587         {"folderview_visible", "TRUE", &prefs_common.folderview_visible, P_BOOL,
588          NULL, NULL, NULL},
589
590         {"folder_col_show_folder", "TRUE",
591          &prefs_common.folder_col_visible[F_COL_FOLDER], P_BOOL, NULL, NULL, NULL},
592         {"folder_col_show_new", "TRUE",
593          &prefs_common.folder_col_visible[F_COL_NEW], P_BOOL, NULL, NULL, NULL},
594         {"folder_col_show_unread", "TRUE",
595          &prefs_common.folder_col_visible[F_COL_UNREAD], P_BOOL, NULL, NULL, NULL},
596         {"folder_col_show_total", "TRUE",
597          &prefs_common.folder_col_visible[F_COL_TOTAL], P_BOOL, NULL, NULL, NULL},
598
599         {"folder_col_pos_folder", "0",
600          &prefs_common.folder_col_pos[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
601         {"folder_col_pos_new", "1",
602          &prefs_common.folder_col_pos[F_COL_NEW], P_INT, NULL, NULL, NULL},
603         {"folder_col_pos_unread", "2",
604          &prefs_common.folder_col_pos[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
605         {"folder_col_pos_total", "3",
606          &prefs_common.folder_col_pos[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
607
608 #ifndef GENERIC_UMPC
609         {"folder_col_size_folder", "120",
610          &prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
611         {"folder_col_size_new", "32",
612          &prefs_common.folder_col_size[F_COL_NEW], P_INT, NULL, NULL, NULL},
613         {"folder_col_size_unread", "32",
614          &prefs_common.folder_col_size[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
615         {"folder_col_size_total", "32",
616          &prefs_common.folder_col_size[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
617 #else
618         {"folder_col_size_folder", "400",
619          &prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
620         {"folder_col_size_new", "32",
621          &prefs_common.folder_col_size[F_COL_NEW], P_INT, NULL, NULL, NULL},
622         {"folder_col_size_unread", "32",
623          &prefs_common.folder_col_size[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
624         {"folder_col_size_total", "32",
625          &prefs_common.folder_col_size[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
626 #endif
627
628         {"folder_default_thread", "TRUE", &prefs_common.folder_default_thread, P_BOOL,
629          NULL, NULL, NULL},
630         {"folder_default_thread_collapsed", "FALSE", &prefs_common.folder_default_thread_collapsed, P_BOOL,
631          NULL, NULL, NULL},
632         {"folder_default_hide_read_threads", "FALSE", &prefs_common.folder_default_hide_read_threads, P_BOOL,
633          NULL, NULL, NULL},
634         {"folder_default_hide_read_msgs", "FALSE", &prefs_common.folder_default_hide_read_msgs, P_BOOL,
635          NULL, NULL, NULL},
636         {"folder_default_hide_del_msgs", "FALSE", &prefs_common.folder_default_hide_del_msgs, P_BOOL,
637          NULL, NULL, NULL},
638
639         {"summaryview_width", "500", &prefs_common.summaryview_width, P_INT,
640          NULL, NULL, NULL},
641         {"summaryview_height", "244", &prefs_common.summaryview_height, P_INT,
642          NULL, NULL, NULL},
643
644         {"main_messagewin_x", "256", &prefs_common.main_msgwin_x, P_INT,
645          NULL, NULL, NULL},
646         {"main_messagewin_y", "210", &prefs_common.main_msgwin_y, P_INT,
647          NULL, NULL, NULL},
648         {"messageview_width", "500", &prefs_common.msgview_width, P_INT,
649          NULL, NULL, NULL},
650         {"messageview_height", "213", &prefs_common.msgview_height, P_INT,
651          NULL, NULL, NULL},
652         {"messageview_visible", "TRUE", &prefs_common.msgview_visible, P_BOOL,
653          NULL, NULL, NULL},
654
655         {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
656          NULL, NULL, NULL},
657         {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
658          NULL, NULL, NULL},
659         {"mainview_width", "500", &prefs_common.mainview_width, P_INT,
660          NULL, NULL, NULL},
661         {"mainview_height", "400", &prefs_common.mainview_height, P_INT,
662          NULL, NULL, NULL},
663         {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
664          NULL, NULL, NULL},
665         {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
666          NULL, NULL, NULL},
667         {"mainwin_maximised", "FALSE", &prefs_common.mainwin_maximised, P_BOOL,
668          NULL, NULL, NULL},
669         {"mainwin_fullscreen", "FALSE", &prefs_common.mainwin_fullscreen, P_BOOL,
670          NULL, NULL, NULL},
671         {"mainwin_menubar", "TRUE", &prefs_common.mainwin_menubar, P_BOOL,
672          NULL, NULL, NULL},
673 #ifndef GENERIC_UMPC
674         {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
675          NULL, NULL, NULL},
676         {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
677          NULL, NULL, NULL},
678         {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
679          NULL, NULL, NULL},
680         {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
681          NULL, NULL, NULL},
682         {"mimeview_tree_height", "60", &prefs_common.mimeview_tree_height, P_INT,
683          NULL, NULL, NULL},      
684         {"sourcewin_width", "600", &prefs_common.sourcewin_width, P_INT,
685          NULL, NULL, NULL},
686         {"sourcewin_height", "500", &prefs_common.sourcewin_height, P_INT,
687          NULL, NULL, NULL},
688         {"compose_width", "600", &prefs_common.compose_width, P_INT,
689          NULL, NULL, NULL},
690         {"compose_height", "560", &prefs_common.compose_height, P_INT,
691          NULL, NULL, NULL},
692 #else
693         {"mainwin_width", "700", &prefs_common.mainwin_width, P_INT,
694          NULL, NULL, NULL},
695         {"mainwin_height", "470", &prefs_common.mainwin_height, P_INT,
696          NULL, NULL, NULL},
697         {"messagewin_width", "700", &prefs_common.msgwin_width, P_INT,
698          NULL, NULL, NULL},
699         {"messagewin_height", "470", &prefs_common.msgwin_height, P_INT,
700          NULL, NULL, NULL},
701         {"sourcewin_width", "700", &prefs_common.sourcewin_width, P_INT,
702          NULL, NULL, NULL},
703         {"sourcewin_height", "470", &prefs_common.sourcewin_height, P_INT,
704          NULL, NULL, NULL},
705         {"compose_width", "700", &prefs_common.compose_width, P_INT,
706          NULL, NULL, NULL},
707         {"compose_height", "470", &prefs_common.compose_height, P_INT,
708          NULL, NULL, NULL},
709 #endif
710         {"compose_notebook_height", "130", &prefs_common.compose_notebook_height, P_INT,
711          NULL, NULL, NULL},
712         {"compose_x", "0", &prefs_common.compose_x, P_INT,
713          NULL, NULL, NULL},
714         {"compose_y", "0", &prefs_common.compose_y, P_INT,
715          NULL, NULL, NULL},
716         /* Message */
717         {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
718          NULL, NULL, NULL},
719
720         {"quote_level1_color", "#0000b3", &prefs_common.color[COL_QUOTE_LEVEL1],
721          P_COLOR, NULL, NULL, NULL},
722         {"quote_level2_color", "#0000b3", &prefs_common.color[COL_QUOTE_LEVEL2],
723          P_COLOR, NULL, NULL, NULL},
724         {"quote_level3_color", "#0000b3", &prefs_common.color[COL_QUOTE_LEVEL3],
725          P_COLOR, NULL, NULL, NULL},
726         {"enable_bgcolor", "FALSE", &prefs_common.enable_bgcolor, P_BOOL,
727          NULL, NULL, NULL},
728         {"quote_level1_bgcolor", "#cccccc", &prefs_common.color[COL_QUOTE_LEVEL1_BG],
729          P_COLOR, NULL, NULL, NULL},
730         {"quote_level2_bgcolor", "#d4d4d4", &prefs_common.color[COL_QUOTE_LEVEL2_BG],
731          P_COLOR, NULL, NULL, NULL},
732         {"quote_level3_bgcolor", "#dddddd", &prefs_common.color[COL_QUOTE_LEVEL3_BG],
733          P_COLOR, NULL, NULL, NULL},
734         {"uri_color", "#007f00", &prefs_common.color[COL_URI],
735          P_COLOR, NULL, NULL, NULL},
736         {"emphasis_color", "#0000cf", &prefs_common.color[COL_EMPHASIS],
737          P_COLOR, NULL, NULL, NULL},
738         {"target_folder_color", "#da1cca", &prefs_common.color[COL_TGT_FOLDER],
739          P_COLOR, NULL, NULL, NULL},
740         {"signature_color", "#797979", &prefs_common.color[COL_SIGNATURE],
741          P_COLOR, NULL, NULL, NULL},
742         {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
743          P_BOOL, NULL, NULL, NULL},
744
745         {"default_header_color", "#000000", &prefs_common.color[COL_DEFAULT_HEADER],
746          P_COLOR, NULL, NULL, NULL},
747         {"default_header_bgcolor", "#f5f6be", &prefs_common.color[COL_DEFAULT_HEADER_BG],
748          P_COLOR, NULL, NULL, NULL},
749         {"tags_color", "#000000", &prefs_common.color[COL_TAGS],
750          P_COLOR, NULL, NULL, NULL},
751         {"tags_bgcolor", "#f5f6be", &prefs_common.color[COL_TAGS_BG],
752          P_COLOR, NULL, NULL, NULL},
753         {"qs_active_color", "#000000", &prefs_common.color[COL_QS_ACTIVE],
754          P_COLOR, NULL, NULL, NULL},
755         {"qs_active_bgcolor", "#f5f6be", &prefs_common.color[COL_QS_ACTIVE_BG],
756          P_COLOR, NULL, NULL, NULL},
757         {"qs_error_color", "#000000", &prefs_common.color[COL_QS_ERROR],
758          P_COLOR, NULL, NULL, NULL},
759         {"qs_error_bgcolor", "#ff7070", &prefs_common.color[COL_QS_ERROR_BG],
760          P_COLOR, NULL, NULL, NULL},
761
762         {"display_header_pane", "FALSE", &prefs_common.display_header_pane,
763          P_BOOL, NULL, NULL, NULL},
764         {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
765          NULL, NULL, NULL},
766         {"display_xface", "TRUE", &prefs_common.display_xface,
767          P_BOOL, NULL, NULL, NULL},
768         {"save_xface", "TRUE", &prefs_common.save_xface,
769          P_BOOL, NULL, NULL, NULL},
770         {"render_html", "TRUE", &prefs_common.render_html, P_BOOL,
771          NULL, NULL, NULL},
772         {"invoke_plugin_on_html", "FALSE", &prefs_common.invoke_plugin_on_html, P_BOOL,
773          NULL, NULL, NULL},
774         {"promote_html_part", "FALSE", &prefs_common.promote_html_part, P_BOOL,
775          NULL, NULL, NULL},
776         {"line_space", "2", &prefs_common.line_space, P_INT,
777          NULL, NULL, NULL},
778         {"never_send_retrcpt", "FALSE", &prefs_common.never_send_retrcpt, P_BOOL,
779          NULL, NULL, NULL},
780
781         {"enable_smooth_scroll", "FALSE",
782          &prefs_common.enable_smooth_scroll, P_BOOL,
783          NULL, NULL, NULL},
784         {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
785          NULL, NULL, NULL},
786         {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
787          NULL, NULL, NULL},
788         {"hide_quoted", "TRUE",
789          &prefs_common.hide_quoted, P_BOOL,
790          NULL, NULL, NULL},
791         {"respect_flowed_format", "FALSE", &prefs_common.respect_flowed_format, P_BOOL,
792          NULL, NULL, NULL},
793         {"show_all_headers", "FALSE", &prefs_common.show_all_headers, P_BOOL,
794          NULL, NULL, NULL},
795
796         {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
797          NULL, NULL, NULL},
798
799         {"attach_desc", "TRUE", &prefs_common.attach_desc, P_BOOL,
800          NULL, NULL, NULL},
801         {"attach_save_directory", NULL,
802          &SPECIFIC_PREFS.attach_save_dir, P_STRING, NULL, NULL, NULL},
803         {"attach_load_directory", NULL,
804          &SPECIFIC_PREFS.attach_load_dir, P_STRING, NULL, NULL, NULL},
805
806         /* MIME viewer */
807         {"mime_textviewer",   NULL,
808          &SPECIFIC_PREFS.mime_textviewer,   P_STRING, NULL, NULL, NULL},
809         {"mime_open_command", "xdg-open '%s'",
810          &SPECIFIC_PREFS.mime_open_cmd,     P_STRING, NULL, NULL, NULL},
811         {"show_inline_attachments", "TRUE", 
812          &prefs_common.show_inline_attachments, P_BOOL, NULL, NULL, NULL},
813
814         /* Interface */
815 #ifndef GENERIC_UMPC
816         {"layout_mode", "0", &prefs_common.layout_mode, P_INT,
817          NULL, NULL, NULL},
818 #else
819         {"layout_mode", "5", &prefs_common.layout_mode, P_INT,
820          NULL, NULL, NULL},
821 #endif
822         /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
823          NULL, NULL, NULL}, */
824         {"open_selected_message_on_folder_open", "FALSE",
825          &prefs_common.open_selected_on_folder_open,
826          P_BOOL, NULL, NULL, NULL},
827         {"open_selected_message_on_search_results", "FALSE",
828          &prefs_common.open_selected_on_search_results,
829          P_BOOL, NULL, NULL, NULL},
830         {"open_selected_message_on_prevnext", "FALSE",
831          &prefs_common.open_selected_on_prevnext,
832          P_BOOL, NULL, NULL, NULL},
833         {"open_selected_message_on_deletemove", "FALSE",
834          &prefs_common.open_selected_on_deletemove,
835          P_BOOL, NULL, NULL, NULL},
836         {"open_selected_message_on_directional", "FALSE",
837          &prefs_common.open_selected_on_directional,
838          P_BOOL, NULL, NULL, NULL},
839         {"always_show_message_when_selected", "FALSE",
840          &prefs_common.always_show_msg,
841          P_BOOL, NULL, NULL, NULL},
842         {"select_on_entry", "3", &prefs_common.select_on_entry,
843          P_ENUM, NULL, NULL, NULL},
844         {"show_tooltips", "TRUE", &prefs_common.show_tooltips,
845          P_BOOL, NULL, NULL, NULL},
846
847         /* do it SUMMARY_OPEN_ACTIONS-1 times */
848         {"summary_select_prio1", "0", &prefs_common.summary_select_prio[0], P_ENUM,
849          NULL, NULL, NULL},
850         {"summary_select_prio2", "0", &prefs_common.summary_select_prio[1], P_ENUM,
851          NULL, NULL, NULL},
852         {"summary_select_prio3", "0", &prefs_common.summary_select_prio[2], P_ENUM,
853          NULL, NULL, NULL},
854         {"summary_select_prio4", "0", &prefs_common.summary_select_prio[3], P_ENUM,
855          NULL, NULL, NULL},
856         {"summary_select_prio5", "0", &prefs_common.summary_select_prio[4], P_ENUM,
857          NULL, NULL, NULL},
858         {"summary_select_prio6", "0", &prefs_common.summary_select_prio[5], P_ENUM,
859          NULL, NULL, NULL},
860         {"summary_select_prio7", "0", &prefs_common.summary_select_prio[6], P_ENUM,
861          NULL, NULL, NULL},
862         {"summary_select_prio8", "0", &prefs_common.summary_select_prio[7], P_ENUM,
863          NULL, NULL, NULL},
864         {"summary_select_prio9", "0", &prefs_common.summary_select_prio[8], P_ENUM,
865          NULL, NULL, NULL},
866         {"summary_select_prio10", "0", &prefs_common.summary_select_prio[9], P_ENUM,
867          NULL, NULL, NULL},
868
869         {"mark_as_read_on_new_window", "FALSE",
870          &prefs_common.mark_as_read_on_new_window,
871          P_BOOL, NULL, NULL, NULL},
872         {"mark_as_read_delay", "0",
873          &prefs_common.mark_as_read_delay, P_INT, 
874          NULL, NULL, NULL},
875         {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
876          NULL, NULL, NULL},
877         {"nextunreadmsg_dialog", "1", &prefs_common.next_unread_msg_dialog, P_ENUM,
878          NULL, NULL, NULL},
879         {"summary_from_show", "0", &prefs_common.summary_from_show, P_ENUM,
880          NULL, NULL, NULL},
881
882         {"pixmap_theme_path", DEFAULT_PIXMAP_THEME, 
883          &SPECIFIC_PREFS.pixmap_theme_path, P_STRING,
884          NULL, NULL, NULL},
885 #ifdef HAVE_SVG
886         {"enable_alpha_svg", "TRUE",
887          &SPECIFIC_PREFS.enable_alpha_svg, P_BOOL,
888          NULL, NULL, NULL},
889         {"enable_pixmap_scaling", "TRUE",
890          &SPECIFIC_PREFS.enable_pixmap_scaling, P_BOOL,
891          NULL, NULL, NULL},
892         {"pixmap_scaling_auto", "TRUE",
893          &SPECIFIC_PREFS.pixmap_scaling_auto, P_BOOL,
894          NULL, NULL, NULL},
895         {"pixmap_scaling_ppi", "96",
896          &SPECIFIC_PREFS.pixmap_scaling_ppi, P_INT,
897          NULL, NULL, NULL},
898 #endif
899
900         {"ask_mark_all_read", "TRUE", &prefs_common.ask_mark_all_read, P_BOOL,
901          NULL, NULL, NULL},
902         {"ask_override_colorlabel", "TRUE", &prefs_common.ask_override_colorlabel, P_BOOL,
903          NULL, NULL, NULL},
904
905         {"ask_apply_per_account_filtering_rules", "TRUE", &prefs_common.ask_apply_per_account_filtering_rules, P_BOOL,
906          NULL, NULL, NULL},
907         {"apply_per_account_filtering_rules", "0", &prefs_common.apply_per_account_filtering_rules, P_ENUM,
908          NULL, NULL, NULL},
909
910         /* Addressbook */
911         {"addressbook_use_editaddress_dialog", "TRUE", &prefs_common.addressbook_use_editaddress_dialog,
912          P_BOOL, NULL, NULL, NULL},
913         {"addressbook_hpaned_pos", "-1", &prefs_common.addressbook_hpaned_pos,
914          P_INT, NULL, NULL, NULL},
915         {"addressbook_vpaned_pos", "-1", &prefs_common.addressbook_vpaned_pos,
916          P_INT, NULL, NULL, NULL},
917
918         /* Other */
919 #ifndef G_OS_WIN32
920         {"uri_open_command", DEFAULT_BROWSER_CMD,
921          &SPECIFIC_PREFS.uri_cmd, P_STRING, NULL, NULL, NULL},
922 #else
923         {"gtk_theme", DEFAULT_W32_GTK_THEME,
924          &SPECIFIC_PREFS.gtk_theme, P_STRING, NULL, NULL, NULL},
925 #endif
926         {"ext_editor_command", DEFAULT_EDITOR_CMD,
927          &SPECIFIC_PREFS.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
928         {"cmds_use_system_default", "TRUE",
929          &prefs_common.cmds_use_system_default, P_BOOL, NULL, NULL, NULL},
930         {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
931          P_BOOL, NULL, NULL, NULL},
932         {"session_passwords", "FALSE", &prefs_common.session_passwords,
933          P_BOOL, NULL, NULL, NULL},
934         {"confirm_on_exit", "FALSE", &prefs_common.confirm_on_exit, P_BOOL,
935          NULL, NULL, NULL},
936         {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
937          NULL, NULL, NULL},
938         {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
939          NULL, NULL, NULL},
940         {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
941          P_BOOL, NULL, NULL, NULL},
942         {"work_offline", "FALSE", &prefs_common.work_offline, P_BOOL,
943          NULL, NULL, NULL},
944         {"summary_quicksearch_type", "0", &prefs_common.summary_quicksearch_type, P_INT,
945          NULL, NULL, NULL},
946 #ifndef GENERIC_UMPC
947         {"summary_quicksearch_recurse", "1", &prefs_common.summary_quicksearch_recurse, P_INT,
948          NULL, NULL, NULL},
949 #else
950         {"summary_quicksearch_recurse", "0", &prefs_common.summary_quicksearch_recurse, P_INT,
951          NULL, NULL, NULL},
952 #endif
953
954 #if defined(__OpenBSD__)
955         {"io_timeout_secs", "80", &prefs_common.io_timeout_secs,
956          P_INT, NULL, NULL, NULL},
957 #else
958         {"io_timeout_secs", "60", &prefs_common.io_timeout_secs,
959          P_INT, NULL, NULL, NULL},
960 #endif
961         {"hide_score", "-9999", &prefs_common.kill_score, P_INT,
962          NULL, NULL, NULL},
963         {"important_score", "1", &prefs_common.important_score, P_INT,
964          NULL, NULL, NULL},
965
966         {"clip_log", "TRUE", &prefs_common.cliplog, P_BOOL,
967          NULL, NULL, NULL},
968         {"log_length", "500", &prefs_common.loglength, P_INT,
969          NULL, NULL, NULL},
970 #ifndef GENERIC_UMPC
971         {"enable_log_standard", "TRUE", &prefs_common.enable_log_standard, P_BOOL,
972          NULL, NULL, NULL},
973         {"enable_log_warning", "TRUE", &prefs_common.enable_log_warning, P_BOOL,
974          NULL, NULL, NULL},
975         {"enable_log_error", "TRUE", &prefs_common.enable_log_error, P_BOOL,
976          NULL, NULL, NULL},
977         {"enable_log_status", "TRUE", &prefs_common.enable_log_status, P_BOOL,
978          NULL, NULL, NULL},
979 #else
980         {"enable_log_standard", "FALSE", &prefs_common.enable_log_standard, P_BOOL,
981          NULL, NULL, NULL},
982         {"enable_log_warning", "FALSE", &prefs_common.enable_log_warning, P_BOOL,
983          NULL, NULL, NULL},
984         {"enable_log_error", "FALSE", &prefs_common.enable_log_error, P_BOOL,
985          NULL, NULL, NULL},
986         {"enable_log_status", "FALSE", &prefs_common.enable_log_status, P_BOOL,
987          NULL, NULL, NULL},
988 #endif
989         {"log_msg_color", "#00af00", &prefs_common.color[COL_LOG_MSG],
990          P_COLOR, NULL, NULL, NULL},
991         {"log_warn_color", "#af0000", &prefs_common.color[COL_LOG_WARN],
992          P_COLOR, NULL, NULL, NULL},
993         {"log_error_color", "#af0000", &prefs_common.color[COL_LOG_ERROR],
994          P_COLOR, NULL, NULL, NULL},
995         {"log_in_color", "#000000", &prefs_common.color[COL_LOG_IN],
996          P_COLOR, NULL, NULL, NULL},
997         {"log_out_color", "#0000ef", &prefs_common.color[COL_LOG_OUT],
998          P_COLOR, NULL, NULL, NULL},
999         {"log_status_ok_color", "#00af00", &prefs_common.color[COL_LOG_STATUS_OK],
1000          P_COLOR, NULL, NULL, NULL},
1001         {"log_status_nok_color", "#0000af", &prefs_common.color[COL_LOG_STATUS_NOK],
1002          P_COLOR, NULL, NULL, NULL},
1003         {"log_status_skip_color", "#aa00aa", &prefs_common.color[COL_LOG_STATUS_SKIP],
1004          P_COLOR, NULL, NULL, NULL},
1005
1006     {"enable_filtering_debug", "FALSE", &prefs_common.enable_filtering_debug, P_BOOL,
1007          NULL, NULL, NULL},
1008     {"filtering_debug_level", "1", &prefs_common.filtering_debug_level, P_INT,
1009          NULL, NULL, NULL},
1010     {"enable_filtering_debug_inc", "TRUE", &prefs_common.enable_filtering_debug_inc, P_BOOL,
1011          NULL, NULL, NULL},
1012     {"enable_filtering_debug_manual", "TRUE", &prefs_common.enable_filtering_debug_manual, P_BOOL,
1013          NULL, NULL, NULL},
1014     {"enable_filtering_debug_folder_proc", "FALSE", &prefs_common.enable_filtering_debug_folder_proc, P_BOOL,
1015          NULL, NULL, NULL},
1016     {"enable_filtering_debug_pre_proc", "FALSE", &prefs_common.enable_filtering_debug_pre_proc, P_BOOL,
1017          NULL, NULL, NULL},
1018     {"enable_filtering_debug_post_proc", "FALSE", &prefs_common.enable_filtering_debug_post_proc, P_BOOL,
1019          NULL, NULL, NULL},
1020     {"filtering_debug_clip_log", "TRUE", &prefs_common.filtering_debug_cliplog, P_BOOL,
1021          NULL, NULL, NULL},
1022         {"filtering_debug_log_length", "500", &prefs_common.filtering_debug_loglength, P_INT,
1023          NULL, NULL, NULL},
1024
1025         {"gtk_can_change_accels", "FALSE", &prefs_common.gtk_can_change_accels, P_BOOL,
1026          NULL, NULL, NULL},
1027         {"gtk_enable_accels", "TRUE", &prefs_common.gtk_enable_accels, P_BOOL,
1028          NULL, NULL, NULL},
1029
1030         {"color_new", "#0000b3", &prefs_common.color[COL_NEW],
1031          P_COLOR, NULL, NULL, NULL},
1032
1033         /* Some windows' sizes */
1034         {"filteringwin_width", "500", &prefs_common.filteringwin_width, P_INT,
1035          NULL, NULL, NULL},
1036         {"filteringwin_height", "-1", &prefs_common.filteringwin_height, P_INT,
1037          NULL, NULL, NULL},
1038
1039         {"filteringactionwin_width", "490", &prefs_common.filteringactionwin_width, P_INT,
1040          NULL, NULL, NULL},
1041         {"filteringactionwin_height", "-1", &prefs_common.filteringactionwin_height, P_INT,
1042          NULL, NULL, NULL},
1043
1044         {"matcherwin_width", "520", &prefs_common.matcherwin_width, P_INT,
1045          NULL, NULL, NULL},
1046         {"matcherwin_height", "-1", &prefs_common.matcherwin_height, P_INT,
1047          NULL, NULL, NULL},
1048
1049         {"templateswin_width", "480", &prefs_common.templateswin_width, P_INT,
1050          NULL, NULL, NULL},
1051         {"templateswin_height", "-1", &prefs_common.templateswin_height, P_INT,
1052          NULL, NULL, NULL},
1053
1054         {"actionsiodialog_width", "582", &prefs_common.actionsiodialog_width, P_INT,
1055          NULL, NULL, NULL},
1056         {"actionsiodialog_height", "310", &prefs_common.actionsiodialog_height, P_INT,
1057          NULL, NULL, NULL},
1058
1059         {"actionswin_width", "486", &prefs_common.actionswin_width, P_INT,
1060          NULL, NULL, NULL},
1061         {"actionswin_height", "-1", &prefs_common.actionswin_height, P_INT,
1062          NULL, NULL, NULL},
1063
1064         {"tagswin_width", "586", &prefs_common.tagswin_width, P_INT,
1065          NULL, NULL, NULL},
1066         {"tagswin_height", "-1", &prefs_common.tagswin_height, P_INT,
1067          NULL, NULL, NULL},
1068
1069         {"sslmanwin_width", "486", &prefs_common.sslmanwin_width, P_INT,
1070          NULL, NULL, NULL},
1071         {"sslmanwin_height", "-1", &prefs_common.sslmanwin_height, P_INT,
1072          NULL, NULL, NULL},
1073
1074         {"uriopenerwin_width", "-1", &prefs_common.uriopenerwin_width, P_INT,
1075          NULL, NULL, NULL},
1076         {"uriopenerwin_height", "-1", &prefs_common.uriopenerwin_height, P_INT,
1077          NULL, NULL, NULL},
1078
1079         {"foldersortwin_width", "400", &prefs_common.foldersortwin_width, P_INT,
1080          NULL, NULL, NULL},
1081         {"foldersortwin_height", "300", &prefs_common.foldersortwin_height, P_INT,
1082          NULL, NULL, NULL},
1083
1084         {"addressbookwin_width", "520", &prefs_common.addressbookwin_width, P_INT,
1085          NULL, NULL, NULL},
1086         {"addressbookwin_height", "-1", &prefs_common.addressbookwin_height, P_INT,
1087          NULL, NULL, NULL},
1088
1089         {"addressbookeditpersonwin_width", "640", &prefs_common.addressbookeditpersonwin_width, P_INT,
1090          NULL, NULL, NULL},
1091         {"addressbookeditpersonwin_height", "320", &prefs_common.addressbookeditpersonwin_height, P_INT,
1092          NULL, NULL, NULL},
1093
1094         {"addressbookeditgroupwin_width", "580", &prefs_common.addressbookeditgroupwin_width, P_INT,
1095          NULL, NULL, NULL},
1096         {"addressbookeditgroupwin_height", "340", &prefs_common.addressbookeditgroupwin_height, P_INT,
1097          NULL, NULL, NULL},
1098
1099         {"pluginswin_width", "-1", &prefs_common.pluginswin_width, P_INT,
1100          NULL, NULL, NULL},
1101         {"pluginswin_height", "-1", &prefs_common.pluginswin_height, P_INT,
1102          NULL, NULL, NULL},
1103
1104         {"prefswin_width", "600", &prefs_common.prefswin_width, P_INT,
1105          NULL, NULL, NULL},
1106         {"prefswin_height", "-1", &prefs_common.prefswin_height, P_INT,
1107          NULL, NULL, NULL},
1108
1109         {"folderitemwin_width", "500", &prefs_common.folderitemwin_width, P_INT,
1110          NULL, NULL, NULL},
1111         {"folderitemwin_height", "-1", &prefs_common.folderitemwin_height, P_INT,
1112          NULL, NULL, NULL},
1113
1114         {"zero_replacement_char", "0", &prefs_common.zero_replacement, P_STRING,
1115          NULL, NULL, NULL},
1116
1117         {"editaccountwin_width", "500", &prefs_common.editaccountwin_width, P_INT,
1118          NULL, NULL, NULL},
1119         {"editaccountwin_height", "-1", &prefs_common.editaccountwin_height, P_INT,
1120          NULL, NULL, NULL},
1121
1122         {"accountswin_width", "500", &prefs_common.accountswin_width, P_INT,
1123          NULL, NULL, NULL},
1124         {"accountswin_height", "-1", &prefs_common.accountswin_height, P_INT,
1125          NULL, NULL, NULL},
1126
1127         {"logwin_width", "520", &prefs_common.logwin_width, P_INT,
1128          NULL, NULL, NULL},
1129         {"logwin_height", "-1", &prefs_common.logwin_height, P_INT,
1130          NULL, NULL, NULL},
1131
1132         {"filtering_debugwin_width", "600", &prefs_common.filtering_debugwin_width, P_INT,
1133          NULL, NULL, NULL},
1134         {"filtering_debugwin_height", "-1", &prefs_common.filtering_debugwin_height, P_INT,
1135          NULL, NULL, NULL},
1136
1137         {"folderselwin_width", "300", &prefs_common.folderselwin_width, P_INT,
1138          NULL, NULL, NULL},
1139         {"folderselwin_height", "-1", &prefs_common.folderselwin_height, P_INT,
1140          NULL, NULL, NULL},
1141
1142         {"addressaddwin_width", "300", &prefs_common.addressaddwin_width, P_INT,
1143          NULL, NULL, NULL},
1144         {"addressaddwin_height", "-1", &prefs_common.addressaddwin_height, P_INT,
1145          NULL, NULL, NULL},
1146
1147         {"addressbook_folderselwin_width", "300", &prefs_common.addressbook_folderselwin_width, P_INT,
1148          NULL, NULL, NULL},
1149         {"addressbook_folderselwin_height", "-1", &prefs_common.addressbook_folderselwin_height, P_INT,
1150          NULL, NULL, NULL},
1151
1152         {"aboutwin_width", "450", &prefs_common.aboutwin_width, P_INT,
1153          NULL, NULL, NULL},
1154         {"aboutwin_height", "500", &prefs_common.aboutwin_height, P_INT,
1155          NULL, NULL, NULL},
1156
1157         {"addrgather_width", "450", &prefs_common.addrgather_width, P_INT,
1158          NULL, NULL, NULL},
1159         {"addrgather_height", "-1", &prefs_common.addrgather_height, P_INT,
1160          NULL, NULL, NULL},
1161
1162         {"news_subscribe_width", "450", &prefs_common.news_subscribe_width, P_INT,
1163          NULL, NULL, NULL},
1164         {"news_subscribe_height", "400", &prefs_common.news_subscribe_height, P_INT,
1165          NULL, NULL, NULL},
1166
1167         /* Hidden */
1168         {"imap_scan_tree_recurs_limit", "64", &prefs_common.imap_scan_tree_recurs_limit, P_INT,
1169          NULL, NULL, NULL},
1170         {"warn_dnd", "1", &prefs_common.warn_dnd, P_INT,
1171          NULL, NULL, NULL},
1172         {"utf8_instead_of_locale_for_broken_mail", "0", 
1173          &prefs_common.broken_are_utf8, P_INT,
1174          NULL, NULL, NULL},
1175         {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
1176          NULL, NULL, NULL},
1177         {"use_stripes_everywhere", "TRUE", &prefs_common.use_stripes_everywhere, P_BOOL,
1178          NULL, NULL, NULL},
1179         {"use_stripes_in_summaries", "TRUE", &prefs_common.use_stripes_in_summaries, P_BOOL,
1180          NULL, NULL, NULL},
1181         {"stripes_color_offset", "4000", &prefs_common.stripes_color_offset, P_INT,
1182          NULL, NULL, NULL},
1183         {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
1184          NULL, NULL, NULL},
1185         {"folderview_vscrollbar_policy", "0",
1186          &prefs_common.folderview_vscrollbar_policy, P_ENUM,
1187          NULL, NULL, NULL},
1188         {"textview_cursor_visible", "FALSE",
1189          &prefs_common.textview_cursor_visible, P_BOOL,
1190          NULL, NULL, NULL},
1191         {"hover_timeout", "500", &prefs_common.hover_timeout, P_INT,
1192          NULL, NULL, NULL},
1193 #ifndef GENERIC_UMPC
1194         {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
1195          NULL, NULL, NULL},
1196         {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
1197          NULL, NULL, NULL},
1198 #else
1199         {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
1200          NULL, NULL, NULL},
1201         {"cache_min_keep_time", "0", &prefs_common.cache_min_keep_time, P_INT,
1202          NULL, NULL, NULL},
1203 #endif
1204         {"thread_by_subject_max_age", "10", &prefs_common.thread_by_subject_max_age,
1205         P_INT, NULL, NULL, NULL },
1206         {"last_opened_folder", "", &prefs_common.last_opened_folder,
1207         P_STRING, NULL, NULL, NULL },
1208         {"goto_last_folder_on_startup", "FALSE", &prefs_common.goto_last_folder_on_startup,
1209         P_BOOL, NULL, NULL, NULL },
1210         {"summary_quicksearch_sticky", "1", &prefs_common.summary_quicksearch_sticky, P_INT,
1211          NULL, NULL, NULL},
1212         {"summary_quicksearch_dynamic", "0", &prefs_common.summary_quicksearch_dynamic, P_INT,
1213          NULL, NULL, NULL},
1214         {"summary_quicksearch_autorun", "0", &prefs_common.summary_quicksearch_autorun, P_INT,
1215          NULL, NULL, NULL},
1216         {"statusbar_update_step", "10", &prefs_common.statusbar_update_step, P_INT,
1217          NULL, NULL, NULL},
1218         {"compose_no_markup", "FALSE", &prefs_common.compose_no_markup, P_BOOL,
1219          NULL, NULL, NULL},
1220         {"skip_ssl_cert_check", "FALSE", &prefs_common.skip_ssl_cert_check, P_BOOL,
1221          NULL, NULL, NULL},
1222         {"live_dangerously", "FALSE", &prefs_common.live_dangerously, P_BOOL,
1223          NULL, NULL, NULL},
1224         {"save_parts_readwrite", "FALSE", &prefs_common.save_parts_readwrite, P_BOOL,
1225          NULL, NULL, NULL},
1226         {"hide_quotes", "0", &prefs_common.hide_quotes, P_INT,
1227          NULL, NULL, NULL},
1228         {"unsafe_ssl_certs", "FALSE", &prefs_common.unsafe_ssl_certs, P_BOOL,
1229          NULL, NULL, NULL},
1230 #ifndef GENERIC_UMPC
1231         {"real_time_sync", "FALSE", &prefs_common.real_time_sync, P_BOOL,
1232          NULL, NULL, NULL},
1233 #else
1234         {"real_time_sync", "TRUE", &prefs_common.real_time_sync, P_BOOL,
1235          NULL, NULL, NULL},
1236 #endif
1237
1238         {"print_paper_type", NULL, &prefs_common.print_paper_type, P_STRING,
1239          NULL, NULL, NULL},
1240         {"print_paper_orientation", "0", &prefs_common.print_paper_orientation, P_INT,
1241          NULL, NULL, NULL},
1242         {"print_margin_top", "-1", &prefs_common.print_margin_top, P_INT,
1243          NULL, NULL, NULL},
1244         {"print_margin_bottom", "-1", &prefs_common.print_margin_bottom, P_INT,
1245          NULL, NULL, NULL},
1246         {"print_margin_left", "-1", &prefs_common.print_margin_left, P_INT,
1247          NULL, NULL, NULL},
1248         {"print_margin_right", "-1", &prefs_common.print_margin_right, P_INT,
1249          NULL, NULL, NULL},
1250         {"print_use_color", "0", &prefs_common.print_use_color, P_INT,
1251          NULL, NULL, NULL},
1252         {"print_use_collate", "0", &prefs_common.print_use_collate, P_INT,
1253          NULL, NULL, NULL},
1254         {"print_use_reverse", "0", &prefs_common.print_use_reverse, P_INT,
1255          NULL, NULL, NULL},
1256         {"print_use_duplex", "0", &prefs_common.print_use_duplex, P_INT,
1257          NULL, NULL, NULL},
1258         {"print_imgs", "1", &prefs_common.print_imgs, P_INT,
1259          NULL, NULL, NULL},
1260         {"print_previewwin_width", "600", &prefs_common.print_previewwin_width, P_INT,
1261          NULL, NULL, NULL},
1262         {"print_previewwin_height", "-1", &prefs_common.print_previewwin_height, P_INT,
1263          NULL, NULL, NULL},
1264         {"use_networkmanager", "TRUE", &prefs_common.use_networkmanager, P_BOOL,
1265          NULL, NULL, NULL},
1266         {"use_shred", "FALSE", &prefs_common.use_shred, P_BOOL,
1267          NULL, NULL, NULL},
1268
1269         {"two_line_vertical", "TRUE", &prefs_common.two_line_vert,
1270         P_BOOL, NULL, NULL, NULL },
1271
1272         {"inherit_folder_properties", "FALSE", &prefs_common.inherit_folder_props, P_BOOL,
1273          NULL, NULL, NULL},
1274
1275         {"flush_metadata", "TRUE", &prefs_common.flush_metadata, P_BOOL,
1276          NULL, NULL, NULL},
1277
1278         {"nav_history_length", "50", &prefs_common.nav_history_length, P_INT,
1279          NULL, NULL, NULL},
1280
1281         {"diff_added_color", "#008b8b", &prefs_common.color[COL_DIFF_ADDED],
1282          P_COLOR, NULL, NULL, NULL},
1283         {"diff_deleted_color", "#6a5acd", &prefs_common.color[COL_DIFF_DELETED],
1284          P_COLOR, NULL, NULL, NULL},
1285         {"diff_hunk_color", "#a52a2a", &prefs_common.color[COL_DIFF_HUNK],
1286          P_COLOR, NULL, NULL, NULL},
1287
1288         {"folder_search_wildcard", "TRUE", &prefs_common.folder_search_wildcard, P_BOOL,
1289          NULL, NULL, NULL},
1290         {"address_search_wildcard", "TRUE", &prefs_common.address_search_wildcard, P_BOOL,
1291          NULL, NULL, NULL},
1292         {"enable_avatars", "3", &prefs_common.enable_avatars, P_INT, NULL, NULL, NULL},
1293 #ifndef PASSWORD_CRYPTO_OLD
1294         {"use_master_passphrase", FALSE, &prefs_common.use_master_passphrase, P_BOOL, NULL, NULL, NULL },
1295         {"master_passphrase", "", &prefs_common.master_passphrase, P_STRING, NULL, NULL, NULL },
1296         {"master_passphrase_salt", "", &prefs_common.master_passphrase_salt, P_STRING, NULL, NULL, NULL },
1297         {"master_passphrase_pbkdf2_rounds", "50000", &prefs_common.master_passphrase_pbkdf2_rounds, P_INT, NULL, NULL, NULL},
1298 #endif
1299
1300         {"use_proxy", "FALSE", &prefs_common.use_proxy, P_BOOL, NULL, NULL, NULL},
1301         {"proxy_type", "1", &prefs_common.proxy_info.proxy_type, P_ENUM, NULL, NULL, NULL},
1302         {"proxy_host", "localhost", &prefs_common.proxy_info.proxy_host, P_STRING, NULL, NULL, NULL},
1303         {"proxy_port", "1080", &prefs_common.proxy_info.proxy_port, P_USHORT, NULL, NULL, NULL},
1304         {"use_proxy_auth", "FALSE", &prefs_common.proxy_info.use_proxy_auth, P_BOOL, NULL, NULL, NULL},
1305         {"proxy_name", "", &prefs_common.proxy_info.proxy_name, P_STRING, NULL, NULL, NULL},
1306         {"proxy_pass", NULL, &prefs_common.proxy_info.proxy_pass, P_STRING, NULL, NULL, NULL},
1307
1308         {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
1309 };
1310
1311 /*
1312  * Read history list from the specified history file in the specified directory (subdir of rc_dir)
1313  * Fallback to default_list if history file is not found
1314  */
1315 GList *prefs_common_read_history_from_dir_with_defaults(const gchar *dirname, const gchar *history,
1316                                                                                                                           GList *default_list)
1317 {
1318         FILE *fp;
1319         gchar *path;
1320         gchar buf[PREFSBUFSIZE];
1321         GList *tmp = NULL;
1322
1323         if (dirname) {
1324                 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, dirname,
1325                                    G_DIR_SEPARATOR_S, history,
1326                                    NULL);
1327         } else {
1328         path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1329                            NULL);
1330         }
1331         if ((fp = claws_fopen(path, "rb")) == NULL) {
1332                 if (ENOENT != errno) FILE_OP_ERROR(path, "claws_fopen");
1333                 g_free(path);
1334                 /* returns default list if set, otherwise NULL */
1335                 return default_list;
1336         }
1337         g_free(path);
1338         while (claws_fgets(buf, sizeof(buf), fp) != NULL) {
1339                 g_strstrip(buf);
1340                 if (buf[0] == '\0') continue;
1341                 tmp = add_history(tmp, buf);
1342         }
1343         claws_fclose(fp);
1344
1345         tmp = g_list_reverse(tmp);
1346
1347         return tmp;
1348 }
1349
1350 /*
1351  * Read history list from the specified history file in the specified directory (subdir of rc_dir)
1352  */
1353 static GList *prefs_common_read_history_from_dir(const gchar *dirname, const gchar *history) 
1354 {
1355         return prefs_common_read_history_from_dir_with_defaults(dirname, history, NULL);
1356 }
1357
1358 /*
1359  * Read history list from the specified history file
1360  */
1361 static GList *prefs_common_read_history(const gchar *history) 
1362 {
1363         return prefs_common_read_history_from_dir(NULL, history);
1364 }
1365
1366 void prefs_common_read_config(void)
1367 {
1368         gchar *rcpath;
1369         gchar *tmp;
1370
1371         rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMON_RC, NULL);
1372         prefs_read_config(param, "Common", rcpath, NULL);
1373 #ifdef G_OS_WIN32
1374         prefs_read_config(param_os_specific, "CommonWin32", rcpath, NULL);
1375 #endif
1376
1377         g_free(rcpath);
1378
1379         tmp = g_strdup(gettext(prefs_common.date_format));
1380         g_free(prefs_common.date_format);
1381         prefs_common.date_format = tmp;
1382
1383         prefs_common.mime_open_cmd_history =
1384                 prefs_common_read_history(COMMAND_HISTORY);
1385         prefs_common.summary_quicksearch_history =
1386                 prefs_common_read_history(QUICKSEARCH_HISTORY);
1387         prefs_common.summary_search_from_history =
1388                 prefs_common_read_history(SUMMARY_SEARCH_FROM_HISTORY);
1389         prefs_common.summary_search_to_history =
1390                 prefs_common_read_history(SUMMARY_SEARCH_TO_HISTORY);
1391         prefs_common.summary_search_subject_history =
1392                 prefs_common_read_history(SUMMARY_SEARCH_SUBJECT_HISTORY);
1393         prefs_common.summary_search_body_history =
1394                 prefs_common_read_history(SUMMARY_SEARCH_BODY_HISTORY);
1395         prefs_common.summary_search_adv_condition_history =
1396                 prefs_common_read_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY);
1397         prefs_common.message_search_history =
1398                 prefs_common_read_history(MESSAGE_SEARCH_HISTORY);
1399         prefs_common.compose_save_to_history =
1400                 prefs_common_read_history(COMPOSE_SAVE_TO_HISTORY);
1401 #ifndef USE_ALT_ADDRBOOK
1402         prefs_common.addressbook_custom_attributes = addressbook_update_custom_attr_from_prefs();
1403 #endif
1404         colorlabel_update_colortable_from_prefs();
1405 }
1406
1407 #define TRY(func) \
1408 if (!(func)) \
1409 { \
1410         g_warning("failed to write"); \
1411         goto out;                       \
1412 } \
1413
1414 /*
1415  * Save history list to the specified history file in the specified directory (subdir of rc_dir)
1416  */
1417 static void prefs_common_save_history_to_dir(const gchar *dirname, const gchar *history, GList *list)
1418 {
1419         GList *cur;
1420         FILE *fp;
1421         gchar *path, *tmp_path;
1422
1423         if (dirname) {
1424                 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, dirname,
1425                                    G_DIR_SEPARATOR_S, history,
1426                                    NULL);
1427         } else {
1428         path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1429                            NULL);
1430         }
1431         tmp_path = g_strconcat(path, ".tmp", NULL);
1432
1433         if ((fp = claws_fopen(tmp_path, "wb")) == NULL) {
1434                 FILE_OP_ERROR(tmp_path, "claws_fopen");
1435                 goto out;
1436         }
1437
1438         for (cur = list; cur != NULL; cur = cur->next) {
1439                 TRY(claws_fputs((gchar *)cur->data, fp) != EOF &&
1440                     claws_fputc('\n', fp) != EOF);
1441         }
1442
1443         if (claws_safe_fclose(fp) == EOF) {
1444                 FILE_OP_ERROR(tmp_path, "claws_fclose");
1445                 fp = NULL;
1446                 goto out;
1447         }
1448         fp = NULL;
1449 #ifdef G_OS_WIN32
1450         claws_unlink(path);
1451 #endif
1452         if (g_rename(tmp_path, path) < 0) {
1453                 FILE_OP_ERROR(path, "rename");
1454                 goto out;
1455         }
1456
1457 out:
1458         if (fp)
1459                 claws_safe_fclose(fp);
1460         g_free(tmp_path);
1461         g_free(path);
1462 }
1463
1464 /*
1465  * Save history list to the specified history file
1466  */
1467 static void prefs_common_save_history(const gchar *history, GList *list)
1468 {
1469         prefs_common_save_history_to_dir(NULL, history, list);
1470 }
1471
1472 #undef TRY
1473
1474 void prefs_common_write_config(void)
1475 {
1476         prefs_write_config(param, "Common", COMMON_RC);
1477 #ifdef G_OS_WIN32
1478         prefs_write_config(param_os_specific, "CommonWin32", COMMON_RC);
1479 #endif
1480
1481         prefs_common_save_history(COMMAND_HISTORY, 
1482                 prefs_common.mime_open_cmd_history);
1483         prefs_common_save_history(QUICKSEARCH_HISTORY, 
1484                 prefs_common.summary_quicksearch_history);
1485         prefs_common_save_history(SUMMARY_SEARCH_FROM_HISTORY, 
1486                 prefs_common.summary_search_from_history);
1487         prefs_common_save_history(SUMMARY_SEARCH_TO_HISTORY, 
1488                 prefs_common.summary_search_to_history);
1489         prefs_common_save_history(SUMMARY_SEARCH_SUBJECT_HISTORY, 
1490                 prefs_common.summary_search_subject_history);
1491         prefs_common_save_history(SUMMARY_SEARCH_BODY_HISTORY, 
1492                 prefs_common.summary_search_body_history);
1493         prefs_common_save_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY, 
1494                 prefs_common.summary_search_adv_condition_history);
1495         prefs_common_save_history(MESSAGE_SEARCH_HISTORY, 
1496                 prefs_common.message_search_history);
1497         prefs_common_save_history(COMPOSE_SAVE_TO_HISTORY, 
1498                 prefs_common.compose_save_to_history);
1499
1500 #ifndef USE_ALT_ADDRBOOK
1501                 prefs_common_save_history_to_dir(ADDRBOOK_DIR,
1502                 ADDRESSBOOK_CUSTOM_ATTRIBUTES, 
1503                 prefs_common.addressbook_custom_attributes);
1504 #endif
1505 }
1506
1507 /* make a copy of string 'in' into buffer 'out'. un-escape \ sequences.
1508    both 'in' and 'out' must be non-NULL.
1509    'out' must be a pointer to a buffer whose size is at least equal
1510    to strlen(txt)+1, this buffer will get cleared. out's contents
1511    will always get set to a valid string, even if it's "".*/
1512 void pref_get_unescaped_pref(gchar *out, const gchar *in)
1513 {
1514         const gchar *i;
1515         gchar *o;
1516
1517         *out = '\0';
1518
1519         cm_return_if_fail( in != NULL );
1520         cm_return_if_fail( out != NULL );
1521
1522         i = in;
1523         o = out;
1524         memset(out, 0, strlen(in)+1);
1525         while (*i != '\0') {
1526                 if (*i == '\\' && *(i+1) == 'n') {
1527                         *o++ = '\n';
1528                         i++;
1529                 } else if (*i == '\\' && *(i+1) == 't') {
1530                         *o++ = '\t';
1531                         i++;
1532                 } else if (*i == '\\' && *(i+1) == '\\') {
1533                         *o++ = '\\';
1534                         i++;
1535                 } else {
1536                         *o++ = *i;
1537                 }
1538                 i++;
1539         }
1540         *o='\0';
1541 }
1542
1543 /* make a copy of string 'in' into buffer 'out'. escape \ sequences.
1544    both 'in' and 'out' must be non-NULL.
1545    'out' must be a pointer to a buffer whose size is at least equal
1546    to 2*strlen(txt)+1. out's contents will always get set to a valid
1547    string, even if it's "". */
1548 void pref_get_escaped_pref(gchar *out, const gchar *in)
1549 {
1550         const gchar *i;
1551         gchar *o;
1552
1553         *out = '\0';
1554
1555         cm_return_if_fail( in != NULL );
1556         cm_return_if_fail( out != NULL );
1557
1558         i = in;
1559         o = out;
1560         while (*i != '\0') {
1561                 if (*i == '\n') {
1562                         *o++ = '\\';
1563                         *o++ = 'n';
1564                 } else if (*i == '\t') {
1565                         *o++ = '\\';
1566                         *o++ = 't';
1567                 } else if (*i == '\\') {
1568                         *o++ = '\\';
1569                         *o++ = '\\';
1570                 } else {
1571                         *o++ = *i;
1572                 }
1573                 i++;
1574         }
1575         *o = '\0';
1576 }
1577                 
1578 /* set the contents of a textview widget from the internal \-escaped
1579   representation of a pref string. both txt and textview must be non-NULL. */
1580 void pref_set_textview_from_pref(GtkTextView *textview, const gchar *txt)
1581 {
1582         GtkTextBuffer *buffer;
1583         gchar *out = NULL;
1584
1585         cm_return_if_fail( textview != NULL );
1586
1587         buffer = gtk_text_view_get_buffer(textview);
1588
1589         if (!txt) {
1590                 gtk_text_buffer_set_text(buffer, "", -1);
1591         } else {
1592                 out = g_malloc(strlen(txt)+1);
1593
1594                 pref_get_unescaped_pref(out, txt);
1595
1596                 gtk_text_buffer_set_text(buffer, out, -1);
1597                 g_free(out);
1598         }
1599 }
1600
1601 /* set the contents of a gtkentry widget from the internal \-escaped
1602   representation of a pref string. both txt and entry must be non-NULL. */
1603 void pref_set_entry_from_pref(GtkEntry *entry, const gchar *txt)
1604 {
1605         gchar *out = NULL;
1606
1607         cm_return_if_fail( entry != NULL );
1608         if (!txt) {
1609                 gtk_entry_set_text(entry, "");
1610         } else {
1611                 out = g_malloc(strlen(txt)+1);
1612
1613                 pref_get_unescaped_pref(out, txt);
1614
1615                 gtk_entry_set_text(entry, out);
1616                 g_free(out);
1617         }
1618 }
1619
1620 /* get the \-escaped internal representation of a pref from the contents of
1621    a textview widget. textview must be non-NULL. */
1622 gchar *pref_get_pref_from_textview(GtkTextView *textview) 
1623 {
1624         GtkTextBuffer *buffer;
1625         GtkTextIter start, end;
1626         gchar *out, *tmp;
1627         
1628         cm_return_val_if_fail( textview != NULL, "" );
1629
1630         buffer = gtk_text_view_get_buffer(textview);
1631         gtk_text_buffer_get_start_iter(buffer, &start);
1632         gtk_text_buffer_get_iter_at_offset(buffer, &end, -1);
1633         tmp = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
1634         out = malloc(2*strlen(tmp)+1);
1635         if (out)
1636                 pref_get_escaped_pref(out, tmp);
1637         g_free(tmp);
1638
1639         return out?out:"";
1640 }
1641
1642 /* get the \-escaped internal representation of a pref from the contents of
1643    a gtkentry widget. entry must be non-NULL. */
1644 gchar *pref_get_pref_from_entry(GtkEntry *entry) 
1645 {
1646         gchar *out, *tmp;
1647
1648         cm_return_val_if_fail( entry != NULL, "" );
1649
1650         tmp = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
1651         out = malloc(2*strlen(tmp)+1);
1652         
1653         if (out)
1654                 pref_get_escaped_pref(out, tmp);
1655         g_free(tmp);
1656
1657         return out?out:"";
1658 }
1659
1660 /* ugly hack to be able to get this pref from ssl_certificate.c */
1661 gboolean prefs_common_unsafe_ssl_certs(void)
1662 {
1663         return prefs_common.unsafe_ssl_certs;
1664 }
1665
1666 gboolean prefs_common_enable_log_standard(void)
1667 {
1668         return prefs_common.enable_log_standard;
1669 }
1670
1671 gboolean prefs_common_enable_log_warning(void)
1672 {
1673         return prefs_common.enable_log_warning;
1674 }
1675 gboolean prefs_common_enable_log_error(void)
1676 {
1677         return prefs_common.enable_log_error;
1678 }
1679 gboolean prefs_common_enable_log_status(void)
1680 {
1681         return prefs_common.enable_log_status;
1682 }
1683
1684 /**
1685    return the translated name of a header, if the translate_header option is
1686    set, otherwise return the untranslated header name (header_name itself).
1687    this function is provided for convenience, it's an interface to
1688    prefs_common.trans_hdr.
1689    works with header names either with or without trailing colon, provided
1690    that gettext found such header name in the sources (they should all be
1691    found in src/gtk/headers.h anyway).
1692 */
1693 const gchar *prefs_common_translated_header_name(const gchar *header_name)
1694 {
1695         if (header_name == NULL || *header_name == '\0')
1696                 return header_name;
1697
1698         return prefs_common.trans_hdr ? gettext(header_name) : header_name;
1699 }
1700
1701 const gchar *prefs_common_get_uri_cmd(void)
1702 {
1703 #ifdef G_OS_WIN32
1704         return NULL;
1705 #else
1706         gchar *tmp = NULL;
1707         
1708         if (!prefs_common.cmds_use_system_default)
1709                 return prefs_common.uri_cmd;
1710         
1711         tmp = g_find_program_in_path("xdg-open");
1712         if (!tmp) 
1713                 return prefs_common.uri_cmd;
1714         
1715         g_free(tmp);
1716         return "xdg-open %s";
1717 #endif
1718 }
1719
1720 const gchar *prefs_common_get_ext_editor_cmd(void)
1721 {
1722         return prefs_common.ext_editor_cmd;
1723 #if 0 /* we should do that, but it detaches the editor and breaks
1724          compose.c's external composition. */
1725         gchar *tmp = NULL;
1726         
1727         if (!prefs_common.cmds_use_system_default)
1728                 return prefs_common.ext_editor_cmd;
1729         
1730         tmp = g_find_program_in_path("xdg-open");
1731         if (!tmp) 
1732                 return prefs_common.ext_editor_cmd;
1733         
1734         g_free(tmp);
1735         return "xdg-open %s";
1736 #endif 
1737 }
1738
1739 gboolean prefs_common_get_use_shred(void)
1740 {
1741         return prefs_common.use_shred;
1742 }
1743
1744 gboolean prefs_common_get_flush_metadata (void)
1745 {
1746         return prefs_common.flush_metadata;
1747 }
1748
1749 PrefsCommon *prefs_common_get_prefs(void)
1750 {
1751         return &prefs_common;
1752 }