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