author | wenzelm |
Wed, 30 Jan 2019 16:44:29 +0100 | |
changeset 69762 | 58fb0d779583 |
child 69763 | 4b0a11d499e2 |
permissions | -rw-r--r-- |
69762
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
1 |
/* Title: Tools/jEdit/src/isabelle_session.scala |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
2 |
Author: Makarius |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
3 |
|
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
4 |
Access Isabelle session information via virtual file-system. |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
5 |
*/ |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
6 |
|
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
7 |
package isabelle.jedit |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
8 |
|
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
9 |
|
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
10 |
import isabelle._ |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
11 |
|
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
12 |
import java.awt.Component |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
13 |
import java.io.InputStream |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
14 |
|
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
15 |
import org.gjt.sp.jedit.View |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
16 |
import org.gjt.sp.jedit.io.VFSFile |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
17 |
import org.gjt.sp.jedit.browser.VFSBrowser |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
18 |
|
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
19 |
|
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
20 |
object Isabelle_Session |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
21 |
{ |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
22 |
/* sessions structure */ |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
23 |
|
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
24 |
def sessions_structure(): Sessions.Structure = |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
25 |
JEdit_Sessions.sessions_structure(PIDE.options.value) |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
26 |
|
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
27 |
|
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
28 |
/* virtual file-system */ |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
29 |
|
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
30 |
val vfs_prefix = "isabelle-session:" |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
31 |
|
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
32 |
class VFS extends Isabelle_VFS(vfs_prefix, |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
33 |
read = true, browse = true, low_latency = true, non_awt_session = true) |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
34 |
{ |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
35 |
override def _listFiles(vfs_session: AnyRef, url: String, component: Component): Array[VFSFile] = |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
36 |
{ |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
37 |
explode_url(url, component = component) match { |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
38 |
case None => null |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
39 |
case Some(elems) => |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
40 |
val sessions = sessions_structure() |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
41 |
elems match { |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
42 |
case Nil => |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
43 |
sessions.chapters.iterator.map(p => make_entry(p._1, is_dir = true)).toArray |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
44 |
case List(chapter) => |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
45 |
sessions.chapters.get(chapter) match { |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
46 |
case None => null |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
47 |
case Some(infos) => |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
48 |
infos.map(info => make_entry(chapter + "/" + info.name, is_dir = true)).toArray |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
49 |
} |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
50 |
case _ => null |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
51 |
} |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
52 |
} |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
53 |
} |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
54 |
} |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
55 |
|
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
56 |
|
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
57 |
/* open browser */ |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
58 |
|
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
59 |
def open_browser(view: View) |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
60 |
{ |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
61 |
val path = |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
62 |
PIDE.maybe_snapshot(view) match { |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
63 |
case None => "" |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
64 |
case Some(snapshot) => |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
65 |
val sessions = sessions_structure() |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
66 |
val session = PIDE.resources.session_base.theory_qualifier(snapshot.node_name) |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
67 |
val chapter = sessions.get(session).getOrElse(Sessions.UNSORTED) |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
68 |
chapter + "/" + session |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
69 |
} |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
70 |
VFSBrowser.browseDirectory(view, vfs_prefix + path) |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
71 |
} |
58fb0d779583
support for session information via virtual file-system;
wenzelm
parents:
diff
changeset
|
72 |
} |