# HG changeset patch # User wenzelm # Date 1608122853 -3600 # Node ID 0cc298e29affcb6974542f314688798420dce4e6 # Parent 776198313227652b7bdfd170d518beb8191ebb6e added action isabelle.goto-entity to follow links in a narrow formal sense; diff -r 776198313227 -r 0cc298e29aff NEWS --- a/NEWS Wed Dec 16 13:22:38 2020 +0100 +++ b/NEWS Wed Dec 16 13:47:33 2020 +0100 @@ -16,6 +16,9 @@ *** Isabelle/jEdit Prover IDE *** +* Action "isabelle.goto-entity" (shortcut CS+d) jumps to the definition +of the formal entity at the caret position. + * Auto nitpick is enabled by default: it is now reasonably fast due to Kodkod invocation within Isabelle/Scala. diff -r 776198313227 -r 0cc298e29aff src/Tools/jEdit/src/actions.xml --- a/src/Tools/jEdit/src/actions.xml Wed Dec 16 13:22:38 2020 +0100 +++ b/src/Tools/jEdit/src/actions.xml Wed Dec 16 13:47:33 2020 +0100 @@ -67,6 +67,11 @@ isabelle.jedit.Isabelle.newline(textArea); + + + isabelle.jedit.Isabelle.goto_entity(view); + + isabelle.jedit.Isabelle.select_entity(textArea); diff -r 776198313227 -r 0cc298e29aff src/Tools/jEdit/src/isabelle.scala --- a/src/Tools/jEdit/src/isabelle.scala Wed Dec 16 13:22:38 2020 +0100 +++ b/src/Tools/jEdit/src/isabelle.scala Wed Dec 16 13:47:33 2020 +0100 @@ -352,7 +352,18 @@ } - /* selection */ + /* formal entities */ + + def goto_entity(view: View) + { + val text_area = view.getTextArea + for { + doc_view <- Document_View.get(text_area) + rendering = doc_view.get_rendering() + caret_range = JEdit_Lib.caret_range(text_area) + link <- rendering.hyperlink_entity(caret_range) + } link.info.follow(view) + } def select_entity(text_area: JEditTextArea) { diff -r 776198313227 -r 0cc298e29aff src/Tools/jEdit/src/jEdit.props --- a/src/Tools/jEdit/src/jEdit.props Wed Dec 16 13:22:38 2020 +0100 +++ b/src/Tools/jEdit/src/jEdit.props Wed Dec 16 13:47:33 2020 +0100 @@ -225,6 +225,8 @@ isabelle.exclude-word.label=Exclude word isabelle.first-error.label=Go to first error isabelle.first-error.shortcut=CS+a +isabelle.goto-entity.label=Go to definition of formal entity at caret +isabelle.goto-entity.shortcut=CS+d isabelle.include-word-permanently.label=Include word permanently isabelle.include-word.label=Include word isabelle.increase-font-size.label=Increase font size diff -r 776198313227 -r 0cc298e29aff src/Tools/jEdit/src/jedit_rendering.scala --- a/src/Tools/jEdit/src/jedit_rendering.scala Wed Dec 16 13:22:38 2020 +0100 +++ b/src/Tools/jEdit/src/jedit_rendering.scala Wed Dec 16 13:47:33 2020 +0100 @@ -285,6 +285,18 @@ }) match { case Text.Info(_, _ :+ info) :: _ => Some(info) case _ => None } } + def hyperlink_entity(range: Text.Range): Option[Text.Info[PIDE.editor.Hyperlink]] = + { + snapshot.cumulate[Vector[Text.Info[PIDE.editor.Hyperlink]]]( + range, Vector.empty, Rendering.entity_elements, _ => + { + case (links, Text.Info(info_range, XML.Elem(Markup(Markup.ENTITY, props), _))) => + val opt_link = PIDE.editor.hyperlink_def_position(true, snapshot, props) + opt_link.map(link => links :+ Text.Info(snapshot.convert(info_range), link)) + case _ => None + }) match { case Text.Info(_, _ :+ info) :: _ => Some(info) case _ => None } + } + /* active elements */