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 2 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, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
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,
428 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
431 {"show_searchbar", "TRUE", &prefs_common.show_searchbar, P_BOOL,
434 {"show_searchbar", "FALSE", &prefs_common.show_searchbar, P_BOOL,
438 {"summary_col_show_mark", "TRUE",
439 &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
440 {"summary_col_show_unread", "TRUE",
441 &prefs_common.summary_col_visible[S_COL_STATUS], P_BOOL, NULL, NULL, NULL},
442 {"summary_col_show_subject", "TRUE",
443 &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
444 {"summary_col_show_from", "TRUE",
445 &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
446 {"summary_col_show_to", "FALSE",
447 &prefs_common.summary_col_visible[S_COL_TO], P_BOOL, NULL, NULL, NULL},
448 {"summary_col_show_date", "TRUE",
449 &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
450 {"summary_col_show_mime", "TRUE",
451 &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
452 {"summary_col_show_size", "TRUE",
453 &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
454 {"summary_col_show_number", "FALSE",
455 &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
456 {"summary_col_show_score", "FALSE",
457 &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL},
458 {"summary_col_show_locked", "FALSE",
459 &prefs_common.summary_col_visible[S_COL_LOCKED], P_BOOL, NULL, NULL, NULL},
460 {"summary_col_show_tags", "FALSE",
461 &prefs_common.summary_col_visible[S_COL_TAGS], P_BOOL, NULL, NULL, NULL},
463 {"summary_col_pos_mark", "0",
464 &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
465 {"summary_col_pos_unread", "1",
466 &prefs_common.summary_col_pos[S_COL_STATUS], P_INT, NULL, NULL, NULL},
467 {"summary_col_pos_mime", "2",
468 &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
469 {"summary_col_pos_subject", "3",
470 &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
471 {"summary_col_pos_from", "4",
472 &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
473 {"summary_col_pos_date", "5",
474 &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
475 {"summary_col_pos_size", "6",
476 &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
477 {"summary_col_pos_number", "7",
478 &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
479 {"summary_col_pos_score", "8",
480 &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL},
481 {"summary_col_pos_locked", "9",
482 &prefs_common.summary_col_pos[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
483 {"summary_col_pos_to", "10",
484 &prefs_common.summary_col_pos[S_COL_TO], P_INT, NULL, NULL, NULL},
485 {"summary_col_pos_tags", "11",
486 &prefs_common.summary_col_pos[S_COL_TAGS], P_INT, NULL, NULL, NULL},
488 {"summary_col_size_mark", "10",
489 &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
490 {"summary_col_size_unread", "13",
491 &prefs_common.summary_col_size[S_COL_STATUS], P_INT, NULL, NULL, NULL},
492 {"summary_col_size_mime", "10",
493 &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
495 {"summary_col_size_subject", "200",
496 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
497 {"summary_col_size_from", "120",
498 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
499 {"summary_col_size_to", "120",
500 &prefs_common.summary_col_size[S_COL_TO], P_INT, NULL, NULL, NULL},
502 {"summary_col_size_subject", "300",
503 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
504 {"summary_col_size_from", "150",
505 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
506 {"summary_col_size_to", "150",
507 &prefs_common.summary_col_size[S_COL_TO], P_INT, NULL, NULL, NULL},
510 {"summary_col_size_date", "118",
511 &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
512 {"summary_col_size_size", "45",
513 &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
514 {"summary_col_size_number", "40",
515 &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
516 {"summary_col_size_score", "40",
517 &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL},
518 {"summary_col_size_locked", "13",
519 &prefs_common.summary_col_size[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
520 {"summary_col_size_tags", "150",
521 &prefs_common.summary_col_size[S_COL_TAGS], P_INT, NULL, NULL, NULL},
524 {"folderwin_x", "16", &prefs_common.folderwin_x, P_INT,
526 {"folderwin_y", "16", &prefs_common.folderwin_y, P_INT,
528 {"folderview_width", "270", &prefs_common.folderview_width, P_INT,
530 {"folderview_height", "450", &prefs_common.folderview_height, P_INT,
532 {"folderview_visible", "TRUE", &prefs_common.folderview_visible, P_BOOL,
535 {"folder_col_show_folder", "TRUE",
536 &prefs_common.folder_col_visible[F_COL_FOLDER], P_BOOL, NULL, NULL, NULL},
537 {"folder_col_show_new", "TRUE",
538 &prefs_common.folder_col_visible[F_COL_NEW], P_BOOL, NULL, NULL, NULL},
539 {"folder_col_show_unread", "TRUE",
540 &prefs_common.folder_col_visible[F_COL_UNREAD], P_BOOL, NULL, NULL, NULL},
541 {"folder_col_show_total", "TRUE",
542 &prefs_common.folder_col_visible[F_COL_TOTAL], P_BOOL, NULL, NULL, NULL},
544 {"folder_col_pos_folder", "0",
545 &prefs_common.folder_col_pos[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
546 {"folder_col_pos_new", "1",
547 &prefs_common.folder_col_pos[F_COL_NEW], P_INT, NULL, NULL, NULL},
548 {"folder_col_pos_unread", "2",
549 &prefs_common.folder_col_pos[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
550 {"folder_col_pos_total", "3",
551 &prefs_common.folder_col_pos[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
554 {"folder_col_size_folder", "120",
555 &prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
556 {"folder_col_size_new", "32",
557 &prefs_common.folder_col_size[F_COL_NEW], P_INT, NULL, NULL, NULL},
558 {"folder_col_size_unread", "32",
559 &prefs_common.folder_col_size[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
560 {"folder_col_size_total", "32",
561 &prefs_common.folder_col_size[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
563 {"folder_col_size_folder", "400",
564 &prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
565 {"folder_col_size_new", "32",
566 &prefs_common.folder_col_size[F_COL_NEW], P_INT, NULL, NULL, NULL},
567 {"folder_col_size_unread", "32",
568 &prefs_common.folder_col_size[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
569 {"folder_col_size_total", "32",
570 &prefs_common.folder_col_size[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
572 {"summaryview_width", "500", &prefs_common.summaryview_width, P_INT,
574 {"summaryview_height", "244", &prefs_common.summaryview_height, P_INT,
577 {"main_messagewin_x", "256", &prefs_common.main_msgwin_x, P_INT,
579 {"main_messagewin_y", "210", &prefs_common.main_msgwin_y, P_INT,
581 {"messageview_width", "500", &prefs_common.msgview_width, P_INT,
583 {"messageview_height", "213", &prefs_common.msgview_height, P_INT,
585 {"messageview_visible", "TRUE", &prefs_common.msgview_visible, P_BOOL,
588 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
590 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
592 {"mainview_width", "500", &prefs_common.mainview_width, P_INT,
594 {"mainview_height", "400", &prefs_common.mainview_height, P_INT,
596 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
598 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
601 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
603 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
605 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
607 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
609 {"sourcewin_width", "600", &prefs_common.sourcewin_width, P_INT,
611 {"sourcewin_height", "500", &prefs_common.sourcewin_height, P_INT,
613 {"compose_width", "600", &prefs_common.compose_width, P_INT,
615 {"compose_height", "560", &prefs_common.compose_height, P_INT,
618 {"mainwin_width", "700", &prefs_common.mainwin_width, P_INT,
620 {"mainwin_height", "470", &prefs_common.mainwin_height, P_INT,
622 {"messagewin_width", "700", &prefs_common.msgwin_width, P_INT,
624 {"messagewin_height", "470", &prefs_common.msgwin_height, P_INT,
626 {"sourcewin_width", "700", &prefs_common.sourcewin_width, P_INT,
628 {"sourcewin_height", "470", &prefs_common.sourcewin_height, P_INT,
630 {"compose_width", "700", &prefs_common.compose_width, P_INT,
632 {"compose_height", "470", &prefs_common.compose_height, P_INT,
635 {"compose_x", "0", &prefs_common.compose_x, P_INT,
637 {"compose_y", "0", &prefs_common.compose_y, P_INT,
640 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
643 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_COLOR,
645 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_COLOR,
647 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_COLOR,
649 {"enable_bgcolor", "FALSE", &prefs_common.enable_bgcolor, P_BOOL,
651 {"quote_level1_bgcolor", "13421772", &prefs_common.quote_level1_bgcol, P_COLOR,
653 {"quote_level2_bgcolor", "13948116", &prefs_common.quote_level2_bgcol, P_COLOR,
655 {"quote_level3_bgcolor", "14540253", &prefs_common.quote_level3_bgcol, P_COLOR,
657 {"uri_color", "32512", &prefs_common.uri_col, P_COLOR,
659 {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_COLOR,
661 {"signature_color", "7960953", &prefs_common.signature_col, P_COLOR,
663 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
664 P_BOOL, NULL, NULL, NULL},
666 {"display_header_pane", "FALSE", &prefs_common.display_header_pane,
667 P_BOOL, NULL, NULL, NULL},
668 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
670 {"display_xface", "TRUE", &prefs_common.display_xface,
671 P_BOOL, NULL, NULL, NULL},
672 {"render_html", "TRUE", &prefs_common.render_html, P_BOOL,
674 {"invoke_plugin_on_html", "FALSE", &prefs_common.invoke_plugin_on_html, P_BOOL,
676 {"line_space", "2", &prefs_common.line_space, P_INT,
678 {"never_send_retrcpt", "FALSE", &prefs_common.never_send_retrcpt, P_BOOL,
681 {"enable_smooth_scroll", "FALSE",
682 &prefs_common.enable_smooth_scroll, P_BOOL,
684 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
686 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
688 {"respect_flowed_format", "FALSE", &prefs_common.respect_flowed_format, P_BOOL,
691 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
694 {"use_different_print_font", "FALSE", &prefs_common.use_different_print_font, P_BOOL,
697 {"attach_desc", "TRUE", &prefs_common.attach_desc, P_BOOL,
699 {"attach_save_directory", NULL,
700 &SPECIFIC_PREFS.attach_save_dir, P_STRING, NULL, NULL, NULL},
701 {"attach_load_directory", NULL,
702 &SPECIFIC_PREFS.attach_load_dir, P_STRING, NULL, NULL, NULL},
705 {"mime_textviewer", NULL,
706 &SPECIFIC_PREFS.mime_textviewer, P_STRING, NULL, NULL, NULL},
707 {"mime_open_command", "gedit '%s'",
708 &SPECIFIC_PREFS.mime_open_cmd, P_STRING, NULL, NULL, NULL},
712 {"layout_mode", "0", &prefs_common.layout_mode, P_INT,
715 {"layout_mode", "5", &prefs_common.layout_mode, P_INT,
718 /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
719 NULL, NULL, NULL}, */
720 {"always_show_message_when_selected", "FALSE",
721 &prefs_common.always_show_msg,
722 P_BOOL, NULL, NULL, NULL},
723 {"select_on_entry", "3", &prefs_common.select_on_entry,
724 P_ENUM, NULL, NULL, NULL},
726 {"summary_select_prio1", "0", &prefs_common.summary_select_prio[0], P_ENUM,
728 {"summary_select_prio2", "0", &prefs_common.summary_select_prio[1], P_ENUM,
730 {"summary_select_prio3", "0", &prefs_common.summary_select_prio[2], P_ENUM,
732 {"summary_select_prio4", "0", &prefs_common.summary_select_prio[3], P_ENUM,
734 {"summary_select_prio5", "0", &prefs_common.summary_select_prio[4], P_ENUM,
736 {"summary_select_prio6", "0", &prefs_common.summary_select_prio[5], P_ENUM,
739 {"mark_as_read_on_new_window", "FALSE",
740 &prefs_common.mark_as_read_on_new_window,
741 P_BOOL, NULL, NULL, NULL},
742 {"mark_as_read_delay", "0",
743 &prefs_common.mark_as_read_delay, P_INT,
745 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
747 {"nextunreadmsg_dialog", "1", &prefs_common.next_unread_msg_dialog, P_ENUM,
750 {"pixmap_theme_path", DEFAULT_PIXMAP_THEME,
751 &SPECIFIC_PREFS.pixmap_theme_path, P_STRING,
754 {"ask_mark_all_read", "TRUE", &prefs_common.ask_mark_all_read, P_BOOL,
757 {"ask_apply_per_account_filtering_rules", "TRUE", &prefs_common.ask_apply_per_account_filtering_rules, P_BOOL,
759 {"apply_per_account_filtering_rules", "0", &prefs_common.apply_per_account_filtering_rules, P_ENUM,
763 {"addressbook_use_editaddress_dialog", "TRUE", &prefs_common.addressbook_use_editaddress_dialog,
764 P_BOOL, NULL, NULL, NULL},
765 {"addressbook_hpaned_pos", "-1", &prefs_common.addressbook_hpaned_pos,
766 P_INT, NULL, NULL, NULL},
767 {"addressbook_vpaned_pos", "-1", &prefs_common.addressbook_vpaned_pos,
768 P_INT, NULL, NULL, NULL},
771 {"uri_open_command", DEFAULT_BROWSER_CMD,
772 &SPECIFIC_PREFS.uri_cmd, P_STRING, NULL, NULL, NULL},
773 {"print_command", "lpr %s",
774 &SPECIFIC_PREFS.print_cmd, P_STRING, NULL, NULL, NULL},
775 {"ext_editor_command", DEFAULT_EDITOR_CMD,
776 &SPECIFIC_PREFS.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
777 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
778 P_BOOL, NULL, NULL, NULL},
779 {"confirm_on_exit", "FALSE", &prefs_common.confirm_on_exit, P_BOOL,
781 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
783 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
785 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
786 P_BOOL, NULL, NULL, NULL},
787 {"work_offline", "FALSE", &prefs_common.work_offline, P_BOOL,
789 {"summary_quicksearch_type", "0", &prefs_common.summary_quicksearch_type, P_INT,
792 {"summary_quicksearch_recurse", "1", &prefs_common.summary_quicksearch_recurse, P_INT,
795 {"summary_quicksearch_recurse", "0", &prefs_common.summary_quicksearch_recurse, P_INT,
799 {"io_timeout_secs", "60", &prefs_common.io_timeout_secs,
800 P_INT, NULL, NULL, NULL},
801 {"hide_score", "-9999", &prefs_common.kill_score, P_INT,
803 {"important_score", "1", &prefs_common.important_score, P_INT,
806 {"clip_log", "TRUE", &prefs_common.cliplog, P_BOOL,
808 {"log_length", "500", &prefs_common.loglength, P_INT,
811 {"log_msg_color", "#00af00", &prefs_common.log_msg_color, P_COLOR,
813 {"log_warn_color", "#af0000", &prefs_common.log_warn_color, P_COLOR,
815 {"log_error_color", "#af0000", &prefs_common.log_error_color, P_COLOR,
817 {"log_in_color", "#000000", &prefs_common.log_in_color, P_COLOR,
819 {"log_out_color", "#0000ef", &prefs_common.log_out_color, P_COLOR,
821 {"log_status_ok_color", "#00af00", &prefs_common.log_status_ok_color, P_COLOR,
823 {"log_status_nok_color", "#0000af", &prefs_common.log_status_nok_color, P_COLOR,
825 {"log_status_skip_color", "#aa00aa", &prefs_common.log_status_skip_color, P_COLOR,
828 {"enable_filtering_debug", "FALSE", &prefs_common.enable_filtering_debug, P_BOOL,
830 {"filtering_debug_level", "1", &prefs_common.filtering_debug_level, P_INT,
832 {"enable_filtering_debug_inc", "TRUE", &prefs_common.enable_filtering_debug_inc, P_BOOL,
834 {"enable_filtering_debug_manual", "TRUE", &prefs_common.enable_filtering_debug_manual, P_BOOL,
836 {"enable_filtering_debug_folder_proc", "FALSE", &prefs_common.enable_filtering_debug_folder_proc, P_BOOL,
838 {"enable_filtering_debug_pre_proc", "FALSE", &prefs_common.enable_filtering_debug_pre_proc, P_BOOL,
840 {"enable_filtering_debug_post_proc", "FALSE", &prefs_common.enable_filtering_debug_post_proc, P_BOOL,
842 {"filtering_debug_clip_log", "TRUE", &prefs_common.filtering_debug_cliplog, P_BOOL,
844 {"filtering_debug_log_length", "500", &prefs_common.filtering_debug_loglength, P_INT,
847 {"gtk_can_change_accels", "TRUE", &prefs_common.gtk_can_change_accels, P_BOOL,
850 {"color_new", "179", &prefs_common.color_new, P_COLOR,
853 /* Some windows' sizes */
854 {"filteringwin_width", "500", &prefs_common.filteringwin_width, P_INT,
856 {"filteringwin_height", "-1", &prefs_common.filteringwin_height, P_INT,
859 {"filteringactionwin_width", "490", &prefs_common.filteringactionwin_width, P_INT,
861 {"filteringactionwin_height", "-1", &prefs_common.filteringactionwin_height, P_INT,
864 {"matcherwin_width", "520", &prefs_common.matcherwin_width, P_INT,
866 {"matcherwin_height", "-1", &prefs_common.matcherwin_height, P_INT,
869 {"templateswin_width", "480", &prefs_common.templateswin_width, P_INT,
871 {"templateswin_height", "-1", &prefs_common.templateswin_height, P_INT,
874 {"actionswin_width", "486", &prefs_common.actionswin_width, P_INT,
876 {"actionswin_height", "-1", &prefs_common.actionswin_height, P_INT,
879 {"tagswin_width", "486", &prefs_common.tagswin_width, P_INT,
881 {"tagswin_height", "-1", &prefs_common.tagswin_height, P_INT,
884 {"addressbookwin_width", "520", &prefs_common.addressbookwin_width, P_INT,
886 {"addressbookwin_height", "-1", &prefs_common.addressbookwin_height, P_INT,
889 {"addressbookeditpersonwin_width", "640", &prefs_common.addressbookeditpersonwin_width, P_INT,
891 {"addressbookeditpersonwin_height", "320", &prefs_common.addressbookeditpersonwin_height, P_INT,
894 {"addressbookeditgroupwin_width", "580", &prefs_common.addressbookeditgroupwin_width, P_INT,
896 {"addressbookeditgroupwin_height", "340", &prefs_common.addressbookeditgroupwin_height, P_INT,
899 {"pluginswin_width", "-1", &prefs_common.pluginswin_width, P_INT,
901 {"pluginswin_height", "-1", &prefs_common.pluginswin_height, P_INT,
904 {"prefswin_width", "600", &prefs_common.prefswin_width, P_INT,
906 {"prefswin_height", "-1", &prefs_common.prefswin_height, P_INT,
909 {"folderitemwin_width", "500", &prefs_common.folderitemwin_width, P_INT,
911 {"folderitemwin_height", "-1", &prefs_common.folderitemwin_height, P_INT,
914 {"zero_replacement_char", "0", &prefs_common.zero_replacement, P_STRING,
917 {"editaccountwin_width", "500", &prefs_common.editaccountwin_width, P_INT,
919 {"editaccountwin_height", "-1", &prefs_common.editaccountwin_height, P_INT,
922 {"accountswin_width", "500", &prefs_common.accountswin_width, P_INT,
924 {"accountswin_height", "-1", &prefs_common.accountswin_height, P_INT,
927 {"logwin_width", "520", &prefs_common.logwin_width, P_INT,
929 {"logwin_height", "-1", &prefs_common.logwin_height, P_INT,
932 {"filtering_debugwin_width", "600", &prefs_common.filtering_debugwin_width, P_INT,
934 {"filtering_debugwin_height", "-1", &prefs_common.filtering_debugwin_height, P_INT,
937 {"folderselwin_width", "300", &prefs_common.folderselwin_width, P_INT,
939 {"folderselwin_height", "-1", &prefs_common.folderselwin_height, P_INT,
942 {"addressaddwin_width", "300", &prefs_common.addressaddwin_width, P_INT,
944 {"addressaddwin_height", "-1", &prefs_common.addressaddwin_height, P_INT,
947 {"addressbook_folderselwin_width", "300", &prefs_common.addressbook_folderselwin_width, P_INT,
949 {"addressbook_folderselwin_height", "-1", &prefs_common.addressbook_folderselwin_height, P_INT,
953 {"warn_dnd", "1", &prefs_common.warn_dnd, P_INT,
955 {"utf8_instead_of_locale_for_broken_mail", "0",
956 &prefs_common.broken_are_utf8, P_INT,
958 {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
960 {"use_stripes_everywhere", "TRUE", &prefs_common.use_stripes_everywhere, P_BOOL,
962 {"use_stripes_in_summaries", "TRUE", &prefs_common.use_stripes_in_summaries, P_BOOL,
964 {"stripes_color_offset", "4000", &prefs_common.stripes_color_offset, P_INT,
966 {"enable_dotted_lines", "FALSE", &prefs_common.enable_dotted_lines, P_BOOL,
968 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
970 {"folderview_vscrollbar_policy", "0",
971 &prefs_common.folderview_vscrollbar_policy, P_ENUM,
973 {"textview_cursor_visible", "FALSE",
974 &prefs_common.textview_cursor_visible, P_BOOL,
976 {"hover_timeout", "500", &prefs_common.hover_timeout, P_INT,
979 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
981 {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
984 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
986 {"cache_min_keep_time", "0", &prefs_common.cache_min_keep_time, P_INT,
989 {"thread_by_subject_max_age", "10", &prefs_common.thread_by_subject_max_age,
990 P_INT, NULL, NULL, NULL },
991 {"last_opened_folder", "", &prefs_common.last_opened_folder,
992 P_STRING, NULL, NULL, NULL },
993 {"goto_last_folder_on_startup", "FALSE", &prefs_common.goto_last_folder_on_startup,
994 P_BOOL, NULL, NULL, NULL },
995 {"summary_quicksearch_sticky", "1", &prefs_common.summary_quicksearch_sticky, P_INT,
997 {"summary_quicksearch_dynamic", "0", &prefs_common.summary_quicksearch_dynamic, P_INT,
999 {"summary_quicksearch_autorun", "0", &prefs_common.summary_quicksearch_autorun, P_INT,
1001 {"statusbar_update_step", "10", &prefs_common.statusbar_update_step, P_INT,
1003 {"compose_no_markup", "FALSE", &prefs_common.compose_no_markup, P_BOOL,
1005 {"skip_ssl_cert_check", "FALSE", &prefs_common.skip_ssl_cert_check, P_BOOL,
1007 {"live_dangerously", "FALSE", &prefs_common.live_dangerously, P_BOOL,
1009 {"hide_quotes", "0", &prefs_common.hide_quotes, P_INT,
1011 {"unsafe_ssl_certs", "FALSE", &prefs_common.unsafe_ssl_certs, P_BOOL,
1014 {"real_time_sync", "FALSE", &prefs_common.real_time_sync, P_BOOL,
1017 {"real_time_sync", "TRUE", &prefs_common.real_time_sync, P_BOOL,
1020 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
1023 PrefsCommon *prefs_common_get(void)
1025 return &prefs_common;
1029 * Read history list from the specified history file
1031 static GList *prefs_common_read_history(const gchar *history)
1035 gchar buf[PREFSBUFSIZE];
1038 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1040 if ((fp = g_fopen(path, "rb")) == NULL) {
1041 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
1046 while (fgets(buf, sizeof(buf), fp) != NULL) {
1048 if (buf[0] == '\0') continue;
1049 tmp = add_history(tmp, buf);
1053 tmp = g_list_reverse(tmp);
1058 void prefs_common_read_config(void)
1063 rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMON_RC, NULL);
1064 prefs_read_config(param, "Common", rcpath, NULL);
1066 prefs_read_config(param_os_specific, "CommonWin32", rcpath, NULL);
1071 tmp = g_strdup(gettext(prefs_common.quotefmt));
1072 g_free(prefs_common.quotefmt);
1073 prefs_common.quotefmt = tmp;
1075 tmp = g_strdup(gettext(prefs_common.fw_quotefmt));
1076 g_free(prefs_common.fw_quotefmt);
1077 prefs_common.fw_quotefmt = tmp;
1079 tmp = g_strdup(gettext(prefs_common.date_format));
1080 g_free(prefs_common.date_format);
1081 prefs_common.date_format = tmp;
1083 tmp = g_strdup(gettext(prefs_common.compose_body_format));
1084 g_free(prefs_common.compose_body_format);
1085 prefs_common.compose_body_format = tmp;
1087 prefs_common.mime_open_cmd_history =
1088 prefs_common_read_history(COMMAND_HISTORY);
1089 prefs_common.summary_quicksearch_history =
1090 prefs_common_read_history(QUICKSEARCH_HISTORY);
1091 prefs_common.summary_search_from_history =
1092 prefs_common_read_history(SUMMARY_SEARCH_FROM_HISTORY);
1093 prefs_common.summary_search_to_history =
1094 prefs_common_read_history(SUMMARY_SEARCH_TO_HISTORY);
1095 prefs_common.summary_search_subject_history =
1096 prefs_common_read_history(SUMMARY_SEARCH_SUBJECT_HISTORY);
1097 prefs_common.summary_search_body_history =
1098 prefs_common_read_history(SUMMARY_SEARCH_BODY_HISTORY);
1099 prefs_common.summary_search_adv_condition_history =
1100 prefs_common_read_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY);
1101 prefs_common.message_search_history =
1102 prefs_common_read_history(MESSAGE_SEARCH_HISTORY);
1104 colorlabel_update_colortable_from_prefs();
1110 g_warning("failed to write\n"); \
1115 * Save history list to the specified history file
1117 static void prefs_common_save_history(const gchar *history, GList *list)
1121 gchar *path, *tmp_path;
1123 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
1125 tmp_path = g_strconcat(path, ".tmp", NULL);
1127 if ((fp = g_fopen(tmp_path, "wb")) == NULL) {
1128 FILE_OP_ERROR(tmp_path, "fopen");
1132 for (cur = list; cur != NULL; cur = cur->next) {
1133 TRY(fputs((gchar *)cur->data, fp) != EOF &&
1134 fputc('\n', fp) != EOF);
1137 if (fclose(fp) == EOF) {
1138 FILE_OP_ERROR(tmp_path, "fclose");
1146 if (g_rename(tmp_path, path) < 0) {
1147 FILE_OP_ERROR(path, "rename");
1160 void prefs_common_write_config(void)
1162 prefs_write_config(param, "Common", COMMON_RC);
1164 prefs_write_config(param_os_specific, "CommonWin32", COMMON_RC);
1167 prefs_common_save_history(COMMAND_HISTORY,
1168 prefs_common.mime_open_cmd_history);
1169 prefs_common_save_history(QUICKSEARCH_HISTORY,
1170 prefs_common.summary_quicksearch_history);
1171 prefs_common_save_history(SUMMARY_SEARCH_FROM_HISTORY,
1172 prefs_common.summary_search_from_history);
1173 prefs_common_save_history(SUMMARY_SEARCH_TO_HISTORY,
1174 prefs_common.summary_search_to_history);
1175 prefs_common_save_history(SUMMARY_SEARCH_SUBJECT_HISTORY,
1176 prefs_common.summary_search_subject_history);
1177 prefs_common_save_history(SUMMARY_SEARCH_BODY_HISTORY,
1178 prefs_common.summary_search_body_history);
1179 prefs_common_save_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY,
1180 prefs_common.summary_search_adv_condition_history);
1181 prefs_common_save_history(MESSAGE_SEARCH_HISTORY,
1182 prefs_common.message_search_history);
1185 /* make a copy of string 'in' into buffer 'out'. un-escape \ sequences.
1186 both 'in' and 'out' must be non-NULL.
1187 'out' must be a pointer to a buffer whose size is at least equal
1188 to strlen(txt)+1, this buffer will get cleared. out's contents
1189 will always get set to a valid string, even if it's "".*/
1190 void pref_get_unescaped_pref(gchar *out, const gchar *in)
1197 g_return_if_fail( in != NULL );
1198 g_return_if_fail( out != NULL );
1202 memset(out, 0, strlen(in)+1);
1203 while (*i != '\0') {
1204 if (*i == '\\' && *(i+1) == 'n') {
1207 } else if (*i == '\\' && *(i+1) == 't') {
1210 } else if (*i == '\\' && *(i+1) == '\\') {
1221 /* make a copy of string 'in' into buffer 'out'. escape \ sequences.
1222 both 'in' and 'out' must be non-NULL.
1223 'out' must be a pointer to a buffer whose size is at least equal
1224 to 2*strlen(txt)+1. out's contents will always get set to a valid
1225 string, even if it's "". */
1226 void pref_get_escaped_pref(gchar *out, const gchar *in)
1233 g_return_if_fail( in != NULL );
1234 g_return_if_fail( out != NULL );
1238 while (*i != '\0') {
1242 } else if (*i == '\t') {
1245 } else if (*i == '\\') {
1256 /* set the contents of a textview widget from the internal \-escaped
1257 representation of a pref string. both txt and textview must be non-NULL. */
1258 void pref_set_textview_from_pref(GtkTextView *textview, const gchar *txt)
1260 GtkTextBuffer *buffer;
1263 g_return_if_fail( textview != NULL );
1265 buffer = gtk_text_view_get_buffer(textview);
1268 gtk_text_buffer_set_text(buffer, "", -1);
1270 out = malloc(strlen(txt)+1);
1272 pref_get_unescaped_pref(out, txt);
1274 gtk_text_buffer_set_text(buffer, out?out:"", -1);
1279 /* set the contents of a gtkentry widget from the internal \-escaped
1280 representation of a pref string. both txt and entry must be non-NULL. */
1281 void pref_set_entry_from_pref(GtkEntry *entry, const gchar *txt)
1285 g_return_if_fail( entry != NULL );
1287 gtk_entry_set_text(entry, "");
1289 out = malloc(strlen(txt)+1);
1291 pref_get_unescaped_pref(out, txt);
1293 gtk_entry_set_text(entry, out?out:"");
1298 /* get the \-escaped internal representation of a pref from the contents of
1299 a textview widget. textview must be non-NULL. */
1300 gchar *pref_get_pref_from_textview(GtkTextView *textview)
1302 GtkTextBuffer *buffer;
1303 GtkTextIter start, end;
1306 g_return_val_if_fail( textview != NULL, "" );
1308 buffer = gtk_text_view_get_buffer(textview);
1309 gtk_text_buffer_get_start_iter(buffer, &start);
1310 gtk_text_buffer_get_iter_at_offset(buffer, &end, -1);
1311 tmp = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
1312 out = malloc(2*strlen(tmp)+1);
1314 pref_get_escaped_pref(out, tmp);
1320 /* get the \-escaped internal representation of a pref from the contents of
1321 a gtkentry widget. entry must be non-NULL. */
1322 gchar *pref_get_pref_from_entry(GtkEntry *entry)
1326 g_return_val_if_fail( entry != NULL, "" );
1328 tmp = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
1329 out = malloc(2*strlen(tmp)+1);
1331 pref_get_escaped_pref(out, tmp);
1337 /* ugly hack to be able to get this pref from ssl_certificate.c */
1338 gboolean prefs_common_unsafe_ssl_certs(void)
1340 return prefs_common.unsafe_ssl_certs;
1344 return the translated name of a header, if the translate_header option is
1345 set, otherwise return the untranslated header name (header_name itself).
1346 this function is provided for convenience, it's an interface to
1347 prefs_common.trans_hdr.
1348 works with header names either with or without trailing colon, provided
1349 that gettext found such header name in the sources (they should all be
1350 found in src/gtk/headers.h anyway).
1352 const gchar *prefs_common_translated_header_name(const gchar *header_name)
1354 if (header_name == NULL || *header_name == '\0')
1357 return prefs_common.trans_hdr ? gettext(header_name) : header_name;