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.QtGui import QColor
from PyQt5.QtWidgets import QApplication
from core.browser import BrowserBuffer
from core.utils import PostGui, get_free_port
import os
@ -88,3 +89,78 @@ class AppBuffer(BrowserBuffer):
hash = hashlib.sha1()
hash.update(str(time.time()).encode("utf-8"))
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>
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 = () => {
const term = new Terminal({
fontSize: 18,
cursorBlink: true,
theme: theme
});
const attachAddon = new AttachAddon.AttachAddon(socket);
const fitAddon = new FitAddon.FitAddon();
term.loadAddon(attachAddon);
term.loadAddon(fitAddon);
term.loadAddon(searchAddon);
term.loadAddon(new WebLinksAddon.WebLinksAddon());
term.open(document.getElementById('xterm'));
fitAddon.fit();
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-x" . "eaf-send-second-key-sequence")
("<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."
:type 'cons)

@ -223,7 +223,7 @@ class EAF(dbus.service.Object):
app_buffer.exit_fullscreen_request.connect(self.exit_fullscreen_request)
# 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
elif module_path == "app.rss-reader.buffer":
@ -545,3 +545,4 @@ if __name__ == "__main__":
signal.signal(signal.SIGINT, signal.SIG_DFL)
sys.exit(app.exec_())

Loading…
Cancel
Save