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