Loading app/pdfviewer/buffer.py +17 −2 Original line number Diff line number Diff line Loading @@ -53,6 +53,16 @@ class AppBuffer(Buffer): else: self.buffer_widget.scroll_down() def save_session_data(self): return "{0}:{1}:{2}".format(self.buffer_widget.scroll_offset, self.buffer_widget.scale, self.buffer_widget.read_mode) def restore_session_data(self, session_data): (scroll_offset, scale, read_mode) = session_data.split(":") self.buffer_widget.scroll_offset = float(scroll_offset) self.buffer_widget.scale = float(scale) self.buffer_widget.read_mode = read_mode self.buffer_widget.update() class PdfViewerWidget(QWidget): send_jump_page_message = QtCore.pyqtSignal() Loading Loading @@ -191,9 +201,11 @@ class PdfViewerWidget(QWidget): return self.scale * self.page_height * self.page_total_number - self.rect().height() def switch_to_read_mode(self): if self.read_mode == "fit_to_width": if self.read_mode == "fit_to_customize": self.read_mode = "fit_to_width" elif self.read_mode == "fit_to_width": self.read_mode = "fit_to_height" else: elif self.read_mode == "fit_to_height": self.read_mode = "fit_to_width" self.update_scale() Loading Loading @@ -226,14 +238,17 @@ class PdfViewerWidget(QWidget): self.update() def zoom_in(self): self.read_mode = "fit_to_customize" self.scale = min(10, self.scale + 0.2) self.update() def zoom_out(self): self.read_mode = "fit_to_customize" self.scale = max(1, self.scale - 0.2) self.update() def zoom_reset(self): self.read_mode = "fit_to_width" self.update_scale() self.update() Loading core/buffer.py +5 −0 Original line number Diff line number Diff line Loading @@ -74,3 +74,8 @@ class Buffer(QGraphicsScene): def scroll(self, scroll_direction, scroll_type): pass def save_session_data(self): pass def restore_session_data(self, session_data): pass eaf.el +5 −1 Original line number Diff line number Diff line Loading @@ -163,7 +163,11 @@ (kill-buffer buffer))) ;; Just report to me when eaf buffer exists. (if (> count 1) (message "Killed EAF %s buffer%s" count (if (> count 1) "s" ""))))) (message "Killed EAF %s buffer%s" count (if (> count 1) "s" ""))) ;; Clean cache url and app name, avoid next start process to open buffer. (setq eaf-first-start-url nil) (setq eaf-first-start-app-name nil) )) (defun eaf-restart-process () (interactive) Loading eaf.py +67 −1 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import importlib import dbus import dbus.service import os import json EAF_DBUS_NAME = "com.lazycat.eaf" EAF_OBJECT_NAME = "/com/lazycat/eaf" Loading @@ -47,6 +48,8 @@ class EAF(dbus.service.Object): self.start_finish() self.session_file_path = os.path.expanduser("~/.emacs.d/eaf/session.json") @dbus.service.method(EAF_DBUS_NAME, in_signature="sss", out_signature="s") def new_buffer(self, buffer_id, url, app_name): # NOTE: We need use function str convert dbus.String to String, Loading @@ -62,7 +65,9 @@ class EAF(dbus.service.Object): def create_app(self, buffer_id, url, module_path): try: module = importlib.import_module(module_path) self.create_buffer(buffer_id, module.AppBuffer(buffer_id, url)) buf = module.AppBuffer(buffer_id, url) buf.module_path = module_path self.create_buffer(buffer_id, buf) return "" except ImportError: Loading @@ -85,6 +90,9 @@ class EAF(dbus.service.Object): # Send message to emacs. app_buffer.input_message.connect(self.input_message) # Restore buffer session. self.restore_buffer_session(app_buffer) @dbus.service.method(EAF_DBUS_NAME, in_signature="s", out_signature="") def update_views(self, args): global emacs_xid Loading Loading @@ -153,6 +161,9 @@ class EAF(dbus.service.Object): # Clean buffer from buffer dict. if buffer_id in self.buffer_dict: # Save buffer session. self.save_buffer_session(self.buffer_dict[buffer_id]) self.buffer_dict[buffer_id].handle_destroy() self.buffer_dict.pop(buffer_id, None) Loading Loading @@ -191,6 +202,61 @@ class EAF(dbus.service.Object): def input_message(self, buffer_id, message, callback_type): pass def save_buffer_session(self, buf): # Create config file it not exist. if not os.path.exists(self.session_file_path): basedir = os.path.dirname(self.session_file_path) if not os.path.exists(basedir): os.makedirs(basedir) with open(self.session_file_path, 'a'): os.utime(self.session_file_path, None) print("Create session file %s" % (self.session_file_path)) with open(self.session_file_path, "r+") as session_file: session_dict = {} try: session_dict = json.load(session_file) except ValueError: pass if buf.module_path not in session_dict: session_dict[buf.module_path] = {} if buf.url in session_dict[buf.module_path]: session_dict[buf.module_path].update({buf.url: buf.save_session_data()}) else: session_dict.update({buf.module_path: {buf.url: buf.save_session_data()}}) session_file.seek(0) session_file.truncate(0) json.dump(session_dict, session_file) print("Save session: ", buf.module_path, buf.url, buf.save_session_data()) def restore_buffer_session(self, buf): if os.path.exists(self.session_file_path): with open(self.session_file_path, "r+") as session_file: session_dict = {} try: session_dict = json.load(session_file) except ValueError: import traceback traceback.print_exc() if buf.module_path in session_dict: if buf.url in session_dict[buf.module_path]: buf.restore_session_data(session_dict[buf.module_path][buf.url]) print("Restore session: ", buf.buffer_id, buf.module_path, self.session_file_path) else: print("No session data about %s, no need restore session." % (buf.url)) else: print("No data in session file, no need restore session.") else: print("Not found %s, no need restore session." % (self.session_file_path)) if __name__ == "__main__": import sys import signal Loading Loading
app/pdfviewer/buffer.py +17 −2 Original line number Diff line number Diff line Loading @@ -53,6 +53,16 @@ class AppBuffer(Buffer): else: self.buffer_widget.scroll_down() def save_session_data(self): return "{0}:{1}:{2}".format(self.buffer_widget.scroll_offset, self.buffer_widget.scale, self.buffer_widget.read_mode) def restore_session_data(self, session_data): (scroll_offset, scale, read_mode) = session_data.split(":") self.buffer_widget.scroll_offset = float(scroll_offset) self.buffer_widget.scale = float(scale) self.buffer_widget.read_mode = read_mode self.buffer_widget.update() class PdfViewerWidget(QWidget): send_jump_page_message = QtCore.pyqtSignal() Loading Loading @@ -191,9 +201,11 @@ class PdfViewerWidget(QWidget): return self.scale * self.page_height * self.page_total_number - self.rect().height() def switch_to_read_mode(self): if self.read_mode == "fit_to_width": if self.read_mode == "fit_to_customize": self.read_mode = "fit_to_width" elif self.read_mode == "fit_to_width": self.read_mode = "fit_to_height" else: elif self.read_mode == "fit_to_height": self.read_mode = "fit_to_width" self.update_scale() Loading Loading @@ -226,14 +238,17 @@ class PdfViewerWidget(QWidget): self.update() def zoom_in(self): self.read_mode = "fit_to_customize" self.scale = min(10, self.scale + 0.2) self.update() def zoom_out(self): self.read_mode = "fit_to_customize" self.scale = max(1, self.scale - 0.2) self.update() def zoom_reset(self): self.read_mode = "fit_to_width" self.update_scale() self.update() Loading
core/buffer.py +5 −0 Original line number Diff line number Diff line Loading @@ -74,3 +74,8 @@ class Buffer(QGraphicsScene): def scroll(self, scroll_direction, scroll_type): pass def save_session_data(self): pass def restore_session_data(self, session_data): pass
eaf.el +5 −1 Original line number Diff line number Diff line Loading @@ -163,7 +163,11 @@ (kill-buffer buffer))) ;; Just report to me when eaf buffer exists. (if (> count 1) (message "Killed EAF %s buffer%s" count (if (> count 1) "s" ""))))) (message "Killed EAF %s buffer%s" count (if (> count 1) "s" ""))) ;; Clean cache url and app name, avoid next start process to open buffer. (setq eaf-first-start-url nil) (setq eaf-first-start-app-name nil) )) (defun eaf-restart-process () (interactive) Loading
eaf.py +67 −1 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import importlib import dbus import dbus.service import os import json EAF_DBUS_NAME = "com.lazycat.eaf" EAF_OBJECT_NAME = "/com/lazycat/eaf" Loading @@ -47,6 +48,8 @@ class EAF(dbus.service.Object): self.start_finish() self.session_file_path = os.path.expanduser("~/.emacs.d/eaf/session.json") @dbus.service.method(EAF_DBUS_NAME, in_signature="sss", out_signature="s") def new_buffer(self, buffer_id, url, app_name): # NOTE: We need use function str convert dbus.String to String, Loading @@ -62,7 +65,9 @@ class EAF(dbus.service.Object): def create_app(self, buffer_id, url, module_path): try: module = importlib.import_module(module_path) self.create_buffer(buffer_id, module.AppBuffer(buffer_id, url)) buf = module.AppBuffer(buffer_id, url) buf.module_path = module_path self.create_buffer(buffer_id, buf) return "" except ImportError: Loading @@ -85,6 +90,9 @@ class EAF(dbus.service.Object): # Send message to emacs. app_buffer.input_message.connect(self.input_message) # Restore buffer session. self.restore_buffer_session(app_buffer) @dbus.service.method(EAF_DBUS_NAME, in_signature="s", out_signature="") def update_views(self, args): global emacs_xid Loading Loading @@ -153,6 +161,9 @@ class EAF(dbus.service.Object): # Clean buffer from buffer dict. if buffer_id in self.buffer_dict: # Save buffer session. self.save_buffer_session(self.buffer_dict[buffer_id]) self.buffer_dict[buffer_id].handle_destroy() self.buffer_dict.pop(buffer_id, None) Loading Loading @@ -191,6 +202,61 @@ class EAF(dbus.service.Object): def input_message(self, buffer_id, message, callback_type): pass def save_buffer_session(self, buf): # Create config file it not exist. if not os.path.exists(self.session_file_path): basedir = os.path.dirname(self.session_file_path) if not os.path.exists(basedir): os.makedirs(basedir) with open(self.session_file_path, 'a'): os.utime(self.session_file_path, None) print("Create session file %s" % (self.session_file_path)) with open(self.session_file_path, "r+") as session_file: session_dict = {} try: session_dict = json.load(session_file) except ValueError: pass if buf.module_path not in session_dict: session_dict[buf.module_path] = {} if buf.url in session_dict[buf.module_path]: session_dict[buf.module_path].update({buf.url: buf.save_session_data()}) else: session_dict.update({buf.module_path: {buf.url: buf.save_session_data()}}) session_file.seek(0) session_file.truncate(0) json.dump(session_dict, session_file) print("Save session: ", buf.module_path, buf.url, buf.save_session_data()) def restore_buffer_session(self, buf): if os.path.exists(self.session_file_path): with open(self.session_file_path, "r+") as session_file: session_dict = {} try: session_dict = json.load(session_file) except ValueError: import traceback traceback.print_exc() if buf.module_path in session_dict: if buf.url in session_dict[buf.module_path]: buf.restore_session_data(session_dict[buf.module_path][buf.url]) print("Restore session: ", buf.buffer_id, buf.module_path, self.session_file_path) else: print("No session data about %s, no need restore session." % (buf.url)) else: print("No data in session file, no need restore session.") else: print("Not found %s, no need restore session." % (self.session_file_path)) if __name__ == "__main__": import sys import signal Loading