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