Add messagebox, bugfixes
This commit is contained in:
@ -3,6 +3,7 @@
|
||||
namespace NoccyLabs\JEdit\Editor;
|
||||
|
||||
use NoccyLabs\JEdit\List\TreeList;
|
||||
use NoccyLabs\JEdit\Settings;
|
||||
use NoccyLabs\JEdit\Terminal\Terminal;
|
||||
use NoccyLabs\JEdit\Tree\ArrayNode;
|
||||
use NoccyLabs\JEdit\Tree\ObjectNode;
|
||||
@ -27,6 +28,8 @@ class Editor
|
||||
|
||||
private bool $running = true;
|
||||
|
||||
private bool $modified = false;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
@ -137,10 +140,12 @@ class Editor
|
||||
$collNode->removeIndex($deleteKey);
|
||||
$this->list->parseTree();
|
||||
$this->redrawEditor();
|
||||
$this->modified = true;
|
||||
} elseif ($collNode instanceof ObjectNode) {
|
||||
$collNode->unset($deleteKey);
|
||||
$this->list->parseTree();
|
||||
$this->redrawEditor();
|
||||
$this->modified = true;
|
||||
} else {
|
||||
$this->term->setCursor(1, $h);
|
||||
echo "\e[97;41mCan only delete from object, array\e[K\e[0m";
|
||||
@ -175,18 +180,58 @@ class Editor
|
||||
switch ($sel) {
|
||||
case 'value':
|
||||
$this->doInsertValue();
|
||||
$this->modified = true;
|
||||
break;
|
||||
case 'array':
|
||||
$this->doInsertValue('[]');
|
||||
$this->modified = true;
|
||||
break;
|
||||
case 'object':
|
||||
$this->doInsertValue('{}');
|
||||
$this->modified = true;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'h':
|
||||
$text = <<<EOT
|
||||
Welcome to JSONEdit! The editor you have missed all this time without even knowing it!
|
||||
|
||||
To get started, press I (shift-i) and add something to the document. Use the arrow keys to get around. To cancel a prompt, close a menu or close a dialog, press ctrl-C. When you are happy with your work, press ctrl-W and enter a filename to write. You can also press ctrl-R and read in a new file, overwriting your masterpiece.
|
||||
|
||||
↑↓ Navigate values in document
|
||||
i Insert a new value
|
||||
I Insert value, array or object
|
||||
e Edit selected value
|
||||
E Edit selected key
|
||||
D Delete selected key
|
||||
^W Write to file
|
||||
^R Read from file
|
||||
^N New document with empty object
|
||||
^C Cancel/Exit
|
||||
|
||||
This is beta software, if not alpha. It kinda works, but there will be issues. Feel free to help out with a patch, or by filing bug reports.
|
||||
Known issues include:
|
||||
|
||||
* Editing long lines will blow up. Don't try to edit anything longer than the terminal is wide.
|
||||
* There is no fullscreen editing, so verbatim blocks in twig will probably not work well either.
|
||||
* Comments are not preserved.
|
||||
* Files are overwritten without confirmation.
|
||||
* There is no command mode, no search.
|
||||
* Some things just don't work yet.
|
||||
* Unhandled keys will appear in the bottom left of the screen with a delay.
|
||||
* Folding is not yet implemented.
|
||||
|
||||
Go to https://dev.noccylabs.info/noccy/jsonedit to find the source code, issue tracker, and learn more about the project!
|
||||
EOT;
|
||||
$msg = new MessageBox($this->term, $text, "Help (press ctrl-C to close)");
|
||||
$msg->display(5, 3, 70, 20);
|
||||
$this->redrawEditor();
|
||||
break;
|
||||
|
||||
case 'i':
|
||||
$this->doInsertValue();
|
||||
$this->modified = true;
|
||||
break;
|
||||
|
||||
case 'Q':
|
||||
@ -194,6 +239,20 @@ class Editor
|
||||
$this->running = false;
|
||||
break;
|
||||
|
||||
case "q":
|
||||
Settings::$editorQuotedKeys = !Settings::$editorQuotedKeys;
|
||||
$this->redrawEditor();
|
||||
break;
|
||||
|
||||
case "\x0e": // ctrl-n
|
||||
$this->document->load((object)[]);
|
||||
$this->list->parseTree();
|
||||
$this->filename = "untitled.json";
|
||||
$this->shortfilename = "untitled.json";
|
||||
$this->modified = false;
|
||||
$this->redrawEditor();
|
||||
break;
|
||||
|
||||
case "\x12": // ctrl-r
|
||||
$this->doReadFile();
|
||||
break;
|
||||
@ -211,6 +270,8 @@ class Editor
|
||||
}
|
||||
}
|
||||
|
||||
Settings::save(SETTINGS_FILE);
|
||||
|
||||
// for ($n = 0; $n < 20; $n++) {
|
||||
// $this->currentRow = $n;
|
||||
// $this->redrawEditor();
|
||||
@ -278,7 +339,6 @@ class Editor
|
||||
|
||||
$doc = $this->document->save();
|
||||
|
||||
$this->term->setCursor(1, $h);
|
||||
|
||||
$ext = strtolower(pathinfo($saveTo, PATHINFO_EXTENSION));
|
||||
switch ($ext) {
|
||||
@ -291,11 +351,19 @@ class Editor
|
||||
file_put_contents($saveTo, Yaml::dump($doc));
|
||||
break;
|
||||
default:
|
||||
$this->term->setCursor(1, $h);
|
||||
echo "\e[97;41mUnable to write format: {$ext}\e[K\e[0m";
|
||||
}
|
||||
|
||||
$this->filename = $saveTo;
|
||||
$this->shortfilename = basename($saveTo);
|
||||
$this->modified = false;
|
||||
$this->redrawEditor();
|
||||
|
||||
$this->term->setCursor(1, $h);
|
||||
echo "\e[97;42mWrote to {$saveTo}\e[K\e[0m";
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@ -316,7 +384,9 @@ class Editor
|
||||
if ($parent->node instanceof ObjectNode) {
|
||||
$newVal = $this->ask("\e[0;33mnew key:\e[0m ", $entry->key);
|
||||
if ($newVal !== null) {
|
||||
$parent->node->rename($entry->key, $newVal);
|
||||
$entry->key = $newVal;
|
||||
$this->list->parseTree();
|
||||
$this->redrawEditor();
|
||||
}
|
||||
} else {
|
||||
@ -347,6 +417,7 @@ class Editor
|
||||
$val = $newVal;
|
||||
}
|
||||
$node->value = $val;
|
||||
$this->modified = true;
|
||||
$this->redrawEditor();
|
||||
} else {
|
||||
$this->redrawInfoBar();
|
||||
@ -395,6 +466,7 @@ class Editor
|
||||
} elseif ($node instanceof ObjectNode) {
|
||||
$node->set($key, $valueNode);
|
||||
}
|
||||
$this->modified = true;
|
||||
$this->list->parseTree();
|
||||
$this->redrawEditor();
|
||||
} else {
|
||||
@ -477,8 +549,9 @@ class Editor
|
||||
$path = $this->list->getPathForIndex($this->currentRow);
|
||||
$node = $this->list->getNodeForIndex($this->currentRow);
|
||||
|
||||
$modified = $this->modified ? "\e[31m*\e[37m" : "";
|
||||
$this->term->setCursor(1, $h-1);
|
||||
echo "\e[40;37m\e[K\e[1m{$this->shortfilename}\e[22m#\e[3m{$path}\e[37;23m";
|
||||
echo "\e[40;37m\e[K{$modified}\e[1m{$this->shortfilename}\e[22m#\e[3m{$path}\e[37;23m";
|
||||
|
||||
//$this->term->setCursor(1, $h);
|
||||
echo " = ";
|
||||
|
Reference in New Issue
Block a user