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 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
145 {"ext_inc_path", DEFAULT_INC_PATH, &SPECIFIC_PREFS.extinc_cmd, P_STRING,
148 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
150 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
152 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
154 {"open_inbox_on_inc", "FALSE", &prefs_common.open_inbox_on_inc,
155 P_BOOL, NULL, NULL, NULL},
156 {"scan_all_after_inc", "FALSE", &prefs_common.scan_all_after_inc,
157 P_BOOL, NULL, NULL, NULL},
158 {"newmail_notify_manu", "FALSE", &prefs_common.newmail_notify_manu,
159 P_BOOL, NULL, NULL, NULL},
160 {"newmail_notify_auto", "FALSE", &prefs_common.newmail_notify_auto,
161 P_BOOL, NULL, NULL, NULL},
162 {"newmail_notify_cmd", "", &SPECIFIC_PREFS.newmail_notify_cmd, P_STRING,
164 {"receive_dialog_mode", "2", &prefs_common.recv_dialog_mode, P_ENUM,
166 {"receivewin_width", "460", &prefs_common.receivewin_width, P_INT,
168 {"receivewin_height", "-1", &prefs_common.receivewin_height, P_INT,
170 {"no_receive_error_panel", "FALSE", &prefs_common.no_recv_err_panel,
171 P_BOOL, NULL, NULL, NULL},
172 {"close_receive_dialog", "TRUE", &prefs_common.close_recv_dialog,
173 P_BOOL, NULL, NULL, NULL},
176 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
178 {"confirm_send_queued_messages", "FALSE", &prefs_common.confirm_send_queued_messages,
179 P_BOOL, NULL, NULL, NULL},
180 {"send_dialog_mode", "1", &prefs_common.send_dialog_mode, P_ENUM,
182 {"sendwin_width", "460", &prefs_common.sendwin_width, P_INT,
184 {"sendwin_height", "-1", &prefs_common.sendwin_height, P_INT,
187 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
189 {"encoding_method", "0", &prefs_common.encoding_method, P_ENUM,
192 {"allow_jisx0201_kana", "FALSE", &prefs_common.allow_jisx0201_kana,
193 P_BOOL, NULL, NULL, NULL},
196 {"auto_ext_editor", "FALSE", &prefs_common.auto_exteditor, P_BOOL,
198 {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
199 P_BOOL, NULL, NULL, NULL},
200 {"redirect_keep_from", "FALSE",
201 &prefs_common.redirect_keep_from, P_BOOL,
203 {"undo_level", "50", &prefs_common.undolevels, P_INT,
205 {"compose_with_format", "FALSE", &prefs_common.compose_with_format, P_BOOL,
207 {"compose_subject_format", "",
208 &prefs_common.compose_subject_format, P_STRING, NULL, NULL, NULL},
209 {"compose_body_format", N_("Hello,\\n"),
210 &prefs_common.compose_body_format, P_STRING, NULL, NULL, NULL},
212 {"linewrap_length", "72", &prefs_common.linewrap_len, P_INT,
214 {"linewrap_quotation", "TRUE", &prefs_common.linewrap_quote, P_BOOL,
216 {"linewrap_pastes", "TRUE", &prefs_common.linewrap_pastes, P_BOOL,
218 {"linewrap_auto", "TRUE", &prefs_common.autowrap, P_BOOL,
220 {"autosave", "TRUE", &prefs_common.autosave,
221 P_BOOL, NULL, NULL, NULL},
222 {"autosave_length", "50", &prefs_common.autosave_length, P_INT,
225 {"enable_aspell", "TRUE", &prefs_common.enable_aspell, P_BOOL,
227 {"aspell_path", ASPELL_PATH, &prefs_common.aspell_path, P_STRING,
229 {"dictionary", "", &prefs_common.dictionary, P_STRING,
231 {"alt_dictionary", "", &prefs_common.alt_dictionary, P_STRING,
233 {"aspell_sugmode", "1", &prefs_common.aspell_sugmode, P_INT,
235 {"use_alternate_dict", "FALSE", &prefs_common.use_alternate, P_BOOL,
237 {"check_while_typing", "TRUE", &prefs_common.check_while_typing, P_BOOL,
239 {"recheck_when_changing_dict", "TRUE", &prefs_common.recheck_when_changing_dict,
240 P_BOOL, NULL, NULL, NULL},
241 {"misspelled_color", "16711680", &prefs_common.misspelled_col, P_COLOR,
243 {"use_both_dicts", "FALSE", &prefs_common.use_both_dicts, P_BOOL,
246 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
248 {"compose_dnd_insert_or_attach", "0", &prefs_common.compose_dnd_mode, P_ENUM,
251 /* Account autoselection */
252 {"reply_account_autoselect", "TRUE",
253 &prefs_common.reply_account_autosel, P_BOOL,
255 {"forward_account_autoselect", "TRUE",
256 &prefs_common.forward_account_autosel, P_BOOL,
258 {"reedit_account_autoselect", "TRUE",
259 &prefs_common.reedit_account_autosel, P_BOOL,
262 {"default_reply_list", "TRUE", &prefs_common.default_reply_list, P_BOOL,
266 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
269 {"show_ruler", "FALSE", &prefs_common.show_ruler, P_BOOL,
274 {"reply_quote_mark", "> ", &prefs_common.quotemark, P_STRING,
276 {"reply_quote_format", N_("On %d\\n%f wrote:\\n\\n%q"),
277 &prefs_common.quotefmt, P_STRING, NULL, NULL, NULL},
279 {"forward_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
281 {"forward_quote_format",
282 N_("\\n\\nBegin forwarded message:\\n\\n"
283 "?d{Date: %d\\n}?f{From: %f\\n}?t{To: %t\\n}?c{Cc: %c\\n}"
284 "?n{Newsgroups: %n\\n}?s{Subject: %s\\n}\\n\\n%M"),
285 &prefs_common.fw_quotefmt, P_STRING, NULL, NULL, NULL},
286 {"quote_chars", ">", &prefs_common.quote_chars, P_STRING,
290 /* Obsolete fonts. For coexisting with Gtk+-1.2 version */
291 {"widget_font", NULL,
292 &prefs_common.widgetfont_gtk1, P_STRING, NULL, NULL, NULL},
293 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
294 &prefs_common.textfont_gtk1, P_STRING, NULL, NULL, NULL},
295 {"small_font", "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
296 &prefs_common.smallfont_gtk1, P_STRING, NULL, NULL, NULL},
297 {"bold_font", "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
298 &prefs_common.boldfont_gtk1, P_STRING, NULL, NULL, NULL},
299 {"normal_font", "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
300 &prefs_common.normalfont_gtk1, P_STRING, NULL, NULL, NULL},
304 {"widget_font_gtk2", NULL,
305 &SPECIFIC_PREFS.widgetfont, P_STRING, NULL, NULL, NULL},
306 {"message_font_gtk2", "Monospace 9",
307 &SPECIFIC_PREFS.textfont, P_STRING, NULL, NULL, NULL},
308 {"print_font_gtk2", "Monospace 9",
309 &SPECIFIC_PREFS.printfont, P_STRING, NULL, NULL, NULL},
310 {"small_font_gtk2", "Sans 9",
311 &SPECIFIC_PREFS.smallfont, P_STRING, NULL, NULL, NULL},
312 {"normal_font_gtk2", "Sans 9",
313 &SPECIFIC_PREFS.normalfont, P_STRING, NULL, NULL, NULL},
315 {"widget_font_gtk2", NULL,
316 &SPECIFIC_PREFS.widgetfont, P_STRING, NULL, NULL, NULL},
317 {"message_font_gtk2", "Monospace 8",
318 &SPECIFIC_PREFS.textfont, P_STRING, NULL, NULL, NULL},
319 {"print_font_gtk2", "Monospace 8",
320 &SPECIFIC_PREFS.printfont, P_STRING, NULL, NULL, NULL},
321 {"small_font_gtk2", "Sans 8",
322 &SPECIFIC_PREFS.smallfont, P_STRING, NULL, NULL, NULL},
323 {"normal_font_gtk2", "Sans 8",
324 &SPECIFIC_PREFS.normalfont, P_STRING, NULL, NULL, NULL},
327 {"custom_color1", "#ff9900", &prefs_common.custom_colorlabel[0].color, P_COLOR,
329 {"custom_colorlabel1", N_("Orange"), &prefs_common.custom_colorlabel[0].label, P_STRING,
331 {"custom_color2", "#ff0000", &prefs_common.custom_colorlabel[1].color, P_COLOR,
333 {"custom_colorlabel2", N_("Red"), &prefs_common.custom_colorlabel[1].label, P_STRING,
335 {"custom_color3", "#ff66ff", &prefs_common.custom_colorlabel[2].color, P_COLOR,
337 {"custom_colorlabel3", N_("Pink"), &prefs_common.custom_colorlabel[2].label, P_STRING,
339 {"custom_color4", "#00ccff", &prefs_common.custom_colorlabel[3].color, P_COLOR,
341 {"custom_colorlabel4", N_("Sky blue"), &prefs_common.custom_colorlabel[3].label, P_STRING,
343 {"custom_color5", "#0000ff", &prefs_common.custom_colorlabel[4].color, P_COLOR,
345 {"custom_colorlabel5", N_("Blue"), &prefs_common.custom_colorlabel[4].label, P_STRING,
347 {"custom_color6", "#009900", &prefs_common.custom_colorlabel[5].color, P_COLOR,
349 {"custom_colorlabel6", N_("Green"), &prefs_common.custom_colorlabel[5].label, P_STRING,
351 {"custom_color7", "#663333", &prefs_common.custom_colorlabel[6].color, P_COLOR,
353 {"custom_colorlabel7", N_("Brown"), &prefs_common.custom_colorlabel[6].label, P_STRING,
355 {"custom_color8", "#aaaaaa", &prefs_common.custom_colorlabel[7].color, P_COLOR,
357 {"custom_colorlabel8", N_("Grey"), &prefs_common.custom_colorlabel[7].label, P_STRING,
359 {"custom_color9", "#c07254", &prefs_common.custom_colorlabel[8].color, P_COLOR,
361 {"custom_colorlabel9", N_("Light brown"), &prefs_common.custom_colorlabel[8].label, P_STRING,
363 {"custom_color10", "#c00000", &prefs_common.custom_colorlabel[9].color, P_COLOR,
365 {"custom_colorlabel10", N_("Dark red"), &prefs_common.custom_colorlabel[9].label, P_STRING,
367 {"custom_color11", "#cc1074", &prefs_common.custom_colorlabel[10].color, P_COLOR,
369 {"custom_colorlabel11", N_("Dark pink"), &prefs_common.custom_colorlabel[10].label, P_STRING,
371 {"custom_color12", "#5094cd", &prefs_common.custom_colorlabel[11].color, P_COLOR,
373 {"custom_colorlabel12", N_("Steel blue"), &prefs_common.custom_colorlabel[11].label, P_STRING,
375 {"custom_color13", "#ffd500", &prefs_common.custom_colorlabel[12].color, P_COLOR,
377 {"custom_colorlabel13", N_("Gold"), &prefs_common.custom_colorlabel[12].label, P_STRING,
379 {"custom_color14", "#00d800", &prefs_common.custom_colorlabel[13].color, P_COLOR,
381 {"custom_colorlabel14", N_("Bright green"), &prefs_common.custom_colorlabel[13].label, P_STRING,
383 {"custom_color15", "#c060c0", &prefs_common.custom_colorlabel[14].color, P_COLOR,
385 {"custom_colorlabel15", N_("Magenta"), &prefs_common.custom_colorlabel[14].label, P_STRING,
389 {"display_image", "TRUE", &prefs_common.display_img, P_BOOL,
391 {"resize_image", "TRUE", &prefs_common.resize_img, P_BOOL,
393 {"inline_image", "TRUE", &prefs_common.inline_img, P_BOOL,
396 {"display_folder_unread_num", "0",
397 &prefs_common.display_folder_unread, P_INT,
399 {"newsgroup_abbrev_len", "16",
400 &prefs_common.ng_abbrev_len, P_INT,
403 {"translate_header", "FALSE", &prefs_common.trans_hdr, P_BOOL,
406 /* Display: Summary View */
407 {"use_address_book", "FALSE", &prefs_common.use_addr_book, P_BOOL,
409 {"thread_by_subject", "TRUE", &prefs_common.thread_by_subject, P_BOOL,
411 {"date_format", N_("%y/%m/%d(%a) %H:%M"), &prefs_common.date_format,
412 P_STRING, NULL, NULL, NULL},
414 {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
417 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
420 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
423 {"toolbar_style", "1", &prefs_common.toolbar_style, P_ENUM,
426 {"toolbar_detachable", "FALSE", &prefs_common.toolbar_detachable, P_BOOL,
429 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
431 {"show_searchbar", "TRUE", &prefs_common.show_searchbar, P_BOOL,
434 {"show_statusbar", "FALSE", &prefs_common.show_statusbar, P_BOOL,
436 {"show_searchbar", "FALSE", &prefs_common.show_searchbar, P_BOOL,
440 {"summary_col_show_mark", "TRUE",
441 &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
442 {"summary_col_show_unread", "TRUE",
443 &prefs_common.summary_col_visible[S_COL_STATUS], P_BOOL, NULL, NULL, NULL},
444 {"summary_col_show_subject", "TRUE",
445 &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
446 {"summary_col_show_from", "TRUE",
447 &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
448 {"summary_col_show_to", "FALSE",
449 &prefs_common.summary_col_visible[S_COL_TO], P_BOOL, NULL, NULL, NULL},
450 {"summary_col_show_date", "TRUE",
451 &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
452 {"summary_col_show_mime", "TRUE",
453 &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
454 {"summary_col_show_size", "TRUE",
455 &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
456 {"summary_col_show_number", "FALSE",
457 &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
458 {"summary_col_show_score", "FALSE",
459 &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL},
460 {"summary_col_show_locked", "FALSE",
461 &prefs_common.summary_col_visible[S_COL_LOCKED], P_BOOL, NULL, NULL, NULL},
462 {"summary_col_show_tags", "FALSE",
463 &prefs_common.summary_col_visible[S_COL_TAGS], P_BOOL, NULL, NULL, NULL},
465 {"summary_col_pos_mark", "0",
466 &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
467 {"summary_col_pos_unread", "1",
468 &prefs_common.summary_col_pos[S_COL_STATUS], P_INT, NULL, NULL, NULL},
469 {"summary_col_pos_mime", "2",
470 &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
471 {"summary_col_pos_subject", "3",
472 &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
473 {"summary_col_pos_from", "4",
474 &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
475 {"summary_col_pos_date", "5",
476 &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
477 {"summary_col_pos_size", "6",
478 &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
479 {"summary_col_pos_number", "7",
480 &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
481 {"summary_col_pos_score", "8",
482 &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL},
483 {"summary_col_pos_locked", "9",
484 &prefs_common.summary_col_pos[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
485 {"summary_col_pos_to", "10",
486 &prefs_common.summary_col_pos[S_COL_TO], P_INT, NULL, NULL, NULL},
487 {"summary_col_pos_tags", "11",
488 &prefs_common.summary_col_pos[S_COL_TAGS], P_INT, NULL, NULL, NULL},
490 {"summary_col_size_mark", "10",
491 &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
492 {"summary_col_size_unread", "13",
493 &prefs_common.summary_col_size[S_COL_STATUS], P_INT, NULL, NULL, NULL},
494 {"summary_col_size_mime", "10",
495 &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
497 {"summary_col_size_subject", "200",
498 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
499 {"summary_col_size_from", "120",
500 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
501 {"summary_col_size_to", "120",
502 &prefs_common.summary_col_size[S_COL_TO], P_INT, NULL, NULL, NULL},
504 {"summary_col_size_subject", "300",
505 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
506 {"summary_col_size_from", "150",
507 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
508 {"summary_col_size_to", "150",
509 &prefs_common.summary_col_size[S_COL_TO], P_INT, NULL, NULL, NULL},
512 {"summary_col_size_date", "118",
513 &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
514 {"summary_col_size_size", "45",
515 &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
516 {"summary_col_size_number", "40",
517 &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
518 {"summary_col_size_score", "40",
519 &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL},
520 {"summary_col_size_locked", "13",
521 &prefs_common.summary_col_size[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
522 {"summary_col_size_tags", "150",
523 &prefs_common.summary_col_size[S_COL_TAGS], P_INT, NULL, NULL, NULL},
526 {"folderwin_x", "16", &prefs_common.folderwin_x, P_INT,
528 {"folderwin_y", "16", &prefs_common.folderwin_y, P_INT,
530 {"folderview_width", "270", &prefs_common.folderview_width, P_INT,
532 {"folderview_height", "450", &prefs_common.folderview_height, P_INT,
534 {"folderview_visible", "TRUE", &prefs_common.folderview_visible, P_BOOL,
537 {"folder_col_show_folder", "TRUE",
538 &prefs_common.folder_col_visible[F_COL_FOLDER], P_BOOL, NULL, NULL, NULL},
539 {"folder_col_show_new", "TRUE",
540 &prefs_common.folder_col_visible[F_COL_NEW], P_BOOL, NULL, NULL, NULL},
541 {"folder_col_show_unread", "TRUE",
542 &prefs_common.folder_col_visible[F_COL_UNREAD], P_BOOL, NULL, NULL, NULL},
543 {"folder_col_show_total", "TRUE",
544 &prefs_common.folder_col_visible[F_COL_TOTAL], P_BOOL, NULL, NULL, NULL},
546 {"folder_col_pos_folder", "0",
547 &prefs_common.folder_col_pos[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
548 {"folder_col_pos_new", "1",
549 &prefs_common.folder_col_pos[F_COL_NEW], P_INT, NULL, NULL, NULL},
550 {"folder_col_pos_unread", "2",
551 &prefs_common.folder_col_pos[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
552 {"folder_col_pos_total", "3",
553 &prefs_common.folder_col_pos[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
556 {"folder_col_size_folder", "120",
557 &prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
558 {"folder_col_size_new", "32",
559 &prefs_common.folder_col_size[F_COL_NEW], P_INT, NULL, NULL, NULL},
560 {"folder_col_size_unread", "32",
561 &prefs_common.folder_col_size[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
562 {"folder_col_size_total", "32",
563 &prefs_common.folder_col_size[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
565 {"folder_col_size_folder", "400",
566 &prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
567 {"folder_col_size_new", "32",
568 &prefs_common.folder_col_size[F_COL_NEW], P_INT, NULL, NULL, NULL},
569 {"folder_col_size_unread", "32",
570 &prefs_common.folder_col_size[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
571 {"folder_col_size_total", "32",
572 &prefs_common.folder_col_size[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
574 {"summaryview_width", "500", &prefs_common.summaryview_width, P_INT,
576 {"summaryview_height", "244", &prefs_common.summaryview_height, P_INT,
579 {"main_messagewin_x", "256", &prefs_common.main_msgwin_x, P_INT,
581 {"main_messagewin_y", "210", &prefs_common.main_msgwin_y, P_INT,
583 {"messageview_width", "500", &prefs_common.msgview_width, P_INT,
585 {"messageview_height", "213", &prefs_common.msgview_height, P_INT,
587 {"messageview_visible", "TRUE", &prefs_common.msgview_visible, P_BOOL,
590 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
592 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
594 {"mainview_width", "500", &prefs_common.mainview_width, P_INT,
596 {"mainview_height", "400", &prefs_common.mainview_height, P_INT,
598 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
600 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
603 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
605 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
607 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
609 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
611 {"sourcewin_width", "600", &prefs_common.sourcewin_width, P_INT,
613 {"sourcewin_height", "500", &prefs_common.sourcewin_height, P_INT,
615 {"compose_width", "600", &prefs_common.compose_width, P_INT,
617 {"compose_height", "560", &prefs_common.compose_height, P_INT,
620 {"mainwin_width", "700", &prefs_common.mainwin_width, P_INT,
622 {"mainwin_height", "470", &prefs_common.mainwin_height, P_INT,
624 {"messagewin_width", "700", &prefs_common.msgwin_width, P_INT,
626 {"messagewin_height", "470", &prefs_common.msgwin_height, P_INT,
628 {"sourcewin_width", "700", &prefs_common.sourcewin_width, P_INT,
630 {"sourcewin_height", "470", &prefs_common.sourcewin_height, P_INT,
632 {"compose_width", "700", &prefs_common.compose_width, P_INT,
634 {"compose_height", "470", &prefs_common.compose_height, P_INT,
637 {"compose_x", "0", &prefs_common.compose_x, P_INT,
639 {"compose_y", "0", &prefs_common.compose_y, P_INT,
642 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
645 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_COLOR,
647 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_COLOR,
649 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_COLOR,
651 {"enable_bgcolor", "FALSE", &prefs_common.enable_bgcolor, P_BOOL,
653 {"quote_level1_bgcolor", "13421772", &prefs_common.quote_level1_bgcol, P_COLOR,
655 {"quote_level2_bgcolor", "13948116", &prefs_common.quote_level2_bgcol, P_COLOR,
657 {"quote_level3_bgcolor", "14540253", &prefs_common.quote_level3_bgcol, P_COLOR,
659 {"uri_color", "32512", &prefs_common.uri_col, P_COLOR,
661 {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_COLOR,
663 {"signature_color", "7960953", &prefs_common.signature_col, P_COLOR,
665 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
666 P_BOOL, NULL, NULL, NULL},
668 {"display_header_pane", "FALSE", &prefs_common.display_header_pane,
669 P_BOOL, NULL, NULL, NULL},
670 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
672 {"display_xface", "TRUE", &prefs_common.display_xface,
673 P_BOOL, NULL, NULL, NULL},
674 {"render_html", "TRUE", &prefs_common.render_html, P_BOOL,
676 {"invoke_plugin_on_html", "FALSE", &prefs_common.invoke_plugin_on_html, P_BOOL,
678 {"line_space", "2", &prefs_common.line_space, P_INT,
680 {"never_send_retrcpt", "FALSE", &prefs_common.never_send_retrcpt, P_BOOL,
683 {"enable_smooth_scroll", "FALSE",
684 &prefs_common.enable_smooth_scroll, P_BOOL,
686 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
688 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
690 {"respect_flowed_format", "FALSE", &prefs_common.respect_flowed_format, P_BOOL,
693 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
696 {"use_different_print_font", "FALSE", &prefs_common.use_different_print_font, P_BOOL,
699 {"attach_desc", "TRUE", &prefs_common.attach_desc, P_BOOL,
701 {"attach_save_directory", NULL,
702 &SPECIFIC_PREFS.attach_save_dir, P_STRING, NULL, NULL, NULL},
703 {"attach_load_directory", NULL,
704 &SPECIFIC_PREFS.attach_load_dir, P_STRING, NULL, NULL, NULL},
707 {"mime_textviewer", NULL,
708 &SPECIFIC_PREFS.mime_textviewer, P_STRING, NULL, NULL, NULL},
709 {"mime_open_command", "gedit '%s'",
710 &SPECIFIC_PREFS.mime_open_cmd, P_STRING, NULL, NULL, NULL},
714 {"layout_mode", "0", &prefs_common.layout_mode, P_INT,
717 {"layout_mode", "5", &prefs_common.layout_mode, P_INT,
720 /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
721 NULL, NULL, NULL}, */
722 {"always_show_message_when_selected", "FALSE",
723 &prefs_common.always_show_msg,
724 P_BOOL, NULL, NULL, NULL},
725 {"select_on_entry", "3", &prefs_common.select_on_entry,
726 P_ENUM, NULL, NULL, NULL},
728 {"summary_select_prio1", "0", &prefs_common.summary_select_prio[0], P_ENUM,
730 {"summary_select_prio2", "0", &prefs_common.summary_select_prio[1], P_ENUM,
732 {"summary_select_prio3", "0", &prefs_common.summary_select_prio[2], P_ENUM,
734 {"summary_select_prio4", "0", &prefs_common.summary_select_prio[3], P_ENUM,
736 {"summary_select_prio5", "0", &prefs_common.summary_select_prio[4], P_ENUM,
738 {"summary_select_prio6", "0", &prefs_common.summary_select_prio[5], P_ENUM,
741 {"mark_as_read_on_new_window", "FALSE",
742 &prefs_common.mark_as_read_on_new_window,
743 P_BOOL, NULL, NULL, NULL},
744 {"mark_as_read_delay", "0",
745 &prefs_common.mark_as_read_delay, P_INT,
747 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
749 {"nextunreadmsg_dialog", "1", &prefs_common.next_unread_msg_dialog, P_ENUM,
752 {"pixmap_theme_path", DEFAULT_PIXMAP_THEME,
753 &SPECIFIC_PREFS.pixmap_theme_path, P_STRING,
756 {"ask_mark_all_read", "TRUE", &prefs_common.ask_mark_all_read, P_BOOL,
759 {"ask_apply_per_account_filtering_rules", "TRUE", &prefs_common.ask_apply_per_account_filtering_rules, P_BOOL,
761 {"apply_per_account_filtering_rules", "0", &prefs_common.apply_per_account_filtering_rules, P_ENUM,
765 {"addressbook_use_editaddress_dialog", "TRUE", &prefs_common.addressbook_use_editaddress_dialog,
766 P_BOOL, NULL, NULL, NULL},
767 {"addressbook_hpaned_pos", "-1", &prefs_common.addressbook_hpaned_pos,
768 P_INT, NULL, NULL, NULL},
769 {"addressbook_vpaned_pos", "-1", &prefs_common.addressbook_vpaned_pos,
770 P_INT, NULL, NULL, NULL},
773 {"uri_open_command", DEFAULT_BROWSER_CMD,
774 &SPECIFIC_PREFS.uri_cmd, P_STRING, NULL, NULL, NULL},
775 {"print_command", "lpr %s",
776 &SPECIFIC_PREFS.print_cmd, P_STRING, NULL, NULL, NULL},
777 {"ext_editor_command", DEFAULT_EDITOR_CMD,
778 &SPECIFIC_PREFS.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
779 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
780 P_BOOL, NULL, NULL, NULL},
781 {"confirm_on_exit", "FALSE", &prefs_common.confirm_on_exit, P_BOOL,
783 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
785 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
787 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
788 P_BOOL, NULL, NULL, NULL},
789 {"work_offline", "FALSE", &prefs_common.work_offline, P_BOOL,
791 {"summary_quicksearch_type", "0", &prefs_common.summary_quicksearch_type, P_INT,
794 {"summary_quicksearch_recurse", "1", &prefs_common.summary_quicksearch_recurse, P_INT,
797 {"summary_quicksearch_recurse", "0", &prefs_common.summary_quicksearch_recurse, P_INT,
801 {"io_timeout_secs", "60", &prefs_common.io_timeout_secs,
802 P_INT, NULL, NULL, NULL},
803 {"hide_score", "-9999", &prefs_common.kill_score, P_INT,
805 {"important_score", "1", &prefs_common.important_score, P_INT,
808 {"clip_log", "TRUE", &prefs_common.cliplog, P_BOOL,
810 {"log_length", "500", &prefs_common.loglength, P_INT,
813 {"enable_log_standard", "TRUE", &prefs_common.enable_log_standard, P_BOOL,
815 {"enable_log_warning", "TRUE", &prefs_common.enable_log_warning, P_BOOL,
817 {"enable_log_error", "TRUE", &prefs_common.enable_log_error, P_BOOL,
819 {"enable_log_status", "TRUE", &prefs_common.enable_log_status, P_BOOL,
822 {"enable_log_standard", "FALSE", &prefs_common.enable_log_standard, P_BOOL,
824 {"enable_log_warning", "FALSE", &prefs_common.enable_log_warning, P_BOOL,
826 {"enable_log_error", "FALSE", &prefs_common.enable_log_error, P_BOOL,
828 {"enable_log_status", "FALSE", &prefs_common.enable_log_status, P_BOOL,
831 {"log_msg_color", "#00af00", &prefs_common.log_msg_color, P_COLOR,
833 {"log_warn_color", "#af0000", &prefs_common.log_warn_color, P_COLOR,
835 {"log_error_color", "#af0000", &prefs_common.log_error_color, P_COLOR,
837 {"log_in_color", "#000000", &prefs_common.log_in_color, P_COLOR,
839 {"log_out_color", "#0000ef", &prefs_common.log_out_color, P_COLOR,
841 {"log_status_ok_color", "#00af00", &prefs_common.log_status_ok_color, P_COLOR,
843 {"log_status_nok_color", "#0000af", &prefs_common.log_status_nok_color, P_COLOR,
845 {"log_status_skip_color", "#aa00aa", &prefs_common.log_status_skip_color, P_COLOR,
848 {"enable_filtering_debug", "FALSE", &prefs_common.enable_filtering_debug, P_BOOL,
850 {"filtering_debug_level", "1", &prefs_common.filtering_debug_level, P_INT,
852 {"enable_filtering_debug_inc", "TRUE", &prefs_common.enable_filtering_debug_inc, P_BOOL,
854 {"enable_filtering_debug_manual", "TRUE", &prefs_common.enable_filtering_debug_manual, P_BOOL,
856 {"enable_filtering_debug_folder_proc", "FALSE", &prefs_common.enable_filtering_debug_folder_proc, P_BOOL,
858 {"enable_filtering_debug_pre_proc", "FALSE", &prefs_common.enable_filtering_debug_pre_proc, P_BOOL,
860 {"enable_filtering_debug_post_proc", "FALSE", &prefs_common.enable_filtering_debug_post_proc, P_BOOL,
862 {"filtering_debug_clip_log", "TRUE", &prefs_common.filtering_debug_cliplog, P_BOOL,
864 {"filtering_debug_log_length", "500", &prefs_common.filtering_debug_loglength, P_INT,
867 {"gtk_can_change_accels", "TRUE", &prefs_common.gtk_can_change_accels, P_BOOL,
870 {"color_new", "179", &prefs_common.color_new, P_COLOR,
873 /* Some windows' sizes */
874 {"filteringwin_width", "500", &prefs_common.filteringwin_width, P_INT,
876 {"filteringwin_height", "-1", &prefs_common.filteringwin_height, P_INT,
879 {"filteringactionwin_width", "490", &prefs_common.filteringactionwin_width, P_INT,
881 {"filteringactionwin_height", "-1", &prefs_common.filteringactionwin_height, P_INT,
884 {"matcherwin_width", "520", &prefs_common.matcherwin_width, P_INT,
886 {"matcherwin_height", "-1", &prefs_common.matcherwin_height, P_INT,
889 {"templateswin_width", "480", &prefs_common.templateswin_width, P_INT,
891 {"templateswin_height", "-1", &prefs_common.templateswin_height, P_INT,
894 {"actionswin_width", "486", &prefs_common.actionswin_width, P_INT,
896 {"actionswin_height", "-1", &prefs_common.actionswin_height, P_INT,
899 {"tagswin_width", "486", &prefs_common.tagswin_width, P_INT,
901 {"tagswin_height", "-1", &prefs_common.tagswin_height, P_INT,
904 {"addressbookwin_width", "520", &prefs_common.addressbookwin_width, P_INT,
906 {"addressbookwin_height", "-1", &prefs_common.addressbookwin_height, P_INT,
909 {"addressbookeditpersonwin_width", "640", &prefs_common.addressbookeditpersonwin_width, P_INT,
911 {"addressbookeditpersonwin_height", "320", &prefs_common.addressbookeditpersonwin_height, P_INT,
914 {"addressbookeditgroupwin_width", "580", &prefs_common.addressbookeditgroupwin_width, P_INT,
916 {"addressbookeditgroupwin_height", "340", &prefs_common.addressbookeditgroupwin_height, P_INT,
919 {"pluginswin_width", "-1", &prefs_common.pluginswin_width, P_INT,
921 {"pluginswin_height", "-1", &prefs_common.pluginswin_height, P_INT,
924 {"prefswin_width", "600", &prefs_common.prefswin_width, P_INT,
926 {"prefswin_height", "-1", &prefs_common.prefswin_height, P_INT,
929 {"folderitemwin_width", "500", &prefs_common.folderitemwin_width, P_INT,
931 {"folderitemwin_height", "-1", &prefs_common.folderitemwin_height, P_INT,
934 {"zero_replacement_char", "0", &prefs_common.zero_replacement, P_STRING,
937 {"editaccountwin_width", "500", &prefs_common.editaccountwin_width, P_INT,
939 {"editaccountwin_height", "-1", &prefs_common.editaccountwin_height, P_INT,
942 {"accountswin_width", "500", &prefs_common.accountswin_width, P_INT,
944 {"accountswin_height", "-1", &prefs_common.accountswin_height, P_INT,
947 {"logwin_width", "520", &prefs_common.logwin_width, P_INT,
949 {"logwin_height", "-1", &prefs_common.logwin_height, P_INT,
952 {"filtering_debugwin_width", "600", &prefs_common.filtering_debugwin_width, P_INT,
954 {"filtering_debugwin_height", "-1", &prefs_common.filtering_debugwin_height, P_INT,
957 {"folderselwin_width", "300", &prefs_common.folderselwin_width, P_INT,
959 {"folderselwin_height", "-1", &prefs_common.folderselwin_height, P_INT,
962 {"addressaddwin_width", "300", &prefs_common.addressaddwin_width, P_INT,
964 {"addressaddwin_height", "-1", &prefs_common.addressaddwin_height, P_INT,
967 {"addressbook_folderselwin_width", "300", &prefs_common.addressbook_folderselwin_width, P_INT,
969 {"addressbook_folderselwin_height", "-1", &prefs_common.addressbook_folderselwin_height, P_INT,
973 {"warn_dnd", "1", &prefs_common.warn_dnd, P_INT,
975 {"utf8_instead_of_locale_for_broken_mail", "0",
976 &prefs_common.broken_are_utf8, P_INT,
978 {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
980 {"use_stripes_everywhere", "TRUE", &prefs_common.use_stripes_everywhere, P_BOOL,
982 {"use_stripes_in_summaries", "TRUE", &prefs_common.use_stripes_in_summaries, P_BOOL,
984 {"stripes_color_offset", "4000", &prefs_common.stripes_color_offset, P_INT,
986 {"enable_dotted_lines", "FALSE", &prefs_common.enable_dotted_lines, P_BOOL,
988 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
990 {"folderview_vscrollbar_policy", "0",
991 &prefs_common.folderview_vscrollbar_policy, P_ENUM,
993 {"textview_cursor_visible", "FALSE",
994 &prefs_common.textview_cursor_visible, P_BOOL,
996 {"hover_timeout", "500", &prefs_common.hover_timeout, P_INT,
999 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
1001 {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
1004 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
1006 {"cache_min_keep_time", "0", &prefs_common.cache_min_keep_time, P_INT,
1009 {"thread_by_subject_max_age", "10", &prefs_common.thread_by_subject_max_age,
1010 P_INT, NULL, NULL, NULL },
1011 {"last_opened_folder", "", &prefs_common.last_opened_folder,
1012 P_STRING, NULL, NULL, NULL },
1013 {"goto_last_folder_on_startup", "FALSE", &prefs_common.goto_last_folder_on_startup,
1014 P_BOOL, NULL, NULL, NULL },
1015 {"summary_quicksearch_sticky", "1", &prefs_common.summary_quicksearch_sticky, P_INT,
1017 {"summary_quicksearch_dynamic", "0", &prefs_common.summary_quicksearch_dynamic, P_INT,
1019 {"summary_quicksearch_autorun", "0", &prefs_common.summary_quicksearch_autorun, P_INT,
1021 {"statusbar_update_step", "10", &prefs_common.statusbar_update_step, P_INT,
1023 {"compose_no_markup", "FALSE", &prefs_common.compose_no_markup, P_BOOL,
1025 {"skip_ssl_cert_check", "FALSE", &prefs_common.skip_ssl_cert_check, P_BOOL,
1027 {"live_dangerously", "FALSE", &prefs_common.live_dangerously, P_BOOL,
1029 {"hide_quotes", "0", &prefs_common.hide_quotes, P_INT,
1031 {"unsafe_ssl_certs", "FALSE", &prefs_common.unsafe_ssl_certs, P_BOOL,
1034 {"real_time_sync", "FALSE", &prefs_common.real_time_sync, P_BOOL,
1037 {"real_time_sync", "TRUE", &prefs_common.real_time_sync, P_BOOL,
1040 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
1043 PrefsCommon *prefs_common_get(void)
1045 return &prefs_common;
1049 * Read history list from the specified history file
1051 static GList *prefs_common_read_history(const gchar *history)
1055 gchar buf[PREFSBUFSIZE];
1058 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1060 if ((fp = g_fopen(path, "rb")) == NULL) {
1061 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
1066 while (fgets(buf, sizeof(buf), fp) != NULL) {
1068 if (buf[0] == '\0') continue;
1069 tmp = add_history(tmp, buf);
1073 tmp = g_list_reverse(tmp);
1078 void prefs_common_read_config(void)
1083 rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMON_RC, NULL);
1084 prefs_read_config(param, "Common", rcpath, NULL);
1086 prefs_read_config(param_os_specific, "CommonWin32", rcpath, NULL);
1091 tmp = g_strdup(gettext(prefs_common.quotefmt));
1092 g_free(prefs_common.quotefmt);
1093 prefs_common.quotefmt = tmp;
1095 tmp = g_strdup(gettext(prefs_common.fw_quotefmt));
1096 g_free(prefs_common.fw_quotefmt);
1097 prefs_common.fw_quotefmt = tmp;
1099 tmp = g_strdup(gettext(prefs_common.date_format));
1100 g_free(prefs_common.date_format);
1101 prefs_common.date_format = tmp;
1103 tmp = g_strdup(gettext(prefs_common.compose_body_format));
1104 g_free(prefs_common.compose_body_format);
1105 prefs_common.compose_body_format = tmp;
1107 prefs_common.mime_open_cmd_history =
1108 prefs_common_read_history(COMMAND_HISTORY);
1109 prefs_common.summary_quicksearch_history =
1110 prefs_common_read_history(QUICKSEARCH_HISTORY);
1111 prefs_common.summary_search_from_history =
1112 prefs_common_read_history(SUMMARY_SEARCH_FROM_HISTORY);
1113 prefs_common.summary_search_to_history =
1114 prefs_common_read_history(SUMMARY_SEARCH_TO_HISTORY);
1115 prefs_common.summary_search_subject_history =
1116 prefs_common_read_history(SUMMARY_SEARCH_SUBJECT_HISTORY);
1117 prefs_common.summary_search_body_history =
1118 prefs_common_read_history(SUMMARY_SEARCH_BODY_HISTORY);
1119 prefs_common.summary_search_adv_condition_history =
1120 prefs_common_read_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY);
1121 prefs_common.message_search_history =
1122 prefs_common_read_history(MESSAGE_SEARCH_HISTORY);
1124 colorlabel_update_colortable_from_prefs();
1130 g_warning("failed to write\n"); \
1135 * Save history list to the specified history file
1137 static void prefs_common_save_history(const gchar *history, GList *list)
1141 gchar *path, *tmp_path;
1143 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1145 tmp_path = g_strconcat(path, ".tmp", NULL);
1147 if ((fp = g_fopen(tmp_path, "wb")) == NULL) {
1148 FILE_OP_ERROR(tmp_path, "fopen");
1152 for (cur = list; cur != NULL; cur = cur->next) {
1153 TRY(fputs((gchar *)cur->data, fp) != EOF &&
1154 fputc('\n', fp) != EOF);
1157 if (fclose(fp) == EOF) {
1158 FILE_OP_ERROR(tmp_path, "fclose");
1166 if (g_rename(tmp_path, path) < 0) {
1167 FILE_OP_ERROR(path, "rename");
1180 void prefs_common_write_config(void)
1182 prefs_write_config(param, "Common", COMMON_RC);
1184 prefs_write_config(param_os_specific, "CommonWin32", COMMON_RC);
1187 prefs_common_save_history(COMMAND_HISTORY,
1188 prefs_common.mime_open_cmd_history);
1189 prefs_common_save_history(QUICKSEARCH_HISTORY,
1190 prefs_common.summary_quicksearch_history);
1191 prefs_common_save_history(SUMMARY_SEARCH_FROM_HISTORY,
1192 prefs_common.summary_search_from_history);
1193 prefs_common_save_history(SUMMARY_SEARCH_TO_HISTORY,
1194 prefs_common.summary_search_to_history);
1195 prefs_common_save_history(SUMMARY_SEARCH_SUBJECT_HISTORY,
1196 prefs_common.summary_search_subject_history);
1197 prefs_common_save_history(SUMMARY_SEARCH_BODY_HISTORY,
1198 prefs_common.summary_search_body_history);
1199 prefs_common_save_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY,
1200 prefs_common.summary_search_adv_condition_history);
1201 prefs_common_save_history(MESSAGE_SEARCH_HISTORY,
1202 prefs_common.message_search_history);
1205 /* make a copy of string 'in' into buffer 'out'. un-escape \ sequences.
1206 both 'in' and 'out' must be non-NULL.
1207 'out' must be a pointer to a buffer whose size is at least equal
1208 to strlen(txt)+1, this buffer will get cleared. out's contents
1209 will always get set to a valid string, even if it's "".*/
1210 void pref_get_unescaped_pref(gchar *out, const gchar *in)
1217 g_return_if_fail( in != NULL );
1218 g_return_if_fail( out != NULL );
1222 memset(out, 0, strlen(in)+1);
1223 while (*i != '\0') {
1224 if (*i == '\\' && *(i+1) == 'n') {
1227 } else if (*i == '\\' && *(i+1) == 't') {
1230 } else if (*i == '\\' && *(i+1) == '\\') {
1241 /* make a copy of string 'in' into buffer 'out'. escape \ sequences.
1242 both 'in' and 'out' must be non-NULL.
1243 'out' must be a pointer to a buffer whose size is at least equal
1244 to 2*strlen(txt)+1. out's contents will always get set to a valid
1245 string, even if it's "". */
1246 void pref_get_escaped_pref(gchar *out, const gchar *in)
1253 g_return_if_fail( in != NULL );
1254 g_return_if_fail( out != NULL );
1258 while (*i != '\0') {
1262 } else if (*i == '\t') {
1265 } else if (*i == '\\') {
1276 /* set the contents of a textview widget from the internal \-escaped
1277 representation of a pref string. both txt and textview must be non-NULL. */
1278 void pref_set_textview_from_pref(GtkTextView *textview, const gchar *txt)
1280 GtkTextBuffer *buffer;
1283 g_return_if_fail( textview != NULL );
1285 buffer = gtk_text_view_get_buffer(textview);
1288 gtk_text_buffer_set_text(buffer, "", -1);
1290 out = malloc(strlen(txt)+1);
1292 pref_get_unescaped_pref(out, txt);
1294 gtk_text_buffer_set_text(buffer, out?out:"", -1);
1299 /* set the contents of a gtkentry widget from the internal \-escaped
1300 representation of a pref string. both txt and entry must be non-NULL. */
1301 void pref_set_entry_from_pref(GtkEntry *entry, const gchar *txt)
1305 g_return_if_fail( entry != NULL );
1307 gtk_entry_set_text(entry, "");
1309 out = malloc(strlen(txt)+1);
1311 pref_get_unescaped_pref(out, txt);
1313 gtk_entry_set_text(entry, out?out:"");
1318 /* get the \-escaped internal representation of a pref from the contents of
1319 a textview widget. textview must be non-NULL. */
1320 gchar *pref_get_pref_from_textview(GtkTextView *textview)
1322 GtkTextBuffer *buffer;
1323 GtkTextIter start, end;
1326 g_return_val_if_fail( textview != NULL, "" );
1328 buffer = gtk_text_view_get_buffer(textview);
1329 gtk_text_buffer_get_start_iter(buffer, &start);
1330 gtk_text_buffer_get_iter_at_offset(buffer, &end, -1);
1331 tmp = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
1332 out = malloc(2*strlen(tmp)+1);
1334 pref_get_escaped_pref(out, tmp);
1340 /* get the \-escaped internal representation of a pref from the contents of
1341 a gtkentry widget. entry must be non-NULL. */
1342 gchar *pref_get_pref_from_entry(GtkEntry *entry)
1346 g_return_val_if_fail( entry != NULL, "" );
1348 tmp = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
1349 out = malloc(2*strlen(tmp)+1);
1351 pref_get_escaped_pref(out, tmp);
1357 /* ugly hack to be able to get this pref from ssl_certificate.c */
1358 gboolean prefs_common_unsafe_ssl_certs(void)
1360 return prefs_common.unsafe_ssl_certs;
1363 gboolean prefs_common_enable_log_standard(void)
1365 return prefs_common.enable_log_standard;
1368 gboolean prefs_common_enable_log_warning(void)
1370 return prefs_common.enable_log_warning;
1372 gboolean prefs_common_enable_log_error(void)
1374 return prefs_common.enable_log_error;
1376 gboolean prefs_common_enable_log_status(void)
1378 return prefs_common.enable_log_status;
1381 return the translated name of a header, if the translate_header option is
1382 set, otherwise return the untranslated header name (header_name itself).
1383 this function is provided for convenience, it's an interface to
1384 prefs_common.trans_hdr.
1385 works with header names either with or without trailing colon, provided
1386 that gettext found such header name in the sources (they should all be
1387 found in src/gtk/headers.h anyway).
1389 const gchar *prefs_common_translated_header_name(const gchar *header_name)
1391 if (header_name == NULL || *header_name == '\0')
1394 return prefs_common.trans_hdr ? gettext(header_name) : header_name;