Add terminal actions.

master
Andy Stewart 6 years ago
parent 196ceb75e6
commit 27f70100e1
  1. 76
      app/terminal/buffer.py
  2. 53
      app/terminal/index.html
  3. 4
      eaf.el
  4. 3
      eaf.py

@ -21,6 +21,7 @@
from PyQt5.QtCore import QUrl from PyQt5.QtCore import QUrl
from PyQt5.QtGui import QColor from PyQt5.QtGui import QColor
from PyQt5.QtWidgets import QApplication
from core.browser import BrowserBuffer from core.browser import BrowserBuffer
from core.utils import PostGui, get_free_port from core.utils import PostGui, get_free_port
import os import os
@ -88,3 +89,78 @@ class AppBuffer(BrowserBuffer):
hash = hashlib.sha1() hash = hashlib.sha1()
hash.update(str(time.time()).encode("utf-8")) hash.update(str(time.time()).encode("utf-8"))
return hash.hexdigest()[:4] return hash.hexdigest()[:4]
def copy_text(self):
text = self.buffer_widget.execute_js("get_selection();")
if text == "":
self.message_to_emacs.emit("Nothing selected")
else:
clipboard = QApplication.clipboard()
clipboard.setText(text)
self.message_to_emacs.emit("Copy text")
def yank_text(self):
text = QApplication.clipboard().text()
self.buffer_widget.eval_js("paste('{}');".format(text))
def scroll(self, scroll_direction, scroll_type):
if scroll_type == "page":
if scroll_direction == "up":
self.buffer_widget.eval_js("scroll_page(1);")
else:
self.buffer_widget.eval_js("scroll_page(-1);")
else:
if scroll_direction == "up":
self.buffer_widget.eval_js("scroll_line(1);")
else:
self.buffer_widget.eval_js("scroll_line(-1);")
def scroll_up_page(self):
self.buffer_widget.eval_js("scroll_page(1);")
def scroll_down_page(self):
self.buffer_widget.eval_js("scroll_page(-1);")
def scroll_to_begin(self):
self.buffer_widget.eval_js("scroll_to_begin();")
def scroll_to_bottom(self):
self.buffer_widget.eval_js("scroll_to_bottom();")
def select_all(self):
self.buffer_widget.eval_js("select_all();")
def clear_selection(self):
self.buffer_widget.eval_js("clear_selection();")
def _search_text(self, text, is_backward = False):
if self.search_term != text:
self.search_term = text
if is_backward:
# self.web_page.findText(self.search_term, self.web_page.FindBackward)
self.buffer_widget.eval_js("find_next('{}')".format(text))
else:
# self.web_page.findText(self.search_term)
self.buffer_widget.eval_js("find_prev('{}')".format(text))
def search_text_forward(self):
if self.search_term == "":
self.buffer.send_input_message("Forward Search Text: ", "search_text_forward")
else:
self._search_text(self.search_term)
def search_text_backward(self):
if self.search_term == "":
self.buffer.send_input_message("Backward Search Text: ", "search_text_backward")
else:
self._search_text(self.search_term, True)
def search_quit(self):
if self.search_term != "":
self._search_text("")
def handle_input_message(self, result_tag, result_content):
if result_tag == "search_text_forward":
self.buffer_widget._search_text(str(result_content))
elif result_tag == "search_text_backward":
self.buffer_widget._search_text(str(result_content), True)

@ -41,17 +41,60 @@
<script> <script>
var socket = new WebSocket("ws://127.0.0.1:%1"); var socket = new WebSocket("ws://127.0.0.1:%1");
const term = new Terminal({
fontSize: 18,
cursorBlink: true,
theme: theme
});
const searchAddon = new SearchAddon.SearchAddon();
function get_selection() {
return term.getSelection();
}
function paste(text) {
term.paste(text);
}
function scroll_line(number) {
term.scrollLines(number);
}
function scroll_page(number) {
term.scrollPages(number);
}
function scroll_to_begin() {
term.scrollToTop();
}
function scroll_to_bottom() {
term.scrollToBottom();
}
function select_all() {
term.selectAll();
}
function clear_selection() {
term.clearSelection();
}
function find_next(text) {
searchAddon.findNext(text);
}
function find_prev(text) {
searchAddon.findPrevious(text);
}
socket.onopen = () => { socket.onopen = () => {
const term = new Terminal({
fontSize: 18,
cursorBlink: true,
theme: theme
});
const attachAddon = new AttachAddon.AttachAddon(socket); const attachAddon = new AttachAddon.AttachAddon(socket);
const fitAddon = new FitAddon.FitAddon(); const fitAddon = new FitAddon.FitAddon();
term.loadAddon(attachAddon); term.loadAddon(attachAddon);
term.loadAddon(fitAddon); term.loadAddon(fitAddon);
term.loadAddon(searchAddon);
term.loadAddon(new WebLinksAddon.WebLinksAddon());
term.open(document.getElementById('xterm')); term.open(document.getElementById('xterm'));
fitAddon.fit(); fitAddon.fit();
term.focus(); term.focus();

@ -454,6 +454,10 @@ Try not to modify this alist directly. Use `eaf-setq' to modify instead."
("C-c C-c" . "eaf-send-second-key-sequence") ("C-c C-c" . "eaf-send-second-key-sequence")
("C-c C-x" . "eaf-send-second-key-sequence") ("C-c C-x" . "eaf-send-second-key-sequence")
("<f12>" . "open_dev_tool_page") ("<f12>" . "open_dev_tool_page")
("M-w" . "copy_text")
("C-y" . "yank_text")
("C-S-a" . "select_all")
("C-S-l" . "clear_selection")
) )
"The keybinding of EAF Terminal." "The keybinding of EAF Terminal."
:type 'cons) :type 'cons)

@ -223,7 +223,7 @@ class EAF(dbus.service.Object):
app_buffer.exit_fullscreen_request.connect(self.exit_fullscreen_request) app_buffer.exit_fullscreen_request.connect(self.exit_fullscreen_request)
# Add create new window when create_new_browser_window_callback is call. # Add create new window when create_new_browser_window_callback is call.
if module_path == "app.browser.buffer": if module_path == "app.browser.buffer" or module_path == "app.terminal.buffer":
app_buffer.buffer_widget.create_new_browser_window_callback = self.create_new_browser_window app_buffer.buffer_widget.create_new_browser_window_callback = self.create_new_browser_window
elif module_path == "app.rss-reader.buffer": elif module_path == "app.rss-reader.buffer":
@ -545,3 +545,4 @@ if __name__ == "__main__":
signal.signal(signal.SIGINT, signal.SIG_DFL) signal.signal(signal.SIGINT, signal.SIG_DFL)
sys.exit(app.exec_()) sys.exit(app.exec_())

Loading…
Cancel
Save