string concretize (url u) { // This routine transforms a resolved url into a system file name. // In the case of distant files from the web, a local copy is created. if (is_rooted (u, "default") || is_rooted (u, "file") || is_rooted (u, "blank")) return as_string (reroot (u, "default")); if (is_rooted_web (u)) return concretize (get_from_web (u)); if (is_rooted_tmfs (u)) return concretize (get_from_server (u)); if (is_ramdisc (u)) return concretize (get_from_ramdisc (u)); if (is_here (u)) return as_string (url_pwd ()); if (is_parent (u)) return as_string (url_pwd () * url_parent ()); if (is_wildcard (u, 1)) return u->t[1]->label; std_warning << "Couldn't concretize " << u->t << LF; // failed_error << "u= " << u << LF; // FAILED ("url has no root"); return "xxx"; }
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 complete (url u, string filter, bool flag) { url home= url_pwd (); return home * complete (home, u, filter, flag); }
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"; }