Ask to save changes on new/open/read
This commit is contained in:
		@@ -286,29 +286,29 @@ class Editor
 | 
				
			|||||||
    
 | 
					    
 | 
				
			||||||
                case "\x0e": // ctrl-n
 | 
					                case "\x0e": // ctrl-n
 | 
				
			||||||
                    if ($this->modified) {
 | 
					                    if ($this->modified) {
 | 
				
			||||||
                        $menu = new Menu($this->term, [
 | 
					                        if ($this->askModified() === false) break;
 | 
				
			||||||
                            'cancel' => "Return to editor",
 | 
					                        // $menu = new Menu($this->term, [
 | 
				
			||||||
                            'save' => "Save changes",
 | 
					                        //     'cancel' => "Return to editor",
 | 
				
			||||||
                            'discard' => "Discard changes",
 | 
					                        //     'save' => "Save changes",
 | 
				
			||||||
                            //'sep0' => "---",
 | 
					                        //     'discard' => "Discard changes",
 | 
				
			||||||
                            //'__paste' => "Paste from clipboard",
 | 
					                        //     //'sep0' => "---",
 | 
				
			||||||
                        ], 'Document is modified');
 | 
					                        //     //'__paste' => "Paste from clipboard",
 | 
				
			||||||
                        $this->redrawInfoBar([ '^C' => 'Cancel', '↑/↓' => 'Select option', 'Enter' => 'Accept' ]);
 | 
					                        // ], 'Document is modified');
 | 
				
			||||||
                        $sel = $menu->display(0, 0, 30, 0, "value");
 | 
					                        // $this->redrawInfoBar([ '^C' => 'Cancel', '↑/↓' => 'Select option', 'Enter' => 'Accept' ]);
 | 
				
			||||||
                        $this->redrawEditor();
 | 
					                        // $sel = $menu->display(0, 0, 30, 0, "value");
 | 
				
			||||||
                        switch ($sel) {
 | 
					                        // $this->redrawEditor();
 | 
				
			||||||
                            case 'cancel':
 | 
					                        // switch ($sel) {
 | 
				
			||||||
                                break(2);
 | 
					                        //     case 'cancel':
 | 
				
			||||||
                            case 'save':
 | 
					                        //         break(2);
 | 
				
			||||||
                                if (!$this->doWriteFile()) {
 | 
					                        //     case 'save':
 | 
				
			||||||
                                    break(2);
 | 
					                        //         if (!$this->doWriteFile()) {
 | 
				
			||||||
                                }
 | 
					                        //             break(2);
 | 
				
			||||||
                                break;
 | 
					                        //         }
 | 
				
			||||||
                            case 'discard':
 | 
					                        //         break;
 | 
				
			||||||
                                break;
 | 
					                        //     case 'discard':
 | 
				
			||||||
                        }
 | 
					                        //         break;
 | 
				
			||||||
                        $this->modified = false;
 | 
					                        // }
 | 
				
			||||||
                        
 | 
					                        // $this->modified = false;
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    $this->document->load((object)[]);
 | 
					                    $this->document->load((object)[]);
 | 
				
			||||||
@@ -377,7 +377,7 @@ class Editor
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        [$w,$h] = $this->term->getSize();
 | 
					        [$w,$h] = $this->term->getSize();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $readFrom = $this->ask("\e[33mRead from:\e[0m ", "");
 | 
					        $readFrom = $this->ask("\e[33mRead from:\e[0m ", $this->filename);
 | 
				
			||||||
        if ($readFrom === null) {
 | 
					        if ($readFrom === null) {
 | 
				
			||||||
            $this->redrawInfoBar();
 | 
					            $this->redrawInfoBar();
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
@@ -404,6 +404,10 @@ class Editor
 | 
				
			|||||||
                return;
 | 
					                return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ($this->modified) {
 | 
				
			||||||
 | 
					            if ($this->askModified() === false) return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $this->filename = $readFrom;
 | 
					        $this->filename = $readFrom;
 | 
				
			||||||
        $this->shortfilename = basename($readFrom);
 | 
					        $this->shortfilename = basename($readFrom);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -470,6 +474,14 @@ class Editor
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    private function doOpenFile()
 | 
					    private function doOpenFile()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ($this->modified) {
 | 
				
			||||||
 | 
					            if ($this->askModified() === false) {
 | 
				
			||||||
 | 
					                $this->redrawEditor();
 | 
				
			||||||
 | 
					                return;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $includeHidden = false;
 | 
					        $includeHidden = false;
 | 
				
			||||||
        $wd = dirname($this->filename);
 | 
					        $wd = dirname($this->filename);
 | 
				
			||||||
        if ($wd == '.') $wd = getcwd();
 | 
					        if ($wd == '.') $wd = getcwd();
 | 
				
			||||||
@@ -543,6 +555,7 @@ class Editor
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        $this->setOpenedFilename($sel);
 | 
					        $this->setOpenedFilename($sel);
 | 
				
			||||||
 | 
					        $this->modified = false;
 | 
				
			||||||
        $this->redrawEditor();
 | 
					        $this->redrawEditor();
 | 
				
			||||||
        $this->showMessage("\e[42;97mOpened {$this->shortfilename}");
 | 
					        $this->showMessage("\e[42;97mOpened {$this->shortfilename}");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -783,6 +796,16 @@ class Editor
 | 
				
			|||||||
    public function doExit(): void
 | 
					    public function doExit(): void
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if ($this->modified) {
 | 
					        if ($this->modified) {
 | 
				
			||||||
 | 
					            if ($this->askModified() === false) {
 | 
				
			||||||
 | 
					                $this->redrawEditor();
 | 
				
			||||||
 | 
					                return;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        } 
 | 
				
			||||||
 | 
					        $this->running = false;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private function askModified(): bool
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
        $menu = new Menu($this->term, [
 | 
					        $menu = new Menu($this->term, [
 | 
				
			||||||
            'cancel' => "Return to editor",
 | 
					            'cancel' => "Return to editor",
 | 
				
			||||||
            'save' => "Save changes",
 | 
					            'save' => "Save changes",
 | 
				
			||||||
@@ -793,19 +816,16 @@ class Editor
 | 
				
			|||||||
        $this->redrawEditor();
 | 
					        $this->redrawEditor();
 | 
				
			||||||
        switch ($sel) {
 | 
					        switch ($sel) {
 | 
				
			||||||
            case 'cancel':
 | 
					            case 'cancel':
 | 
				
			||||||
                    break;
 | 
					                return false;
 | 
				
			||||||
            case 'save':
 | 
					            case 'save':
 | 
				
			||||||
                if ($this->doWriteFile()) {
 | 
					                if ($this->doWriteFile()) {
 | 
				
			||||||
                        $this->running = false;
 | 
					                    return true;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                    break;
 | 
					                return false;
 | 
				
			||||||
            case 'discard':
 | 
					            case 'discard':
 | 
				
			||||||
                    $this->running = false;
 | 
					                return true;
 | 
				
			||||||
                    break;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        } else {
 | 
					 | 
				
			||||||
            $this->running = false;
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        return false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public function doSettingsMenu(): void
 | 
					    public function doSettingsMenu(): void
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user