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