2007-01-25 [paul] 2.7.1cvs2-stable
[claws.git] / src / prefs_common.c
blobb56551b23df8b1d5118da99fa747db89fca0bf6c
1 /*
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.
20 #ifdef HAVE_CONFIG_H
21 # include "config.h"
22 #endif
24 #include "defs.h"
26 #include <glib.h>
27 #include <glib/gi18n.h>
28 #include <gtk/gtk.h>
29 #include <gdk/gdkkeysyms.h>
30 #include <stdio.h>
31 #include <stdlib.h>
32 #include <string.h>
33 #include <unistd.h>
34 #include <sys/types.h>
35 #include <sys/stat.h>
36 #include <errno.h>
38 #include "main.h"
39 #include "prefs_gtk.h"
40 #include "prefs_common.h"
41 #include "prefs_display_header.h"
42 #include "prefs_summary_column.h"
43 #include "prefs_folder_column.h"
44 #include "mainwindow.h"
45 #include "summaryview.h"
46 #include "folderview.h"
47 #include "messageview.h"
48 #include "manage_window.h"
49 #include "inc.h"
50 #include "menu.h"
51 #include "codeconv.h"
52 #include "utils.h"
53 #include "gtkutils.h"
54 #include "alertpanel.h"
55 #include "folder.h"
56 #include "socket.h"
57 #include "filesel.h"
58 #include "folderview.h"
59 #include "stock_pixmap.h"
60 #include "prefswindow.h"
61 #include "colorlabel.h"
63 enum {
64 DATEFMT_FMT,
65 DATEFMT_TXT,
66 N_DATEFMT_COLUMNS
69 PrefsCommon prefs_common;
71 GtkWidget *notebook;
73 #ifdef G_OS_WIN32
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[] = {
87 /* Receive */
88 {"ext_inc_path", "",
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},
93 /* new fonts */
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 /* Message */
106 {"attach_save_directory", NULL,
107 &prefs_common.attach_save_dir, P_STRING, NULL, NULL, NULL},
108 {"attach_load_directory", NULL,
109 &prefs_common.attach_load_dir, P_STRING, NULL, NULL, NULL},
111 /* MIME viewer */
112 {"mime_textviewer", NULL,
113 &prefs_common.mime_textviewer, P_STRING, NULL, NULL, NULL},
114 {"mime_open_command", "notepad '%s'",
115 &prefs_common.mime_open_cmd, P_STRING, NULL, NULL, NULL},
117 /* Interface */
118 {"pixmap_theme_path", DEFAULT_PIXMAP_THEME,
119 &prefs_common.pixmap_theme_path, P_STRING, NULL, NULL, NULL},
121 /* Other */
122 {"uri_open_command", NULL,
123 &prefs_common.uri_cmd, P_STRING, NULL, NULL, NULL},
124 {"print_command", "notepad /p %s",
125 &prefs_common.print_cmd, P_STRING, NULL, NULL, NULL},
126 {"ext_editor_command", "notepad %s",
127 &prefs_common.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
129 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
131 #else
132 # define SPECIFIC_PREFS prefs_common
133 #endif
136 parameter name, default value, pointer to the prefs variable, data type,
137 pointer to the widget pointer,
138 pointer to the function for data setting,
139 pointer to the function for widget setting
142 static PrefParam param[] = {
143 /* Receive */
144 {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL,
145 NULL, NULL, NULL},
146 {"ext_inc_path", DEFAULT_INC_PATH, &SPECIFIC_PREFS.extinc_cmd, P_STRING,
147 NULL, NULL, NULL},
149 {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL,
150 NULL, NULL, NULL},
151 {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT,
152 NULL, NULL, NULL},
153 {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL,
154 NULL, NULL, NULL},
155 {"open_inbox_on_inc", "FALSE", &prefs_common.open_inbox_on_inc,
156 P_BOOL, NULL, NULL, NULL},
157 {"scan_all_after_inc", "FALSE", &prefs_common.scan_all_after_inc,
158 P_BOOL, NULL, NULL, NULL},
159 {"newmail_notify_manu", "FALSE", &prefs_common.newmail_notify_manu,
160 P_BOOL, NULL, NULL, NULL},
161 {"newmail_notify_auto", "FALSE", &prefs_common.newmail_notify_auto,
162 P_BOOL, NULL, NULL, NULL},
163 {"newmail_notify_cmd", "", &SPECIFIC_PREFS.newmail_notify_cmd, P_STRING,
164 NULL, NULL, NULL},
165 {"receive_dialog_mode", "1", &prefs_common.recv_dialog_mode, P_ENUM,
166 NULL, NULL, NULL},
167 {"receivewin_width", "460", &prefs_common.receivewin_width, P_INT,
168 NULL, NULL, NULL},
169 {"receivewin_height", "-1", &prefs_common.receivewin_height, P_INT,
170 NULL, NULL, NULL},
171 {"no_receive_error_panel", "FALSE", &prefs_common.no_recv_err_panel,
172 P_BOOL, NULL, NULL, NULL},
173 {"close_receive_dialog", "TRUE", &prefs_common.close_recv_dialog,
174 P_BOOL, NULL, NULL, NULL},
176 /* Send */
177 {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL,
178 NULL, NULL, NULL},
179 {"confirm_send_queued_messages", "FALSE", &prefs_common.confirm_send_queued_messages,
180 P_BOOL, NULL, NULL, NULL},
181 {"send_dialog_mode", "0", &prefs_common.send_dialog_mode, P_ENUM,
182 NULL, NULL, NULL},
183 {"sendwin_width", "460", &prefs_common.sendwin_width, P_INT,
184 NULL, NULL, NULL},
185 {"sendwin_height", "-1", &prefs_common.sendwin_height, P_INT,
186 NULL, NULL, NULL},
188 {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING,
189 NULL, NULL, NULL},
190 {"encoding_method", "0", &prefs_common.encoding_method, P_ENUM,
191 NULL, NULL, NULL},
193 {"allow_jisx0201_kana", "FALSE", &prefs_common.allow_jisx0201_kana,
194 P_BOOL, NULL, NULL, NULL},
196 /* Compose */
197 {"auto_ext_editor", "FALSE", &prefs_common.auto_exteditor, P_BOOL,
198 NULL, NULL, NULL},
199 {"forward_as_attachment", "FALSE", &prefs_common.forward_as_attachment,
200 P_BOOL, NULL, NULL, NULL},
201 {"redirect_keep_from", "FALSE",
202 &prefs_common.redirect_keep_from, P_BOOL,
203 NULL, NULL, NULL},
204 {"undo_level", "50", &prefs_common.undolevels, P_INT,
205 NULL, NULL, NULL},
206 {"compose_with_format", "FALSE", &prefs_common.compose_with_format, P_BOOL,
207 NULL, NULL, NULL},
208 {"compose_subject_format", "",
209 &prefs_common.compose_subject_format, P_STRING, NULL, NULL, NULL},
210 {"compose_body_format", N_("Hello,\\n"),
211 &prefs_common.compose_body_format, P_STRING, NULL, NULL, NULL},
213 {"linewrap_length", "72", &prefs_common.linewrap_len, P_INT,
214 NULL, NULL, NULL},
215 {"linewrap_quotation", "TRUE", &prefs_common.linewrap_quote, P_BOOL,
216 NULL, NULL, NULL},
217 {"linewrap_pastes", "TRUE", &prefs_common.linewrap_pastes, P_BOOL,
218 NULL, NULL, NULL},
219 {"linewrap_auto", "TRUE", &prefs_common.autowrap, P_BOOL,
220 NULL, NULL, NULL},
221 {"autosave", "TRUE", &prefs_common.autosave,
222 P_BOOL, NULL, NULL, NULL},
223 {"autosave_length", "50", &prefs_common.autosave_length, P_INT,
224 NULL, NULL, NULL},
225 #if USE_ASPELL
226 {"enable_aspell", "TRUE", &prefs_common.enable_aspell, P_BOOL,
227 NULL, NULL, NULL},
228 {"aspell_path", ASPELL_PATH, &prefs_common.aspell_path, P_STRING,
229 NULL, NULL, NULL},
230 {"dictionary", "", &prefs_common.dictionary, P_STRING,
231 NULL, NULL, NULL},
232 {"alt_dictionary", "", &prefs_common.alt_dictionary, P_STRING,
233 NULL, NULL, NULL},
234 {"aspell_sugmode", "1", &prefs_common.aspell_sugmode, P_INT,
235 NULL, NULL, NULL},
236 {"use_alternate_dict", "FALSE", &prefs_common.use_alternate, P_BOOL,
237 NULL, NULL, NULL},
238 {"check_while_typing", "TRUE", &prefs_common.check_while_typing, P_BOOL,
239 NULL, NULL, NULL},
240 {"recheck_when_changing_dict", "TRUE", &prefs_common.recheck_when_changing_dict,
241 P_BOOL, NULL, NULL, NULL},
242 {"misspelled_color", "16711680", &prefs_common.misspelled_col, P_COLOR,
243 NULL, NULL, NULL},
244 {"use_both_dicts", "FALSE", &prefs_common.use_both_dicts, P_BOOL,
245 NULL, NULL, NULL},
246 #endif
247 {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL,
248 NULL, NULL, NULL},
249 {"compose_dnd_insert_or_attach", "0", &prefs_common.compose_dnd_mode, P_ENUM,
250 NULL, NULL, NULL},
252 /* Account autoselection */
253 {"reply_account_autoselect", "TRUE",
254 &prefs_common.reply_account_autosel, P_BOOL,
255 NULL, NULL, NULL},
256 {"forward_account_autoselect", "TRUE",
257 &prefs_common.forward_account_autosel, P_BOOL,
258 NULL, NULL, NULL},
259 {"reedit_account_autoselect", "TRUE",
260 &prefs_common.reedit_account_autosel, P_BOOL,
261 NULL, NULL, NULL},
263 {"default_reply_list", "TRUE", &prefs_common.default_reply_list, P_BOOL,
264 NULL, NULL, NULL},
266 {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL,
267 NULL, NULL, NULL},
269 /* Quote */
270 {"reply_quote_mark", "> ", &prefs_common.quotemark, P_STRING,
271 NULL, NULL, NULL},
272 {"reply_quote_format", N_("On %d\\n%f wrote:\\n\\n%q"),
273 &prefs_common.quotefmt, P_STRING, NULL, NULL, NULL},
275 {"forward_quote_mark", "> ", &prefs_common.fw_quotemark, P_STRING,
276 NULL, NULL, NULL},
277 {"forward_quote_format",
278 N_("\\n\\nBegin forwarded message:\\n\\n"
279 "?d{Date: %d\\n}?f{From: %f\\n}?t{To: %t\\n}?c{Cc: %c\\n}"
280 "?n{Newsgroups: %n\\n}?s{Subject: %s\\n}\\n\\n%M"),
281 &prefs_common.fw_quotefmt, P_STRING, NULL, NULL, NULL},
282 {"quote_chars", ">", &prefs_common.quote_chars, P_STRING,
283 NULL, NULL, NULL},
285 /* Display */
286 /* Obsolete fonts. For coexisting with Gtk+-1.2 version */
287 {"widget_font", NULL,
288 &prefs_common.widgetfont_gtk1, P_STRING, NULL, NULL, NULL},
289 {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*",
290 &prefs_common.textfont_gtk1, P_STRING, NULL, NULL, NULL},
291 {"small_font", "-*-helvetica-medium-r-normal--10-*-*-*-*-*-*-*",
292 &prefs_common.smallfont_gtk1, P_STRING, NULL, NULL, NULL},
293 {"bold_font", "-*-helvetica-bold-r-normal--12-*-*-*-*-*-*-*",
294 &prefs_common.boldfont_gtk1, P_STRING, NULL, NULL, NULL},
295 {"normal_font", "-*-helvetica-medium-r-normal--12-*-*-*-*-*-*-*",
296 &prefs_common.normalfont_gtk1, P_STRING, NULL, NULL, NULL},
298 /* new fonts */
299 {"widget_font_gtk2", NULL,
300 &SPECIFIC_PREFS.widgetfont, P_STRING, NULL, NULL, NULL},
301 {"message_font_gtk2", "Monospace 9",
302 &SPECIFIC_PREFS.textfont, P_STRING, NULL, NULL, NULL},
303 {"print_font_gtk2", "Monospace 9",
304 &SPECIFIC_PREFS.printfont, P_STRING, NULL, NULL, NULL},
305 {"small_font_gtk2", "Sans 9",
306 &SPECIFIC_PREFS.smallfont, P_STRING, NULL, NULL, NULL},
307 {"normal_font_gtk2", "Sans 9",
308 &SPECIFIC_PREFS.normalfont, P_STRING, NULL, NULL, NULL},
310 /* custom colors */
311 {"custom_color1", "#ff9900", &prefs_common.custom_colorlabel[0].color, P_COLOR,
312 NULL, NULL, NULL},
313 {"custom_colorlabel1", N_("Orange"), &prefs_common.custom_colorlabel[0].label, P_STRING,
314 NULL, NULL, NULL},
315 {"custom_color2", "#ff0000", &prefs_common.custom_colorlabel[1].color, P_COLOR,
316 NULL, NULL, NULL},
317 {"custom_colorlabel2", N_("Red"), &prefs_common.custom_colorlabel[1].label, P_STRING,
318 NULL, NULL, NULL},
319 {"custom_color3", "#ff66ff", &prefs_common.custom_colorlabel[2].color, P_COLOR,
320 NULL, NULL, NULL},
321 {"custom_colorlabel3", N_("Pink"), &prefs_common.custom_colorlabel[2].label, P_STRING,
322 NULL, NULL, NULL},
323 {"custom_color4", "#00ccff", &prefs_common.custom_colorlabel[3].color, P_COLOR,
324 NULL, NULL, NULL},
325 {"custom_colorlabel4", N_("Sky blue"), &prefs_common.custom_colorlabel[3].label, P_STRING,
326 NULL, NULL, NULL},
327 {"custom_color5", "#0000ff", &prefs_common.custom_colorlabel[4].color, P_COLOR,
328 NULL, NULL, NULL},
329 {"custom_colorlabel5", N_("Blue"), &prefs_common.custom_colorlabel[4].label, P_STRING,
330 NULL, NULL, NULL},
331 {"custom_color6", "#009900", &prefs_common.custom_colorlabel[5].color, P_COLOR,
332 NULL, NULL, NULL},
333 {"custom_colorlabel6", N_("Green"), &prefs_common.custom_colorlabel[5].label, P_STRING,
334 NULL, NULL, NULL},
335 {"custom_color7", "#663366", &prefs_common.custom_colorlabel[6].color, P_COLOR,
336 NULL, NULL, NULL},
337 {"custom_colorlabel7", N_("Brown"), &prefs_common.custom_colorlabel[6].label, P_STRING,
338 NULL, NULL, NULL},
340 /* image viewer */
341 {"display_image", "TRUE", &prefs_common.display_img, P_BOOL,
342 NULL, NULL, NULL},
343 {"resize_image", "TRUE", &prefs_common.resize_img, P_BOOL,
344 NULL, NULL, NULL},
345 {"inline_image", "TRUE", &prefs_common.inline_img, P_BOOL,
346 NULL, NULL, NULL},
348 {"display_folder_unread_num", "FALSE",
349 &prefs_common.display_folder_unread, P_BOOL,
350 NULL, NULL, NULL},
351 {"newsgroup_abbrev_len", "16",
352 &prefs_common.ng_abbrev_len, P_INT,
353 NULL, NULL, NULL},
355 {"translate_header", "FALSE", &prefs_common.trans_hdr, P_BOOL,
356 NULL, NULL, NULL},
358 /* Display: Summary View */
359 {"use_address_book", "FALSE", &prefs_common.use_addr_book, P_BOOL,
360 NULL, NULL, NULL},
361 {"thread_by_subject", "TRUE", &prefs_common.thread_by_subject, P_BOOL,
362 NULL, NULL, NULL},
363 {"date_format", N_("%y/%m/%d(%a) %H:%M"), &prefs_common.date_format,
364 P_STRING, NULL, NULL, NULL},
366 {"bold_unread", "TRUE", &prefs_common.bold_unread, P_BOOL,
367 NULL, NULL, NULL},
369 {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL,
370 NULL, NULL, NULL},
371 {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM,
372 NULL, NULL, NULL},
373 {"toolbar_detachable", "FALSE", &prefs_common.toolbar_detachable, P_BOOL,
374 NULL, NULL, NULL},
375 {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL,
376 NULL, NULL, NULL},
377 {"show_searchbar", "TRUE", &prefs_common.show_searchbar, P_BOOL,
378 NULL, NULL, NULL},
381 {"summary_col_show_mark", "TRUE",
382 &prefs_common.summary_col_visible[S_COL_MARK], P_BOOL, NULL, NULL, NULL},
383 {"summary_col_show_unread", "TRUE",
384 &prefs_common.summary_col_visible[S_COL_STATUS], P_BOOL, NULL, NULL, NULL},
385 {"summary_col_show_mime", "TRUE",
386 &prefs_common.summary_col_visible[S_COL_MIME], P_BOOL, NULL, NULL, NULL},
387 {"summary_col_show_subject", "TRUE",
388 &prefs_common.summary_col_visible[S_COL_SUBJECT], P_BOOL, NULL, NULL, NULL},
389 {"summary_col_show_from", "TRUE",
390 &prefs_common.summary_col_visible[S_COL_FROM], P_BOOL, NULL, NULL, NULL},
391 {"summary_col_show_to", "FALSE",
392 &prefs_common.summary_col_visible[S_COL_TO], P_BOOL, NULL, NULL, NULL},
393 {"summary_col_show_date", "TRUE",
394 &prefs_common.summary_col_visible[S_COL_DATE], P_BOOL, NULL, NULL, NULL},
395 {"summary_col_show_size", "TRUE",
396 &prefs_common.summary_col_visible[S_COL_SIZE], P_BOOL, NULL, NULL, NULL},
397 {"summary_col_show_number", "FALSE",
398 &prefs_common.summary_col_visible[S_COL_NUMBER], P_BOOL, NULL, NULL, NULL},
399 {"summary_col_show_score", "FALSE",
400 &prefs_common.summary_col_visible[S_COL_SCORE], P_BOOL, NULL, NULL, NULL},
401 {"summary_col_show_locked", "FALSE",
402 &prefs_common.summary_col_visible[S_COL_LOCKED], P_BOOL, NULL, NULL, NULL},
404 {"summary_col_pos_mark", "0",
405 &prefs_common.summary_col_pos[S_COL_MARK], P_INT, NULL, NULL, NULL},
406 {"summary_col_pos_unread", "1",
407 &prefs_common.summary_col_pos[S_COL_STATUS], P_INT, NULL, NULL, NULL},
408 {"summary_col_pos_mime", "2",
409 &prefs_common.summary_col_pos[S_COL_MIME], P_INT, NULL, NULL, NULL},
410 {"summary_col_pos_subject", "3",
411 &prefs_common.summary_col_pos[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
412 {"summary_col_pos_from", "4",
413 &prefs_common.summary_col_pos[S_COL_FROM], P_INT, NULL, NULL, NULL},
414 {"summary_col_pos_date", "5",
415 &prefs_common.summary_col_pos[S_COL_DATE], P_INT, NULL, NULL, NULL},
416 {"summary_col_pos_size", "6",
417 &prefs_common.summary_col_pos[S_COL_SIZE], P_INT, NULL, NULL, NULL},
418 {"summary_col_pos_number", "7",
419 &prefs_common.summary_col_pos[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
420 {"summary_col_pos_score", "8",
421 &prefs_common.summary_col_pos[S_COL_SCORE], P_INT, NULL, NULL, NULL},
422 {"summary_col_pos_locked", "9",
423 &prefs_common.summary_col_pos[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
424 {"summary_col_pos_to", "10",
425 &prefs_common.summary_col_pos[S_COL_TO], P_INT, NULL, NULL, NULL},
427 {"summary_col_size_mark", "10",
428 &prefs_common.summary_col_size[S_COL_MARK], P_INT, NULL, NULL, NULL},
429 {"summary_col_size_unread", "13",
430 &prefs_common.summary_col_size[S_COL_STATUS], P_INT, NULL, NULL, NULL},
431 {"summary_col_size_mime", "10",
432 &prefs_common.summary_col_size[S_COL_MIME], P_INT, NULL, NULL, NULL},
433 {"summary_col_size_subject", "200",
434 &prefs_common.summary_col_size[S_COL_SUBJECT], P_INT, NULL, NULL, NULL},
435 {"summary_col_size_from", "120",
436 &prefs_common.summary_col_size[S_COL_FROM], P_INT, NULL, NULL, NULL},
437 {"summary_col_size_to", "120",
438 &prefs_common.summary_col_size[S_COL_TO], P_INT, NULL, NULL, NULL},
439 {"summary_col_size_date", "118",
440 &prefs_common.summary_col_size[S_COL_DATE], P_INT, NULL, NULL, NULL},
441 {"summary_col_size_size", "45",
442 &prefs_common.summary_col_size[S_COL_SIZE], P_INT, NULL, NULL, NULL},
443 {"summary_col_size_number", "40",
444 &prefs_common.summary_col_size[S_COL_NUMBER], P_INT, NULL, NULL, NULL},
445 {"summary_col_size_score", "40",
446 &prefs_common.summary_col_size[S_COL_SCORE], P_INT, NULL, NULL, NULL},
447 {"summary_col_size_locked", "13",
448 &prefs_common.summary_col_size[S_COL_LOCKED], P_INT, NULL, NULL, NULL},
450 /* Widget size */
451 {"folderwin_x", "16", &prefs_common.folderwin_x, P_INT,
452 NULL, NULL, NULL},
453 {"folderwin_y", "16", &prefs_common.folderwin_y, P_INT,
454 NULL, NULL, NULL},
455 {"folderview_width", "270", &prefs_common.folderview_width, P_INT,
456 NULL, NULL, NULL},
457 {"folderview_height", "450", &prefs_common.folderview_height, P_INT,
458 NULL, NULL, NULL},
459 {"folderview_visible", "TRUE", &prefs_common.folderview_visible, P_BOOL,
460 NULL, NULL, NULL},
462 {"folder_col_show_folder", "TRUE",
463 &prefs_common.folder_col_visible[F_COL_FOLDER], P_BOOL, NULL, NULL, NULL},
464 {"folder_col_show_new", "TRUE",
465 &prefs_common.folder_col_visible[F_COL_NEW], P_BOOL, NULL, NULL, NULL},
466 {"folder_col_show_unread", "TRUE",
467 &prefs_common.folder_col_visible[F_COL_UNREAD], P_BOOL, NULL, NULL, NULL},
468 {"folder_col_show_total", "TRUE",
469 &prefs_common.folder_col_visible[F_COL_TOTAL], P_BOOL, NULL, NULL, NULL},
471 {"folder_col_pos_folder", "0",
472 &prefs_common.folder_col_pos[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
473 {"folder_col_pos_new", "1",
474 &prefs_common.folder_col_pos[F_COL_NEW], P_INT, NULL, NULL, NULL},
475 {"folder_col_pos_unread", "2",
476 &prefs_common.folder_col_pos[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
477 {"folder_col_pos_total", "3",
478 &prefs_common.folder_col_pos[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
480 {"folder_col_size_folder", "120",
481 &prefs_common.folder_col_size[F_COL_FOLDER], P_INT, NULL, NULL, NULL},
482 {"folder_col_size_new", "32",
483 &prefs_common.folder_col_size[F_COL_NEW], P_INT, NULL, NULL, NULL},
484 {"folder_col_size_unread", "32",
485 &prefs_common.folder_col_size[F_COL_UNREAD], P_INT, NULL, NULL, NULL},
486 {"folder_col_size_total", "32",
487 &prefs_common.folder_col_size[F_COL_TOTAL], P_INT, NULL, NULL, NULL},
489 {"summaryview_width", "500", &prefs_common.summaryview_width, P_INT,
490 NULL, NULL, NULL},
491 {"summaryview_height", "244", &prefs_common.summaryview_height, P_INT,
492 NULL, NULL, NULL},
494 {"main_messagewin_x", "256", &prefs_common.main_msgwin_x, P_INT,
495 NULL, NULL, NULL},
496 {"main_messagewin_y", "210", &prefs_common.main_msgwin_y, P_INT,
497 NULL, NULL, NULL},
498 {"messageview_width", "500", &prefs_common.msgview_width, P_INT,
499 NULL, NULL, NULL},
500 {"messageview_height", "213", &prefs_common.msgview_height, P_INT,
501 NULL, NULL, NULL},
502 {"messageview_visible", "TRUE", &prefs_common.msgview_visible, P_BOOL,
503 NULL, NULL, NULL},
505 {"mainview_x", "64", &prefs_common.mainview_x, P_INT,
506 NULL, NULL, NULL},
507 {"mainview_y", "64", &prefs_common.mainview_y, P_INT,
508 NULL, NULL, NULL},
509 {"mainview_width", "500", &prefs_common.mainview_width, P_INT,
510 NULL, NULL, NULL},
511 {"mainview_height", "400", &prefs_common.mainview_height, P_INT,
512 NULL, NULL, NULL},
513 {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT,
514 NULL, NULL, NULL},
515 {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT,
516 NULL, NULL, NULL},
517 {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT,
518 NULL, NULL, NULL},
519 {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT,
520 NULL, NULL, NULL},
521 {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT,
522 NULL, NULL, NULL},
523 {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT,
524 NULL, NULL, NULL},
525 {"sourcewin_width", "600", &prefs_common.sourcewin_width, P_INT,
526 NULL, NULL, NULL},
527 {"sourcewin_height", "500", &prefs_common.sourcewin_height, P_INT,
528 NULL, NULL, NULL},
529 {"compose_width", "600", &prefs_common.compose_width, P_INT,
530 NULL, NULL, NULL},
531 {"compose_height", "560", &prefs_common.compose_height, P_INT,
532 NULL, NULL, NULL},
533 {"compose_x", "0", &prefs_common.compose_x, P_INT,
534 NULL, NULL, NULL},
535 {"compose_y", "0", &prefs_common.compose_y, P_INT,
536 NULL, NULL, NULL},
537 /* Message */
538 {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL,
539 NULL, NULL, NULL},
541 {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_COLOR,
542 NULL, NULL, NULL},
543 {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_COLOR,
544 NULL, NULL, NULL},
545 {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_COLOR,
546 NULL, NULL, NULL},
547 {"enable_bgcolor", "FALSE", &prefs_common.enable_bgcolor, P_BOOL,
548 NULL, NULL, NULL},
549 {"quote_level1_bgcolor", "13421772", &prefs_common.quote_level1_bgcol, P_COLOR,
550 NULL, NULL, NULL},
551 {"quote_level2_bgcolor", "13948116", &prefs_common.quote_level2_bgcol, P_COLOR,
552 NULL, NULL, NULL},
553 {"quote_level3_bgcolor", "14540253", &prefs_common.quote_level3_bgcol, P_COLOR,
554 NULL, NULL, NULL},
555 {"uri_color", "32512", &prefs_common.uri_col, P_COLOR,
556 NULL, NULL, NULL},
557 {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_COLOR,
558 NULL, NULL, NULL},
559 {"signature_color", "7960953", &prefs_common.signature_col, P_COLOR,
560 NULL, NULL, NULL},
561 {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
562 P_BOOL, NULL, NULL, NULL},
564 {"display_header_pane", "FALSE", &prefs_common.display_header_pane,
565 P_BOOL, NULL, NULL, NULL},
566 {"display_header", "TRUE", &prefs_common.display_header, P_BOOL,
567 NULL, NULL, NULL},
568 {"display_xface", "TRUE", &prefs_common.display_xface,
569 P_BOOL, NULL, NULL, NULL},
570 {"render_html", "TRUE", &prefs_common.render_html, P_BOOL,
571 NULL, NULL, NULL},
572 {"invoke_plugin_on_html", "FALSE", &prefs_common.invoke_plugin_on_html, P_BOOL,
573 NULL, NULL, NULL},
574 {"line_space", "2", &prefs_common.line_space, P_INT,
575 NULL, NULL, NULL},
576 {"never_send_retrcpt", "FALSE", &prefs_common.never_send_retrcpt, P_BOOL,
577 NULL, NULL, NULL},
579 {"enable_smooth_scroll", "FALSE",
580 &prefs_common.enable_smooth_scroll, P_BOOL,
581 NULL, NULL, NULL},
582 {"scroll_step", "1", &prefs_common.scroll_step, P_INT,
583 NULL, NULL, NULL},
584 {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL,
585 NULL, NULL, NULL},
586 {"respect_flowed_format", "FALSE", &prefs_common.respect_flowed_format, P_BOOL,
587 NULL, NULL, NULL},
589 {"show_other_header", "FALSE", &prefs_common.show_other_header, P_BOOL,
590 NULL, NULL, NULL},
592 {"use_different_print_font", "FALSE", &prefs_common.use_different_print_font, P_BOOL,
593 NULL, NULL, NULL},
595 {"attach_desc", "TRUE", &prefs_common.attach_desc, P_BOOL,
596 NULL, NULL, NULL},
597 {"attach_save_directory", NULL,
598 &SPECIFIC_PREFS.attach_save_dir, P_STRING, NULL, NULL, NULL},
599 {"attach_load_directory", NULL,
600 &SPECIFIC_PREFS.attach_load_dir, P_STRING, NULL, NULL, NULL},
602 /* MIME viewer */
603 {"mime_textviewer", NULL,
604 &SPECIFIC_PREFS.mime_textviewer, P_STRING, NULL, NULL, NULL},
605 {"mime_open_command", "gedit '%s'",
606 &SPECIFIC_PREFS.mime_open_cmd, P_STRING, NULL, NULL, NULL},
608 /* Interface */
609 {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL,
610 NULL, NULL, NULL},
611 {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL,
612 NULL, NULL, NULL},
614 /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
615 NULL, NULL, NULL}, */
616 {"always_show_message_when_selected", "FALSE",
617 &prefs_common.always_show_msg,
618 P_BOOL, NULL, NULL, NULL},
619 {"select_on_entry", "2", &prefs_common.select_on_entry,
620 P_ENUM, NULL, NULL, NULL},
621 {"mark_as_read_on_new_window", "FALSE",
622 &prefs_common.mark_as_read_on_new_window,
623 P_BOOL, NULL, NULL, NULL},
624 {"mark_as_read_delay", "0",
625 &prefs_common.mark_as_read_delay, P_INT,
626 NULL, NULL, NULL},
627 {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL,
628 NULL, NULL, NULL},
629 {"nextunreadmsg_dialog", "1", &prefs_common.next_unread_msg_dialog, P_ENUM,
630 NULL, NULL, NULL},
632 {"pixmap_theme_path", DEFAULT_PIXMAP_THEME,
633 &SPECIFIC_PREFS.pixmap_theme_path, P_STRING,
634 NULL, NULL, NULL},
636 {"ask_mark_all_read", "TRUE", &prefs_common.ask_mark_all_read, P_BOOL,
637 NULL, NULL, NULL},
639 {"ask_apply_per_account_filtering_rules", "TRUE", &prefs_common.ask_apply_per_account_filtering_rules, P_BOOL,
640 NULL, NULL, NULL},
641 {"apply_per_account_filtering_rules", "0", &prefs_common.apply_per_account_filtering_rules, P_ENUM,
642 NULL, NULL, NULL},
644 /* Addressbook */
645 {"addressbook_use_editaddress_dialog", "TRUE", &prefs_common.addressbook_use_editaddress_dialog,
646 P_BOOL, NULL, NULL, NULL},
647 {"addressbook_hpaned_pos", "-1", &prefs_common.addressbook_hpaned_pos,
648 P_INT, NULL, NULL, NULL},
649 {"addressbook_vpaned_pos", "-1", &prefs_common.addressbook_vpaned_pos,
650 P_INT, NULL, NULL, NULL},
652 /* Other */
653 {"uri_open_command", DEFAULT_BROWSER_CMD,
654 &SPECIFIC_PREFS.uri_cmd, P_STRING, NULL, NULL, NULL},
655 {"print_command", "lpr %s",
656 &SPECIFIC_PREFS.print_cmd, P_STRING, NULL, NULL, NULL},
657 {"ext_editor_command", DEFAULT_EDITOR_CMD,
658 &SPECIFIC_PREFS.ext_editor_cmd, P_STRING, NULL, NULL, NULL},
659 {"add_address_by_click", "FALSE", &prefs_common.add_address_by_click,
660 P_BOOL, NULL, NULL, NULL},
661 {"confirm_on_exit", "FALSE", &prefs_common.confirm_on_exit, P_BOOL,
662 NULL, NULL, NULL},
663 {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL,
664 NULL, NULL, NULL},
665 {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL,
666 NULL, NULL, NULL},
667 {"warn_queued_on_exit", "TRUE", &prefs_common.warn_queued_on_exit,
668 P_BOOL, NULL, NULL, NULL},
669 {"work_offline", "FALSE", &prefs_common.work_offline, P_BOOL,
670 NULL, NULL, NULL},
671 {"summary_quicksearch_type", "0", &prefs_common.summary_quicksearch_type, P_INT,
672 NULL, NULL, NULL},
673 {"summary_quicksearch_recurse", "1", &prefs_common.summary_quicksearch_recurse, P_INT,
674 NULL, NULL, NULL},
676 {"io_timeout_secs", "60", &prefs_common.io_timeout_secs,
677 P_INT, NULL, NULL, NULL},
678 {"hide_score", "-9999", &prefs_common.kill_score, P_INT,
679 NULL, NULL, NULL},
680 {"important_score", "1", &prefs_common.important_score, P_INT,
681 NULL, NULL, NULL},
682 {"clip_log", "TRUE", &prefs_common.cliplog, P_BOOL,
683 NULL, NULL, NULL},
684 {"log_length", "500", &prefs_common.loglength, P_INT,
685 NULL, NULL, NULL},
686 {"log_msg_color", "#00af00", &prefs_common.log_msg_color, P_COLOR,
687 NULL, NULL, NULL},
688 {"log_warn_color", "#af0000", &prefs_common.log_warn_color, P_COLOR,
689 NULL, NULL, NULL},
690 {"log_error_color", "#af0000", &prefs_common.log_error_color, P_COLOR,
691 NULL, NULL, NULL},
692 {"log_in_color", "#000000", &prefs_common.log_in_color, P_COLOR,
693 NULL, NULL, NULL},
694 {"log_out_color", "#0000ef", &prefs_common.log_out_color, P_COLOR,
695 NULL, NULL, NULL},
697 {"color_new", "179", &prefs_common.color_new, P_COLOR,
698 NULL, NULL, NULL},
700 /* Some windows' sizes */
701 {"filteringwin_width", "500", &prefs_common.filteringwin_width, P_INT,
702 NULL, NULL, NULL},
703 {"filteringwin_height", "-1", &prefs_common.filteringwin_height, P_INT,
704 NULL, NULL, NULL},
706 {"filteringactionwin_width", "490", &prefs_common.filteringactionwin_width, P_INT,
707 NULL, NULL, NULL},
708 {"filteringactionwin_height", "-1", &prefs_common.filteringactionwin_height, P_INT,
709 NULL, NULL, NULL},
711 {"matcherwin_width", "520", &prefs_common.matcherwin_width, P_INT,
712 NULL, NULL, NULL},
713 {"matcherwin_height", "-1", &prefs_common.matcherwin_height, P_INT,
714 NULL, NULL, NULL},
716 {"templateswin_width", "440", &prefs_common.templateswin_width, P_INT,
717 NULL, NULL, NULL},
718 {"templateswin_height", "-1", &prefs_common.templateswin_height, P_INT,
719 NULL, NULL, NULL},
721 {"actionswin_width", "486", &prefs_common.actionswin_width, P_INT,
722 NULL, NULL, NULL},
723 {"actionswin_height", "-1", &prefs_common.actionswin_height, P_INT,
724 NULL, NULL, NULL},
726 {"addressbookwin_width", "520", &prefs_common.addressbookwin_width, P_INT,
727 NULL, NULL, NULL},
728 {"addressbookwin_height", "-1", &prefs_common.addressbookwin_height, P_INT,
729 NULL, NULL, NULL},
731 {"addressbookeditpersonwin_width", "640", &prefs_common.addressbookeditpersonwin_width, P_INT,
732 NULL, NULL, NULL},
733 {"addressbookeditpersonwin_height", "320", &prefs_common.addressbookeditpersonwin_height, P_INT,
734 NULL, NULL, NULL},
736 {"addressbookeditgroupwin_width", "580", &prefs_common.addressbookeditgroupwin_width, P_INT,
737 NULL, NULL, NULL},
738 {"addressbookeditgroupwin_height", "340", &prefs_common.addressbookeditgroupwin_height, P_INT,
739 NULL, NULL, NULL},
741 {"pluginswin_width", "-1", &prefs_common.pluginswin_width, P_INT,
742 NULL, NULL, NULL},
743 {"pluginswin_height", "-1", &prefs_common.pluginswin_height, P_INT,
744 NULL, NULL, NULL},
746 {"prefswin_width", "600", &prefs_common.prefswin_width, P_INT,
747 NULL, NULL, NULL},
748 {"prefswin_height", "-1", &prefs_common.prefswin_height, P_INT,
749 NULL, NULL, NULL},
751 {"folderitemwin_width", "500", &prefs_common.folderitemwin_width, P_INT,
752 NULL, NULL, NULL},
753 {"folderitemwin_height", "-1", &prefs_common.folderitemwin_height, P_INT,
754 NULL, NULL, NULL},
756 {"editaccountwin_width", "500", &prefs_common.editaccountwin_width, P_INT,
757 NULL, NULL, NULL},
758 {"editaccountwin_height", "-1", &prefs_common.editaccountwin_height, P_INT,
759 NULL, NULL, NULL},
761 {"accountswin_width", "500", &prefs_common.accountswin_width, P_INT,
762 NULL, NULL, NULL},
763 {"accountswin_height", "-1", &prefs_common.accountswin_height, P_INT,
764 NULL, NULL, NULL},
766 {"logwin_width", "520", &prefs_common.logwin_width, P_INT,
767 NULL, NULL, NULL},
768 {"logwin_height", "-1", &prefs_common.logwin_height, P_INT,
769 NULL, NULL, NULL},
771 {"folderselwin_width", "300", &prefs_common.folderselwin_width, P_INT,
772 NULL, NULL, NULL},
773 {"folderselwin_height", "-1", &prefs_common.folderselwin_height, P_INT,
774 NULL, NULL, NULL},
776 {"addressaddwin_width", "300", &prefs_common.addressaddwin_width, P_INT,
777 NULL, NULL, NULL},
778 {"addressaddwin_height", "-1", &prefs_common.addressaddwin_height, P_INT,
779 NULL, NULL, NULL},
781 {"addressbook_folderselwin_width", "300", &prefs_common.addressbook_folderselwin_width, P_INT,
782 NULL, NULL, NULL},
783 {"addressbook_folderselwin_height", "-1", &prefs_common.addressbook_folderselwin_height, P_INT,
784 NULL, NULL, NULL},
786 /* Hidden */
787 {"warn_dnd", "1", &prefs_common.warn_dnd, P_INT,
788 NULL, NULL, NULL},
789 {"utf8_instead_of_locale_for_broken_mail", "0",
790 &prefs_common.broken_are_utf8, P_INT,
791 NULL, NULL, NULL},
792 {"enable_swap_from", "FALSE", &prefs_common.swap_from, P_BOOL,
793 NULL, NULL, NULL},
794 {"use_stripes_everywhere", "TRUE", &prefs_common.use_stripes_everywhere, P_BOOL,
795 NULL, NULL, NULL},
796 {"use_stripes_in_summaries", "TRUE", &prefs_common.use_stripes_in_summaries, P_BOOL,
797 NULL, NULL, NULL},
798 {"stripes_color_offset", "4000", &prefs_common.stripes_color_offset, P_INT,
799 NULL, NULL, NULL},
800 {"enable_dotted_lines", "FALSE", &prefs_common.enable_dotted_lines, P_BOOL,
801 NULL, NULL, NULL},
802 {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL,
803 NULL, NULL, NULL},
804 {"folderview_vscrollbar_policy", "0",
805 &prefs_common.folderview_vscrollbar_policy, P_ENUM,
806 NULL, NULL, NULL},
807 {"textview_cursor_visible", "FALSE",
808 &prefs_common.textview_cursor_visible, P_BOOL,
809 NULL, NULL, NULL},
810 {"hover_timeout", "500", &prefs_common.hover_timeout, P_INT,
811 NULL, NULL, NULL},
812 {"cache_max_mem_usage", "4096", &prefs_common.cache_max_mem_usage, P_INT,
813 NULL, NULL, NULL},
814 {"cache_min_keep_time", "15", &prefs_common.cache_min_keep_time, P_INT,
815 NULL, NULL, NULL},
816 {"thread_by_subject_max_age", "10", &prefs_common.thread_by_subject_max_age,
817 P_INT, NULL, NULL, NULL },
818 {"summary_quicksearch_sticky", "1", &prefs_common.summary_quicksearch_sticky, P_INT,
819 NULL, NULL, NULL},
820 {"summary_quicksearch_dynamic", "0", &prefs_common.summary_quicksearch_dynamic, P_INT,
821 NULL, NULL, NULL},
822 {"statusbar_update_step", "10", &prefs_common.statusbar_update_step, P_INT,
823 NULL, NULL, NULL},
824 {"compose_no_markup", "FALSE", &prefs_common.compose_no_markup, P_BOOL,
825 NULL, NULL, NULL},
826 {"skip_ssl_cert_check", "FALSE", &prefs_common.skip_ssl_cert_check, P_BOOL,
827 NULL, NULL, NULL},
828 {"live_dangerously", "FALSE", &prefs_common.live_dangerously, P_BOOL,
829 NULL, NULL, NULL},
830 {"hide_quotes", "0", &prefs_common.hide_quotes, P_INT,
831 NULL, NULL, NULL},
832 {"unsafe_ssl_certs", "FALSE", &prefs_common.unsafe_ssl_certs, P_BOOL,
833 NULL, NULL, NULL},
835 {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL}
838 PrefsCommon *prefs_common_get(void)
840 return &prefs_common;
844 * Read history list from the specified history file
846 GList *prefs_common_read_history(const gchar *history)
848 FILE *fp;
849 gchar *path;
850 gchar buf[PREFSBUFSIZE];
851 GList *tmp = NULL;
853 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
854 NULL);
855 if ((fp = g_fopen(path, "rb")) == NULL) {
856 if (ENOENT != errno) FILE_OP_ERROR(path, "fopen");
857 g_free(path);
858 return NULL;
860 g_free(path);
861 while (fgets(buf, sizeof(buf), fp) != NULL) {
862 g_strstrip(buf);
863 if (buf[0] == '\0') continue;
864 tmp = add_history(tmp, buf);
866 fclose(fp);
868 tmp = g_list_reverse(tmp);
870 return tmp;
873 void prefs_common_read_config(void)
875 gchar *rcpath;
876 gchar *tmp;
878 rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMON_RC, NULL);
879 prefs_read_config(param, "Common", rcpath, NULL);
880 #ifdef G_OS_WIN32
881 prefs_read_config(param_os_specific, "CommonWin32", rcpath, NULL);
882 #endif
884 g_free(rcpath);
886 tmp = g_strdup(gettext(prefs_common.quotefmt));
887 g_free(prefs_common.quotefmt);
888 prefs_common.quotefmt = tmp;
890 tmp = g_strdup(gettext(prefs_common.fw_quotefmt));
891 g_free(prefs_common.fw_quotefmt);
892 prefs_common.fw_quotefmt = tmp;
894 tmp = g_strdup(gettext(prefs_common.date_format));
895 g_free(prefs_common.date_format);
896 prefs_common.date_format = tmp;
898 tmp = g_strdup(gettext(prefs_common.compose_body_format));
899 g_free(prefs_common.compose_body_format);
900 prefs_common.compose_body_format = tmp;
902 prefs_common.mime_open_cmd_history =
903 prefs_common_read_history(COMMAND_HISTORY);
904 prefs_common.summary_quicksearch_history =
905 prefs_common_read_history(QUICKSEARCH_HISTORY);
906 prefs_common.summary_search_from_history =
907 prefs_common_read_history(SUMMARY_SEARCH_FROM_HISTORY);
908 prefs_common.summary_search_to_history =
909 prefs_common_read_history(SUMMARY_SEARCH_TO_HISTORY);
910 prefs_common.summary_search_subject_history =
911 prefs_common_read_history(SUMMARY_SEARCH_SUBJECT_HISTORY);
912 prefs_common.summary_search_body_history =
913 prefs_common_read_history(SUMMARY_SEARCH_BODY_HISTORY);
914 prefs_common.summary_search_adv_condition_history =
915 prefs_common_read_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY);
916 prefs_common.message_search_history =
917 prefs_common_read_history(MESSAGE_SEARCH_HISTORY);
919 colorlabel_update_colortable_from_prefs();
923 * Save history list to the specified history file
925 void prefs_common_save_history(const gchar *history, GList *list)
927 GList *cur;
928 FILE *fp;
929 gchar *path;
931 path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, history,
932 NULL);
933 if ((fp = g_fopen(path, "wb")) == NULL) {
934 FILE_OP_ERROR(path, "fopen");
935 g_free(path);
936 return;
939 for (cur = list; cur != NULL; cur = cur->next) {
940 fputs((gchar *)cur->data, fp);
941 fputc('\n', fp);
944 fclose(fp);
945 g_free(path);
948 void prefs_common_write_config(void)
950 prefs_write_config(param, "Common", COMMON_RC);
951 #ifdef G_OS_WIN32
952 prefs_write_config(param_os_specific, "CommonWin32", COMMON_RC);
953 #endif
955 prefs_common_save_history(COMMAND_HISTORY,
956 prefs_common.mime_open_cmd_history);
957 prefs_common_save_history(QUICKSEARCH_HISTORY,
958 prefs_common.summary_quicksearch_history);
959 prefs_common_save_history(SUMMARY_SEARCH_FROM_HISTORY,
960 prefs_common.summary_search_from_history);
961 prefs_common_save_history(SUMMARY_SEARCH_TO_HISTORY,
962 prefs_common.summary_search_to_history);
963 prefs_common_save_history(SUMMARY_SEARCH_SUBJECT_HISTORY,
964 prefs_common.summary_search_subject_history);
965 prefs_common_save_history(SUMMARY_SEARCH_BODY_HISTORY,
966 prefs_common.summary_search_body_history);
967 prefs_common_save_history(SUMMARY_SEARCH_ADV_CONDITION_HISTORY,
968 prefs_common.summary_search_adv_condition_history);
969 prefs_common_save_history(MESSAGE_SEARCH_HISTORY,
970 prefs_common.message_search_history);
973 /* make a copy of string 'in' into buffer 'out'. un-escape \ sequences.
974 both 'in' and 'out' must be non-NULL.
975 'out' must be a pointer to a buffer whose size is at least equal
976 to strlen(txt)+1, this buffer will get cleared. out's contents
977 will always get set to a valid string, even if it's "".*/
978 void pref_get_unescaped_pref(gchar *out, const gchar *in)
980 const gchar *i;
981 gchar *o;
983 *out = '\0';
985 g_return_if_fail( in != NULL );
986 g_return_if_fail( out != NULL );
988 i = in;
989 o = out;
990 memset(out, 0, strlen(in)+1);
991 while (*i != '\0') {
992 if (*i == '\\' && *(i+1) == 'n') {
993 *o++ = '\n';
994 i++;
995 } else if (*i == '\\' && *(i+1) == 't') {
996 *o++ = '\t';
997 i++;
998 } else if (*i == '\\' && *(i+1) == '\\') {
999 *o++ = '\\';
1000 i++;
1001 } else {
1002 *o++ = *i;
1004 i++;
1006 *o='\0';
1009 /* make a copy of string 'in' into buffer 'out'. escape \ sequences.
1010 both 'in' and 'out' must be non-NULL.
1011 'out' must be a pointer to a buffer whose size is at least equal
1012 to 2*strlen(txt)+1. out's contents will always get set to a valid
1013 string, even if it's "". */
1014 void pref_get_escaped_pref(gchar *out, const gchar *in)
1016 const gchar *i;
1017 gchar *o;
1019 *out = '\0';
1021 g_return_if_fail( in != NULL );
1022 g_return_if_fail( out != NULL );
1024 i = in;
1025 o = out;
1026 while (*i != '\0') {
1027 if (*i == '\n') {
1028 *o++ = '\\';
1029 *o++ = 'n';
1030 } else if (*i == '\t') {
1031 *o++ = '\\';
1032 *o++ = 't';
1033 } else if (*i == '\\') {
1034 *o++ = '\\';
1035 *o++ = '\\';
1036 } else {
1037 *o++ = *i;
1039 i++;
1041 *o = '\0';
1044 /* set the contents of a textview widget from the internal \-escaped
1045 representation of a pref string. both txt and textview must be non-NULL. */
1046 void pref_set_textview_from_pref(GtkTextView *textview, const gchar *txt)
1048 GtkTextBuffer *buffer;
1049 gchar *out = NULL;
1051 g_return_if_fail( txt != NULL );
1052 g_return_if_fail( textview != NULL );
1054 buffer = gtk_text_view_get_buffer(textview);
1055 out = malloc(strlen(txt)+1);
1057 pref_get_unescaped_pref(out, txt);
1059 gtk_text_buffer_set_text(buffer, out?out:"", -1);
1060 g_free(out);
1063 /* set the contents of a gtkentry widget from the internal \-escaped
1064 representation of a pref string. both txt and entry must be non-NULL. */
1065 void pref_set_entry_from_pref(GtkEntry *entry, const gchar *txt)
1067 gchar *out = NULL;
1069 g_return_if_fail( txt != NULL );
1070 g_return_if_fail( entry != NULL );
1072 out = malloc(strlen(txt)+1);
1074 pref_get_unescaped_pref(out, txt);
1076 gtk_entry_set_text(entry, out?out:"");
1077 g_free(out);
1080 /* get the \-escaped internal representation of a pref from the contents of
1081 a textview widget. textview must be non-NULL. */
1082 gchar *pref_get_pref_from_textview(GtkTextView *textview)
1084 GtkTextBuffer *buffer;
1085 GtkTextIter start, end;
1086 gchar *out, *tmp;
1088 g_return_val_if_fail( textview != NULL, "" );
1090 buffer = gtk_text_view_get_buffer(textview);
1091 gtk_text_buffer_get_start_iter(buffer, &start);
1092 gtk_text_buffer_get_iter_at_offset(buffer, &end, -1);
1093 tmp = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
1094 out = malloc(2*strlen(tmp)+1);
1096 pref_get_escaped_pref(out, tmp);
1097 g_free(tmp);
1099 return out?out:"";
1102 /* get the \-escaped internal representation of a pref from the contents of
1103 a gtkentry widget. entry must be non-NULL. */
1104 gchar *pref_get_pref_from_entry(GtkEntry *entry)
1106 gchar *out, *tmp;
1108 g_return_val_if_fail( entry != NULL, "" );
1110 tmp = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
1111 out = malloc(2*strlen(tmp)+1);
1113 pref_get_escaped_pref(out, tmp);
1114 g_free(tmp);
1116 return out?out:"";
1119 /* ugly hack to be able to get this pref from ssl_certificate.c */
1120 gboolean prefs_common_unsafe_ssl_certs(void)
1122 return prefs_common.unsafe_ssl_certs;