clarified "isabelle display" and 'display_drafts': re-use file and program instance, open asynchronously via desktop environment;
authorwenzelm
Fri, 06 Dec 2013 22:10:45 +0100
changeset 54683 cf48ddc266e5
parent 54682 6587c627a9db
child 54684 4820b645e760
clarified "isabelle display" and 'display_drafts': re-use file and program instance, open asynchronously via desktop environment;
NEWS
etc/settings
lib/Tools/display
src/Doc/System/Basics.thy
src/Doc/System/Misc.thy
src/Pure/Thy/present.ML
--- a/NEWS	Fri Dec 06 21:49:08 2013 +0100
+++ b/NEWS	Fri Dec 06 22:10:45 2013 +0100
@@ -97,6 +97,19 @@
 formal context.
 
 
+*** System ***
+
+* Simplified "isabelle display" tool.  Settings variables DVI_VIEWER
+and PDF_VIEWER now refer to the actual programs, not shell
+command-lines.  Discontinued option -c: invocation may be asynchronous
+via desktop environment, without any special precautions.  Potential
+INCOMPATIBILITY with ambitious private settings.
+
+* Improved 'display_drafts' concerning desktop integration and
+repeated invocation in PIDE front-end: re-use single file
+$ISABELLE_HOME_USER/tmp/drafts.pdf and corresponding views.
+
+
 
 New in Isabelle2013-2 (December 2013)
 -------------------------------------
--- a/etc/settings	Fri Dec 06 21:49:08 2013 +0100
+++ b/etc/settings	Fri Dec 06 22:10:45 2013 +0100
@@ -100,21 +100,21 @@
 # Where to look for docs (multiple dirs separated by ':').
 ISABELLE_DOCS="$ISABELLE_HOME/doc"
 
-# PDF file viewer (command-line to eval)
+# PDF file viewer
 case "$ISABELLE_PLATFORM_FAMILY" in
   linux)
     PDF_VIEWER="xdg-open"
     ;;
   macos)
-    PDF_VIEWER="open -W -n -F"
+    PDF_VIEWER="open"
     ;;
   windows)
     PDF_VIEWER="cygstart"
     ;;
 esac
 
-# DVI file viewer (command-line to eval)
-DVI_VIEWER=xdvi
+# DVI file viewer
+DVI_VIEWER="xdvi"
 
 
 ###
--- a/lib/Tools/display	Fri Dec 06 21:49:08 2013 +0100
+++ b/lib/Tools/display	Fri Dec 06 22:10:45 2013 +0100
@@ -1,6 +1,6 @@
 #!/usr/bin/env bash
 #
-# Author: Markus Wenzel, TU Muenchen
+# Author: Makarius
 #
 # DESCRIPTION: display document (in DVI or PDF format)
 
@@ -10,12 +10,9 @@
 function usage()
 {
   echo
-  echo "Usage: isabelle $PRG [OPTIONS] FILE"
+  echo "Usage: isabelle $PRG DOCUMENT"
   echo
-  echo "  Options are:"
-  echo "    -c           cleanup -- remove FILE after use"
-  echo
-  echo "  Display document FILE (in DVI or PDF format)."
+  echo "  Display DOCUMENT (in DVI or PDF format)."
   echo
   exit 1
 }
@@ -27,55 +24,22 @@
 }
 
 
-## process command line
-
-# options
-
-CLEAN=""
-
-while getopts "c" OPT
-do
-  case "$OPT" in
-    c)
-      CLEAN=true
-      ;;
-    \?)
-      usage
-      ;;
-  esac
-done
-
-shift $(($OPTIND - 1))
-
-
-# args
-
-[ "$#" -ne 1 ] && usage
-
-FILE="$1"; shift
-
-
 ## main
 
-[ -f "$FILE" ] || fail "Bad file: $FILE"
+[ "$#" -ne 1 -o "$1" = "-?" ] && usage
+
+DOCUMENT="$1"; shift
+
+[ -f "$DOCUMENT" ] || fail "Bad document: \"$DOCUMENT\""
 
-case "$FILE" in
-    *.dvi)
-      VIEWER="$DVI_VIEWER"
-      ;;
-    *.pdf)
-      VIEWER="$PDF_VIEWER"
-      ;;
-    *)
-      fail "Unknown file type: $FILE";
+case "$DOCUMENT" in
+  *.dvi)
+    exec "$DVI_VIEWER" "$DOCUMENT"
+    ;;
+  *.pdf)
+    exec "$PDF_VIEWER" "$DOCUMENT"
+    ;;
+  *)
+    fail "Unknown document type: \"$DOCUMENT\"";
 esac
 
-if [ -n "$CLEAN" ]; then
-  PRIVATE_FILE="${ISABELLE_TMP:-/tmp}/$$"$(basename "$FILE")
-  mv "$FILE" "$PRIVATE_FILE" || fail "Cannot move file: $FILE"
-  eval "$VIEWER \"$PRIVATE_FILE\""
-  sleep 5   #try to avoid races
-  rm -f "$PRIVATE_FILE"
-else
-  eval "$VIEWER \"$FILE\""
-fi
--- a/src/Doc/System/Basics.thy	Fri Dec 06 21:49:08 2013 +0100
+++ b/src/Doc/System/Basics.thy	Fri Dec 06 22:10:45 2013 +0100
@@ -267,12 +267,12 @@
   
   \item[@{setting_def ISABELLE_DOCS}] is a colon separated list of
   directories with documentation files.
-  
-  \item[@{setting_def PDF_VIEWER}] specifies the command-line to be
-  used for displaying @{verbatim pdf} files.
 
-  \item[@{setting_def DVI_VIEWER}] specifies the command-line to be
-  used for displaying @{verbatim dvi} files.
+  \item[@{setting_def PDF_VIEWER}] specifies the program to be used
+  for displaying @{verbatim pdf} files.
+
+  \item[@{setting_def DVI_VIEWER}] specifies the program to be used
+  for displaying @{verbatim dvi} files.
   
   \item[@{setting_def ISABELLE_TMP_PREFIX}@{text "\<^sup>*"}] is the
   prefix from which any running @{executable "isabelle-process"}
--- a/src/Doc/System/Misc.thy	Fri Dec 06 21:49:08 2013 +0100
+++ b/src/Doc/System/Misc.thy	Fri Dec 06 22:10:45 2013 +0100
@@ -65,20 +65,16 @@
 text {* The @{tool_def display} tool displays documents in DVI or PDF
   format:
 \begin{ttbox}
-Usage: isabelle display [OPTIONS] FILE
-
-  Options are:
-    -c           cleanup -- remove FILE after use
+Usage: isabelle display DOCUMENT
 
-  Display document FILE (in DVI or PDF format).
+  Display DOCUMENT (in DVI or PDF format).
 \end{ttbox}
 
-  \medskip The @{verbatim "-c"} option causes the input file to be
-  removed after use.
-
   \medskip The settings @{setting DVI_VIEWER} and @{setting
   PDF_VIEWER} determine the programs for viewing the corresponding
-  file formats.
+  file formats.  Normally this opens the document via the desktop
+  environment, potentially in an asynchronous manner with re-use of
+  previews views.
 *}
 
 
--- a/src/Pure/Thy/present.ML	Fri Dec 06 21:49:08 2013 +0100
+++ b/src/Pure/Thy/present.ML	Fri Dec 06 22:10:45 2013 +0100
@@ -443,10 +443,13 @@
 
     val result =
       isabelle_document {verbose = false, purge = true} "pdf" documentN "" doc_path;
-    val detachable_result = Isabelle_System.create_tmp_path documentN "pdf";
-    val _ = File.copy result detachable_result;
+
+    val target_dir = Path.explode "$ISABELLE_HOME_USER/tmp";
+    val target = Path.explode "$ISABELLE_HOME_USER/tmp/drafts.pdf"
+    val _ = Isabelle_System.mkdirs target_dir;
+    val _ = File.copy result target;
   in
-    Isabelle_System.isabelle_tool "display" ("-c " ^ File.shell_path detachable_result ^ " &")
+    Isabelle_System.isabelle_tool "display" (File.shell_path target ^ " &")
   end);
 
 end;