88 case _ => args |
88 case _ => args |
89 } |
89 } |
90 } |
90 } |
91 |
91 |
92 |
92 |
93 /* main startup */ |
93 /* environment */ |
94 |
94 |
95 update_environment() |
95 def putenv(name: String, value: String) |
|
96 { |
|
97 val misc = |
|
98 Class.forName("org.gjt.sp.jedit.MiscUtilities", true, ClassLoader.getSystemClassLoader) |
|
99 val putenv = misc.getMethod("putenv", classOf[String], classOf[String]) |
|
100 putenv.invoke(null, name, value) |
|
101 } |
|
102 |
|
103 for (name <- List("ISABELLE_HOME", "ISABELLE_HOME_USER", "JEDIT_HOME", "JEDIT_SETTINGS")) { |
|
104 putenv(name, File.platform_path(Isabelle_System.getenv(name))) |
|
105 } |
|
106 putenv("ISABELLE_ROOT", null) |
|
107 |
|
108 |
|
109 /* properties */ |
96 |
110 |
97 System.setProperty("jedit.home", File.platform_path(Path.explode("$JEDIT_HOME/dist"))) |
111 System.setProperty("jedit.home", File.platform_path(Path.explode("$JEDIT_HOME/dist"))) |
98 System.setProperty("scala.home", File.platform_path(Path.explode("$SCALA_HOME"))) |
112 System.setProperty("scala.home", File.platform_path(Path.explode("$SCALA_HOME"))) |
99 System.setProperty("scala.color", "false") |
113 System.setProperty("scala.color", "false") |
|
114 |
|
115 |
|
116 /* main startup */ |
100 |
117 |
101 val jedit = |
118 val jedit = |
102 Class.forName("org.gjt.sp.jedit.jEdit", true, ClassLoader.getSystemClassLoader) |
119 Class.forName("org.gjt.sp.jedit.jEdit", true, ClassLoader.getSystemClassLoader) |
103 val jedit_main = jedit.getMethod("main", classOf[Array[String]]) |
120 val jedit_main = jedit.getMethod("main", classOf[Array[String]]) |
104 |
121 |
112 sys.exit(2) |
129 sys.exit(2) |
113 } |
130 } |
114 } |
131 } |
115 start() |
132 start() |
116 } |
133 } |
117 |
|
118 |
|
119 /* adhoc update of JVM environment variables */ |
|
120 |
|
121 def update_environment() |
|
122 { |
|
123 val update = |
|
124 { |
|
125 val isabelle_home = Isabelle_System.getenv("ISABELLE_HOME") |
|
126 val isabelle_home_user = Isabelle_System.getenv("ISABELLE_HOME_USER") |
|
127 val jedit_home = Isabelle_System.getenv("JEDIT_HOME") |
|
128 val jedit_settings = Isabelle_System.getenv("JEDIT_SETTINGS") |
|
129 |
|
130 (env0: Any) => { |
|
131 val env = env0.asInstanceOf[java.util.Map[String, String]] |
|
132 env.put("ISABELLE_HOME", File.platform_path(isabelle_home)) |
|
133 env.put("ISABELLE_HOME_USER", File.platform_path(isabelle_home_user)) |
|
134 env.put("JEDIT_HOME", File.platform_path(jedit_home)) |
|
135 env.put("JEDIT_SETTINGS", File.platform_path(jedit_settings)) |
|
136 env.remove("ISABELLE_ROOT") |
|
137 } |
|
138 } |
|
139 |
|
140 classOf[java.util.Collections].getDeclaredClasses |
|
141 .find(c => c.getName == "java.util.Collections$UnmodifiableMap") match |
|
142 { |
|
143 case Some(c) => |
|
144 val m = c.getDeclaredField("m") |
|
145 m.setAccessible(true) |
|
146 update(m.get(System.getenv())) |
|
147 |
|
148 if (Platform.is_windows) { |
|
149 val ProcessEnvironment = Class.forName("java.lang.ProcessEnvironment") |
|
150 val field = ProcessEnvironment.getDeclaredField("theCaseInsensitiveEnvironment") |
|
151 field.setAccessible(true) |
|
152 update(field.get(null)) |
|
153 } |
|
154 |
|
155 case None => |
|
156 error("Failed to update JVM environment -- platform incompatibility") |
|
157 } |
|
158 } |
|
159 } |
134 } |