void file_chooser_widget_rep::handle_get_string (get_string_event ev) { if (ev->which == "input") { string dir, name; a[0]["directory"]["input"] << get_string ("input", dir); if (type == "directory") { a[0]["directory"]["input"] << get_string ("input", name); if (name == "#f") { ev->s= "#f"; return; } url u= url_system (scm_unquote (dir)); ev->s= "(system->url " * scm_quote (as_string (u)) * ")"; } else { a[0]["file"]["input"] << get_string ("input", name); if (name == "#f") { ev->s= "#f"; return; } url u= url_system (scm_unquote (dir)) * url_system (scm_unquote (name)); ev->s= "(system->url " * scm_quote (convert(as_string (u), get_locale_charset () ,"Cork")) * ")"; } if (type == "image") { string hsize, vsize, xpos, ypos; wk_widget par= a[0]["image"]["parameters"]; par["hsize"]["input"] << get_string ("input", hsize); par["vsize"]["input"] << get_string ("input", vsize); par["xpos"]["input"] << get_string ("input", xpos); par["ypos"]["input"] << get_string ("input", ypos); ev->s= "(list " * ev->s * " " * hsize * " " * vsize * " " * xpos * " " * ypos * ")"; } } else attribute_widget_rep::handle_get_string (ev); }
static void init_main_paths () { #ifdef __MINGW32__ if (is_none (get_env_path ("TEXMACS_HOME_PATH", get_env ("APPDATA") * "/TeXmacs"))) { #else if (is_none (get_env_path ("TEXMACS_HOME_PATH", "~/.TeXmacs"))) { #endif boot_error << "\n"; boot_error << "Installation problem: please send a bug report.\n"; boot_error << "'TEXMACS_HOME_PATH' could not be set to '~/.TeXmacs'.\n"; boot_error << "You may try to set this environment variable manually\n"; boot_error << "\n"; FAILED ("installation problem"); exit (1); } } /****************************************************************************** * Directory for temporary files ******************************************************************************/ static string main_tmp_dir= "$TEXMACS_HOME_PATH/system/tmp"; static void make_dir (url which) { if (!is_directory (which)) { make_dir (head (which)); mkdir (which); } } static url url_temp_dir_sub () { #ifdef __MINGW32__ static url tmp_dir= url_system (main_tmp_dir) * url_system (as_string (time (NULL))); #else static url tmp_dir= url_system (main_tmp_dir) * url_system (as_string ((int) getpid ())); #endif return (tmp_dir); } url url_temp_dir () { static url u; if (u == url_none()) { u= url_temp_dir_sub (); make_dir (u); } return u; } bool process_running (int pid) { string cmd= "ps -p " * as_string (pid); string ret= eval_system (cmd); return occurs ("texmacs", ret) && occurs (as_string (pid), ret); }
string gs_system () { #ifdef OS_MINGW url gs= url_system ("C:\\") * url_wildcard ("Program Files*") * url_system ("gs") * url_wildcard ("gs*")* url_system ("bin") * url_wildcard ("gswin*c.exe"); return materialize (gs); #else return "gs"; #endif }
static url resolve_tfm (url name) { if (get_setting ("KPSEWHICH") == "true") { string which= kpsewhich (as_string (name)); if ((which!="") && exists (url_system (which))) return url_system (which); // cout << "Missed " << name << "\n"; } return resolve (the_tfm_path * name); }
static bool list_in_directory (string dir, string name, array<string> suffix, bool dir_flag) { if (name == "") return false; if (name == "..") return dir_flag; if (name[0]=='.') return false; if (dir_flag) return is_directory (url_system (dir, name)); else return is_regular (url_system (dir, name)) && has_suffix (name, suffix); }
static url resolve_pfb (url name) { #ifndef OS_WIN32 // The kpsewhich from MikTeX is bugged for pfb fonts if (get_setting ("KPSEWHICH") == "true") { string which= kpsewhich (as_string (name)); if ((which!="") && exists (url_system (which))) return url_system (which); // cout << "Missed " << name << "\n"; } #endif return resolve (the_pfb_path * name); }
string gs_embedded () { string cmd; // no need to resolve each time url tmp= url_system (get_env ("TEXMACS_PATH")); url gs= tmp * url_system (GS_EXE); if (exists (gs)) { cmd= concretize (gs); } else { cmd= gs_system (); } return cmd; }
url resolve_tex (url name) { string s= as_string (name); if (is_cached ("font_cache.scm", s)) { url u= url_system (cache_get ("font_cache.scm", s) -> label); if (exists (u)) return u; cache_reset ("font_cache.scm", s); } bench_start ("resolve tex"); url u= url_none (); if (ends (s, "mf" )) { u= resolve_tfm (name); #ifdef OS_WIN32 if (is_none (u)) u= resolve_tfm (replace (s, ".mf", ".tfm")); #endif } if (ends (s, "tfm")) u= resolve_tfm (name); if (ends (s, "pk" )) u= resolve_pk (name); if (ends (s, "pfb")) u= resolve_pfb (name); bench_cumul ("resolve tex"); if (!is_none (u)) cache_set ("font_cache.scm", s, as_string (u)); //cout << "Resolve " << name << " -> " << u << "\n"; return u; }
url get_texmacs_home_path () { url path= get_env ("TEXMACS_HOME_PATH"); if (path == "") path= url_system ("$HOME/.TeXmacs"); return path; }
static url url_get_atom (string s, int type) { if (type < URL_STANDARD) { if (s == "~") return url_system (get_env ("HOME")); if (starts (s, "$")) { string val= get_env (s (1, N(s))); if (val == "") return url_none (); return unblank (url_system (val)); } } if (occurs ("*", s)) return url_wildcard (s); #ifdef WINPATHS if(N(s)==2 && ends (s, ":")) s->resize(1); // remove the ':' after unit letter #endif return as_url (tree (s)); }
url get_texmacs_path () { string tmpath= get_env ("TEXMACS_PATH"); //FIXME: Why is this? while ((N(tmpath)>0) && (tmpath [N(tmpath) - 1] == '/')) tmpath= tmpath (0, N(tmpath)-1); return url_system (tmpath); }
void reset_pfb_path () { string pfb= get_setting ("PFB"); the_pfb_path= url_here () | search_sub_dirs ("$TEXMACS_HOME_PATH/fonts/type1") | search_sub_dirs ("$TEXMACS_PATH/fonts/type1") | "$TEX_PFB_PATH" | (pfb == ""? url_none (): url_system (pfb)); the_pfb_path= expand (factor (the_pfb_path)); }
void image_widget_rep::handle_repaint (repaint_event ev) { (void) ev; renderer ren= ev->win; ren->set_background (white); ren->clear (0, 0, w, h); layout_dark_outline (ren, 0, 0, w, h); if (file_name != "") { SI iw, ih; image_size (url_system (file_name), iw, ih); SI ww= w-2*PIXEL, hh= h-2*PIXEL; if ((ww>0) && (hh>0) && (iw>0) && (ih>0)) { if (iw * hh > ih * ww) hh= (ww * ih) / iw; else ww= (hh * iw) / ih; } SI px= ren->pixel; scalable im= load_scalable_image (url_system (file_name), ww, hh, px); ren->draw_scalable (im, PIXEL, PIXEL); } }
void cache_initialize () { texmacs_path= url_system ("$TEXMACS_PATH"); if (get_env ("TEXMACS_HOME_PATH") == "") texmacs_home_path= url_system ("$HOME/.TeXmacs"); else texmacs_home_path= url_system ("$TEXMACS_HOME_PATH"); if (get_env ("TEXMACS_DOC_PATH") == "") texmacs_doc_path= url_system ("$TEXMACS_PATH/doc"); else texmacs_doc_path= url_system ("$TEXMACS_DOC_PATH"); texmacs_path_string = concretize (texmacs_path); texmacs_home_path_string = concretize (texmacs_home_path); texmacs_doc_path_string = concretize (texmacs_doc_path); texmacs_font_path_string = concretize (texmacs_home_path * "fonts/"); cache_refresh (); if (is_recursively_up_to_date (texmacs_path * "fonts/type1") && is_recursively_up_to_date (texmacs_path * "fonts/truetype") && is_recursively_up_to_date (texmacs_home_path * "fonts/type1") && is_recursively_up_to_date (texmacs_home_path * "fonts/truetype")); else remove (texmacs_home_path * "fonts/error" * url_wildcard ("*")); }
string gs_prefix () { #if defined (__MINGW__) || defined (__MINGW32__) static string cmd; // no need to resolve each time if (cmd == "") { url gs= resolve_in_path ("gswin32c"); if(is_none(gs)) gs= url_system (get_env ("TEXMACS_PATH")) * "bin" * "gswin32c"; cmd= sys_concretize (gs) * " "; } return copy (cmd); #else return "gs "; #endif }
void file_list_widget_rep::handle_set_string (set_string_event ev) { if (ev->which == "directory") { dir= ev->s; bool flag; names= read_directory (url_system (dir), flag); lids= array<bool>(N(names)); for (int i=0; i<N(names); i++) lids[i]= list_in_directory (dir, names[i], suffix, dir_flag); SI w, h; this << get_size (w, h, 0); get_canvas () << set_extents (0, -h, w, 0); hilight=-1; if (attached ()) this << emit_invalidate_all (); } else attribute_widget_rep::handle_set_string (ev); }
void file_list_widget_rep::handle_mouse (mouse_event ev) { string type= ev->type; if ((type == "release-left") || (type == "release-right")) { int i; SI y= 0, search= ev->y*3; metric ex; font fn= get_default_font (); for (i=0; i<N(names); i++) if (lids[i]) { fn->var_get_extents (names[i], ex); if ((search >= (y+ fn->y1- fn->y2- 12*PIXEL)) && (search < y)) break; y += fn->y1- fn->y2- 12*PIXEL; } if (i==N(names)) return; string s= names[i]; wk_widget fch_wid (fch); if (hilight == i) { if (dir_flag) { string name= as_string (url_system (dir, s)); fch_wid << set_string ("directory", name); } else fch_wid << set_string ("return", s); } else { hilight= i; if (!dir_flag) fch_wid << set_string ("file", s); this << emit_invalidate_all (); } } if ((type == "press-up") || (type == "press-down")) { SI x, y, dy= 100*PIXEL; if (type == "press-down") dy= -dy; get_canvas () << get_coord2 ("scroll position", x, y); y += dy; get_canvas () << set_scroll_pos (x, y); } }
void TeXmacs_main (int argc, char** argv) { int i; bool flag= true; string the_default_font; for (i=1; i<argc; i++) if (argv[i][0] == '\0') argc= i; else if (((argv[i][0] == '-') || (argv[i][0] == '+')) && (argv[i][1] != '\0')) { string s= argv[i]; if ((N(s)>=2) && (s(0,2)=="--")) s= s (1, N(s)); if ((s == "-s") || (s == "-silent")) flag= false; else if ((s == "-V") || (s == "-verbose")) debug (DEBUG_FLAG_VERBOSE, true); else if ((s == "-d") || (s == "-debug")) debug (DEBUG_FLAG_STD, true); else if (s == "-debug-events") debug (DEBUG_FLAG_EVENTS, true); else if (s == "-debug-io") debug (DEBUG_FLAG_IO, true); else if (s == "-debug-bench") debug (DEBUG_FLAG_BENCH, true); else if (s == "-debug-history") debug (DEBUG_FLAG_HISTORY, true); else if (s == "-debug-qt") debug (DEBUG_FLAG_QT, true); else if (s == "-debug-qt-widgets") debug (DEBUG_FLAG_QT_WIDGETS, true); else if (s == "-debug-keyboard") debug (DEBUG_FLAG_KEYBOARD, true); else if (s == "-debug-packrat") debug (DEBUG_FLAG_PACKRAT, true); else if (s == "-debug-flatten") debug (DEBUG_FLAG_FLATTEN, true); else if (s == "-debug-correct") debug (DEBUG_FLAG_CORRECT, true); else if (s == "-debug-convert") debug (DEBUG_FLAG_CONVERT, true); else if (s == "-debug-all") { debug (DEBUG_FLAG_EVENTS, true); debug (DEBUG_FLAG_STD, true); debug (DEBUG_FLAG_IO, true); debug (DEBUG_FLAG_HISTORY, true); debug (DEBUG_FLAG_BENCH, true); debug (DEBUG_FLAG_QT, true); debug (DEBUG_FLAG_QT_WIDGETS, true); } else if (s == "-disable-error-recovery") disable_error_recovery= true; else if ((s == "-fn") || (s == "-font")) { i++; if (i<argc) the_default_font= argv[i]; } else if ((s == "-g") || (s == "-geometry")) { i++; if (i<argc) { string g= argv[i]; int j=0, j1, j2, j3; for (j=0; j<N(g); j++) if (g[j] == 'x') break; j1=j; if (j<N(g)) j++; for (; j<N(g); j++) if ((g[j] == '+') || (g[j] == '-')) break; j2=j; if (j<N(g)) j++; for (; j<N(g); j++) if ((g[j] == '+') || (g[j] == '-')) break; j3=j; if (j1<N(g)) { geometry_w= max (as_int (g (0, j1)), 320); geometry_h= max (as_int (g (j1+1, j2)), 200); } if (j3<N(g)) { if (g[j2] == '-') geometry_x= as_int (g (j2, j3)) - 1; else geometry_x= as_int (g (j2+1, j3)); if (g[j3] == '-') geometry_y= as_int (g (j3, N(g))) - 1; else geometry_y= as_int (g (j3+1, N(g))); } } } else if ((s == "-b") || (s == "-initialize-buffer")) { i++; if (i<argc) tm_init_buffer_file= url_system (argv[i]); } else if ((s == "-i") || (s == "-initialize")) { i++; if (i<argc) tm_init_file= url_system (argv[i]); } else if ((s == "-v") || (s == "-version")) { cout << "\n"; cout << "TeXmacs version " << TEXMACS_VERSION << "\n"; cout << TEXMACS_COPYRIGHT << "\n"; cout << "\n"; exit (0); } else if ((s == "-p") || (s == "-path")) { cout << get_env ("TEXMACS_PATH") << "\n"; exit (0); } else if ((s == "-bp") || (s == "-binpath")) { cout << get_env ("TEXMACS_BIN_PATH") << "\n"; exit (0); } else if ((s == "-q") || (s == "-quit")) my_init_cmds= my_init_cmds * " (quit-TeXmacs)"; else if ((s == "-r") || (s == "-reverse")) set_reverse_colors (true); else if (s == "-no-retina") { retina_manual= true; retina_factor= 1; retina_icons = 1; retina_scale = 1.0; } else if ((s == "-R") || (s == "-retina")) { retina_manual= true; retina_factor= 2; retina_icons = 2; retina_scale = 1.4; } else if (s == "-no-retina-icons") { retina_iman = true; retina_icons = 1; } else if (s == "-retina-icons") { retina_iman = true; retina_icons = 2; } else if ((s == "-c") || (s == "-convert")) { i+=2; if (i<argc) { url in ("$PWD", argv[i-1]); url out ("$PWD", argv[ i ]); my_init_cmds= my_init_cmds * " " * "(load-buffer " * scm_quote (as_string (in)) * " :strict) " * "(export-buffer " * scm_quote (as_string (out)) * ")"; } } else if ((s == "-x") || (s == "-execute")) { i++; if (i<argc) my_init_cmds= (my_init_cmds * " ") * argv[i]; } else if (s == "-server") start_server_flag= true; else if (s == "-log-file") i++; else if ((s == "-Oc") || (s == "-no-char-clipping")) char_clip= false; else if ((s == "+Oc") || (s == "-char-clipping")) char_clip= true; else if ((s == "-S") || (s == "-setup") || (s == "-delete-cache") || (s == "-delete-font-cache") || (s == "-delete-style-cache") || (s == "-delete-file-cache") || (s == "-delete-doc-cache") || (s == "-delete-plugin-cache") || (s == "-delete-server-data") || (s == "-delete-databases")); else if (starts (s, "-psn")); else { cout << "\n"; cout << "Options for TeXmacs:\n\n"; cout << " -b [file] Specify scheme buffers initialization file\n"; cout << " -c [i] [o] Convert file 'i' into file 'o'\n"; cout << " -d For debugging purposes\n"; cout << " -fn [font] Set the default TeX font\n"; cout << " -g [geom] Set geometry of window in pixels\n"; cout << " -h Display this help message\n"; cout << " -i [file] Specify scheme initialization file\n"; cout << " -p Get the TeXmacs path\n"; cout << " -q Shortcut for -x \"(quit-TeXmacs)\"\n"; cout << " -r Reverse video mode\n"; cout << " -s Suppress information messages\n"; cout << " -S Rerun TeXmacs setup program before starting\n"; cout << " -v Display current TeXmacs version\n"; cout << " -V Show some informative messages\n"; cout << " -x [cmd] Execute scheme command\n"; cout << " -Oc TeX characters bitmap clipping off\n"; cout << " +Oc TeX characters bitmap clipping on (default)\n"; cout << "\nPlease report bugs to <*****@*****.**>\n"; cout << "\n"; exit (0); } } if (flag) debug (DEBUG_FLAG_AUTO, true); // Further options via environment variables if (get_env ("TEXMACS_RETINA") == "off") { retina_manual= true; retina_factor= 1; retina_icons = 1; retina_scale = 1.0; } if (get_env ("TEXMACS_RETINA") == "on") { retina_manual= true; retina_factor= 2; retina_icons = 2; retina_scale = 1.4; } if (get_env ("TEXMACS_RETINA_ICONS") == "off") { retina_iman = true; retina_icons = 1; } if (get_env ("TEXMACS_RETINA_ICONS") == "on") { retina_iman = true; retina_icons = 2; } // End options via environment variables if (DEBUG_STD) debug_boot << "Installing internal plug-ins...\n"; bench_start ("initialize plugins"); init_plugins (); bench_cumul ("initialize plugins"); if (DEBUG_STD) debug_boot << "Opening display...\n"; #if defined(X11TEXMACS) && defined(MACOSX_EXTENSIONS) init_mac_application (); #endif gui_open (argc, argv); set_default_font (the_default_font); if (DEBUG_STD) debug_boot << "Starting server...\n"; { // opening scope for server sv server sv; // HACK: // Qt and Guile want to change the locale. // We need to force it to C to parse correctly the configuration files // (see as_double() in string.cpp) setlocale(LC_NUMERIC, "C"); string where= ""; for (i=1; i<argc; i++) { if (argv[i] == NULL) break; string s= argv[i]; if ((N(s)>=2) && (s(0,2)=="--")) s= s (1, N(s)); if ((s[0] != '-') && (s[0] != '+')) { if (DEBUG_STD) debug_boot << "Loading " << s << "...\n"; url u= url_system (s); if (!is_rooted (u)) u= resolve (url_pwd (), "") * u; string b= scm_quote (as_string (u)); string cmd= "(load-buffer " * b * " " * where * ")"; where= " :new-window"; exec_delayed (scheme_cmd (cmd)); } if ((s == "-c") || (s == "-convert")) i+=2; else if ((s == "-b") || (s == "-initialize-buffer") || (s == "-fn") || (s == "-font") || (s == "-i") || (s == "-initialize") || (s == "-g") || (s == "-geometry") || (s == "-x") || (s == "-execute") || (s == "-log-file")) i++; } if (install_status == 1) { if (DEBUG_STD) debug_boot << "Loading welcome message...\n"; url u= "tmfs://help/plain/tm/doc/about/welcome/first.en.tm"; string b= scm_quote (as_string (u)); string cmd= "(load-buffer " * b * " " * where * ")"; where= " :new-window"; exec_delayed (scheme_cmd (cmd)); } else if (install_status == 2) { if (DEBUG_STD) debug_boot << "Loading upgrade message...\n"; url u= "tmfs://help/plain/tm/doc/about/changes/changes-recent.en.tm"; string b= scm_quote (as_string (u)); string cmd= "(load-buffer " * b * " " * where * ")"; where= " :new-window"; exec_delayed (scheme_cmd (cmd)); } if (number_buffers () == 0) { if (DEBUG_STD) debug_boot << "Creating 'no name' buffer...\n"; open_window (); } bench_print (); bench_reset ("initialize texmacs"); bench_reset ("initialize plugins"); bench_reset ("initialize scheme"); if (DEBUG_STD) debug_boot << "Starting event loop...\n"; texmacs_started= true; if (!disable_error_recovery) signal (SIGSEGV, clean_exit_on_segfault); if (start_server_flag) server_start (); gui_start_loop (); if (DEBUG_STD) debug_boot << "Stopping server...\n"; } // ending scope for server sv if (DEBUG_STD) debug_boot << "Closing display...\n"; gui_close (); #if defined(X11TEXMACS) && defined(MACOSX_EXTENSIONS) finalize_mac_application (); #endif if (DEBUG_STD) debug_boot << "Good bye...\n"; }
tree rewrite_impl (tree t) { switch (L(t)) { case EXTERN: { int i, n= N(t); tree r (TUPLE, n); for (i=0; i<n; i++) r[i]= evaluate (t[i]); object expr= null_object (); for (i=n-1; i>0; i--) expr= cons (object (r[i]), expr); string fun= evaluate_string (t[0]); expr= cons (string_to_object (fun), expr); bool secure= as_bool (std_env ["secure"]); if (!secure && script_status < 2) { if (!as_bool (call ("secure?", expr))) return tree (ERROR, "insecure script"); } environment old_env= reenter_rewrite_env; reenter_rewrite_env= std_env; object o= eval (expr); reenter_rewrite_env= old_env; return content_to_tree (o); } #ifdef CLASSICAL_MACRO_EXPANSION case MAP_ARGS: { if (!(is_atomic (t[0]) && is_atomic (t[1]) && is_atomic (t[2]))) return evaluate_error ("invalid map-args"); if (macro_top_level (std_env)) return evaluate_error ("undefined", t[2]); basic_environment local= macro_arguments (std_env); int key= make_tree_label (t[2]->label); if (!local->contains (key)) return evaluate_error ("undefined", t[2]); tree v= local [key]; if (is_atomic (v)) return evaluate_error ("invalid-map-args"); macro_up (std_env); int start= 0, end= N(v); if (N(t)>=4) start= as_int (evaluate (t[3])); if (N(t)>=5) end = as_int (evaluate (t[4])); int i, n= max (0, end-start); tree r (make_tree_label (t[1]->label), n); for (i=0; i<n; i++) r[i]= tree (make_tree_label (t[0]->label), tree (ARG, copy (t[2]), as_string (start+i)), as_string (start+i)); macro_redown (std_env, local); return r; } #endif // CLASSICAL_MACRO_EXPANSION case VAR_INCLUDE: { url base_file_name (as_string (std_env ["base-file-name"])); url file_name= url_system (evaluate_string (t[0])); return load_inclusion (relative (base_file_name, file_name)); } case REWRITE_INACTIVE: { #ifdef CLASSICAL_MACRO_EXPANSION if ((!is_func (t[0], ARG)) || is_compound (t[0][0])) return evaluate_error ("invalid rewrite-inactive"); if (macro_top_level (std_env)) return evaluate_error ("undefined", t[0][0]); basic_environment local= macro_arguments (std_env); int key= make_tree_label (t[0][0]->label); if (!local->contains (key)) return evaluate_error ("undefined", t[0][0]); tree val= local [key]; int i, n= N(t[0]); for (i=1; i<n; i++) { int j= as_int (t[0][i]); if ((j>=0) && (j<N(val))) val= val[j]; else return evaluate_error ("invalid rewrite-inactive"); } #else tree val= t[0]; #endif int inactive_mode= INACTIVE_INLINE_RECURSE; if (t[1] == "recurse") inactive_mode= INACTIVE_INLINE_RECURSE; else if (t[1] == "recurse*") inactive_mode= INACTIVE_BLOCK_RECURSE; else if (t[1] == "once") inactive_mode= INACTIVE_INLINE_ONCE; else if (t[1] == "once*") inactive_mode= INACTIVE_BLOCK_ONCE; else if (t[1] == "error") inactive_mode= INACTIVE_INLINE_ERROR; else if (t[1] == "error*") inactive_mode= INACTIVE_BLOCK_ERROR; return rewrite_inactive (val, inactive_mode); } default: return t; } }
inline url url_pwd () { return url_system ("$PWD"); }
void file_chooser_widget_rep::handle_set_string (set_string_event ev) { if (ev->which == "directory") { string dir= as_string (url_pwd () * url_system (ev->s)); a[0]["directory"]["input"] << set_string ("input", dir); a[0]["list"]["directories"] << set_string ("directory", dir); if (type != "directory") { // a[0]["file"]["input"] << set_string ("input", ""); a[0]["list"]["files"] << set_string ("directory", dir); } } else if (ev->which == "file") { if (type == "directory") return; a[0]["file"]["input"] << set_string ("input", ev->s); if (type == "image") { string dir, name= ev->s; a[0]["directory"]["input"] << get_string ("input", dir); if (name != "") name= as_string (url_system (scm_unquote (dir), name)); a[0]["image"]["image"] << set_string ("name", name); array<string> ps_suffix; ps_suffix << string (".ps") << string (".eps"); wk_widget par_wid= a[0]["image"]["parameters"]; } } else if (ev->which == "return") { string s= ev->s; if (type == "directory") { a[0]["directory"]["input"] << set_string ("input", s); cmd (); } else { if (s != "#f" && !has_suffix (s, suffix)) a[0]["file"]["input"] << set_string ("input", s * suffix[0]); else { a[0]["file"]["input"] << set_string ("input", s); cmd (); } } } else if (ev->which == "suffixes") { if (type == "directory") return; // surely the following can be done better: suffix->resize(0); int i=0, any=0; string s= scm_unquote (ev->s); a[0]["suffixes"]["input"] << set_string ("input", s); while (i<N(s)) { while (s[i]==' ') ++i; int j=i; while (j<N(s) && s[j]!=' ') ++j; if (j>i) { suffix << s(i,j); any=1; } i=j+1; } if (!any) suffix << string (""); // Force a refresh: string dir; a[0]["directory"]["input"] << get_string ("input", dir); a[0]["list"]["directories"] << set_string ("directory", scm_unquote (dir)); a[0]["list"]["files"] << set_string ("directory", scm_unquote (dir)); } else attribute_widget_rep::handle_set_string (ev); }
void TeXmacs_init_paths (int& argc, char** argv) { (void) argc; (void) argv; #ifdef QTTEXMACS url exedir = url_system (qt_application_directory ()); #else url exedir = url_system(argv[0]) * ".." ; if (! is_rooted(exedir)) { exedir = url_pwd() * exedir ; } #endif #if (defined(QTTEXMACS) && defined(Q_WS_MAC)) // the following line can inibith external plugin loading // QCoreApplication::setLibraryPaths(QStringList()); // ideally we would like to control the external plugins // and add the most useful (gif, jpeg, svg converters) // to the bundle package. I still do not have a reliable solution // so just allow everything that is reachable. // plugins need to be installed in TeXmacs.app/Contents/Plugins QCoreApplication::addLibraryPath( QDir::cleanPath(QCoreApplication::applicationDirPath().append("/../Plugins")) ); // cout << from_qstring ( QCoreApplication::libraryPaths () .join("\n") ) << LF; { // ensure that private versions of the Qt frameworks have priority on // other instances. // in the event that we load qt plugins which could possibly link to // other instances of the Qt libraries string buf; buf = as_string(exedir * "../Frameworks"); if (get_env("DYLD_FRAMEWORK_PATH") != "") buf = buf * ":" * get_env("DYLD_FRAMEWORK_PATH"); set_env ("DYLD_FRAMEWORK_PATH", buf); buf = as_string(exedir * "../Resources/lib"); if (get_env("DYLD_LIBRARY_PATH") != "") buf = buf * ":" * get_env("DYLD_LIBRARY_PATH"); set_env ("DYLD_LIBRARY_PATH", buf); } #endif #if defined(AQUATEXMACS) ||(defined(QTTEXMACS) && defined(Q_WS_MAC)) || (defined(X11TEXMACS) && defined (MACOSX_EXTENSIONS)) // Mac bundle environment initialization // We set some environment variables when the executable // is in a .app bundle on MacOSX if (get_env ("TEXMACS_PATH") == "") set_env ("TEXMACS_PATH", as_string(exedir * "../Resources/share/TeXmacs")); //cout << get_env("PATH") * ":" * as_string(url("$PWD") * argv[0] // * "../../Resources/share/TeXmacs/bin") << LF; if (exists("/bin/bash")) { string shell_env = var_eval_system ("PATH='' /bin/bash -l -c 'echo $PATH'"); set_env ("PATH", get_env("PATH") * ":" * shell_env * ":" * as_string (exedir * "../Resources/share/TeXmacs/bin")); } else { set_env ("PATH", get_env("PATH") * ":" * as_string (exedir * "../Resources/share/TeXmacs/bin")); } // system("set"); #endif #ifdef __MINGW32__ // Win bundle environment initialization // TEXMACS_PATH is set by assuming that the executable is in TeXmacs/bin/ // HOME is set to USERPROFILE // PWD is set to HOME // if PWD is lacking, then the path resolution machinery may not work if (get_env ("TEXMACS_PATH") == "") set_env ("TEXMACS_PATH", as_string (exedir * "..")); // if (get_env ("HOME") == "") //now set in immediate_options otherwise --setup option fails // set_env ("HOME", get_env("USERPROFILE")); // HACK // In WINE the variable PWD is already in the outer Unix environment // so we need to override it to have a correct behaviour if ((get_env ("PWD") == "") || (get_env ("PWD")[0] == '/')) { set_env ("PWD", as_string (exedir)); // set_env ("PWD", get_env("HOME")); } // system("set"); #endif }
url url_system (string dir, string name) { return url_system (dir) * url_system (name); }