Vimifying efforts

This commit is contained in:
itdominator 2024-02-14 23:39:45 -06:00
parent 362267fa69
commit 35a461ff68
10 changed files with 265 additions and 16 deletions

View File

@ -31,6 +31,7 @@ class BaseController(SignalsMixins, BaseControllerData):
if len(messages) > 0: if len(messages) > 0:
settings_manager.set_is_starting_with_file(True) settings_manager.set_is_starting_with_file(True)
self.setup_controller_data() self.setup_controller_data()
self._setup_styling() self._setup_styling()
@ -38,6 +39,7 @@ class BaseController(SignalsMixins, BaseControllerData):
self._subscribe_to_events() self._subscribe_to_events()
self._load_controllers() self._load_controllers()
if args.no_plugins == "false": if args.no_plugins == "false":
self.plugins.launch_plugins() self.plugins.launch_plugins()
@ -50,8 +52,8 @@ class BaseController(SignalsMixins, BaseControllerData):
def _setup_signals(self): def _setup_signals(self):
self.window.connect("focus-out-event", self.unset_keys_and_data) self.window.connect("focus-out-event", self.unset_keys_and_data)
self.window.connect("key-press-event", self.on_global_key_press_controller) # self.window.connect("key-press-event", self.on_global_key_press_controller)
self.window.connect("key-release-event", self.on_global_key_release_controller) # self.window.connect("key-release-event", self.on_global_key_release_controller)
def _subscribe_to_events(self): def _subscribe_to_events(self):
event_system.subscribe("shutting_down", lambda: print("Shutting down...")) event_system.subscribe("shutting_down", lambda: print("Shutting down..."))

View File

@ -84,10 +84,10 @@ class FilesController:
event_system.emit(f"close_tab_{event.originator}", (event.fhash)) event_system.emit(f"close_tab_{event.originator}", (event.fhash))
case "load_buffer": case "load_buffer":
self.load_buffer(event.fhash) self.load_buffer(event.fhash)
event_system.emit(f"add_tab_{event.originator}", (event.fhash, "buffer",)) # event_system.emit(f"add_tab_{event.originator}", (event.fhash, "buffer",))
case "load_file": case "load_file":
content = base64.b64decode( event.content.encode() ).decode("utf-8") content = base64.b64decode( event.content.encode() ).decode("utf-8")
event_system.emit(f"add_tab_with_name_{event.originator}", (event.fhash, content,)) # event_system.emit(f"add_tab_with_name_{event.originator}", (event.fhash, content,))
case _: case _:
return return

View File

@ -7,7 +7,7 @@ from gi.repository import Gtk
# Application imports # Application imports
from ....controllers.files_controller import FilesController from ....controllers.files_controller import FilesController
from ...controls.tab_bar import TabBar # from ...controls.tab_bar import TabBar
from .fixed_box import FixedBox from .fixed_box import FixedBox
@ -44,5 +44,5 @@ class Editor(Gtk.Box):
FilesController(self.INDEX) FilesController(self.INDEX)
def _load_widgets(self): def _load_widgets(self):
self.add( TabBar(self.INDEX) ) # self.add( TabBar(self.INDEX) )
self.add( FixedBox(self.INDEX) ) self.add( FixedBox(self.INDEX) )

View File

@ -14,16 +14,49 @@
</head> </head>
<body> <body>
<div class="container editor-container">
<div class="row"> <div id="alerts-container" class="container-fluid">
<div class="col"> <div class="row page-alert-zone-container">
<pre id="editor"></pre> <div id="page-alert-zone" class="col">
</div> </div>
</div> </div>
</div> </div>
<pre id="editor"></pre>
<!-- Buffers modal -->
<div class="modal fade" id="buffers-modal" tabindex="-1" role="dialog" data-bs-theme="dark">
<div class="modal-dialog modal-xl" role="document">
<div class="modal-content">
<div class="modal-header">
<h3>Buffers:</h3>
</div>
<div class="modal-body margin-bottom-neg-200">
<div class="row">
<div class="col max-height-600 noselect">
<ul id="buffers-selection" class="list-group scroller">
</ul>
<input id="buffer-search" class="form-control mr-sm-2" type="search" placeholder="Search..." aria-label="Search" />
</div>
<div class="col max-height-800">
<pre id="preview-editor"></pre>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" data-bs-dismiss="modal" class="btn btn-danger btn-sm">Close</button>
</div>
</div>
</div>
</div>
<!-- For internal scripts... --> <!-- For internal scripts... -->
<!-- <script src="js/libs/jquery-3.7.1.min.js"></script> --> <script src="resources/js/libs/jquery-3.7.1.min.js"></script>
<!-- For Bootstrap... --> <!-- For Bootstrap... -->
<script src="resources/js/libs/bootstrap5/bootstrap.bundle.min.js"></script> <script src="resources/js/libs/bootstrap5/bootstrap.bundle.min.js"></script>

View File

@ -1,5 +1,10 @@
/* IDs */ /* IDs */
#editor,
#preview-editor {
background-color: #00000000;
}
#editor { #editor {
background-color: #00000000; background-color: #00000000;
margin: 0; margin: 0;
@ -28,8 +33,30 @@
} }
#preview-editor {
height: -webkit-fill-available;
width: -webkit-fill-available;
max-height: calc(100% - 200px);
}
#buffers-selection {
max-height: 565px;
min-height: 565px;
overflow-y: auto;
}
/* CLASSES */ /* CLASSES */
.max-height-800 {
max-height: 800px;
}
.margin-bottom-neg-200 {
margin-bottom: -200px;
}
.ace_status-indicator { .ace_status-indicator {
color: gray; color: gray;
position: absolute; position: absolute;

View File

@ -11,4 +11,14 @@ body {
ul, li { ul, li {
list-style: none; list-style: none;
}
.modal-header,
.modal-footer {
background-color: rgba(0, 0, 0, 0.64);
}
.modal-content {
background-color: rgba(50, 56, 62, 0.74);
border-color: rgba(249, 148, 6, 0.74);
} }

View File

@ -1,8 +1,9 @@
window.onload = (eve) => { window.onload = (eve) => {
loadEditor();
loadInitialSessionTab();
console.log("Window Loaded..."); console.log("Window Loaded...");
loadEditor();
loadPreviewEditor();
loadInitialSession();
} }
window.onerror = function(msg, url, line, col, error) { window.onerror = function(msg, url, line, col, error) {
@ -16,4 +17,63 @@ window.onerror = function(msg, url, line, col, error) {
// If you return true, then error alerts (like in older versions of Internet Explorer) will be suppressed. // If you return true, then error alerts (like in older versions of Internet Explorer) will be suppressed.
return suppressErrorAlert; return suppressErrorAlert;
}; };
document.addEventListener("keyup", (eve) => {
switch (eve.key) {
case "ArrowUp":
break;
case "ArrowDown":
break;
case "ArrowLeft":
break;
case "ArrowRight":
break;
case "Enter":
if ( isNotNullOrUndefined(previewSel) ) {
let event = new MouseEvent('dblclick', {
'view': window,
'bubbles': true,
'cancelable': true
});
previewSel.dispatchEvent(event);
}
case "Control":
isControlDown = false;
case "b":
if (isControlDown) {
$('#buffers-modal').modal("toggle");
}
break;
default:
break
}
});
document.addEventListener("keydown", (eve) => {
switch (eve.key) {
case "ArrowUp":
if ( isNotNullOrUndefined(previewSel) ) {
eve.preventDefault();
selectPriorPreview();
}
break;
case "ArrowDown":
if ( isNotNullOrUndefined(previewSel) ) {
eve.preventDefault();
selectNextPreview();
}
break;
case "ArrowLeft":
break;
case "ArrowRight":
break;
case "Control":
isControlDown = true;
default:
break
}
});

View File

@ -3,5 +3,8 @@ const messenger = (window.webkit) ? window.webkit.messageHandlers : (message) =
}; };
let editor = null; let editor = null;
let previewEditor = null;
let aceSessions = {}; let aceSessions = {};
let currentSession = null; let currentSession = null;
let previewSel = null;
let isControlDown = false;

View File

@ -17,6 +17,13 @@ const editorCommands = [
editor.showKeyboardShortcuts(); editor.showKeyboardShortcuts();
}) })
} }
}, {
name: "listBuffers",
bindKey: {win: "ctrl-b", mac: "ctrl-b"},
exec: function(editor) {
listOpenBuffers();
},
readOnly: true
}, { }, {
name: "saveSession", name: "saveSession",
bindKey: {win: "ctrl-s", mac: "ctrl-s"}, bindKey: {win: "ctrl-s", mac: "ctrl-s"},

View File

@ -1,3 +1,30 @@
const loadPreviewEditor = () => {
ace.require("ace/ext/language_tools");
previewEditor = ace.edit("preview-editor");
// Note: https://github.com/ajaxorg/ace/wiki/Configuring-Ace
previewEditor.setOptions({
printMarginColumn: 80,
enableBasicAutocompletion: true,
enableInlineAutocompletion: true,
enableSnippets: true,
enableLiveAutocompletion: true,
highlightActiveLine: true,
useSoftTabs: true,
tabSize: 4,
tooltipFollowsMouse: true,
useWrapMode: false,
scrollPastEnd: 0.5,
mergeUndoDeltas: false
});
// Note: https://github.com/ajaxorg/ace/wiki/Default-Keyboard-Shortcuts
previewEditor.commands.addCommands(editorCommands);
previewEditor.setTheme("ace/theme/one_dark");
}
const loadEditor = () => { const loadEditor = () => {
ace.require("ace/ext/language_tools"); ace.require("ace/ext/language_tools");
@ -24,7 +51,7 @@ const loadEditor = () => {
editor.setTheme("ace/theme/one_dark"); editor.setTheme("ace/theme/one_dark");
} }
const loadInitialSessionTab = () => { const loadInitialSession = () => {
newSession(null, editor.getSession()); newSession(null, editor.getSession());
} }
@ -93,3 +120,83 @@ const saveSession = (fhash) => {
sendMessage("save", ftype, fhash, fpath, content); sendMessage("save", ftype, fhash, fpath, content);
} }
const listOpenBuffers = () => {
$('#buffers-modal').modal("toggle");
let ulElm = document.getElementById('buffers-selection');
let keys = Object.keys(aceSessions);
clearChildNodes(ulElm);
for (var i = 0; i < keys.length; i++) {
let session = aceSessions[keys[i]];
let liElm = document.createElement("li");
let fname = aceSessions[keys[i]]["fname"];
let fhash = keys[i];
liElm.innerText = ( fname === "" ) ? "buffer" : fname;
liElm.classList.add("list-group-item");
liElm.setAttribute("fhash", fhash);
if (fhash === currentSession) {
previewSel = liElm;
liElm.classList.add("bg-success");
liElm.classList.add("bg-info");
}
liElm.addEventListener("click", (elm) => {
previewSel.classList.remove("bg-info");
let fhash = elm.target.getAttribute("fhash");
let ftype = aceSessions[fhash]["ftype"];
let session = aceSessions[fhash]["session"];
previewSel = elm.target;
previewEditor.setSession(session);
if (ftype !== "buffer") {
previewEditor.session.setMode("ace/mode/" + ftype);
}
previewSel.classList.add("bg-info");
})
liElm.addEventListener("dblclick", (elm) => {
let fhash = elm.target.getAttribute("fhash");
let ftype = aceSessions[fhash]["ftype"];
let session = aceSessions[fhash]["session"];
previewSel = null;
setSession(ftype, fhash, session);
$('#buffers-modal').modal("toggle");
})
ulElm.appendChild(liElm);
}
}
const selectPriorPreview = () => {
let selectedElm = previewSel.previousElementSibling;
if ( !isNotNullOrUndefined(selectedElm) ) {
let childrenElms = previewSel.parentElement.children;
selectedElm = childrenElms[childrenElms.length - 1];
}
selectedElm.click();
}
const selectNextPreview = () => {
let selectedElm = previewSel.nextElementSibling;
if ( !isNotNullOrUndefined(selectedElm) ) {
let childrenElms = previewSel.parentElement.children;
selectedElm = childrenElms[0];
}
selectedElm.click();
}