2 * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3 * Copyright (C) 1999-2007 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/>.
27 #include <glib/gi18n.h>
29 #include <gdk/gdkkeysyms.h>
34 #include <sys/types.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"
54 #include "alertpanel.h"
58 #include "folderview.h"
59 #include "stock_pixmap.h"
60 #include "prefswindow.h"
61 #include "colorlabel.h"
69 PrefsCommon prefs_common;
75 * In the Windows version prefs_common contains
76 * - the non-OS-specific settings of the "Common" section and
77 * - the OS-specific settings of the "CommonWin32" section
78 * The OS-specific settings of the "Common" section are not used
79 * but saved in prefs_unix.
82 # define SPECIFIC_PREFS prefs_unix
84 static PrefsCommon prefs_unix;
86 static PrefParam param_os_specific[] = {
89 &prefs_common.extinc_cmd, P_STRING, NULL, NULL, NULL},
90 {"newmail_notify_cmd", "",
91 &prefs_common.newmail_notify_cmd, P_STRING, NULL, NULL, NULL},
94 {"widget_font_gtk2", NULL,
95 &prefs_common.widgetfont, P_STRING, NULL, NULL, NULL},
96 {"message_font_gtk2", "Monospace 9",
97 &prefs_common.textfont, P_STRING, NULL, NULL, NULL},
98 {"print_font_gtk2", "Monospace 9",
99 &prefs_common.printfont, P_STRING, NULL, NULL, NULL},
100 {"small_font_gtk2", "Sans 9",
101 &prefs_common.smallfont, P_STRING, NULL, NULL, NULL},
102 {"normal_font_gtk2", "Sans 9",
103 &prefs_common.normalfont, P_STRING, NULL, NULL, NULL},
105 {"attach_save_directory", NULL,
106 &prefs_common.attach_save_dir, P_STRING, NULL, NULL, NULL},
107 {"attach_load_directory", NULL,
108 &prefs_common.attach_load_dir, P_STRING, NULL, NULL, NULL},
111 {"mime_textviewer", NULL,
112 &prefs_common.mime_textviewer, P_STRING, NULL, NULL, NULL},
113 {"mime_open_command", "notepad '%s'",
114 &prefs_common.mime_open_cmd, P_STRING, NULL, NULL, NULL},
117 {"pixmap_theme_path", DEFAULT_PIXMAP_THEME,
118 &prefs_common.pixmap_theme_path, P_STRING, NULL, NULL, NULL},
121 {"uri_open_command", NULL,
122 &prefs_common.uri_cmd, P_STRING, NULL, NULL, NULL},
123 {"print_command", "notepad /p %s",
124 &prefs_common.print_cmd, P_STRING, NULL, NULL, NULL},
125 {"ext_editor_command", "notepad %s",
126 &prefs_common.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
128 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
131 # define SPECIFIC_PREFS prefs_common
135 parameter name, default value, pointer to the prefs variable, data type,
136 pointer to the widget pointer,
137 pointer to the function for data setting,
138 pointer to the function for widget setting
141 static PrefParam param[] = {
143 {"data_root", "", &prefs_common.data_root, P_STRING,
147 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
149 {"ext_inc_path", DEFAULT_INC_PATH, &SPECIFIC_PREFS.extinc_cmd, P_STRING,
152 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
154 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
156 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
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,
169 {"maemo_play_sound", "FALSE", &prefs_common.maemo_play_sound, P_BOOL,
171 {"maemo_show_banner", "FALSE", &prefs_common.maemo_show_banner, P_BOOL,
174 {"receive_dialog_mode", "2", &prefs_common.recv_dialog_mode, P_ENUM,
176 {"receivewin_width", "460", &prefs_common.receivewin_width, P_INT,
178 {"receivewin_height", "-1", &prefs_common.receivewin_height, P_INT,
180 {"no_receive_error_panel", "FALSE", &prefs_common.no_recv_err_panel,
181 P_BOOL, NULL, NULL, NULL},
182 {"close_receive_dialog", "TRUE", &prefs_common.close_recv_dialog,
183 P_BOOL, NULL, NULL, NULL},
186 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
188 {"confirm_send_queued_messages", "FALSE", &prefs_common.confirm_send_queued_messages,
189 P_BOOL, NULL, NULL, NULL},
190 {"send_dialog_mode", "1", &prefs_common.send_dialog_mode, P_ENUM,
192 {"sendwin_width", "460", &prefs_common.sendwin_width, P_INT,
194 {"sendwin_height", "-1", &prefs_common.sendwin_height, P_INT,
197 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
199 {"encoding_method", "0", &prefs_common.encoding_method, P_ENUM,
202 {"allow_jisx0201_kana", "FALSE", &prefs_common.allow_jisx0201_kana,
203 P_BOOL, NULL, NULL, NULL},
206 {"auto_ext_editor", "FALSE", &prefs_common.auto_exteditor, P_BOOL,
208 {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
209 P_BOOL, NULL, NULL, NULL},
210 {"redirect_keep_from", "FALSE",
211 &prefs_common.redirect_keep_from, P_BOOL,
213 {"undo_level", "50", &prefs_common.undolevels, P_INT,
215 {"compose_with_format", "FALSE", &prefs_common.compose_with_format, P_BOOL,
217 {"compose_subject_format", "",
218 &prefs_common.compose_subject_format, P_STRING, NULL, NULL, NULL},
219 {"compose_body_format", N_("Hello,\\n"),
220 &prefs_common.compose_body_format, P_STRING, NULL, NULL, NULL},
222 {"linewrap_length", "72", &prefs_common.linewrap_len, P_INT,
224 {"linewrap_quotation", "TRUE", &prefs_common.linewrap_quote, P_BOOL,
226 {"linewrap_pastes", "TRUE", &prefs_common.linewrap_pastes, P_BOOL,
228 {"linewrap_auto", "TRUE", &prefs_common.autowrap, P_BOOL,
230 {"autosave", "TRUE", &prefs_common.autosave,
231 P_BOOL, NULL, NULL, NULL},
232 {"autosave_length", "50", &prefs_common.autosave_length, P_INT,
235 {"enable_aspell", "TRUE", &prefs_common.enable_aspell, P_BOOL,
237 {"aspell_path", ASPELL_PATH, &prefs_common.aspell_path, P_STRING,
239 {"dictionary", "", &prefs_common.dictionary, P_STRING,
241 {"alt_dictionary", "", &prefs_common.alt_dictionary, P_STRING,
243 {"aspell_sugmode", "1", &prefs_common.aspell_sugmode, P_INT,
245 {"use_alternate_dict", "FALSE", &prefs_common.use_alternate, P_BOOL,
247 {"check_while_typing", "TRUE", &prefs_common.check_while_typing, P_BOOL,
249 {"recheck_when_changing_dict", "TRUE", &prefs_common.recheck_when_changing_dict,
250 P_BOOL, NULL, NULL, NULL},
251 {"misspelled_color", "16711680", &prefs_common.misspelled_col, P_COLOR,
253 {"use_both_dicts", "FALSE", &prefs_common.use_both_dicts, P_BOOL,
256 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
258 {"compose_dnd_insert_or_attach", "0", &prefs_common.compose_dnd_mode, P_ENUM,
261 /* Account autoselection */
262 {"reply_account_autoselect", "TRUE",
263 &prefs_common.reply_account_autosel, P_BOOL,
265 {"forward_account_autoselect", "TRUE",
266 &prefs_common.forward_account_autosel, P_BOOL,
268 {"reedit_account_autoselect", "TRUE",
269 &prefs_common.reedit_account_autosel, P_BOOL,
272 {"default_reply_list", "TRUE", &prefs_common.default_reply_list, P_BOOL,
276 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
279 {"show_ruler", "FALSE", &prefs_common.show_ruler, P_BOOL,
284 {"reply_quote_mark", "> ", &prefs_common.quotemark, P_STRING,
286 {"reply_quote_format", N_("On %d\\n%f wrote:\\n\\n%q"),
287 &prefs_common.quotefmt, P_STRING, NULL, NULL, NULL},
289 {"forward_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
291 {"forward_quote_format",
292 N_("\\n\\nBegin forwarded message:\\n\\n"
293 "?d{Date: %d\\n}?f{From: %f\\n}?t{To: %t\\n}?c{Cc: %c\\n}"
294 "?n{Newsgroups: %n\\n}?s{Subject: %s\\n}\\n\\n%M"),
295 &prefs_common.fw_quotefmt, P_STRING, NULL, NULL, NULL},
296 {"quote_chars", ">", &prefs_common.quote_chars, P_STRING,
300 /* Obsolete fonts. For coexisting with Gtk+-1.2 version */
301 {"widget_font", NULL,
302 &prefs_common.widgetfont_gtk1, P_STRING, NULL, NULL, NULL},
303 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
304 &prefs_common.textfont_gtk1, P_STRING, NULL, NULL, NULL},
305 {"small_font", "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
306 &prefs_common.smallfont_gtk1, P_STRING, NULL, NULL, NULL},
307 {"bold_font", "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
308 &prefs_common.boldfont_gtk1, P_STRING, NULL, NULL, NULL},
309 {"normal_font", "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
310 &prefs_common.normalfont_gtk1, P_STRING, NULL, NULL, NULL},
314 {"widget_font_gtk2", NULL,
315 &SPECIFIC_PREFS.widgetfont, P_STRING, NULL, NULL, NULL},
316 {"message_font_gtk2", "Monospace 9",
317 &SPECIFIC_PREFS.textfont, P_STRING, NULL, NULL, NULL},
318 {"print_font_gtk2", "Monospace 9",
319 &SPECIFIC_PREFS.printfont, P_STRING, NULL, NULL, NULL},
320 {"small_font_gtk2", "Sans 9",
321 &SPECIFIC_PREFS.smallfont, P_STRING, NULL, NULL, NULL},
322 {"normal_font_gtk2", "Sans 9",
323 &SPECIFIC_PREFS.normalfont, P_STRING, NULL, NULL, NULL},
325 {"widget_font_gtk2", NULL,
326 &SPECIFIC_PREFS.widgetfont, P_STRING, NULL, NULL, NULL},
327 {"message_font_gtk2", "Monospace 8",
328 &SPECIFIC_PREFS.textfont, P_STRING, NULL, NULL, NULL},
329 {"print_font_gtk2", "Monospace 8",
330 &SPECIFIC_PREFS.printfont, P_STRING, NULL, NULL, NULL},
331 {"small_font_gtk2", "Sans 8",
332 &SPECIFIC_PREFS.smallfont, P_STRING, NULL, NULL, NULL},
333 {"normal_font_gtk2", "Sans 8",
334 &SPECIFIC_PREFS.normalfont, P_STRING, NULL, NULL, NULL},
337 {"custom_color1", "#ff9900", &prefs_common.custom_colorlabel[0].color, P_COLOR,
339 {"custom_colorlabel1", N_("Orange"), &prefs_common.custom_colorlabel[0].label, P_STRING,
341 {"custom_color2", "#ff0000", &prefs_common.custom_colorlabel[1].color, P_COLOR,
343 {"custom_colorlabel2", N_("Red"), &prefs_common.custom_colorlabel[1].label, P_STRING,
345 {"custom_color3", "#ff66ff", &prefs_common.custom_colorlabel[2].color, P_COLOR,
347 {"custom_colorlabel3", N_("Pink"), &prefs_common.custom_colorlabel[2].label, P_STRING,
349 {"custom_color4", "#00ccff", &prefs_common.custom_colorlabel[3].color, P_COLOR,
351 {"custom_colorlabel4", N_("Sky blue"), &prefs_common.custom_colorlabel[3].label, P_STRING,
353 {"custom_color5", "#0000ff", &prefs_common.custom_colorlabel[4].color, P_COLOR,
355 {"custom_colorlabel5", N_("Blue"), &prefs_common.custom_colorlabel[4].label, P_STRING,
357 {"custom_color6", "#009900", &prefs_common.custom_colorlabel[5].color, P_COLOR,
359 {"custom_colorlabel6", N_("Green"), &prefs_common.custom_colorlabel[5].label, P_STRING,
361 {"custom_color7", "#663333", &prefs_common.custom_colorlabel[6].color, P_COLOR,
363 {"custom_colorlabel7", N_("Brown"), &prefs_common.custom_colorlabel[6].label, P_STRING,
365 {"custom_color8", "#aaaaaa", &prefs_common.custom_colorlabel[7].color, P_COLOR,
367 {"custom_colorlabel8", N_("Grey"), &prefs_common.custom_colorlabel[7].label, P_STRING,
369 {"custom_color9", "#c07254", &prefs_common.custom_colorlabel[8].color, P_COLOR,
371 {"custom_colorlabel9", N_("Light brown"), &prefs_common.custom_colorlabel[8].label, P_STRING,
373 {"custom_color10", "#c00000", &prefs_common.custom_colorlabel[9].color, P_COLOR,
375 {"custom_colorlabel10", N_("Dark red"), &prefs_common.custom_colorlabel[9].label, P_STRING,
377 {"custom_color11", "#cc1074", &prefs_common.custom_colorlabel[10].color, P_COLOR,
379 {"custom_colorlabel11", N_("Dark pink"), &prefs_common.custom_colorlabel[10].label, P_STRING,
381 {"custom_color12", "#5094cd", &prefs_common.custom_colorlabel[11].color, P_COLOR,
383 {"custom_colorlabel12", N_("Steel blue"), &prefs_common.custom_colorlabel[11].label, P_STRING,
385 {"custom_color13", "#ffd500", &prefs_common.custom_colorlabel[12].color, P_COLOR,
387 {"custom_colorlabel13", N_("Gold"), &prefs_common.custom_colorlabel[12].label, P_STRING,
389 {"custom_color14", "#00d800", &prefs_common.custom_colorlabel[13].color, P_COLOR,
391 {"custom_colorlabel14", N_("Bright green"), &prefs_common.custom_colorlabel[13].label, P_STRING,
393 {"custom_color15", "#c060c0", &prefs_common.custom_colorlabel[14].color, P_COLOR,
395 {"custom_colorlabel15", N_("Magenta"), &prefs_common.custom_colorlabel[14].label, P_STRING,
399 {"display_image", "TRUE", &prefs_common.display_img, P_BOOL,
401 {"resize_image", "TRUE", &prefs_common.resize_img, P_BOOL,
403 {"inline_image", "TRUE", &prefs_common.inline_img, P_BOOL,
406 {"display_folder_unread_num", "0",
407 &prefs_common.display_folder_unread, P_INT,
409 {"newsgroup_abbrev_len", "16",
410 &prefs_common.ng_abbrev_len, P_INT,
413 {"translate_header", "FALSE", &prefs_common.trans_hdr, P_BOOL,
416 /* Display: Summary View */
417 {"use_address_book", "FALSE", &prefs_common.use_addr_book, P_BOOL,
419 {"thread_by_subject", "TRUE", &prefs_common.thread_by_subject, P_BOOL,
421 {"date_format", N_("%y/%m/%d(%a) %H:%M"), &prefs_common.date_format,
422 P_STRING, NULL, NULL, NULL},
424 {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
427 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
430 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
433 {"toolbar_style", "1", &prefs_common.toolbar_style, P_ENUM,
436 {"toolbar_detachable", "FALSE", &prefs_common.toolbar_detachable, P_BOOL,
438 {"show_col_headers", "TRUE", &prefs_common.show_col_headers, P_BOOL,
441 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
443 {"show_searchbar", "TRUE", &prefs_common.show_searchbar, P_BOOL,
446 {"show_statusbar", "FALSE", &prefs_common.show_statusbar, P_BOOL,
448 {"show_searchbar", "FALSE", &prefs_common.show_searchbar, P_BOOL,
452 {"summary_col_show_mark", "TRUE",
453 &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
454 {"summary_col_show_unread", "TRUE",
455 &prefs_common.summary_col_visible[S_COL_STATUS], P_BOOL, NULL, NULL, NULL},
456 {"summary_col_show_subject", "TRUE",
457 &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
458 {"summary_col_show_from", "TRUE",
459 &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
460 {"summary_col_show_to", "FALSE",
461 &prefs_common.summary_col_visible[S_COL_TO], P_BOOL, NULL, NULL, NULL},
462 {"summary_col_show_date", "TRUE",
463 &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
464 {"summary_col_show_mime", "TRUE",
465 &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
466 {"summary_col_show_size", "TRUE",
467 &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
468 {"summary_col_show_number", "FALSE",
469 &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
470 {"summary_col_show_score", "FALSE",
471 &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL},
472 {"summary_col_show_locked", "FALSE",
473 &prefs_common.summary_col_visible[S_COL_LOCKED], P_BOOL, NULL, NULL, NULL},
474 {"summary_col_show_tags", "FALSE",
475 &prefs_common.summary_col_visible[S_COL_TAGS], P_BOOL, NULL, NULL, NULL},
477 {"summary_col_pos_mark", "0",
478 &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
479 {"summary_col_pos_unread", "1",
480 &prefs_common.summary_col_pos[S_COL_STATUS], P_INT, NULL, NULL, NULL},
481 {"summary_col_pos_mime", "2",
482 &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
483 {"summary_col_pos_subject", "3",
484 &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
485 {"summary_col_pos_from", "4",
486 &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
487 {"summary_col_pos_date", "5",
488 &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
489 {"summary_col_pos_size", "6",
490 &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
491 {"summary_col_pos_number", "7",
492 &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
493 {"summary_col_pos_score", "8",
494 &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL},
495 {"summary_col_pos_locked", "9",
496 &prefs_common.summary_col_pos[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
497 {"summary_col_pos_to", "10",
498 &prefs_common.summary_col_pos[S_COL_TO], P_INT, NULL, NULL, NULL},
499 {"summary_col_pos_tags", "11",
500 &prefs_common.summary_col_pos[S_COL_TAGS], P_INT, NULL, NULL, NULL},
502 {"summary_col_size_mark", "10",
503 &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
504 {"summary_col_size_unread", "13",
505 &prefs_common.summary_col_size[S_COL_STATUS], P_INT, NULL, NULL, NULL},
506 {"summary_col_size_mime", "10",
507 &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
509 {"summary_col_size_subject", "200",
510 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
511 {"summary_col_size_from", "120",
512 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
513 {"summary_col_size_to", "120",
514 &prefs_common.summary_col_size[S_COL_TO], P_INT, NULL, NULL, NULL},
516 {"summary_col_size_subject", "300",
517 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
518 {"summary_col_size_from", "150",
519 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
520 {"summary_col_size_to", "150",
521 &prefs_common.summary_col_size[S_COL_TO], P_INT, NULL, NULL, NULL},
524 {"summary_col_size_date", "118",
525 &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
526 {"summary_col_size_size", "45",
527 &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
528 {"summary_col_size_number", "40",
529 &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
530 {"summary_col_size_score", "40",
531 &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL},
532 {"summary_col_size_locked", "13",
533 &prefs_common.summary_col_size[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
534 {"summary_col_size_tags", "150",
535 &prefs_common.summary_col_size[S_COL_TAGS], P_INT, NULL, NULL, NULL},
538 {"folderwin_x", "16", &prefs_common.folderwin_x, P_INT,
540 {"folderwin_y", "16", &prefs_common.folderwin_y, P_INT,
542 {"folderview_width", "270", &prefs_common.folderview_width, P_INT,
544 {"folderview_height", "450", &prefs_common.folderview_height, P_INT,
546 {"folderview_visible", "TRUE", &prefs_common.folderview_visible, P_BOOL,
549 {"folder_col_show_folder", "TRUE",
550 &prefs_common.folder_col_visible[F_COL_FOLDER], P_BOOL, NULL, NULL, NULL},
551 {"folder_col_show_new", "TRUE",
552 &prefs_common.folder_col_visible[F_COL_NEW], P_BOOL, NULL, NULL, NULL},
553 {"folder_col_show_unread", "TRUE",
554 &prefs_common.folder_col_visible[F_COL_UNREAD], P_BOOL, NULL, NULL, NULL},
555 {"folder_col_show_total", "TRUE",
556 &prefs_common.folder_col_visible[F_COL_TOTAL], P_BOOL, NULL, NULL, NULL},
558 {"folder_col_pos_folder", "0",
559 &prefs_common.folder_col_pos[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
560 {"folder_col_pos_new", "1",
561 &prefs_common.folder_col_pos[F_COL_NEW], P_INT, NULL, NULL, NULL},
562 {"folder_col_pos_unread", "2",
563 &prefs_common.folder_col_pos[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
564 {"folder_col_pos_total", "3",
565 &prefs_common.folder_col_pos[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
568 {"folder_col_size_folder", "120",
569 &prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
570 {"folder_col_size_new", "32",
571 &prefs_common.folder_col_size[F_COL_NEW], P_INT, NULL, NULL, NULL},
572 {"folder_col_size_unread", "32",
573 &prefs_common.folder_col_size[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
574 {"folder_col_size_total", "32",
575 &prefs_common.folder_col_size[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
577 {"folder_col_size_folder", "400",
578 &prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
579 {"folder_col_size_new", "32",
580 &prefs_common.folder_col_size[F_COL_NEW], P_INT, NULL, NULL, NULL},
581 {"folder_col_size_unread", "32",
582 &prefs_common.folder_col_size[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
583 {"folder_col_size_total", "32",
584 &prefs_common.folder_col_size[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
586 {"summaryview_width", "500", &prefs_common.summaryview_width, P_INT,
588 {"summaryview_height", "244", &prefs_common.summaryview_height, P_INT,
591 {"main_messagewin_x", "256", &prefs_common.main_msgwin_x, P_INT,
593 {"main_messagewin_y", "210", &prefs_common.main_msgwin_y, P_INT,
595 {"messageview_width", "500", &prefs_common.msgview_width, P_INT,
597 {"messageview_height", "213", &prefs_common.msgview_height, P_INT,
599 {"messageview_visible", "TRUE", &prefs_common.msgview_visible, P_BOOL,
602 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
604 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
606 {"mainview_width", "500", &prefs_common.mainview_width, P_INT,
608 {"mainview_height", "400", &prefs_common.mainview_height, P_INT,
610 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
612 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
615 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
617 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
619 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
621 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
623 {"sourcewin_width", "600", &prefs_common.sourcewin_width, P_INT,
625 {"sourcewin_height", "500", &prefs_common.sourcewin_height, P_INT,
627 {"compose_width", "600", &prefs_common.compose_width, P_INT,
629 {"compose_height", "560", &prefs_common.compose_height, P_INT,
632 {"mainwin_width", "700", &prefs_common.mainwin_width, P_INT,
634 {"mainwin_height", "470", &prefs_common.mainwin_height, P_INT,
636 {"messagewin_width", "700", &prefs_common.msgwin_width, P_INT,
638 {"messagewin_height", "470", &prefs_common.msgwin_height, P_INT,
640 {"sourcewin_width", "700", &prefs_common.sourcewin_width, P_INT,
642 {"sourcewin_height", "470", &prefs_common.sourcewin_height, P_INT,
644 {"compose_width", "700", &prefs_common.compose_width, P_INT,
646 {"compose_height", "470", &prefs_common.compose_height, P_INT,
649 {"compose_x", "0", &prefs_common.compose_x, P_INT,
651 {"compose_y", "0", &prefs_common.compose_y, P_INT,
654 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
657 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_COLOR,
659 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_COLOR,
661 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_COLOR,
663 {"enable_bgcolor", "FALSE", &prefs_common.enable_bgcolor, P_BOOL,
665 {"quote_level1_bgcolor", "13421772", &prefs_common.quote_level1_bgcol, P_COLOR,
667 {"quote_level2_bgcolor", "13948116", &prefs_common.quote_level2_bgcol, P_COLOR,
669 {"quote_level3_bgcolor", "14540253", &prefs_common.quote_level3_bgcol, P_COLOR,
671 {"uri_color", "32512", &prefs_common.uri_col, P_COLOR,
673 {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_COLOR,
675 {"signature_color", "7960953", &prefs_common.signature_col, P_COLOR,
677 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
678 P_BOOL, NULL, NULL, NULL},
680 {"display_header_pane", "FALSE", &prefs_common.display_header_pane,
681 P_BOOL, NULL, NULL, NULL},
682 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
684 {"display_xface", "TRUE", &prefs_common.display_xface,
685 P_BOOL, NULL, NULL, NULL},
686 {"render_html", "TRUE", &prefs_common.render_html, P_BOOL,
688 {"invoke_plugin_on_html", "FALSE", &prefs_common.invoke_plugin_on_html, P_BOOL,
690 {"line_space", "2", &prefs_common.line_space, P_INT,
692 {"never_send_retrcpt", "FALSE", &prefs_common.never_send_retrcpt, P_BOOL,
695 {"enable_smooth_scroll", "FALSE",
696 &prefs_common.enable_smooth_scroll, P_BOOL,
698 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
700 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
702 {"respect_flowed_format", "FALSE", &prefs_common.respect_flowed_format, P_BOOL,
705 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
708 {"use_different_print_font", "FALSE", &prefs_common.use_different_print_font, P_BOOL,
711 {"attach_desc", "TRUE", &prefs_common.attach_desc, P_BOOL,
713 {"attach_save_directory", NULL,
714 &SPECIFIC_PREFS.attach_save_dir, P_STRING, NULL, NULL, NULL},
715 {"attach_load_directory", NULL,
716 &SPECIFIC_PREFS.attach_load_dir, P_STRING, NULL, NULL, NULL},
719 {"mime_textviewer", NULL,
720 &SPECIFIC_PREFS.mime_textviewer, P_STRING, NULL, NULL, NULL},
721 {"mime_open_command", "gedit '%s'",
722 &SPECIFIC_PREFS.mime_open_cmd, P_STRING, NULL, NULL, NULL},
726 {"layout_mode", "0", &prefs_common.layout_mode, P_INT,
729 {"layout_mode", "5", &prefs_common.layout_mode, P_INT,
732 /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
733 NULL, NULL, NULL}, */
734 {"always_show_message_when_selected", "FALSE",
735 &prefs_common.always_show_msg,
736 P_BOOL, NULL, NULL, NULL},
737 {"select_on_entry", "3", &prefs_common.select_on_entry,
738 P_ENUM, NULL, NULL, NULL},
740 {"summary_select_prio1", "0", &prefs_common.summary_select_prio[0], P_ENUM,
742 {"summary_select_prio2", "0", &prefs_common.summary_select_prio[1], P_ENUM,
744 {"summary_select_prio3", "0", &prefs_common.summary_select_prio[2], P_ENUM,
746 {"summary_select_prio4", "0", &prefs_common.summary_select_prio[3], P_ENUM,
748 {"summary_select_prio5", "0", &prefs_common.summary_select_prio[4], P_ENUM,
750 {"summary_select_prio6", "0", &prefs_common.summary_select_prio[5], P_ENUM,
753 {"mark_as_read_on_new_window", "FALSE",
754 &prefs_common.mark_as_read_on_new_window,
755 P_BOOL, NULL, NULL, NULL},
756 {"mark_as_read_delay", "0",
757 &prefs_common.mark_as_read_delay, P_INT,
759 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
761 {"nextunreadmsg_dialog", "1", &prefs_common.next_unread_msg_dialog, P_ENUM,
764 {"pixmap_theme_path", DEFAULT_PIXMAP_THEME,
765 &SPECIFIC_PREFS.pixmap_theme_path, P_STRING,
768 {"ask_mark_all_read", "TRUE", &prefs_common.ask_mark_all_read, P_BOOL,
771 {"ask_apply_per_account_filtering_rules", "TRUE", &prefs_common.ask_apply_per_account_filtering_rules, P_BOOL,
773 {"apply_per_account_filtering_rules", "0", &prefs_common.apply_per_account_filtering_rules, P_ENUM,
777 {"addressbook_use_editaddress_dialog", "TRUE", &prefs_common.addressbook_use_editaddress_dialog,
778 P_BOOL, NULL, NULL, NULL},
779 {"addressbook_hpaned_pos", "-1", &prefs_common.addressbook_hpaned_pos,
780 P_INT, NULL, NULL, NULL},
781 {"addressbook_vpaned_pos", "-1", &prefs_common.addressbook_vpaned_pos,
782 P_INT, NULL, NULL, NULL},
785 {"uri_open_command", DEFAULT_BROWSER_CMD,
786 &SPECIFIC_PREFS.uri_cmd, P_STRING, NULL, NULL, NULL},
787 {"print_command", "lpr %s",
788 &SPECIFIC_PREFS.print_cmd, P_STRING, NULL, NULL, NULL},
789 {"ext_editor_command", DEFAULT_EDITOR_CMD,
790 &SPECIFIC_PREFS.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
791 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
792 P_BOOL, NULL, NULL, NULL},
793 {"confirm_on_exit", "FALSE", &prefs_common.confirm_on_exit, P_BOOL,
795 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
797 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
799 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
800 P_BOOL, NULL, NULL, NULL},
801 {"work_offline", "FALSE", &prefs_common.work_offline, P_BOOL,
803 {"summary_quicksearch_type", "0", &prefs_common.summary_quicksearch_type, P_INT,
806 {"summary_quicksearch_recurse", "1", &prefs_common.summary_quicksearch_recurse, P_INT,
809 {"summary_quicksearch_recurse", "0", &prefs_common.summary_quicksearch_recurse, P_INT,
813 {"io_timeout_secs", "60", &prefs_common.io_timeout_secs,
814 P_INT, NULL, NULL, NULL},
815 {"hide_score", "-9999", &prefs_common.kill_score, P_INT,
817 {"important_score", "1", &prefs_common.important_score, P_INT,
820 {"clip_log", "TRUE", &prefs_common.cliplog, P_BOOL,
822 {"log_length", "500", &prefs_common.loglength, P_INT,
825 {"enable_log_standard", "TRUE", &prefs_common.enable_log_standard, P_BOOL,
827 {"enable_log_warning", "TRUE", &prefs_common.enable_log_warning, P_BOOL,
829 {"enable_log_error", "TRUE", &prefs_common.enable_log_error, P_BOOL,
831 {"enable_log_status", "TRUE", &prefs_common.enable_log_status, P_BOOL,
834 {"enable_log_standard", "FALSE", &prefs_common.enable_log_standard, P_BOOL,
836 {"enable_log_warning", "FALSE", &prefs_common.enable_log_warning, P_BOOL,
838 {"enable_log_error", "FALSE", &prefs_common.enable_log_error, P_BOOL,
840 {"enable_log_status", "FALSE", &prefs_common.enable_log_status, P_BOOL,
843 {"log_msg_color", "#00af00", &prefs_common.log_msg_color, P_COLOR,
845 {"log_warn_color", "#af0000", &prefs_common.log_warn_color, P_COLOR,
847 {"log_error_color", "#af0000", &prefs_common.log_error_color, P_COLOR,
849 {"log_in_color", "#000000", &prefs_common.log_in_color, P_COLOR,
851 {"log_out_color", "#0000ef", &prefs_common.log_out_color, P_COLOR,
853 {"log_status_ok_color", "#00af00", &prefs_common.log_status_ok_color, P_COLOR,
855 {"log_status_nok_color", "#0000af", &prefs_common.log_status_nok_color, P_COLOR,
857 {"log_status_skip_color", "#aa00aa", &prefs_common.log_status_skip_color, P_COLOR,
860 {"enable_filtering_debug", "FALSE", &prefs_common.enable_filtering_debug, P_BOOL,
862 {"filtering_debug_level", "1", &prefs_common.filtering_debug_level, P_INT,
864 {"enable_filtering_debug_inc", "TRUE", &prefs_common.enable_filtering_debug_inc, P_BOOL,
866 {"enable_filtering_debug_manual", "TRUE", &prefs_common.enable_filtering_debug_manual, P_BOOL,
868 {"enable_filtering_debug_folder_proc", "FALSE", &prefs_common.enable_filtering_debug_folder_proc, P_BOOL,
870 {"enable_filtering_debug_pre_proc", "FALSE", &prefs_common.enable_filtering_debug_pre_proc, P_BOOL,
872 {"enable_filtering_debug_post_proc", "FALSE", &prefs_common.enable_filtering_debug_post_proc, P_BOOL,
874 {"filtering_debug_clip_log", "TRUE", &prefs_common.filtering_debug_cliplog, P_BOOL,
876 {"filtering_debug_log_length", "500", &prefs_common.filtering_debug_loglength, P_INT,
879 {"gtk_can_change_accels", "TRUE", &prefs_common.gtk_can_change_accels, P_BOOL,
882 {"color_new", "179", &prefs_common.color_new, P_COLOR,
885 /* Some windows' sizes */
886 {"filteringwin_width", "500", &prefs_common.filteringwin_width, P_INT,
888 {"filteringwin_height", "-1", &prefs_common.filteringwin_height, P_INT,
891 {"filteringactionwin_width", "490", &prefs_common.filteringactionwin_width, P_INT,
893 {"filteringactionwin_height", "-1", &prefs_common.filteringactionwin_height, P_INT,
896 {"matcherwin_width", "520", &prefs_common.matcherwin_width, P_INT,
898 {"matcherwin_height", "-1", &prefs_common.matcherwin_height, P_INT,
901 {"templateswin_width", "480", &prefs_common.templateswin_width, P_INT,
903 {"templateswin_height", "-1", &prefs_common.templateswin_height, P_INT,
906 {"actionswin_width", "486", &prefs_common.actionswin_width, P_INT,
908 {"actionswin_height", "-1", &prefs_common.actionswin_height, P_INT,
911 {"tagswin_width", "486", &prefs_common.tagswin_width, P_INT,
913 {"tagswin_height", "-1", &prefs_common.tagswin_height, P_INT,
916 {"addressbookwin_width", "520", &prefs_common.addressbookwin_width, P_INT,
918 {"addressbookwin_height", "-1", &prefs_common.addressbookwin_height, P_INT,
921 {"addressbookeditpersonwin_width", "640", &prefs_common.addressbookeditpersonwin_width, P_INT,
923 {"addressbookeditpersonwin_height", "320", &prefs_common.addressbookeditpersonwin_height, P_INT,
926 {"addressbookeditgroupwin_width", "580", &prefs_common.addressbookeditgroupwin_width, P_INT,
928 {"addressbookeditgroupwin_height", "340", &prefs_common.addressbookeditgroupwin_height, P_INT,
931 {"pluginswin_width", "-1", &prefs_common.pluginswin_width, P_INT,
933 {"pluginswin_height", "-1", &prefs_common.pluginswin_height, P_INT,
936 {"prefswin_width", "600", &prefs_common.prefswin_width, P_INT,
938 {"prefswin_height", "-1", &prefs_common.prefswin_height, P_INT,
941 {"folderitemwin_width", "500", &prefs_common.folderitemwin_width, P_INT,
943 {"folderitemwin_height", "-1", &prefs_common.folderitemwin_height, P_INT,
946 {"zero_replacement_char", "0", &prefs_common.zero_replacement, P_STRING,
949 {"editaccountwin_width", "500", &prefs_common.editaccountwin_width, P_INT,
951 {"editaccountwin_height", "-1", &prefs_common.editaccountwin_height, P_INT,
954 {"accountswin_width", "500", &prefs_common.accountswin_width, P_INT,
956 {"accountswin_height", "-1", &prefs_common.accountswin_height, P_INT,
959 {"logwin_width", "520", &prefs_common.logwin_width, P_INT,
961 {"logwin_height", "-1", &prefs_common.logwin_height, P_INT,
964 {"filtering_debugwin_width", "600", &prefs_common.filtering_debugwin_width, P_INT,
966 {"filtering_debugwin_height", "-1", &prefs_common.filtering_debugwin_height, P_INT,
969 {"folderselwin_width", "300", &prefs_common.folderselwin_width, P_INT,
971 {"folderselwin_height", "-1", &prefs_common.folderselwin_height, P_INT,
974 {"addressaddwin_width", "300", &prefs_common.addressaddwin_width, P_INT,
976 {"addressaddwin_height", "-1", &prefs_common.addressaddwin_height, P_INT,
979 {"addressbook_folderselwin_width", "300", &prefs_common.addressbook_folderselwin_width, P_INT,
981 {"addressbook_folderselwin_height", "-1", &prefs_common.addressbook_folderselwin_height, P_INT,
985 {"warn_dnd", "1", &prefs_common.warn_dnd, P_INT,
987 {"utf8_instead_of_locale_for_broken_mail", "0",
988 &prefs_common.broken_are_utf8, P_INT,
990 {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
992 {"use_stripes_everywhere", "TRUE", &prefs_common.use_stripes_everywhere, P_BOOL,
994 {"use_stripes_in_summaries", "TRUE", &prefs_common.use_stripes_in_summaries, P_BOOL,
996 {"stripes_color_offset", "4000", &prefs_common.stripes_color_offset, P_INT,
998 {"enable_dotted_lines", "FALSE", &prefs_common.enable_dotted_lines, P_BOOL,
1000 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
1002 {"folderview_vscrollbar_policy", "0",
1003 &prefs_common.folderview_vscrollbar_policy, P_ENUM,
1005 {"textview_cursor_visible", "FALSE",
1006 &prefs_common.textview_cursor_visible, P_BOOL,
1008 {"hover_timeout", "500", &prefs_common.hover_timeout, P_INT,
1011 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
1013 {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
1016 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
1018 {"cache_min_keep_time", "0", &prefs_common.cache_min_keep_time, P_INT,
1021 {"thread_by_subject_max_age", "10", &prefs_common.thread_by_subject_max_age,
1022 P_INT, NULL, NULL, NULL },
1023 {"last_opened_folder", "", &prefs_common.last_opened_folder,
1024 P_STRING, NULL, NULL, NULL },
1025 {"goto_last_folder_on_startup", "FALSE", &prefs_common.goto_last_folder_on_startup,
1026 P_BOOL, NULL, NULL, NULL },
1027 {"summary_quicksearch_sticky", "1", &prefs_common.summary_quicksearch_sticky, P_INT,
1029 {"summary_quicksearch_dynamic", "0", &prefs_common.summary_quicksearch_dynamic, P_INT,
1031 {"summary_quicksearch_autorun", "0", &prefs_common.summary_quicksearch_autorun, P_INT,
1033 {"statusbar_update_step", "10", &prefs_common.statusbar_update_step, P_INT,
1035 {"compose_no_markup", "FALSE", &prefs_common.compose_no_markup, P_BOOL,
1037 {"skip_ssl_cert_check", "FALSE", &prefs_common.skip_ssl_cert_check, P_BOOL,
1039 {"live_dangerously", "FALSE", &prefs_common.live_dangerously, P_BOOL,
1041 {"hide_quotes", "0", &prefs_common.hide_quotes, P_INT,
1043 {"unsafe_ssl_certs", "FALSE", &prefs_common.unsafe_ssl_certs, P_BOOL,
1046 {"real_time_sync", "FALSE", &prefs_common.real_time_sync, P_BOOL,
1049 {"real_time_sync", "TRUE", &prefs_common.real_time_sync, P_BOOL,
1052 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
1055 PrefsCommon *prefs_common_get(void)
1057 return &prefs_common;
1061 * Read history list from the specified history file
1063 static GList *prefs_common_read_history(const gchar *history)
1067 gchar buf[PREFSBUFSIZE];
1070 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1072 if ((fp = g_fopen(path, "rb")) == NULL) {
1073 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
1078 while (fgets(buf, sizeof(buf), fp) != NULL) {
1080 if (buf[0] == '\0') continue;
1081 tmp = add_history(tmp, buf);
1085 tmp = g_list_reverse(tmp);
1090 void prefs_common_read_config(void)
1095 rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMON_RC, NULL);
1096 prefs_read_config(param, "Common", rcpath, NULL);
1098 prefs_read_config(param_os_specific, "CommonWin32", rcpath, NULL);
1103 tmp = g_strdup(gettext(prefs_common.quotefmt));
1104 g_free(prefs_common.quotefmt);
1105 prefs_common.quotefmt = tmp;
1107 tmp = g_strdup(gettext(prefs_common.fw_quotefmt));
1108 g_free(prefs_common.fw_quotefmt);
1109 prefs_common.fw_quotefmt = tmp;
1111 tmp = g_strdup(gettext(prefs_common.date_format));
1112 g_free(prefs_common.date_format);
1113 prefs_common.date_format = tmp;
1115 tmp = g_strdup(gettext(prefs_common.compose_body_format));
1116 g_free(prefs_common.compose_body_format);
1117 prefs_common.compose_body_format = tmp;
1119 prefs_common.mime_open_cmd_history =
1120 prefs_common_read_history(COMMAND_HISTORY);
1121 prefs_common.summary_quicksearch_history =
1122 prefs_common_read_history(QUICKSEARCH_HISTORY);
1123 prefs_common.summary_search_from_history =
1124 prefs_common_read_history(SUMMARY_SEARCH_FROM_HISTORY);
1125 prefs_common.summary_search_to_history =
1126 prefs_common_read_history(SUMMARY_SEARCH_TO_HISTORY);
1127 prefs_common.summary_search_subject_history =
1128 prefs_common_read_history(SUMMARY_SEARCH_SUBJECT_HISTORY);
1129 prefs_common.summary_search_body_history =
1130 prefs_common_read_history(SUMMARY_SEARCH_BODY_HISTORY);
1131 prefs_common.summary_search_adv_condition_history =
1132 prefs_common_read_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY);
1133 prefs_common.message_search_history =
1134 prefs_common_read_history(MESSAGE_SEARCH_HISTORY);
1136 colorlabel_update_colortable_from_prefs();
1142 g_warning("failed to write\n"); \
1147 * Save history list to the specified history file
1149 static void prefs_common_save_history(const gchar *history, GList *list)
1153 gchar *path, *tmp_path;
1155 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1157 tmp_path = g_strconcat(path, ".tmp", NULL);
1159 if ((fp = g_fopen(tmp_path, "wb")) == NULL) {
1160 FILE_OP_ERROR(tmp_path, "fopen");
1164 for (cur = list; cur != NULL; cur = cur->next) {
1165 TRY(fputs((gchar *)cur->data, fp) != EOF &&
1166 fputc('\n', fp) != EOF);
1169 if (fclose(fp) == EOF) {
1170 FILE_OP_ERROR(tmp_path, "fclose");
1178 if (g_rename(tmp_path, path) < 0) {
1179 FILE_OP_ERROR(path, "rename");
1192 void prefs_common_write_config(void)
1194 prefs_write_config(param, "Common", COMMON_RC);
1196 prefs_write_config(param_os_specific, "CommonWin32", COMMON_RC);
1199 prefs_common_save_history(COMMAND_HISTORY,
1200 prefs_common.mime_open_cmd_history);
1201 prefs_common_save_history(QUICKSEARCH_HISTORY,
1202 prefs_common.summary_quicksearch_history);
1203 prefs_common_save_history(SUMMARY_SEARCH_FROM_HISTORY,
1204 prefs_common.summary_search_from_history);
1205 prefs_common_save_history(SUMMARY_SEARCH_TO_HISTORY,
1206 prefs_common.summary_search_to_history);
1207 prefs_common_save_history(SUMMARY_SEARCH_SUBJECT_HISTORY,
1208 prefs_common.summary_search_subject_history);
1209 prefs_common_save_history(SUMMARY_SEARCH_BODY_HISTORY,
1210 prefs_common.summary_search_body_history);
1211 prefs_common_save_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY,
1212 prefs_common.summary_search_adv_condition_history);
1213 prefs_common_save_history(MESSAGE_SEARCH_HISTORY,
1214 prefs_common.message_search_history);
1217 /* make a copy of string 'in' into buffer 'out'. un-escape \ sequences.
1218 both 'in' and 'out' must be non-NULL.
1219 'out' must be a pointer to a buffer whose size is at least equal
1220 to strlen(txt)+1, this buffer will get cleared. out's contents
1221 will always get set to a valid string, even if it's "".*/
1222 void pref_get_unescaped_pref(gchar *out, const gchar *in)
1229 g_return_if_fail( in != NULL );
1230 g_return_if_fail( out != NULL );
1234 memset(out, 0, strlen(in)+1);
1235 while (*i != '\0') {
1236 if (*i == '\\' && *(i+1) == 'n') {
1239 } else if (*i == '\\' && *(i+1) == 't') {
1242 } else if (*i == '\\' && *(i+1) == '\\') {
1253 /* make a copy of string 'in' into buffer 'out'. escape \ sequences.
1254 both 'in' and 'out' must be non-NULL.
1255 'out' must be a pointer to a buffer whose size is at least equal
1256 to 2*strlen(txt)+1. out's contents will always get set to a valid
1257 string, even if it's "". */
1258 void pref_get_escaped_pref(gchar *out, const gchar *in)
1265 g_return_if_fail( in != NULL );
1266 g_return_if_fail( out != NULL );
1270 while (*i != '\0') {
1274 } else if (*i == '\t') {
1277 } else if (*i == '\\') {
1288 /* set the contents of a textview widget from the internal \-escaped
1289 representation of a pref string. both txt and textview must be non-NULL. */
1290 void pref_set_textview_from_pref(GtkTextView *textview, const gchar *txt)
1292 GtkTextBuffer *buffer;
1295 g_return_if_fail( textview != NULL );
1297 buffer = gtk_text_view_get_buffer(textview);
1300 gtk_text_buffer_set_text(buffer, "", -1);
1302 out = malloc(strlen(txt)+1);
1304 pref_get_unescaped_pref(out, txt);
1306 gtk_text_buffer_set_text(buffer, out?out:"", -1);
1311 /* set the contents of a gtkentry widget from the internal \-escaped
1312 representation of a pref string. both txt and entry must be non-NULL. */
1313 void pref_set_entry_from_pref(GtkEntry *entry, const gchar *txt)
1317 g_return_if_fail( entry != NULL );
1319 gtk_entry_set_text(entry, "");
1321 out = malloc(strlen(txt)+1);
1323 pref_get_unescaped_pref(out, txt);
1325 gtk_entry_set_text(entry, out?out:"");
1330 /* get the \-escaped internal representation of a pref from the contents of
1331 a textview widget. textview must be non-NULL. */
1332 gchar *pref_get_pref_from_textview(GtkTextView *textview)
1334 GtkTextBuffer *buffer;
1335 GtkTextIter start, end;
1338 g_return_val_if_fail( textview != NULL, "" );
1340 buffer = gtk_text_view_get_buffer(textview);
1341 gtk_text_buffer_get_start_iter(buffer, &start);
1342 gtk_text_buffer_get_iter_at_offset(buffer, &end, -1);
1343 tmp = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
1344 out = malloc(2*strlen(tmp)+1);
1346 pref_get_escaped_pref(out, tmp);
1352 /* get the \-escaped internal representation of a pref from the contents of
1353 a gtkentry widget. entry must be non-NULL. */
1354 gchar *pref_get_pref_from_entry(GtkEntry *entry)
1358 g_return_val_if_fail( entry != NULL, "" );
1360 tmp = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
1361 out = malloc(2*strlen(tmp)+1);
1363 pref_get_escaped_pref(out, tmp);
1369 /* ugly hack to be able to get this pref from ssl_certificate.c */
1370 gboolean prefs_common_unsafe_ssl_certs(void)
1372 return prefs_common.unsafe_ssl_certs;
1375 gboolean prefs_common_enable_log_standard(void)
1377 return prefs_common.enable_log_standard;
1380 gboolean prefs_common_enable_log_warning(void)
1382 return prefs_common.enable_log_warning;
1384 gboolean prefs_common_enable_log_error(void)
1386 return prefs_common.enable_log_error;
1388 gboolean prefs_common_enable_log_status(void)
1390 return prefs_common.enable_log_status;
1394 const gchar *prefs_common_get_data_root(void)
1396 if (prefs_common.data_root && *prefs_common.data_root)
1397 return prefs_common.data_root;
1403 return the translated name of a header, if the translate_header option is
1404 set, otherwise return the untranslated header name (header_name itself).
1405 this function is provided for convenience, it's an interface to
1406 prefs_common.trans_hdr.
1407 works with header names either with or without trailing colon, provided
1408 that gettext found such header name in the sources (they should all be
1409 found in src/gtk/headers.h anyway).
1411 const gchar *prefs_common_translated_header_name(const gchar *header_name)
1413 if (header_name == NULL || *header_name == '\0')
1416 return prefs_common.trans_hdr ? gettext(header_name) : header_name;