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