2fe16fd06935fee63e6aae0293f776587c395a12
[claws.git] / src / prefs_common.c
1 /*
2  * Claws Mail -- a GTK+ based, lightweight, and fast e-mail client
3  * Copyright (C) 1999-2019 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 #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         {"render_html", "TRUE", &prefs_common.render_html, P_BOOL,
769          NULL, NULL, NULL},
770         {"invoke_plugin_on_html", "FALSE", &prefs_common.invoke_plugin_on_html, P_BOOL,
771          NULL, NULL, NULL},
772         {"promote_html_part", "FALSE", &prefs_common.promote_html_part, P_BOOL,
773          NULL, NULL, NULL},
774         {"line_space", "2", &prefs_common.line_space, P_INT,
775          NULL, NULL, NULL},
776         {"never_send_retrcpt", "FALSE", &prefs_common.never_send_retrcpt, P_BOOL,
777          NULL, NULL, NULL},
778
779         {"enable_smooth_scroll", "FALSE",
780          &prefs_common.enable_smooth_scroll, P_BOOL,
781          NULL, NULL, NULL},
782         {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
783          NULL, NULL, NULL},
784         {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
785          NULL, NULL, NULL},
786         {"hide_quoted", "TRUE",
787          &prefs_common.hide_quoted, P_BOOL,
788          NULL, NULL, NULL},
789         {"respect_flowed_format", "FALSE", &prefs_common.respect_flowed_format, P_BOOL,
790          NULL, NULL, NULL},
791         {"show_all_headers", "FALSE", &prefs_common.show_all_headers, P_BOOL,
792          NULL, NULL, NULL},
793
794         {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
795          NULL, NULL, NULL},
796
797         {"attach_desc", "TRUE", &prefs_common.attach_desc, P_BOOL,
798          NULL, NULL, NULL},
799         {"attach_save_directory", NULL,
800          &SPECIFIC_PREFS.attach_save_dir, P_STRING, NULL, NULL, NULL},
801         {"attach_load_directory", NULL,
802          &SPECIFIC_PREFS.attach_load_dir, P_STRING, NULL, NULL, NULL},
803
804         /* MIME viewer */
805         {"mime_textviewer",   NULL,
806          &SPECIFIC_PREFS.mime_textviewer,   P_STRING, NULL, NULL, NULL},
807         {"mime_open_command", "xdg-open '%s'",
808          &SPECIFIC_PREFS.mime_open_cmd,     P_STRING, NULL, NULL, NULL},
809         {"show_inline_attachments", "TRUE", 
810          &prefs_common.show_inline_attachments, P_BOOL, NULL, NULL, NULL},
811
812         /* Interface */
813 #ifndef GENERIC_UMPC
814         {"layout_mode", "0", &prefs_common.layout_mode, P_INT,
815          NULL, NULL, NULL},
816 #else
817         {"layout_mode", "5", &prefs_common.layout_mode, P_INT,
818          NULL, NULL, NULL},
819 #endif
820         /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
821          NULL, NULL, NULL}, */
822         {"open_selected_message_on_folder_open", "FALSE",
823          &prefs_common.open_selected_on_folder_open,
824          P_BOOL, NULL, NULL, NULL},
825         {"open_selected_message_on_search_results", "FALSE",
826          &prefs_common.open_selected_on_search_results,
827          P_BOOL, NULL, NULL, NULL},
828         {"open_selected_message_on_prevnext", "FALSE",
829          &prefs_common.open_selected_on_prevnext,
830          P_BOOL, NULL, NULL, NULL},
831         {"open_selected_message_on_deletemove", "FALSE",
832          &prefs_common.open_selected_on_deletemove,
833          P_BOOL, NULL, NULL, NULL},
834         {"open_selected_message_on_directional", "FALSE",
835          &prefs_common.open_selected_on_directional,
836          P_BOOL, NULL, NULL, NULL},
837         {"always_show_message_when_selected", "FALSE",
838          &prefs_common.always_show_msg,
839          P_BOOL, NULL, NULL, NULL},
840         {"select_on_entry", "3", &prefs_common.select_on_entry,
841          P_ENUM, NULL, NULL, NULL},
842         {"show_tooltips", "TRUE", &prefs_common.show_tooltips,
843          P_BOOL, NULL, NULL, NULL},
844
845         /* do it SUMMARY_OPEN_ACTIONS-1 times */
846         {"summary_select_prio1", "0", &prefs_common.summary_select_prio[0], P_ENUM,
847          NULL, NULL, NULL},
848         {"summary_select_prio2", "0", &prefs_common.summary_select_prio[1], P_ENUM,
849          NULL, NULL, NULL},
850         {"summary_select_prio3", "0", &prefs_common.summary_select_prio[2], P_ENUM,
851          NULL, NULL, NULL},
852         {"summary_select_prio4", "0", &prefs_common.summary_select_prio[3], P_ENUM,
853          NULL, NULL, NULL},
854         {"summary_select_prio5", "0", &prefs_common.summary_select_prio[4], P_ENUM,
855          NULL, NULL, NULL},
856         {"summary_select_prio6", "0", &prefs_common.summary_select_prio[5], P_ENUM,
857          NULL, NULL, NULL},
858         {"summary_select_prio7", "0", &prefs_common.summary_select_prio[6], P_ENUM,
859          NULL, NULL, NULL},
860         {"summary_select_prio8", "0", &prefs_common.summary_select_prio[7], P_ENUM,
861          NULL, NULL, NULL},
862         {"summary_select_prio9", "0", &prefs_common.summary_select_prio[8], P_ENUM,
863          NULL, NULL, NULL},
864         {"summary_select_prio10", "0", &prefs_common.summary_select_prio[9], P_ENUM,
865          NULL, NULL, NULL},
866
867         {"mark_as_read_on_new_window", "FALSE",
868          &prefs_common.mark_as_read_on_new_window,
869          P_BOOL, NULL, NULL, NULL},
870         {"mark_as_read_delay", "0",
871          &prefs_common.mark_as_read_delay, P_INT, 
872          NULL, NULL, NULL},
873         {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
874          NULL, NULL, NULL},
875         {"nextunreadmsg_dialog", "1", &prefs_common.next_unread_msg_dialog, P_ENUM,
876          NULL, NULL, NULL},
877         {"summary_from_show", "0", &prefs_common.summary_from_show, P_ENUM,
878          NULL, NULL, NULL},
879
880         {"pixmap_theme_path", DEFAULT_PIXMAP_THEME, 
881          &SPECIFIC_PREFS.pixmap_theme_path, P_STRING,
882          NULL, NULL, NULL},
883 #ifdef HAVE_SVG
884         {"enable_alpha_svg", "TRUE",
885          &SPECIFIC_PREFS.enable_alpha_svg, P_BOOL,
886          NULL, NULL, NULL},
887         {"enable_pixmap_scaling", "TRUE",
888          &SPECIFIC_PREFS.enable_pixmap_scaling, P_BOOL,
889          NULL, NULL, NULL},
890         {"pixmap_scaling_auto", "TRUE",
891          &SPECIFIC_PREFS.pixmap_scaling_auto, P_BOOL,
892          NULL, NULL, NULL},
893         {"pixmap_scaling_ppi", "96",
894          &SPECIFIC_PREFS.pixmap_scaling_ppi, P_INT,
895          NULL, NULL, NULL},
896 #endif
897
898         {"ask_mark_all_read", "TRUE", &prefs_common.ask_mark_all_read, P_BOOL,
899          NULL, NULL, NULL},
900         {"ask_override_colorlabel", "TRUE", &prefs_common.ask_override_colorlabel, P_BOOL,
901          NULL, NULL, NULL},
902
903         {"ask_apply_per_account_filtering_rules", "TRUE", &prefs_common.ask_apply_per_account_filtering_rules, P_BOOL,
904          NULL, NULL, NULL},
905         {"apply_per_account_filtering_rules", "0", &prefs_common.apply_per_account_filtering_rules, P_ENUM,
906          NULL, NULL, NULL},
907
908         /* Addressbook */
909         {"addressbook_use_editaddress_dialog", "TRUE", &prefs_common.addressbook_use_editaddress_dialog,
910          P_BOOL, NULL, NULL, NULL},
911         {"addressbook_hpaned_pos", "-1", &prefs_common.addressbook_hpaned_pos,
912          P_INT, NULL, NULL, NULL},
913         {"addressbook_vpaned_pos", "-1", &prefs_common.addressbook_vpaned_pos,
914          P_INT, NULL, NULL, NULL},
915
916         /* Other */
917 #ifndef G_OS_WIN32
918         {"uri_open_command", DEFAULT_BROWSER_CMD,
919          &SPECIFIC_PREFS.uri_cmd, P_STRING, NULL, NULL, NULL},
920 #else
921         {"gtk_theme", DEFAULT_W32_GTK_THEME,
922          &SPECIFIC_PREFS.gtk_theme, P_STRING, NULL, NULL, NULL},
923 #endif
924         {"ext_editor_command", DEFAULT_EDITOR_CMD,
925          &SPECIFIC_PREFS.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
926         {"cmds_use_system_default", "TRUE",
927          &prefs_common.cmds_use_system_default, P_BOOL, NULL, NULL, NULL},
928         {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
929          P_BOOL, NULL, NULL, NULL},
930         {"session_passwords", "FALSE", &prefs_common.session_passwords,
931          P_BOOL, NULL, NULL, NULL},
932         {"confirm_on_exit", "FALSE", &prefs_common.confirm_on_exit, P_BOOL,
933          NULL, NULL, NULL},
934         {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
935          NULL, NULL, NULL},
936         {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
937          NULL, NULL, NULL},
938         {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
939          P_BOOL, NULL, NULL, NULL},
940         {"work_offline", "FALSE", &prefs_common.work_offline, P_BOOL,
941          NULL, NULL, NULL},
942         {"summary_quicksearch_type", "0", &prefs_common.summary_quicksearch_type, P_INT,
943          NULL, NULL, NULL},
944 #ifndef GENERIC_UMPC
945         {"summary_quicksearch_recurse", "1", &prefs_common.summary_quicksearch_recurse, P_INT,
946          NULL, NULL, NULL},
947 #else
948         {"summary_quicksearch_recurse", "0", &prefs_common.summary_quicksearch_recurse, P_INT,
949          NULL, NULL, NULL},
950 #endif
951
952 #if defined(__OpenBSD__)
953         {"io_timeout_secs", "80", &prefs_common.io_timeout_secs,
954          P_INT, NULL, NULL, NULL},
955 #else
956         {"io_timeout_secs", "60", &prefs_common.io_timeout_secs,
957          P_INT, NULL, NULL, NULL},
958 #endif
959         {"hide_score", "-9999", &prefs_common.kill_score, P_INT,
960          NULL, NULL, NULL},
961         {"important_score", "1", &prefs_common.important_score, P_INT,
962          NULL, NULL, NULL},
963
964         {"clip_log", "TRUE", &prefs_common.cliplog, P_BOOL,
965          NULL, NULL, NULL},
966         {"log_length", "500", &prefs_common.loglength, P_INT,
967          NULL, NULL, NULL},
968 #ifndef GENERIC_UMPC
969         {"enable_log_standard", "TRUE", &prefs_common.enable_log_standard, P_BOOL,
970          NULL, NULL, NULL},
971         {"enable_log_warning", "TRUE", &prefs_common.enable_log_warning, P_BOOL,
972          NULL, NULL, NULL},
973         {"enable_log_error", "TRUE", &prefs_common.enable_log_error, P_BOOL,
974          NULL, NULL, NULL},
975         {"enable_log_status", "TRUE", &prefs_common.enable_log_status, P_BOOL,
976          NULL, NULL, NULL},
977 #else
978         {"enable_log_standard", "FALSE", &prefs_common.enable_log_standard, P_BOOL,
979          NULL, NULL, NULL},
980         {"enable_log_warning", "FALSE", &prefs_common.enable_log_warning, P_BOOL,
981          NULL, NULL, NULL},
982         {"enable_log_error", "FALSE", &prefs_common.enable_log_error, P_BOOL,
983          NULL, NULL, NULL},
984         {"enable_log_status", "FALSE", &prefs_common.enable_log_status, P_BOOL,
985          NULL, NULL, NULL},
986 #endif
987         {"log_msg_color", "#00af00", &prefs_common.color[COL_LOG_MSG],
988          P_COLOR, NULL, NULL, NULL},
989         {"log_warn_color", "#af0000", &prefs_common.color[COL_LOG_WARN],
990          P_COLOR, NULL, NULL, NULL},
991         {"log_error_color", "#af0000", &prefs_common.color[COL_LOG_ERROR],
992          P_COLOR, NULL, NULL, NULL},
993         {"log_in_color", "#000000", &prefs_common.color[COL_LOG_IN],
994          P_COLOR, NULL, NULL, NULL},
995         {"log_out_color", "#0000ef", &prefs_common.color[COL_LOG_OUT],
996          P_COLOR, NULL, NULL, NULL},
997         {"log_status_ok_color", "#00af00", &prefs_common.color[COL_LOG_STATUS_OK],
998          P_COLOR, NULL, NULL, NULL},
999         {"log_status_nok_color", "#0000af", &prefs_common.color[COL_LOG_STATUS_NOK],
1000          P_COLOR, NULL, NULL, NULL},
1001         {"log_status_skip_color", "#aa00aa", &prefs_common.color[COL_LOG_STATUS_SKIP],
1002          P_COLOR, NULL, NULL, NULL},
1003
1004     {"enable_filtering_debug", "FALSE", &prefs_common.enable_filtering_debug, P_BOOL,
1005          NULL, NULL, NULL},
1006     {"filtering_debug_level", "1", &prefs_common.filtering_debug_level, P_INT,
1007          NULL, NULL, NULL},
1008     {"enable_filtering_debug_inc", "TRUE", &prefs_common.enable_filtering_debug_inc, P_BOOL,
1009          NULL, NULL, NULL},
1010     {"enable_filtering_debug_manual", "TRUE", &prefs_common.enable_filtering_debug_manual, P_BOOL,
1011          NULL, NULL, NULL},
1012     {"enable_filtering_debug_folder_proc", "FALSE", &prefs_common.enable_filtering_debug_folder_proc, P_BOOL,
1013          NULL, NULL, NULL},
1014     {"enable_filtering_debug_pre_proc", "FALSE", &prefs_common.enable_filtering_debug_pre_proc, P_BOOL,
1015          NULL, NULL, NULL},
1016     {"enable_filtering_debug_post_proc", "FALSE", &prefs_common.enable_filtering_debug_post_proc, P_BOOL,
1017          NULL, NULL, NULL},
1018     {"filtering_debug_clip_log", "TRUE", &prefs_common.filtering_debug_cliplog, P_BOOL,
1019          NULL, NULL, NULL},
1020         {"filtering_debug_log_length", "500", &prefs_common.filtering_debug_loglength, P_INT,
1021          NULL, NULL, NULL},
1022
1023         {"gtk_can_change_accels", "FALSE", &prefs_common.gtk_can_change_accels, P_BOOL,
1024          NULL, NULL, NULL},
1025         {"gtk_enable_accels", "TRUE", &prefs_common.gtk_enable_accels, P_BOOL,
1026          NULL, NULL, NULL},
1027
1028         {"color_new", "#0000b3", &prefs_common.color[COL_NEW],
1029          P_COLOR, NULL, NULL, NULL},
1030
1031         /* Some windows' sizes */
1032         {"filteringwin_width", "500", &prefs_common.filteringwin_width, P_INT,
1033          NULL, NULL, NULL},
1034         {"filteringwin_height", "-1", &prefs_common.filteringwin_height, P_INT,
1035          NULL, NULL, NULL},
1036
1037         {"filteringactionwin_width", "490", &prefs_common.filteringactionwin_width, P_INT,
1038          NULL, NULL, NULL},
1039         {"filteringactionwin_height", "-1", &prefs_common.filteringactionwin_height, P_INT,
1040          NULL, NULL, NULL},
1041
1042         {"matcherwin_width", "520", &prefs_common.matcherwin_width, P_INT,
1043          NULL, NULL, NULL},
1044         {"matcherwin_height", "-1", &prefs_common.matcherwin_height, P_INT,
1045          NULL, NULL, NULL},
1046
1047         {"templateswin_width", "480", &prefs_common.templateswin_width, P_INT,
1048          NULL, NULL, NULL},
1049         {"templateswin_height", "-1", &prefs_common.templateswin_height, P_INT,
1050          NULL, NULL, NULL},
1051
1052         {"actionsiodialog_width", "582", &prefs_common.actionsiodialog_width, P_INT,
1053          NULL, NULL, NULL},
1054         {"actionsiodialog_height", "310", &prefs_common.actionsiodialog_height, P_INT,
1055          NULL, NULL, NULL},
1056
1057         {"actionswin_width", "486", &prefs_common.actionswin_width, P_INT,
1058          NULL, NULL, NULL},
1059         {"actionswin_height", "-1", &prefs_common.actionswin_height, P_INT,
1060          NULL, NULL, NULL},
1061
1062         {"tagswin_width", "586", &prefs_common.tagswin_width, P_INT,
1063          NULL, NULL, NULL},
1064         {"tagswin_height", "-1", &prefs_common.tagswin_height, P_INT,
1065          NULL, NULL, NULL},
1066
1067         {"sslmanwin_width", "486", &prefs_common.sslmanwin_width, P_INT,
1068          NULL, NULL, NULL},
1069         {"sslmanwin_height", "-1", &prefs_common.sslmanwin_height, P_INT,
1070          NULL, NULL, NULL},
1071
1072         {"uriopenerwin_width", "-1", &prefs_common.uriopenerwin_width, P_INT,
1073          NULL, NULL, NULL},
1074         {"uriopenerwin_height", "-1", &prefs_common.uriopenerwin_height, P_INT,
1075          NULL, NULL, NULL},
1076
1077         {"foldersortwin_width", "400", &prefs_common.foldersortwin_width, P_INT,
1078          NULL, NULL, NULL},
1079         {"foldersortwin_height", "300", &prefs_common.foldersortwin_height, P_INT,
1080          NULL, NULL, NULL},
1081
1082         {"addressbookwin_width", "520", &prefs_common.addressbookwin_width, P_INT,
1083          NULL, NULL, NULL},
1084         {"addressbookwin_height", "-1", &prefs_common.addressbookwin_height, P_INT,
1085          NULL, NULL, NULL},
1086
1087         {"addressbookeditpersonwin_width", "640", &prefs_common.addressbookeditpersonwin_width, P_INT,
1088          NULL, NULL, NULL},
1089         {"addressbookeditpersonwin_height", "320", &prefs_common.addressbookeditpersonwin_height, P_INT,
1090          NULL, NULL, NULL},
1091
1092         {"addressbookeditgroupwin_width", "580", &prefs_common.addressbookeditgroupwin_width, P_INT,
1093          NULL, NULL, NULL},
1094         {"addressbookeditgroupwin_height", "340", &prefs_common.addressbookeditgroupwin_height, P_INT,
1095          NULL, NULL, NULL},
1096
1097         {"pluginswin_width", "-1", &prefs_common.pluginswin_width, P_INT,
1098          NULL, NULL, NULL},
1099         {"pluginswin_height", "-1", &prefs_common.pluginswin_height, P_INT,
1100          NULL, NULL, NULL},
1101
1102         {"prefswin_width", "600", &prefs_common.prefswin_width, P_INT,
1103          NULL, NULL, NULL},
1104         {"prefswin_height", "-1", &prefs_common.prefswin_height, P_INT,
1105          NULL, NULL, NULL},
1106
1107         {"folderitemwin_width", "500", &prefs_common.folderitemwin_width, P_INT,
1108          NULL, NULL, NULL},
1109         {"folderitemwin_height", "-1", &prefs_common.folderitemwin_height, P_INT,
1110          NULL, NULL, NULL},
1111
1112         {"zero_replacement_char", "0", &prefs_common.zero_replacement, P_STRING,
1113          NULL, NULL, NULL},
1114
1115         {"editaccountwin_width", "500", &prefs_common.editaccountwin_width, P_INT,
1116          NULL, NULL, NULL},
1117         {"editaccountwin_height", "-1", &prefs_common.editaccountwin_height, P_INT,
1118          NULL, NULL, NULL},
1119
1120         {"accountswin_width", "500", &prefs_common.accountswin_width, P_INT,
1121          NULL, NULL, NULL},
1122         {"accountswin_height", "-1", &prefs_common.accountswin_height, P_INT,
1123          NULL, NULL, NULL},
1124
1125         {"logwin_width", "520", &prefs_common.logwin_width, P_INT,
1126          NULL, NULL, NULL},
1127         {"logwin_height", "-1", &prefs_common.logwin_height, P_INT,
1128          NULL, NULL, NULL},
1129
1130         {"filtering_debugwin_width", "600", &prefs_common.filtering_debugwin_width, P_INT,
1131          NULL, NULL, NULL},
1132         {"filtering_debugwin_height", "-1", &prefs_common.filtering_debugwin_height, P_INT,
1133          NULL, NULL, NULL},
1134
1135         {"folderselwin_width", "300", &prefs_common.folderselwin_width, P_INT,
1136          NULL, NULL, NULL},
1137         {"folderselwin_height", "-1", &prefs_common.folderselwin_height, P_INT,
1138          NULL, NULL, NULL},
1139
1140         {"addressaddwin_width", "300", &prefs_common.addressaddwin_width, P_INT,
1141          NULL, NULL, NULL},
1142         {"addressaddwin_height", "-1", &prefs_common.addressaddwin_height, P_INT,
1143          NULL, NULL, NULL},
1144
1145         {"addressbook_folderselwin_width", "300", &prefs_common.addressbook_folderselwin_width, P_INT,
1146          NULL, NULL, NULL},
1147         {"addressbook_folderselwin_height", "-1", &prefs_common.addressbook_folderselwin_height, P_INT,
1148          NULL, NULL, NULL},
1149
1150         {"aboutwin_width", "450", &prefs_common.aboutwin_width, P_INT,
1151          NULL, NULL, NULL},
1152         {"aboutwin_height", "500", &prefs_common.aboutwin_height, P_INT,
1153          NULL, NULL, NULL},
1154
1155         {"addrgather_width", "450", &prefs_common.addrgather_width, P_INT,
1156          NULL, NULL, NULL},
1157         {"addrgather_height", "-1", &prefs_common.addrgather_height, P_INT,
1158          NULL, NULL, NULL},
1159
1160         {"news_subscribe_width", "450", &prefs_common.news_subscribe_width, P_INT,
1161          NULL, NULL, NULL},
1162         {"news_subscribe_height", "400", &prefs_common.news_subscribe_height, P_INT,
1163          NULL, NULL, NULL},
1164
1165         /* Hidden */
1166         {"imap_scan_tree_recurs_limit", "64", &prefs_common.imap_scan_tree_recurs_limit, P_INT,
1167          NULL, NULL, NULL},
1168         {"warn_dnd", "1", &prefs_common.warn_dnd, P_INT,
1169          NULL, NULL, NULL},
1170         {"utf8_instead_of_locale_for_broken_mail", "0", 
1171          &prefs_common.broken_are_utf8, P_INT,
1172          NULL, NULL, NULL},
1173         {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
1174          NULL, NULL, NULL},
1175         {"use_stripes_everywhere", "TRUE", &prefs_common.use_stripes_everywhere, P_BOOL,
1176          NULL, NULL, NULL},
1177         {"use_stripes_in_summaries", "TRUE", &prefs_common.use_stripes_in_summaries, P_BOOL,
1178          NULL, NULL, NULL},
1179         {"stripes_color_offset", "4000", &prefs_common.stripes_color_offset, P_INT,
1180          NULL, NULL, NULL},
1181         {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
1182          NULL, NULL, NULL},
1183         {"folderview_vscrollbar_policy", "0",
1184          &prefs_common.folderview_vscrollbar_policy, P_ENUM,
1185          NULL, NULL, NULL},
1186         {"textview_cursor_visible", "FALSE",
1187          &prefs_common.textview_cursor_visible, P_BOOL,
1188          NULL, NULL, NULL},
1189         {"hover_timeout", "500", &prefs_common.hover_timeout, P_INT,
1190          NULL, NULL, NULL},
1191 #ifndef GENERIC_UMPC
1192         {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
1193          NULL, NULL, NULL},
1194         {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
1195          NULL, NULL, NULL},
1196 #else
1197         {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
1198          NULL, NULL, NULL},
1199         {"cache_min_keep_time", "0", &prefs_common.cache_min_keep_time, P_INT,
1200          NULL, NULL, NULL},
1201 #endif
1202         {"thread_by_subject_max_age", "10", &prefs_common.thread_by_subject_max_age,
1203         P_INT, NULL, NULL, NULL },
1204         {"last_opened_folder", "", &prefs_common.last_opened_folder,
1205         P_STRING, NULL, NULL, NULL },
1206         {"goto_last_folder_on_startup", "FALSE", &prefs_common.goto_last_folder_on_startup,
1207         P_BOOL, NULL, NULL, NULL },
1208         {"summary_quicksearch_sticky", "1", &prefs_common.summary_quicksearch_sticky, P_INT,
1209          NULL, NULL, NULL},
1210         {"summary_quicksearch_dynamic", "0", &prefs_common.summary_quicksearch_dynamic, P_INT,
1211          NULL, NULL, NULL},
1212         {"summary_quicksearch_autorun", "0", &prefs_common.summary_quicksearch_autorun, P_INT,
1213          NULL, NULL, NULL},
1214         {"statusbar_update_step", "10", &prefs_common.statusbar_update_step, P_INT,
1215          NULL, NULL, NULL},
1216         {"compose_no_markup", "FALSE", &prefs_common.compose_no_markup, P_BOOL,
1217          NULL, NULL, NULL},
1218         {"skip_ssl_cert_check", "FALSE", &prefs_common.skip_ssl_cert_check, P_BOOL,
1219          NULL, NULL, NULL},
1220         {"live_dangerously", "FALSE", &prefs_common.live_dangerously, P_BOOL,
1221          NULL, NULL, NULL},
1222         {"save_parts_readwrite", "FALSE", &prefs_common.save_parts_readwrite, P_BOOL,
1223          NULL, NULL, NULL},
1224         {"hide_quotes", "0", &prefs_common.hide_quotes, P_INT,
1225          NULL, NULL, NULL},
1226         {"unsafe_ssl_certs", "FALSE", &prefs_common.unsafe_ssl_certs, P_BOOL,
1227          NULL, NULL, NULL},
1228 #ifndef GENERIC_UMPC
1229         {"real_time_sync", "FALSE", &prefs_common.real_time_sync, P_BOOL,
1230          NULL, NULL, NULL},
1231 #else
1232         {"real_time_sync", "TRUE", &prefs_common.real_time_sync, P_BOOL,
1233          NULL, NULL, NULL},
1234 #endif
1235
1236         {"print_paper_type", NULL, &prefs_common.print_paper_type, P_STRING,
1237          NULL, NULL, NULL},
1238         {"print_paper_orientation", "0", &prefs_common.print_paper_orientation, P_INT,
1239          NULL, NULL, NULL},
1240         {"print_margin_top", "-1", &prefs_common.print_margin_top, P_INT,
1241          NULL, NULL, NULL},
1242         {"print_margin_bottom", "-1", &prefs_common.print_margin_bottom, P_INT,
1243          NULL, NULL, NULL},
1244         {"print_margin_left", "-1", &prefs_common.print_margin_left, P_INT,
1245          NULL, NULL, NULL},
1246         {"print_margin_right", "-1", &prefs_common.print_margin_right, P_INT,
1247          NULL, NULL, NULL},
1248         {"print_use_color", "0", &prefs_common.print_use_color, P_INT,
1249          NULL, NULL, NULL},
1250         {"print_use_collate", "0", &prefs_common.print_use_collate, P_INT,
1251          NULL, NULL, NULL},
1252         {"print_use_reverse", "0", &prefs_common.print_use_reverse, P_INT,
1253          NULL, NULL, NULL},
1254         {"print_use_duplex", "0", &prefs_common.print_use_duplex, P_INT,
1255          NULL, NULL, NULL},
1256         {"print_imgs", "1", &prefs_common.print_imgs, P_INT,
1257          NULL, NULL, NULL},
1258         {"print_previewwin_width", "600", &prefs_common.print_previewwin_width, P_INT,
1259          NULL, NULL, NULL},
1260         {"print_previewwin_height", "-1", &prefs_common.print_previewwin_height, P_INT,
1261          NULL, NULL, NULL},
1262         {"use_networkmanager", "TRUE", &prefs_common.use_networkmanager, P_BOOL,
1263          NULL, NULL, NULL},
1264         {"use_shred", "FALSE", &prefs_common.use_shred, P_BOOL,
1265          NULL, NULL, NULL},
1266
1267         {"two_line_vertical", "TRUE", &prefs_common.two_line_vert,
1268         P_BOOL, NULL, NULL, NULL },
1269
1270         {"inherit_folder_properties", "FALSE", &prefs_common.inherit_folder_props, P_BOOL,
1271          NULL, NULL, NULL},
1272
1273         {"flush_metadata", "TRUE", &prefs_common.flush_metadata, P_BOOL,
1274          NULL, NULL, NULL},
1275
1276         {"nav_history_length", "50", &prefs_common.nav_history_length, P_INT,
1277          NULL, NULL, NULL},
1278
1279         {"diff_added_color", "#008b8b", &prefs_common.color[COL_DIFF_ADDED],
1280          P_COLOR, NULL, NULL, NULL},
1281         {"diff_deleted_color", "#6a5acd", &prefs_common.color[COL_DIFF_DELETED],
1282          P_COLOR, NULL, NULL, NULL},
1283         {"diff_hunk_color", "#a52a2a", &prefs_common.color[COL_DIFF_HUNK],
1284          P_COLOR, NULL, NULL, NULL},
1285
1286         {"folder_search_wildcard", "TRUE", &prefs_common.folder_search_wildcard, P_BOOL,
1287          NULL, NULL, NULL},
1288         {"address_search_wildcard", "TRUE", &prefs_common.address_search_wildcard, P_BOOL,
1289          NULL, NULL, NULL},
1290         {"enable_avatars", "3", &prefs_common.enable_avatars, P_INT, NULL, NULL, NULL},
1291 #ifndef PASSWORD_CRYPTO_OLD
1292         {"use_master_passphrase", FALSE, &prefs_common.use_master_passphrase, P_BOOL, NULL, NULL, NULL },
1293         {"master_passphrase", "", &prefs_common.master_passphrase, P_STRING, NULL, NULL, NULL },
1294         {"master_passphrase_salt", "", &prefs_common.master_passphrase_salt, P_STRING, NULL, NULL, NULL },
1295         {"master_passphrase_pbkdf2_rounds", "50000", &prefs_common.master_passphrase_pbkdf2_rounds, P_INT, NULL, NULL, NULL},
1296 #endif
1297
1298         {"use_proxy", "FALSE", &prefs_common.use_proxy, P_BOOL, NULL, NULL, NULL},
1299         {"proxy_type", "1", &prefs_common.proxy_info.proxy_type, P_ENUM, NULL, NULL, NULL},
1300         {"proxy_host", "localhost", &prefs_common.proxy_info.proxy_host, P_STRING, NULL, NULL, NULL},
1301         {"proxy_port", "1080", &prefs_common.proxy_info.proxy_port, P_USHORT, NULL, NULL, NULL},
1302         {"use_proxy_auth", "FALSE", &prefs_common.proxy_info.use_proxy_auth, P_BOOL, NULL, NULL, NULL},
1303         {"proxy_name", "", &prefs_common.proxy_info.proxy_name, P_STRING, NULL, NULL, NULL},
1304         {"proxy_pass", NULL, &prefs_common.proxy_info.proxy_pass, P_STRING, NULL, NULL, NULL},
1305
1306         {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
1307 };
1308
1309 /*
1310  * Read history list from the specified history file in the specified directory (subdir of rc_dir)
1311  * Fallback to default_list if history file is not found
1312  */
1313 GList *prefs_common_read_history_from_dir_with_defaults(const gchar *dirname, const gchar *history,
1314                                                                                                                           GList *default_list)
1315 {
1316         FILE *fp;
1317         gchar *path;
1318         gchar buf[PREFSBUFSIZE];
1319         GList *tmp = NULL;
1320
1321         if (dirname) {
1322                 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, dirname,
1323                                    G_DIR_SEPARATOR_S, history,
1324                                    NULL);
1325         } else {
1326         path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1327                            NULL);
1328         }
1329         if ((fp = claws_fopen(path, "rb")) == NULL) {
1330                 if (ENOENT != errno) FILE_OP_ERROR(path, "claws_fopen");
1331                 g_free(path);
1332                 /* returns default list if set, otherwise NULL */
1333                 return default_list;
1334         }
1335         g_free(path);
1336         while (claws_fgets(buf, sizeof(buf), fp) != NULL) {
1337                 g_strstrip(buf);
1338                 if (buf[0] == '\0') continue;
1339                 tmp = add_history(tmp, buf);
1340         }
1341         claws_fclose(fp);
1342
1343         tmp = g_list_reverse(tmp);
1344
1345         return tmp;
1346 }
1347
1348 /*
1349  * Read history list from the specified history file in the specified directory (subdir of rc_dir)
1350  */
1351 static GList *prefs_common_read_history_from_dir(const gchar *dirname, const gchar *history) 
1352 {
1353         return prefs_common_read_history_from_dir_with_defaults(dirname, history, NULL);
1354 }
1355
1356 /*
1357  * Read history list from the specified history file
1358  */
1359 static GList *prefs_common_read_history(const gchar *history) 
1360 {
1361         return prefs_common_read_history_from_dir(NULL, history);
1362 }
1363
1364 void prefs_common_read_config(void)
1365 {
1366         gchar *rcpath;
1367         gchar *tmp;
1368
1369         rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMON_RC, NULL);
1370         prefs_read_config(param, "Common", rcpath, NULL);
1371 #ifdef G_OS_WIN32
1372         prefs_read_config(param_os_specific, "CommonWin32", rcpath, NULL);
1373 #endif
1374
1375         g_free(rcpath);
1376
1377         tmp = g_strdup(gettext(prefs_common.date_format));
1378         g_free(prefs_common.date_format);
1379         prefs_common.date_format = tmp;
1380
1381         prefs_common.mime_open_cmd_history =
1382                 prefs_common_read_history(COMMAND_HISTORY);
1383         prefs_common.summary_quicksearch_history =
1384                 prefs_common_read_history(QUICKSEARCH_HISTORY);
1385         prefs_common.summary_search_from_history =
1386                 prefs_common_read_history(SUMMARY_SEARCH_FROM_HISTORY);
1387         prefs_common.summary_search_to_history =
1388                 prefs_common_read_history(SUMMARY_SEARCH_TO_HISTORY);
1389         prefs_common.summary_search_subject_history =
1390                 prefs_common_read_history(SUMMARY_SEARCH_SUBJECT_HISTORY);
1391         prefs_common.summary_search_body_history =
1392                 prefs_common_read_history(SUMMARY_SEARCH_BODY_HISTORY);
1393         prefs_common.summary_search_adv_condition_history =
1394                 prefs_common_read_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY);
1395         prefs_common.message_search_history =
1396                 prefs_common_read_history(MESSAGE_SEARCH_HISTORY);
1397         prefs_common.compose_save_to_history =
1398                 prefs_common_read_history(COMPOSE_SAVE_TO_HISTORY);
1399 #ifndef USE_ALT_ADDRBOOK
1400         prefs_common.addressbook_custom_attributes = addressbook_update_custom_attr_from_prefs();
1401 #endif
1402         colorlabel_update_colortable_from_prefs();
1403 }
1404
1405 #define TRY(func) \
1406 if (!(func)) \
1407 { \
1408         g_warning("failed to write"); \
1409         goto out;                       \
1410 } \
1411
1412 /*
1413  * Save history list to the specified history file in the specified directory (subdir of rc_dir)
1414  */
1415 static void prefs_common_save_history_to_dir(const gchar *dirname, const gchar *history, GList *list)
1416 {
1417         GList *cur;
1418         FILE *fp;
1419         gchar *path, *tmp_path;
1420
1421         if (dirname) {
1422                 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, dirname,
1423                                    G_DIR_SEPARATOR_S, history,
1424                                    NULL);
1425         } else {
1426         path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1427                            NULL);
1428         }
1429         tmp_path = g_strconcat(path, ".tmp", NULL);
1430
1431         if ((fp = claws_fopen(tmp_path, "wb")) == NULL) {
1432                 FILE_OP_ERROR(tmp_path, "claws_fopen");
1433                 goto out;
1434         }
1435
1436         for (cur = list; cur != NULL; cur = cur->next) {
1437                 TRY(claws_fputs((gchar *)cur->data, fp) != EOF &&
1438                     claws_fputc('\n', fp) != EOF);
1439         }
1440
1441         if (claws_safe_fclose(fp) == EOF) {
1442                 FILE_OP_ERROR(tmp_path, "claws_fclose");
1443                 fp = NULL;
1444                 goto out;
1445         }
1446         fp = NULL;
1447 #ifdef G_OS_WIN32
1448         claws_unlink(path);
1449 #endif
1450         if (g_rename(tmp_path, path) < 0) {
1451                 FILE_OP_ERROR(path, "rename");
1452                 goto out;
1453         }
1454
1455 out:
1456         if (fp)
1457                 claws_safe_fclose(fp);
1458         g_free(tmp_path);
1459         g_free(path);
1460 }
1461
1462 /*
1463  * Save history list to the specified history file
1464  */
1465 static void prefs_common_save_history(const gchar *history, GList *list)
1466 {
1467         prefs_common_save_history_to_dir(NULL, history, list);
1468 }
1469
1470 #undef TRY
1471
1472 void prefs_common_write_config(void)
1473 {
1474         prefs_write_config(param, "Common", COMMON_RC);
1475 #ifdef G_OS_WIN32
1476         prefs_write_config(param_os_specific, "CommonWin32", COMMON_RC);
1477 #endif
1478
1479         prefs_common_save_history(COMMAND_HISTORY, 
1480                 prefs_common.mime_open_cmd_history);
1481         prefs_common_save_history(QUICKSEARCH_HISTORY, 
1482                 prefs_common.summary_quicksearch_history);
1483         prefs_common_save_history(SUMMARY_SEARCH_FROM_HISTORY, 
1484                 prefs_common.summary_search_from_history);
1485         prefs_common_save_history(SUMMARY_SEARCH_TO_HISTORY, 
1486                 prefs_common.summary_search_to_history);
1487         prefs_common_save_history(SUMMARY_SEARCH_SUBJECT_HISTORY, 
1488                 prefs_common.summary_search_subject_history);
1489         prefs_common_save_history(SUMMARY_SEARCH_BODY_HISTORY, 
1490                 prefs_common.summary_search_body_history);
1491         prefs_common_save_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY, 
1492                 prefs_common.summary_search_adv_condition_history);
1493         prefs_common_save_history(MESSAGE_SEARCH_HISTORY, 
1494                 prefs_common.message_search_history);
1495         prefs_common_save_history(COMPOSE_SAVE_TO_HISTORY, 
1496                 prefs_common.compose_save_to_history);
1497
1498 #ifndef USE_ALT_ADDRBOOK
1499                 prefs_common_save_history_to_dir(ADDRBOOK_DIR,
1500                 ADDRESSBOOK_CUSTOM_ATTRIBUTES, 
1501                 prefs_common.addressbook_custom_attributes);
1502 #endif
1503 }
1504
1505 /* make a copy of string 'in' into buffer 'out'. un-escape \ sequences.
1506    both 'in' and 'out' must be non-NULL.
1507    'out' must be a pointer to a buffer whose size is at least equal
1508    to strlen(txt)+1, this buffer will get cleared. out's contents
1509    will always get set to a valid string, even if it's "".*/
1510 void pref_get_unescaped_pref(gchar *out, const gchar *in)
1511 {
1512         const gchar *i;
1513         gchar *o;
1514
1515         *out = '\0';
1516
1517         cm_return_if_fail( in != NULL );
1518         cm_return_if_fail( out != NULL );
1519
1520         i = in;
1521         o = out;
1522         memset(out, 0, strlen(in)+1);
1523         while (*i != '\0') {
1524                 if (*i == '\\' && *(i+1) == 'n') {
1525                         *o++ = '\n';
1526                         i++;
1527                 } else if (*i == '\\' && *(i+1) == 't') {
1528                         *o++ = '\t';
1529                         i++;
1530                 } else if (*i == '\\' && *(i+1) == '\\') {
1531                         *o++ = '\\';
1532                         i++;
1533                 } else {
1534                         *o++ = *i;
1535                 }
1536                 i++;
1537         }
1538         *o='\0';
1539 }
1540
1541 /* make a copy of string 'in' into buffer 'out'. escape \ sequences.
1542    both 'in' and 'out' must be non-NULL.
1543    'out' must be a pointer to a buffer whose size is at least equal
1544    to 2*strlen(txt)+1. out's contents will always get set to a valid
1545    string, even if it's "". */
1546 void pref_get_escaped_pref(gchar *out, const gchar *in)
1547 {
1548         const gchar *i;
1549         gchar *o;
1550
1551         *out = '\0';
1552
1553         cm_return_if_fail( in != NULL );
1554         cm_return_if_fail( out != NULL );
1555
1556         i = in;
1557         o = out;
1558         while (*i != '\0') {
1559                 if (*i == '\n') {
1560                         *o++ = '\\';
1561                         *o++ = 'n';
1562                 } else if (*i == '\t') {
1563                         *o++ = '\\';
1564                         *o++ = 't';
1565                 } else if (*i == '\\') {
1566                         *o++ = '\\';
1567                         *o++ = '\\';
1568                 } else {
1569                         *o++ = *i;
1570                 }
1571                 i++;
1572         }
1573         *o = '\0';
1574 }
1575                 
1576 /* set the contents of a textview widget from the internal \-escaped
1577   representation of a pref string. both txt and textview must be non-NULL. */
1578 void pref_set_textview_from_pref(GtkTextView *textview, const gchar *txt)
1579 {
1580         GtkTextBuffer *buffer;
1581         gchar *out = NULL;
1582
1583         cm_return_if_fail( textview != NULL );
1584
1585         buffer = gtk_text_view_get_buffer(textview);
1586
1587         if (!txt) {
1588                 gtk_text_buffer_set_text(buffer, "", -1);
1589         } else {
1590                 out = g_malloc(strlen(txt)+1);
1591
1592                 pref_get_unescaped_pref(out, txt);
1593
1594                 gtk_text_buffer_set_text(buffer, out, -1);
1595                 g_free(out);
1596         }
1597 }
1598
1599 /* set the contents of a gtkentry widget from the internal \-escaped
1600   representation of a pref string. both txt and entry must be non-NULL. */
1601 void pref_set_entry_from_pref(GtkEntry *entry, const gchar *txt)
1602 {
1603         gchar *out = NULL;
1604
1605         cm_return_if_fail( entry != NULL );
1606         if (!txt) {
1607                 gtk_entry_set_text(entry, "");
1608         } else {
1609                 out = g_malloc(strlen(txt)+1);
1610
1611                 pref_get_unescaped_pref(out, txt);
1612
1613                 gtk_entry_set_text(entry, out);
1614                 g_free(out);
1615         }
1616 }
1617
1618 /* get the \-escaped internal representation of a pref from the contents of
1619    a textview widget. textview must be non-NULL. */
1620 gchar *pref_get_pref_from_textview(GtkTextView *textview) 
1621 {
1622         GtkTextBuffer *buffer;
1623         GtkTextIter start, end;
1624         gchar *out, *tmp;
1625         
1626         cm_return_val_if_fail( textview != NULL, "" );
1627
1628         buffer = gtk_text_view_get_buffer(textview);
1629         gtk_text_buffer_get_start_iter(buffer, &start);
1630         gtk_text_buffer_get_iter_at_offset(buffer, &end, -1);
1631         tmp = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
1632         out = malloc(2*strlen(tmp)+1);
1633         if (out)
1634                 pref_get_escaped_pref(out, tmp);
1635         g_free(tmp);
1636
1637         return out?out:"";
1638 }
1639
1640 /* get the \-escaped internal representation of a pref from the contents of
1641    a gtkentry widget. entry must be non-NULL. */
1642 gchar *pref_get_pref_from_entry(GtkEntry *entry) 
1643 {
1644         gchar *out, *tmp;
1645
1646         cm_return_val_if_fail( entry != NULL, "" );
1647
1648         tmp = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
1649         out = malloc(2*strlen(tmp)+1);
1650         
1651         if (out)
1652                 pref_get_escaped_pref(out, tmp);
1653         g_free(tmp);
1654
1655         return out?out:"";
1656 }
1657
1658 /* ugly hack to be able to get this pref from ssl_certificate.c */
1659 gboolean prefs_common_unsafe_ssl_certs(void)
1660 {
1661         return prefs_common.unsafe_ssl_certs;
1662 }
1663
1664 gboolean prefs_common_enable_log_standard(void)
1665 {
1666         return prefs_common.enable_log_standard;
1667 }
1668
1669 gboolean prefs_common_enable_log_warning(void)
1670 {
1671         return prefs_common.enable_log_warning;
1672 }
1673 gboolean prefs_common_enable_log_error(void)
1674 {
1675         return prefs_common.enable_log_error;
1676 }
1677 gboolean prefs_common_enable_log_status(void)
1678 {
1679         return prefs_common.enable_log_status;
1680 }
1681
1682 /**
1683    return the translated name of a header, if the translate_header option is
1684    set, otherwise return the untranslated header name (header_name itself).
1685    this function is provided for convenience, it's an interface to
1686    prefs_common.trans_hdr.
1687    works with header names either with or without trailing colon, provided
1688    that gettext found such header name in the sources (they should all be
1689    found in src/gtk/headers.h anyway).
1690 */
1691 const gchar *prefs_common_translated_header_name(const gchar *header_name)
1692 {
1693         if (header_name == NULL || *header_name == '\0')
1694                 return header_name;
1695
1696         return prefs_common.trans_hdr ? gettext(header_name) : header_name;
1697 }
1698
1699 const gchar *prefs_common_get_uri_cmd(void)
1700 {
1701 #ifdef G_OS_WIN32
1702         return NULL;
1703 #else
1704         gchar *tmp = NULL;
1705         
1706         if (!prefs_common.cmds_use_system_default)
1707                 return prefs_common.uri_cmd;
1708         
1709         tmp = g_find_program_in_path("xdg-open");
1710         if (!tmp) 
1711                 return prefs_common.uri_cmd;
1712         
1713         g_free(tmp);
1714         return "xdg-open %s";
1715 #endif
1716 }
1717
1718 const gchar *prefs_common_get_ext_editor_cmd(void)
1719 {
1720         return prefs_common.ext_editor_cmd;
1721 #if 0 /* we should do that, but it detaches the editor and breaks
1722          compose.c's external composition. */
1723         gchar *tmp = NULL;
1724         
1725         if (!prefs_common.cmds_use_system_default)
1726                 return prefs_common.ext_editor_cmd;
1727         
1728         tmp = g_find_program_in_path("xdg-open");
1729         if (!tmp) 
1730                 return prefs_common.ext_editor_cmd;
1731         
1732         g_free(tmp);
1733         return "xdg-open %s";
1734 #endif 
1735 }
1736
1737 gboolean prefs_common_get_use_shred(void)
1738 {
1739         return prefs_common.use_shred;
1740 }
1741
1742 gboolean prefs_common_get_flush_metadata (void)
1743 {
1744         return prefs_common.flush_metadata;
1745 }
1746
1747 PrefsCommon *prefs_common_get_prefs(void)
1748 {
1749         return &prefs_common;
1750 }