X-Git-Url: https://thelambdalab.xyz/gitweb/index.cgi?a=blobdiff_plain;f=elpher.el;h=69afb48bd2eb49cbb34d1856f44255c26f2c5ea0;hb=2b50046808e6a15b9e922ad25b45623de12ab83d;hp=141ab77e6cf2e86d1bbbfc4d5ea81884037c09fb;hpb=30434bceb51b26fcdcabb15710525de6a8ad02e0;p=elpher.git diff --git a/elpher.el b/elpher.el index 141ab77..69afb48 100644 --- a/elpher.el +++ b/elpher.el @@ -1,11 +1,37 @@ -;;; elpher.el --- elisp gopher client +;;; elpher.el --- Full-featured gopher client. + +;; Copyright (C) 2019 Tim Vaughan + +;; Author: Tim Vaughan +;; Created: 11 April 2019 +;; Version: 1.0.0 +;; Keywords: comm gopher +;; Homepage: https://github.com/tgvaughan/elpher +;; Package-Requires: ((emacs "25")) + +;; This file is not part of GNU Emacs. + +;; This program is free software: you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this file. If not, see . ;;; Commentary: -;; An elisp gopher client. +;; Elpher is a tool for exploring "gopherspace" using GNU Emacs. ;;; Code: +(provide 'elpher) + ;;; Global constants ;; @@ -20,7 +46,7 @@ 'identity (list "i\tfake\tfake\t1" "i--------------------------------------------\tfake\tfake\t1" - "i Elpher Gopher Client \tfake\tfake\t1" + "i Elpher Gopher Client \tfake\tfake\t1" (format "i version %s\tfake\tfake\t1" elpher-version) "i--------------------------------------------\tfake\tfake\t1" "i\tfake\tfake\t1" @@ -104,6 +130,10 @@ Otherwise, use the system browser via the BROWSE-URL function." :type '(boolean)) +(defcustom elpher-cache-images nil + "If non-nil, cache images in memory in the same way as other content." + :type '(boolean)) + ;;; Model ;; @@ -302,7 +332,7 @@ content and cursor position fields of the node." (defun elpher-get-selector (address after) "Retrieve selector specified by ADDRESS, then execute AFTER. -The result is stored as a string in the variable elpher-selector-string." +The result is stored as a string in the variable ‘elpher-selector-string’." (setq elpher-selector-string "") (make-network-process :name "elpher-process" @@ -426,22 +456,25 @@ The result is stored as a string in the variable elpher-selector-string." (insert-image content)) (setq cursor-type nil) (elpher-restore-pos)) - (progn - (elpher-with-clean-buffer - (insert "LOADING IMAGE...")) - (elpher-get-selector address - (lambda (proc event) - (unless (string-prefix-p "deleted" event) - (let ((image (create-image - (encode-coding-string elpher-selector-string - 'no-conversion) - nil t))) - (elpher-with-clean-buffer - (insert-image image)) - (setq cursor-type nil) - (elpher-restore-pos) - (elpher-set-node-content elpher-current-node - image))))))))) + (if (display-images-p) + (progn + (elpher-with-clean-buffer + (insert "LOADING IMAGE...")) + (elpher-get-selector address + (lambda (proc event) + (unless (string-prefix-p "deleted" event) + (let ((image (create-image + (encode-coding-string elpher-selector-string + 'no-conversion) + nil t))) + (elpher-with-clean-buffer + (insert-image image)) + (setq cursor-type nil) + (elpher-restore-pos) + (if elpher-cache-images + (elpher-set-node-content elpher-current-node + image))))))) + (elpher-get-node-download))))) ;; Search retrieval @@ -597,7 +630,7 @@ The result is stored as a string in the variable elpher-selector-string." (let ((node (button-get button 'elpher-node))) (if node (elpher-visit-node (button-get button 'elpher-node) - #'elpher-get-node-download) + #'elpher-get-node-download) (message "Can only download gopher links, not general URLs."))) (message "No link selected."))))