Added header popup menu to summaryview, with two menuitems.
[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         {"addressbookwin_width", "520", &prefs_common.addressbookwin_width, P_INT,
1061          NULL, NULL, NULL},
1062         {"addressbookwin_height", "-1", &prefs_common.addressbookwin_height, P_INT,
1063          NULL, NULL, NULL},
1064
1065         {"addressbookeditpersonwin_width", "640", &prefs_common.addressbookeditpersonwin_width, P_INT,
1066          NULL, NULL, NULL},
1067         {"addressbookeditpersonwin_height", "320", &prefs_common.addressbookeditpersonwin_height, P_INT,
1068          NULL, NULL, NULL},
1069
1070         {"addressbookeditgroupwin_width", "580", &prefs_common.addressbookeditgroupwin_width, P_INT,
1071          NULL, NULL, NULL},
1072         {"addressbookeditgroupwin_height", "340", &prefs_common.addressbookeditgroupwin_height, P_INT,
1073          NULL, NULL, NULL},
1074
1075         {"pluginswin_width", "-1", &prefs_common.pluginswin_width, P_INT,
1076          NULL, NULL, NULL},
1077         {"pluginswin_height", "-1", &prefs_common.pluginswin_height, P_INT,
1078          NULL, NULL, NULL},
1079
1080         {"prefswin_width", "600", &prefs_common.prefswin_width, P_INT,
1081          NULL, NULL, NULL},
1082         {"prefswin_height", "-1", &prefs_common.prefswin_height, P_INT,
1083          NULL, NULL, NULL},
1084
1085         {"folderitemwin_width", "500", &prefs_common.folderitemwin_width, P_INT,
1086          NULL, NULL, NULL},
1087         {"folderitemwin_height", "-1", &prefs_common.folderitemwin_height, P_INT,
1088          NULL, NULL, NULL},
1089
1090         {"zero_replacement_char", "0", &prefs_common.zero_replacement, P_STRING,
1091          NULL, NULL, NULL},
1092
1093         {"editaccountwin_width", "500", &prefs_common.editaccountwin_width, P_INT,
1094          NULL, NULL, NULL},
1095         {"editaccountwin_height", "-1", &prefs_common.editaccountwin_height, P_INT,
1096          NULL, NULL, NULL},
1097
1098         {"accountswin_width", "500", &prefs_common.accountswin_width, P_INT,
1099          NULL, NULL, NULL},
1100         {"accountswin_height", "-1", &prefs_common.accountswin_height, P_INT,
1101          NULL, NULL, NULL},
1102
1103         {"logwin_width", "520", &prefs_common.logwin_width, P_INT,
1104          NULL, NULL, NULL},
1105         {"logwin_height", "-1", &prefs_common.logwin_height, P_INT,
1106          NULL, NULL, NULL},
1107
1108         {"filtering_debugwin_width", "600", &prefs_common.filtering_debugwin_width, P_INT,
1109          NULL, NULL, NULL},
1110         {"filtering_debugwin_height", "-1", &prefs_common.filtering_debugwin_height, P_INT,
1111          NULL, NULL, NULL},
1112
1113         {"folderselwin_width", "300", &prefs_common.folderselwin_width, P_INT,
1114          NULL, NULL, NULL},
1115         {"folderselwin_height", "-1", &prefs_common.folderselwin_height, P_INT,
1116          NULL, NULL, NULL},
1117
1118         {"addressaddwin_width", "300", &prefs_common.addressaddwin_width, P_INT,
1119          NULL, NULL, NULL},
1120         {"addressaddwin_height", "-1", &prefs_common.addressaddwin_height, P_INT,
1121          NULL, NULL, NULL},
1122
1123         {"addressbook_folderselwin_width", "300", &prefs_common.addressbook_folderselwin_width, P_INT,
1124          NULL, NULL, NULL},
1125         {"addressbook_folderselwin_height", "-1", &prefs_common.addressbook_folderselwin_height, P_INT,
1126          NULL, NULL, NULL},
1127
1128         {"aboutwin_width", "450", &prefs_common.aboutwin_width, P_INT,
1129          NULL, NULL, NULL},
1130         {"aboutwin_height", "500", &prefs_common.aboutwin_height, P_INT,
1131          NULL, NULL, NULL},
1132
1133         {"addrgather_width", "450", &prefs_common.addrgather_width, P_INT,
1134          NULL, NULL, NULL},
1135         {"addrgather_height", "-1", &prefs_common.addrgather_height, P_INT,
1136          NULL, NULL, NULL},
1137
1138         {"news_subscribe_width", "450", &prefs_common.news_subscribe_width, P_INT,
1139          NULL, NULL, NULL},
1140         {"news_subscribe_height", "400", &prefs_common.news_subscribe_height, P_INT,
1141          NULL, NULL, NULL},
1142
1143         /* Hidden */
1144         {"warn_dnd", "1", &prefs_common.warn_dnd, P_INT,
1145          NULL, NULL, NULL},
1146         {"utf8_instead_of_locale_for_broken_mail", "0", 
1147          &prefs_common.broken_are_utf8, P_INT,
1148          NULL, NULL, NULL},
1149         {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
1150          NULL, NULL, NULL},
1151         {"use_stripes_everywhere", "TRUE", &prefs_common.use_stripes_everywhere, P_BOOL,
1152          NULL, NULL, NULL},
1153         {"use_stripes_in_summaries", "TRUE", &prefs_common.use_stripes_in_summaries, P_BOOL,
1154          NULL, NULL, NULL},
1155         {"stripes_color_offset", "4000", &prefs_common.stripes_color_offset, P_INT,
1156          NULL, NULL, NULL},
1157         {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
1158          NULL, NULL, NULL},
1159         {"folderview_vscrollbar_policy", "0",
1160          &prefs_common.folderview_vscrollbar_policy, P_ENUM,
1161          NULL, NULL, NULL},
1162         {"textview_cursor_visible", "FALSE",
1163          &prefs_common.textview_cursor_visible, P_BOOL,
1164          NULL, NULL, NULL},
1165         {"hover_timeout", "500", &prefs_common.hover_timeout, P_INT,
1166          NULL, NULL, NULL},
1167 #ifndef GENERIC_UMPC
1168         {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
1169          NULL, NULL, NULL},
1170         {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
1171          NULL, NULL, NULL},
1172 #else
1173         {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
1174          NULL, NULL, NULL},
1175         {"cache_min_keep_time", "0", &prefs_common.cache_min_keep_time, P_INT,
1176          NULL, NULL, NULL},
1177 #endif
1178         {"thread_by_subject_max_age", "10", &prefs_common.thread_by_subject_max_age,
1179         P_INT, NULL, NULL, NULL },
1180         {"last_opened_folder", "", &prefs_common.last_opened_folder,
1181         P_STRING, NULL, NULL, NULL },
1182         {"goto_last_folder_on_startup", "FALSE", &prefs_common.goto_last_folder_on_startup,
1183         P_BOOL, NULL, NULL, NULL },
1184         {"summary_quicksearch_sticky", "1", &prefs_common.summary_quicksearch_sticky, P_INT,
1185          NULL, NULL, NULL},
1186         {"summary_quicksearch_dynamic", "0", &prefs_common.summary_quicksearch_dynamic, P_INT,
1187          NULL, NULL, NULL},
1188         {"summary_quicksearch_autorun", "0", &prefs_common.summary_quicksearch_autorun, P_INT,
1189          NULL, NULL, NULL},
1190         {"statusbar_update_step", "10", &prefs_common.statusbar_update_step, P_INT,
1191          NULL, NULL, NULL},
1192         {"compose_no_markup", "FALSE", &prefs_common.compose_no_markup, P_BOOL,
1193          NULL, NULL, NULL},
1194         {"skip_ssl_cert_check", "FALSE", &prefs_common.skip_ssl_cert_check, P_BOOL,
1195          NULL, NULL, NULL},
1196         {"live_dangerously", "FALSE", &prefs_common.live_dangerously, P_BOOL,
1197          NULL, NULL, NULL},
1198         {"save_parts_readwrite", "FALSE", &prefs_common.save_parts_readwrite, P_BOOL,
1199          NULL, NULL, NULL},
1200         {"hide_quotes", "0", &prefs_common.hide_quotes, P_INT,
1201          NULL, NULL, NULL},
1202         {"unsafe_ssl_certs", "FALSE", &prefs_common.unsafe_ssl_certs, P_BOOL,
1203          NULL, NULL, NULL},
1204 #ifndef GENERIC_UMPC
1205         {"real_time_sync", "FALSE", &prefs_common.real_time_sync, P_BOOL,
1206          NULL, NULL, NULL},
1207 #else
1208         {"real_time_sync", "TRUE", &prefs_common.real_time_sync, P_BOOL,
1209          NULL, NULL, NULL},
1210 #endif
1211
1212         {"print_paper_type", NULL, &prefs_common.print_paper_type, P_STRING,
1213          NULL, NULL, NULL},
1214         {"print_paper_orientation", "0", &prefs_common.print_paper_orientation, P_INT,
1215          NULL, NULL, NULL},
1216         {"print_margin_top", "-1", &prefs_common.print_margin_top, P_INT,
1217          NULL, NULL, NULL},
1218         {"print_margin_bottom", "-1", &prefs_common.print_margin_bottom, P_INT,
1219          NULL, NULL, NULL},
1220         {"print_margin_left", "-1", &prefs_common.print_margin_left, P_INT,
1221          NULL, NULL, NULL},
1222         {"print_margin_right", "-1", &prefs_common.print_margin_right, P_INT,
1223          NULL, NULL, NULL},
1224         {"print_use_color", "0", &prefs_common.print_use_color, P_INT,
1225          NULL, NULL, NULL},
1226         {"print_use_collate", "0", &prefs_common.print_use_collate, P_INT,
1227          NULL, NULL, NULL},
1228         {"print_use_reverse", "0", &prefs_common.print_use_reverse, P_INT,
1229          NULL, NULL, NULL},
1230         {"print_use_duplex", "0", &prefs_common.print_use_duplex, P_INT,
1231          NULL, NULL, NULL},
1232         {"print_imgs", "1", &prefs_common.print_imgs, P_INT,
1233          NULL, NULL, NULL},
1234         {"print_previewwin_width", "600", &prefs_common.print_previewwin_width, P_INT,
1235          NULL, NULL, NULL},
1236         {"print_previewwin_height", "-1", &prefs_common.print_previewwin_height, P_INT,
1237          NULL, NULL, NULL},
1238         {"use_networkmanager", "TRUE", &prefs_common.use_networkmanager, P_BOOL,
1239          NULL, NULL, NULL},
1240         {"use_shred", "FALSE", &prefs_common.use_shred, P_BOOL,
1241          NULL, NULL, NULL},
1242
1243         {"two_line_vertical", "TRUE", &prefs_common.two_line_vert,
1244         P_BOOL, NULL, NULL, NULL },
1245
1246         {"inherit_folder_properties", "FALSE", &prefs_common.inherit_folder_props, P_BOOL,
1247          NULL, NULL, NULL},
1248
1249         {"flush_metadata", "TRUE", &prefs_common.flush_metadata, P_BOOL,
1250          NULL, NULL, NULL},
1251
1252         {"nav_history_length", "50", &prefs_common.nav_history_length, P_INT,
1253          NULL, NULL, NULL},
1254
1255         {"diff_added_color", "#008b8b", &prefs_common.color[COL_DIFF_ADDED],
1256          P_COLOR, NULL, NULL, NULL},
1257         {"diff_deleted_color", "#6a5acd", &prefs_common.color[COL_DIFF_DELETED],
1258          P_COLOR, NULL, NULL, NULL},
1259         {"diff_hunk_color", "#a52a2a", &prefs_common.color[COL_DIFF_HUNK],
1260          P_COLOR, NULL, NULL, NULL},
1261
1262         {"folder_search_wildcard", "TRUE", &prefs_common.folder_search_wildcard, P_BOOL,
1263          NULL, NULL, NULL},
1264         {"address_search_wildcard", "TRUE", &prefs_common.address_search_wildcard, P_BOOL,
1265          NULL, NULL, NULL},
1266         {"enable_avatars", "3", &prefs_common.enable_avatars, P_INT, NULL, NULL, NULL},
1267 #ifndef PASSWORD_CRYPTO_OLD
1268         {"use_master_passphrase", FALSE, &prefs_common.use_master_passphrase, P_BOOL, NULL, NULL, NULL },
1269         {"master_passphrase", "", &prefs_common.master_passphrase, P_STRING, NULL, NULL, NULL },
1270         {"master_passphrase_salt", "", &prefs_common.master_passphrase_salt, P_STRING, NULL, NULL, NULL },
1271         {"master_passphrase_pbkdf2_rounds", "50000", &prefs_common.master_passphrase_pbkdf2_rounds, P_INT, NULL, NULL, NULL},
1272 #endif
1273
1274         {"use_proxy", "FALSE", &prefs_common.use_proxy, P_BOOL, NULL, NULL, NULL},
1275         {"proxy_type", "1", &prefs_common.proxy_info.proxy_type, P_ENUM, NULL, NULL, NULL},
1276         {"proxy_host", "localhost", &prefs_common.proxy_info.proxy_host, P_STRING, NULL, NULL, NULL},
1277         {"proxy_port", "1080", &prefs_common.proxy_info.proxy_port, P_USHORT, NULL, NULL, NULL},
1278         {"use_proxy_auth", "FALSE", &prefs_common.proxy_info.use_proxy_auth, P_BOOL, NULL, NULL, NULL},
1279         {"proxy_name", "", &prefs_common.proxy_info.proxy_name, P_STRING, NULL, NULL, NULL},
1280         {"proxy_pass", NULL, &prefs_common.proxy_info.proxy_pass, P_STRING, NULL, NULL, NULL},
1281
1282         {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
1283 };
1284
1285 /*
1286  * Read history list from the specified history file in the specified directory (subdir of rc_dir)
1287  * Fallback to default_list if history file is not found
1288  */
1289 GList *prefs_common_read_history_from_dir_with_defaults(const gchar *dirname, const gchar *history,
1290                                                                                                                           GList *default_list)
1291 {
1292         FILE *fp;
1293         gchar *path;
1294         gchar buf[PREFSBUFSIZE];
1295         GList *tmp = NULL;
1296
1297         if (dirname) {
1298                 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, dirname,
1299                                    G_DIR_SEPARATOR_S, history,
1300                                    NULL);
1301         } else {
1302         path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1303                            NULL);
1304         }
1305         if ((fp = claws_fopen(path, "rb")) == NULL) {
1306                 if (ENOENT != errno) FILE_OP_ERROR(path, "claws_fopen");
1307                 g_free(path);
1308                 /* returns default list if set, otherwise NULL */
1309                 return default_list;
1310         }
1311         g_free(path);
1312         while (claws_fgets(buf, sizeof(buf), fp) != NULL) {
1313                 g_strstrip(buf);
1314                 if (buf[0] == '\0') continue;
1315                 tmp = add_history(tmp, buf);
1316         }
1317         claws_fclose(fp);
1318
1319         tmp = g_list_reverse(tmp);
1320
1321         return tmp;
1322 }
1323
1324 /*
1325  * Read history list from the specified history file in the specified directory (subdir of rc_dir)
1326  */
1327 static GList *prefs_common_read_history_from_dir(const gchar *dirname, const gchar *history) 
1328 {
1329         return prefs_common_read_history_from_dir_with_defaults(dirname, history, NULL);
1330 }
1331
1332 /*
1333  * Read history list from the specified history file
1334  */
1335 static GList *prefs_common_read_history(const gchar *history) 
1336 {
1337         return prefs_common_read_history_from_dir(NULL, history);
1338 }
1339
1340 void prefs_common_read_config(void)
1341 {
1342         gchar *rcpath;
1343         gchar *tmp;
1344
1345         rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMON_RC, NULL);
1346         prefs_read_config(param, "Common", rcpath, NULL);
1347 #ifdef G_OS_WIN32
1348         prefs_read_config(param_os_specific, "CommonWin32", rcpath, NULL);
1349 #endif
1350
1351         g_free(rcpath);
1352
1353         tmp = g_strdup(gettext(prefs_common.date_format));
1354         g_free(prefs_common.date_format);
1355         prefs_common.date_format = tmp;
1356
1357         prefs_common.mime_open_cmd_history =
1358                 prefs_common_read_history(COMMAND_HISTORY);
1359         prefs_common.summary_quicksearch_history =
1360                 prefs_common_read_history(QUICKSEARCH_HISTORY);
1361         prefs_common.summary_search_from_history =
1362                 prefs_common_read_history(SUMMARY_SEARCH_FROM_HISTORY);
1363         prefs_common.summary_search_to_history =
1364                 prefs_common_read_history(SUMMARY_SEARCH_TO_HISTORY);
1365         prefs_common.summary_search_subject_history =
1366                 prefs_common_read_history(SUMMARY_SEARCH_SUBJECT_HISTORY);
1367         prefs_common.summary_search_body_history =
1368                 prefs_common_read_history(SUMMARY_SEARCH_BODY_HISTORY);
1369         prefs_common.summary_search_adv_condition_history =
1370                 prefs_common_read_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY);
1371         prefs_common.message_search_history =
1372                 prefs_common_read_history(MESSAGE_SEARCH_HISTORY);
1373         prefs_common.compose_save_to_history =
1374                 prefs_common_read_history(COMPOSE_SAVE_TO_HISTORY);
1375 #ifndef USE_ALT_ADDRBOOK
1376         prefs_common.addressbook_custom_attributes = addressbook_update_custom_attr_from_prefs();
1377 #endif
1378         colorlabel_update_colortable_from_prefs();
1379 }
1380
1381 #define TRY(func) \
1382 if (!(func)) \
1383 { \
1384         g_warning("failed to write"); \
1385         goto out;                       \
1386 } \
1387
1388 /*
1389  * Save history list to the specified history file in the specified directory (subdir of rc_dir)
1390  */
1391 static void prefs_common_save_history_to_dir(const gchar *dirname, const gchar *history, GList *list)
1392 {
1393         GList *cur;
1394         FILE *fp;
1395         gchar *path, *tmp_path;
1396
1397         if (dirname) {
1398                 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, dirname,
1399                                    G_DIR_SEPARATOR_S, history,
1400                                    NULL);
1401         } else {
1402         path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1403                            NULL);
1404         }
1405         tmp_path = g_strconcat(path, ".tmp", NULL);
1406
1407         if ((fp = claws_fopen(tmp_path, "wb")) == NULL) {
1408                 FILE_OP_ERROR(tmp_path, "claws_fopen");
1409                 goto out;
1410         }
1411
1412         for (cur = list; cur != NULL; cur = cur->next) {
1413                 TRY(claws_fputs((gchar *)cur->data, fp) != EOF &&
1414                     claws_fputc('\n', fp) != EOF);
1415         }
1416
1417         if (claws_safe_fclose(fp) == EOF) {
1418                 FILE_OP_ERROR(tmp_path, "claws_fclose");
1419                 fp = NULL;
1420                 goto out;
1421         }
1422         fp = NULL;
1423 #ifdef G_OS_WIN32
1424         claws_unlink(path);
1425 #endif
1426         if (g_rename(tmp_path, path) < 0) {
1427                 FILE_OP_ERROR(path, "rename");
1428                 goto out;
1429         }
1430
1431 out:
1432         if (fp)
1433                 claws_safe_fclose(fp);
1434         g_free(tmp_path);
1435         g_free(path);
1436 }
1437
1438 /*
1439  * Save history list to the specified history file
1440  */
1441 static void prefs_common_save_history(const gchar *history, GList *list)
1442 {
1443         prefs_common_save_history_to_dir(NULL, history, list);
1444 }
1445
1446 #undef TRY
1447
1448 void prefs_common_write_config(void)
1449 {
1450         prefs_write_config(param, "Common", COMMON_RC);
1451 #ifdef G_OS_WIN32
1452         prefs_write_config(param_os_specific, "CommonWin32", COMMON_RC);
1453 #endif
1454
1455         prefs_common_save_history(COMMAND_HISTORY, 
1456                 prefs_common.mime_open_cmd_history);
1457         prefs_common_save_history(QUICKSEARCH_HISTORY, 
1458                 prefs_common.summary_quicksearch_history);
1459         prefs_common_save_history(SUMMARY_SEARCH_FROM_HISTORY, 
1460                 prefs_common.summary_search_from_history);
1461         prefs_common_save_history(SUMMARY_SEARCH_TO_HISTORY, 
1462                 prefs_common.summary_search_to_history);
1463         prefs_common_save_history(SUMMARY_SEARCH_SUBJECT_HISTORY, 
1464                 prefs_common.summary_search_subject_history);
1465         prefs_common_save_history(SUMMARY_SEARCH_BODY_HISTORY, 
1466                 prefs_common.summary_search_body_history);
1467         prefs_common_save_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY, 
1468                 prefs_common.summary_search_adv_condition_history);
1469         prefs_common_save_history(MESSAGE_SEARCH_HISTORY, 
1470                 prefs_common.message_search_history);
1471         prefs_common_save_history(COMPOSE_SAVE_TO_HISTORY, 
1472                 prefs_common.compose_save_to_history);
1473
1474 #ifndef USE_ALT_ADDRBOOK
1475                 prefs_common_save_history_to_dir(ADDRBOOK_DIR,
1476                 ADDRESSBOOK_CUSTOM_ATTRIBUTES, 
1477                 prefs_common.addressbook_custom_attributes);
1478 #endif
1479 }
1480
1481 /* make a copy of string 'in' into buffer 'out'. un-escape \ sequences.
1482    both 'in' and 'out' must be non-NULL.
1483    'out' must be a pointer to a buffer whose size is at least equal
1484    to strlen(txt)+1, this buffer will get cleared. out's contents
1485    will always get set to a valid string, even if it's "".*/
1486 void pref_get_unescaped_pref(gchar *out, const gchar *in)
1487 {
1488         const gchar *i;
1489         gchar *o;
1490
1491         *out = '\0';
1492
1493         cm_return_if_fail( in != NULL );
1494         cm_return_if_fail( out != NULL );
1495
1496         i = in;
1497         o = out;
1498         memset(out, 0, strlen(in)+1);
1499         while (*i != '\0') {
1500                 if (*i == '\\' && *(i+1) == 'n') {
1501                         *o++ = '\n';
1502                         i++;
1503                 } else if (*i == '\\' && *(i+1) == 't') {
1504                         *o++ = '\t';
1505                         i++;
1506                 } else if (*i == '\\' && *(i+1) == '\\') {
1507                         *o++ = '\\';
1508                         i++;
1509                 } else {
1510                         *o++ = *i;
1511                 }
1512                 i++;
1513         }
1514         *o='\0';
1515 }
1516
1517 /* make a copy of string 'in' into buffer 'out'. escape \ sequences.
1518    both 'in' and 'out' must be non-NULL.
1519    'out' must be a pointer to a buffer whose size is at least equal
1520    to 2*strlen(txt)+1. out's contents will always get set to a valid
1521    string, even if it's "". */
1522 void pref_get_escaped_pref(gchar *out, const gchar *in)
1523 {
1524         const gchar *i;
1525         gchar *o;
1526
1527         *out = '\0';
1528
1529         cm_return_if_fail( in != NULL );
1530         cm_return_if_fail( out != NULL );
1531
1532         i = in;
1533         o = out;
1534         while (*i != '\0') {
1535                 if (*i == '\n') {
1536                         *o++ = '\\';
1537                         *o++ = 'n';
1538                 } else if (*i == '\t') {
1539                         *o++ = '\\';
1540                         *o++ = 't';
1541                 } else if (*i == '\\') {
1542                         *o++ = '\\';
1543                         *o++ = '\\';
1544                 } else {
1545                         *o++ = *i;
1546                 }
1547                 i++;
1548         }
1549         *o = '\0';
1550 }
1551                 
1552 /* set the contents of a textview widget from the internal \-escaped
1553   representation of a pref string. both txt and textview must be non-NULL. */
1554 void pref_set_textview_from_pref(GtkTextView *textview, const gchar *txt)
1555 {
1556         GtkTextBuffer *buffer;
1557         gchar *out = NULL;
1558
1559         cm_return_if_fail( textview != NULL );
1560
1561         buffer = gtk_text_view_get_buffer(textview);
1562
1563         if (!txt) {
1564                 gtk_text_buffer_set_text(buffer, "", -1);
1565         } else {
1566                 out = g_malloc(strlen(txt)+1);
1567
1568                 pref_get_unescaped_pref(out, txt);
1569
1570                 gtk_text_buffer_set_text(buffer, out, -1);
1571                 g_free(out);
1572         }
1573 }
1574
1575 /* set the contents of a gtkentry widget from the internal \-escaped
1576   representation of a pref string. both txt and entry must be non-NULL. */
1577 void pref_set_entry_from_pref(GtkEntry *entry, const gchar *txt)
1578 {
1579         gchar *out = NULL;
1580
1581         cm_return_if_fail( entry != NULL );
1582         if (!txt) {
1583                 gtk_entry_set_text(entry, "");
1584         } else {
1585                 out = g_malloc(strlen(txt)+1);
1586
1587                 pref_get_unescaped_pref(out, txt);
1588
1589                 gtk_entry_set_text(entry, out);
1590                 g_free(out);
1591         }
1592 }
1593
1594 /* get the \-escaped internal representation of a pref from the contents of
1595    a textview widget. textview must be non-NULL. */
1596 gchar *pref_get_pref_from_textview(GtkTextView *textview) 
1597 {
1598         GtkTextBuffer *buffer;
1599         GtkTextIter start, end;
1600         gchar *out, *tmp;
1601         
1602         cm_return_val_if_fail( textview != NULL, "" );
1603
1604         buffer = gtk_text_view_get_buffer(textview);
1605         gtk_text_buffer_get_start_iter(buffer, &start);
1606         gtk_text_buffer_get_iter_at_offset(buffer, &end, -1);
1607         tmp = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
1608         out = malloc(2*strlen(tmp)+1);
1609         if (out)
1610                 pref_get_escaped_pref(out, tmp);
1611         g_free(tmp);
1612
1613         return out?out:"";
1614 }
1615
1616 /* get the \-escaped internal representation of a pref from the contents of
1617    a gtkentry widget. entry must be non-NULL. */
1618 gchar *pref_get_pref_from_entry(GtkEntry *entry) 
1619 {
1620         gchar *out, *tmp;
1621
1622         cm_return_val_if_fail( entry != NULL, "" );
1623
1624         tmp = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
1625         out = malloc(2*strlen(tmp)+1);
1626         
1627         if (out)
1628                 pref_get_escaped_pref(out, tmp);
1629         g_free(tmp);
1630
1631         return out?out:"";
1632 }
1633
1634 /* ugly hack to be able to get this pref from ssl_certificate.c */
1635 gboolean prefs_common_unsafe_ssl_certs(void)
1636 {
1637         return prefs_common.unsafe_ssl_certs;
1638 }
1639
1640 gboolean prefs_common_enable_log_standard(void)
1641 {
1642         return prefs_common.enable_log_standard;
1643 }
1644
1645 gboolean prefs_common_enable_log_warning(void)
1646 {
1647         return prefs_common.enable_log_warning;
1648 }
1649 gboolean prefs_common_enable_log_error(void)
1650 {
1651         return prefs_common.enable_log_error;
1652 }
1653 gboolean prefs_common_enable_log_status(void)
1654 {
1655         return prefs_common.enable_log_status;
1656 }
1657
1658 /**
1659    return the translated name of a header, if the translate_header option is
1660    set, otherwise return the untranslated header name (header_name itself).
1661    this function is provided for convenience, it's an interface to
1662    prefs_common.trans_hdr.
1663    works with header names either with or without trailing colon, provided
1664    that gettext found such header name in the sources (they should all be
1665    found in src/gtk/headers.h anyway).
1666 */
1667 const gchar *prefs_common_translated_header_name(const gchar *header_name)
1668 {
1669         if (header_name == NULL || *header_name == '\0')
1670                 return header_name;
1671
1672         return prefs_common.trans_hdr ? gettext(header_name) : header_name;
1673 }
1674
1675 const gchar *prefs_common_get_uri_cmd(void)
1676 {
1677 #ifdef G_OS_WIN32
1678         return NULL;
1679 #else
1680         gchar *tmp = NULL;
1681         
1682         if (!prefs_common.cmds_use_system_default)
1683                 return prefs_common.uri_cmd;
1684         
1685         tmp = g_find_program_in_path("xdg-open");
1686         if (!tmp) 
1687                 return prefs_common.uri_cmd;
1688         
1689         g_free(tmp);
1690         return "xdg-open %s";
1691 #endif
1692 }
1693
1694 const gchar *prefs_common_get_ext_editor_cmd(void)
1695 {
1696         return prefs_common.ext_editor_cmd;
1697 #if 0 /* we should do that, but it detaches the editor and breaks
1698          compose.c's external composition. */
1699         gchar *tmp = NULL;
1700         
1701         if (!prefs_common.cmds_use_system_default)
1702                 return prefs_common.ext_editor_cmd;
1703         
1704         tmp = g_find_program_in_path("xdg-open");
1705         if (!tmp) 
1706                 return prefs_common.ext_editor_cmd;
1707         
1708         g_free(tmp);
1709         return "xdg-open %s";
1710 #endif 
1711 }
1712
1713 gboolean prefs_common_get_use_shred(void)
1714 {
1715         return prefs_common.use_shred;
1716 }
1717
1718 gboolean prefs_common_get_flush_metadata (void)
1719 {
1720         return prefs_common.flush_metadata;
1721 }
1722
1723 PrefsCommon *prefs_common_get_prefs(void)
1724 {
1725         return &prefs_common;
1726 }