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