diff --git a/lib/livebook/runtime.ex b/lib/livebook/runtime.ex index 17a22de94..ef6824e50 100644 --- a/lib/livebook/runtime.ex +++ b/lib/livebook/runtime.ex @@ -712,7 +712,8 @@ defprotocol Livebook.Runtime do language: String.t() | nil, placement: :bottom | :top, source: String.t(), - intellisense_node: {atom(), atom()} | nil + intellisense_node: {atom(), atom()} | nil, + visible: boolean() } @typedoc """ @@ -1030,7 +1031,7 @@ defprotocol Livebook.Runtime do The cell can also update some of the editor configuration or source by sending: - * `{:runtime_smart_cell_editor_update, ref, %{optional(:source) => String.t(), optional(:intellisense_node) => {atom(), atom()} | nil}}` + * `{:runtime_smart_cell_editor_update, ref, %{optional(:source) => String.t(), optional(:intellisense_node) => {atom(), atom()} | nil}, optional(:visible) => boolean()}` """ @spec start_smart_cell( diff --git a/lib/livebook/runtime/erl_dist/runtime_server.ex b/lib/livebook/runtime/erl_dist/runtime_server.ex index 80855eda9..7a7da52a4 100644 --- a/lib/livebook/runtime/erl_dist/runtime_server.ex +++ b/lib/livebook/runtime/erl_dist/runtime_server.ex @@ -423,7 +423,8 @@ defmodule Livebook.Runtime.ErlDist.RuntimeServer do {:noreply, state} end - def handle_info({message, _node, _info}, state) when message in [:nodeup, :nodedown] do + def handle_info({message, _node, _info}, state) + when message in [:nodeup, :nodedown] and state.owner != nil do report_connected_nodes(state) {:noreply, state} end diff --git a/lib/livebook/session.ex b/lib/livebook/session.ex index 36e58cb4c..9a15e485c 100644 --- a/lib/livebook/session.ex +++ b/lib/livebook/session.ex @@ -1828,9 +1828,9 @@ defmodule Livebook.Session do end state = - case options do - %{intellisense_node: intellisense_node} -> - editor = %{cell.editor | intellisense_node: intellisense_node} + case Map.take(options, [:intellisense_node, :visible]) do + updates when updates != %{} -> + editor = Map.merge(cell.editor, updates) operation = {:set_cell_attributes, @client_id, cell.id, %{editor: editor}} handle_operation(state, operation) @@ -3264,5 +3264,10 @@ defmodule Livebook.Session do normalize_smart_cell_started_info(put_in(info.editor[:intellisense_node], nil)) end + defp normalize_smart_cell_started_info(info) + when info.editor != nil and not is_map_key(info.editor, :visible) do + normalize_smart_cell_started_info(put_in(info.editor[:visible], true)) + end + defp normalize_smart_cell_started_info(info), do: info end diff --git a/lib/livebook_web/live/session_live.ex b/lib/livebook_web/live/session_live.ex index 88d177526..2cd1cf179 100644 --- a/lib/livebook_web/live/session_live.ex +++ b/lib/livebook_web/live/session_live.ex @@ -1935,7 +1935,8 @@ defmodule LivebookWeb.SessionLive do %{ empty: cell.editor.source == "", language: cell.editor.language, - placement: cell.editor.placement + placement: cell.editor.placement, + visible: cell.editor.visible } } end diff --git a/lib/livebook_web/live/session_live/cell_component.ex b/lib/livebook_web/live/session_live/cell_component.ex index 13d854eee..30aead3c5 100644 --- a/lib/livebook_web/live/session_live/cell_component.ex +++ b/lib/livebook_web/live/session_live/cell_component.ex @@ -230,6 +230,7 @@ defmodule LivebookWeb.SessionLive.CellComponent do language={@cell_view.editor.language} rounded={@cell_view.editor.placement} intellisense={@cell_view.editor.language == "elixir"} + hidden={not @cell_view.editor.visible} /> <% :dead -> %> @@ -609,12 +610,13 @@ defmodule LivebookWeb.SessionLive.CellComponent do attr :intellisense, :boolean, default: false attr :read_only, :boolean, default: false attr :rounded, :atom, default: :both + attr :hidden, :boolean, default: false defp cell_editor(assigns) do ~H"""