;; tinmop: an humble gemini and pleroma client ;; Copyright (C) 2020 cage ;; 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 program. If not, see . (defpackage :idn (:use :cl :alexandria) (:export :host-unicode->ascii :host-ascii->unicode)) (defpackage :config (:use :cl) (:export :+sys-data-dir+ :+sys-conf-dir+ :+catalog-dir+ :+text-domain+ :+program-name+ :+program-version+ :+issue-tracker+ :+openssl-bin+ :+xdg-open-bin+ :+unzip-bin+ :+man-bin+ :+montage-bin+ :_ :n_)) (defpackage :constants (:use :cl :alexandria :config) (:export :+help-about-message+ :+welcome-message+ :+http-code-ok+ :+mime-type-jpg+ :+mime-type-png+ :+mime-type-html+ :+db-file+ :+fps+ :+command-window-height+ :+starting-init-file+ :+box-height-diff+ :+default-command-prompt+ :+menu-button-ok+ :+status-public-visibility+ :+status-direct-visibility+ :+folder-direct-message-prefix+ :+folder-tag-prefix+ :+mention-prefix+ :+cache-tls-certificate-type+ :+standard-editor+)) (defpackage :conditions (:use :cl :config) (:export :text-error :text :not-implemented-error :null-reference :out-of-bounds :length-error :different-length-error :command-not-found :column-not-found :with-default-on-error)) (defpackage :num-utils (:use :cl :constants) (:nicknames :num) (:export :safe-parse-number :parse-number-default :find-min-max :find-min :find-max :round-all :fract :sign :count-digit :fnv-hash-32 :string-fnv-hash-32 :fnv-hash-256 :string-fnv-hash-256 :*lcg-seed* :lcg-set-seed :lcg-next :lcg-next01 :lcg-next-upto :lcg-next-in-range :lcg-next-in-range* :shellsort :multisort :multisort* :gen-multisort-test :*default-epsilon* :with-epsilon :add-epsilon-rel :epsilon= :epsilon<= :epsilon>= :binary-search)) (defpackage :misc-utils (:use :cl :constants) (:nicknames :misc) (:export :when-debug :debug-log :dbg :dbg-and-quit :dbg-stdout :code->char :char->code :swap :dump-hash-table :with-messages-start-end :safe-random :split-into-chunks :group-by :delete@ :return-whole :safe-delete@ :safe-all-but-last-elt :remove-compact-remap-sequence :remove-if-null :remove-if-not-null :intersperse :do-while :do-while* :not-null-p :permutation :shuffle :make-fresh-list :seq->list :lcat :vcat :fresh-list-insert@ :fresh-list-subst@ :make-array-frame :make-fresh-array :sequence->list :vector-empty-p :sequence-empty-p :safe-elt :safe-last-elt :safe-subseq :random-num-filled-vector :random-elt :safe-random-elt :copy-multiply :all-but-last-elt :list->array :list->simple-array :copy-list-into-array :array-slice :2byte->word :2word->int :byte->int :bytes->string :read-ieee-float-32 :int16->bytes :int32->bytes :define-offset-size :define-parse-header-chunk :read-list :read-array :read-all :read-line-into-array :definline :+cache-invalid-value+ :defcached :defcached-list :function-name :fn-delay :unsplice :defalias :defun-inline-function :format-fn-symbol :check-body-keywords :format-keyword :a->function :gen-type-p :define-compiler-macros :defmethod-inline-function :nest-expressions :replace-e! :+nil-equiv-bag+ :build-plist :build-assocs-chain :recursive-assoc :recursive-assoc-just-before :n-setf-path-value :plist-path-value :gen-trivial-plist-predicates :gen-trivial-plist-predicate :gen-trivial-plist-get :gen-trivial-plist-gets :gen-vec-comp :make-null-pointer :with-load-forms-in-var :time-unix->universal :time-seconds-of :time-minutes-of :time-hour-of :time-date-of :time-month-of :time-year-of :time-day-of :time-daylight-p-of :time-zone-of :year->timestamp :current-year :extract-year-from-timestamp :format-time :binary-search :defun-w-lock :with-lock :get-url-content :with-profile-time :with-debug-print-profile-time :all-program-dependencies)) (defpackage :box (:use :cl) (:export :box :boxp :unbox :dbox :dboxp :dunbox)) (defpackage :filesystem-utils (:use :cl :alexandria) (:nicknames :fs) (:export :+file-path-regex+ :+s-irwxu+ :+s-irusr+ :+s-iwusr+ :+s-ixusr+ :+s-irwxg+ :+s-irgrp+ :+s-iwgrp+ :+s-ixgrp+ :+s-irwxo+ :+s-iroth+ :+s-iwoth+ :+s-ixoth+ :+s-isuid+ :+s-isgid+ :*directory-sep-regexp* :*directory-sep* :create-a-file :copy-a-file :rename-a-file :file-size :slurp-file :dump-sequence-to-file :create-file :cat-parent-dir :has-extension :get-extension :extension-dir-p :strip-extension :add-extension :do-directory :collect-children :collect-tree :backreference-dir-p :loopback-reference-dir-p :path-referencing-dir-p :collect-files/dirs :prepend-pwd :search-matching-file :regular-file-p :dirp :split-path-elements :path-last-element :path-first-element :path-to-hidden-file-p :parent-dir-path :append-file-to-path :strip-dirs-from-path :get-stat-mtime :get-stat-ctime :get-stat-atime :get-stat-mode :change-path-permissions :file-outdated-p :file-exists-p :directory-exists-p :file-length-if-exists :delete-file-if-exists :file-hash :home-dir :*temporary-files-created* :temporary-file :clean-temporary-files :*temporary-directories-created* :temporary-directory :filename-pattern-match :children-matching-path :recursive-delete :clean-temporary-directories :with-anaphoric-temp-file :temp-file :file-can-write-p :set-file-permissions :cached-directory-files :directory-files :make-directory :maybe-append-directory-separator :package-path :file-in-package :link-file-path :file-is-link-if-else :pathname->namestring :namestring->pathname :read-single-form :eq-filename :octects->units :octects->units-string :normalize-path)) (defpackage :os-utils (:use :cl :config :constants) (:export :+ssl-cert-name+ :+ssl-key-name+ :cpu-number :xdg-open :getenv :default-temp-dir :pwd :run-external-program :process-exit-code :process-exit-success-p :open-with-editor :exit-program :user-cache-dir :cached-file-path :generate-ssl-certificate :send-to-pipe :open-link-with-program :open-resource-with-external-program :unzip-file :unzip-single-file :copy-to-clipboard)) (defpackage :text-utils (:use :cl :config) (:import-from :misc :definline) (:export :+float-regexp+ :+integer-regexp+ :*blanks* :uchar-length :utf8-encoded-p :clean-unprintable-chars :to-s :strcat :strcat* :join-with-strings :join-with-strings* :split-words :extract-blanks :split-lines :strip-prefix :strip-withespaces :common-prefix :basename :wrap-with :build-string :right-padding :right-padding-suffix :left-padding :left-padding-prefix :ellipsize :justify-monospaced-text :flush-left-mono-text :string-empty-p :string-not-empty-p :string-starts-with-p :string-ends-with-p :trim-blanks :find-max-line-length :box-fit-single-column :box-fit-multiple-column :annotated-text-symbol :annotated-text-value :box-fit-multiple-column-annotated :collect-links :percent-encode :percent-decode :percent-encoded-p :maybe-percent-encode :display-corrupting-utf8-p :remove-corrupting-utf8-chars :match-words :emojip :starting-emoji)) (defpackage :html-utils (:use :cl :alexandria :config :text-utils) (:export :http-link-iri-p :make-tag-node :tag :attributes :attribute-key :attribute-value :add-attribute :children :tag= :find-attribute :find-tag :position-tag :node->link :html->text)) (defpackage :resources-utils (:use :cl :cl-ppcre :config :constants :filesystem-utils :text-utils) (:nicknames :res) (:export :init :home-datadir :home-confdir :return-home-filename :return-system-filename :create-empty-in-home :get-config-file :get-sys-config-file :get-data-file :get-data-dir)) (defpackage :zip-info (:use :cl :cl-ppcre :config :constants :filesystem-utils :text-utils :misc-utils) (:export :zip-file-p :list-entries)) (defpackage :crypto-utils (:use :cl :alexandria :cl-ppcre :config :constants) (:export :crypto-text-p :generate-key :encrypt-message :decrypt-message)) (defpackage :interfaces (:use :cl :alexandria :constants :misc) (:shadowing-import-from :misc :random-elt :shuffle) (:export :clone :clone-into :copy-flat :copy-flat-into :with-simple-clone :with-simple-copy-flat :serialize :serialize-to-stream :deserialize :post-deserialization-fix)) (defpackage :mtree-utils (:use :cl :interfaces :text-utils) (:nicknames :mtree) (:export :random-choose-leaf :traverse-apply-tree :traverse-napply-tree :traverse-find-if-tree :traverse-find-all-if-tree :traverse-apply-tree-cdr :traverse-nadd-child :traverse-ndelete-child :nappend-child :navigate :m-tree :*use-pprint-tree* :pprint-tree :children :parent :data :add-child :add-children :add-children* :child-data-pushnew :graft-branch :make-node :find-node :leafp :rootp :top-down-visit :bottom-up-visit :remove-all-children :remove-child :remove-child-if :do-children :do-children-from-end :find-child :find-child-if :count-leaves :count-nodes :collect-nodes-data :mtree-equal :root-node :sorted-m-tree :tree->text-lines :tree->annotated-lines)) (defpackage :bs-tree (:use :cl :interfaces) (:shadow :search :map) (:export :node :parent :data :left :right :make-node :make-leaf :make-root-node :%key :+data+ :+left+ :+right+ :+parent+ :node->string :search :search-opt :with-insert-local-function :insert :leafp :all-children-leaf-p :map :map-node :walk :bstp :node->dot :reconstruct-parent :find-max-node :to-sexp :from-sexp)) (defpackage :rb-tree (:use :cl :interfaces :bs-tree) (:shadowing-import-from :bs-tree :search :map) (:export :+rb-red+ :+rb-black+ :+rb-color+ :rb-node :color :make-rb-node :make-rb-leaf :make-root-rb-node :data :left :right :node->string :search :search-opt :with-insert-local-function :insert :remove-node :leafp :map :map-node :balancedp :walk :bstp :node->dot :reconstruct-parent :to-sexp :from-sexp)) (defpackage :priority-queue (:use :cl) (:nicknames :pq) (:export :priority-queue :key-function :compare-function :equal-function :push-element :pop-element :find-element :remove-element :map-elements :count-elements-if :remove-element-if :map-events :emptyp :with-min-queue)) (defpackage :queue (:use :cl) (:nicknames :qu) (:shadow :push :pop :find) (:export :*equal-function* :*key-function* :push :pop :find :emptyp :with-queue :simple-queue :container :q-pop :q-peek :q-push :q-empty-p :q-size :q-sort :q-dbg-print)) (defpackage :stack (:use :cl :alexandria) (:export :stack :stack-push :stack-pop :stack-find :stack-empty-p :stack-remove-element :stack-select :stack-position :stack-raise-to-top :stack-empty-p :do-stack-element)) (defpackage :uri-parser (:use :cl :alexandria :esrap :cl-ppcre :text-utils) (:nicknames :uri) (:export :uri :copy-uri :render-uri :uri-parse :scheme :user-info :host :port :path :query :fragment :make-uri)) (defpackage :iri-parser (:use :cl :alexandria :esrap :cl-ppcre :text-utils) (:nicknames :iri) (:import-from :fs :normalize-path) (:export :+segment-separator+ :iri :copy-iri :render-iri :make-iri :iri-parse :normalize-path :absolute-url-p :ipv4-address-p :ipv6-address-p)) (defpackage :tour-mode-parser (:use :cl :alexandria :esrap :cl-ppcre :text-utils) (:export :range-from :range-to :range-p :parse-tour-mode)) (defpackage :x509 (:use :cl :alexandria) (:export :dump-certificate :certificate-fingerprint)) (defpackage :db-utils (:use :cl :alexandria :cl-ppcre :sxql :local-time :config :constants :text-utils) (:export :+characters-trouble-name+ :*connection* :fetch :fetch-all :close-db :connectedp :with-db-transaction :db-path :quote-symbol :db-file-exists-p :init-connection :with-ready-database :with-disabled-foreign :do-rows :prepare-for-sql-like :object-exists-in-db-p :object-count-in-db :query-low-level :db-nil-p :db-not-nil-p :db-getf :db-nil->lisp :if-db-nil-else :count-all :query :query->sql :local-time-obj-now :decode-date-string :decode-datetime-string :encode-datetime-string :encoded-datetime-year :make-insert :make-delete :make-update :get-max-id :get-min-id :decode-blob :rows->tsv :table-exists-p :prepare-for-db :last-inserted-rowid)) (defpackage :db (:use :cl :alexandria :cl-ppcre :sxql :sxql-composer :config :constants :db-utils :text-utils) (:export :+db-true+ :+db-false+ :+other-id+ :+table-account+ :+table-status+ :+table-attachment+ :+table-saved-status+ :+table-crypto-data+ :+table-gemini-subscription+ :+table-bookmark+ :+bookmark-gemini-type-entry+ :+federated-timeline+ :+local-timeline+ :+home-timeline+ :+direct-timeline+ :+default-status-folder+ :+mentions-status-folder+ :+default-tag-timeline+ :+default-converation-timeline+ :+message-index-start+ :+tag-separator+ :+make-close+ :prepare-table :hidden-recipient-p :default-timelines :message-index->sequence-index :timeline-type->description :maybe-build-all-tables :build-all-indices :delete-all-tables :delete-all-views :delete-database :fetch-all-rows :table->alist :fetch-from-id :fetch-single :delete-by-id :account-ignored-p :user-ignored-p :boost-ignored-p :tags-ignored-p :acct->user :acct->id :username->id :user-exists-p :user-id->user :user-id->username :insert-in-history :previous-in-history :next-in-history :most-recent-history-id :purge-history :history-prompt->values :all-poll-options :find-poll :find-poll-option :find-poll-bound-to-status :chat-message-exists-p :find-chat :mark-all-chat-messages-read :count-unread-chat-messages :chat-change-label :chat-exists-p :all-chats :all-chat-messages :all-chat-links :last-chat-message-id :update-db :all-messages-timeline-folder :message-root :message-children :message-root->tree :message->thread-users :message-id->tree :message-from-timeline-folder-message-index :message-index->tree :single-status-exists-p :find-status-id :find-message-id :data-id :row-id :row-type :row-label :row-message-visibility :row-message-status-id :row-message-index :row-message-timeline :row-message-folder :row-message-username :row-message-user-display-name :row-message-content :row-message-rendered-text :row-message-creation-time :row-message-subject :row-message-tags :row-message-reblog-id :row-lockedp :row-user-username :row-avatar :row-tag-got-new-message :row-conversation-folder :row-conversation-root-status-id :row-conversation-ignored-p :row-poll-expired-p :row-poll-multiple-vote-p :row-title :row-subtitle :row-url :row-expire-date :row-account-id :row-updated-at :row-created-at :row-chat-id :row-votes-count :row-message-reply-to-id :row-text-url :row-cache-key :row-cache-type :row-cache-accessed-at :row-cache-created-at :row-seenp :row-description :row-value :row-local-uri :row-original-uri :row-gpub-version :row-index-file :row-author :row-language :row-charset :row-published :row-publish-date :row-revision-date :row-copyright :row-license :row-version :row-cover :row-input :next-status-tree :previous-status-tree :message-tree-root-equal :annotated-tree-line->data-plist :renumber-timeline-message-index :renumber-all-timelines :duplicated-message-index-p :all-attachments-to-status :attachment-to-chat-message :all-attachments-urls-to-status :mark-status-read :mark-status-unread :mark-status-deleted :mark-status-prevent-deletion :count-status-redp :count-status :search-message-text-body :search-next-message-body :search-previous-message-body :search-next-message-meta :search-previous-message-meta :search-next-unread-message :last-message-index-status :last-status-id-timeline-folder :first-status-id-timeline-folder :last-ignored-status-id-timeline-folder :first-ignored-status-id-timeline-folder :last-pagination-status-id-timeline-folder :first-pagination-status-id-timeline-folder :find-pagination-status :add-to-pagination-status :remove-pagination-status :count-status-marked-to-delete :delete-all-statuses-marked-deleted :tags-histogram-foreground :max-username-length :keyword->dbcolumn :folder-exists-p :conversation-root-captured-p :timeline-exists-p :move-message-to-folder :move-tree-to-folder :last-status-id-in-tree :all-timelines-in-folder :all-folders :all-timelines :ignore-status-author :unignore-status-author :unignore-author :all-usernames :all-followed-usernames :all-unfollowed-usernames :all-ignored-usernames :status-ignored-p :status-skipped-p :add-to-status-ignored :add-to-status-skipped :remove-from-status-skipped :remove-from-status-ignored :add-to-followers :remove-from-followers :forget-all-statuses-marked-deleted :status-id->username :subscribe-to-tag :unsubscribe-to-tag :tag->folder-name :folder-name->tag :all-tag-paginations-status :all-subscribed-tags :all-subscribed-tags-name :tag-folder-name-p :more-recent-tag-fetched-p :all-tags-with-new-message-fetched :update-last-seen-status-subscribed-tag :tag-histogram :mark-tag-got-new-messages :unmark-tag-got-new-messages :max-id-conversations :all-conversations :all-conversations-id :add-conversation :conversation-id->folder :all-conversation-folders :update-conversation-folder :update-conversation-folder-by-id :update-conversation-by-id :conversation-folder-exists-p :change-conversation-name :conversation-stats :conversation-id :messages-red :messages-to-read :conversation-name :conversation-read/red :all-conversation-stats :ignore-conversation :delete-conversation :import-crypto-data :crypto-user-key :cache-invalidate :cache-put :cache-get :cache-get-value :cache-expired-p :cache-delete-all :tofu-passes-p :tofu-delete :find-tls-certificates-rows :gemini-subscribe-url :gemini-find-subscription :gemini-all-subscriptions :row-seen-count :row-unseen-count :find-gemlog-entry :gemini-all-unread-posts :gemini-cancel-subscription :add-gemlog-entries :gemlog-mark-as-seen :gemlog-url :gemlog-title :gemlog-subtitle :row-post-date :row-post-title :row-post-link :row-post-seenp :gemlog-entries :delete-gemlog-entry :purge-seen-gemlog-entries :bookmark-add :bookmark-complete->id :bookmark-description-for-complete :bookmark-all-sections :bookmark-all-grouped-by-section :bookmark-delete :gempub-metadata-add :all-gempub-metadata :gempub-metadata-delete :gempub-metadata-find)) (defpackage :date-formatter (:use :cl :alexandria :cl-ppcre :esrap :config :constants :misc :text-utils) (:shadowing-import-from :misc :random-elt :shuffle) (:export :expand-date-formatter-spec)) (defpackage :emoji-shortcodes (:use :cl) (:export :shortcode-lookup :emojify)) (defpackage :software-configuration (:use :cl :alexandria :cl-ppcre :esrap :config :constants :text-utils :misc :mtree) (:nicknames :swconf) (:shadowing-import-from :misc :random-elt :shuffle) (:export :+conf-filename+ :+shared-conf-filename+ :+key-background+ :+key-foreground+ :+key-width+ :+key-root+ :+key-height+ :+key-value+ :+key-new-message-mark+ :+key-window+ :+key-focus+ :+key-mark+ :+key-vote-vertical-bar+ :+key-info-dialog+ :+key-help-dialog+ :+key-error-dialog+ :+key-input-dialog+ :+key-notify-window+ :+key-gempub-library-window+ :+key-notification-life+ :+key-modeline+ :+key-date-format+ :+key-main-window+ :+key-thread-window+ :+key-message-window+ :+key-gopher-window+ :+key-chat-window+ :+key-chats-list-window+ :+key-gemini-subscription-window+ :+key-gemini-toc-window+ :+key-favourite+ :+key-sensitive+ :+key-boosted+ :+key-tags-window+ :+key-open-attach-window+ :+key-open-message-link-window+ :+key-open-gemini-stream-window+ :+key-gemini-certificates-window+ :+key-conversations-window+ :+key-keybindings-window+ :+key-suggestions-window+ :+key-command-window+ :+key-file-explorer+ :+key-editor+ :+key-username+ :+key-server+ :+key-message+ :+key-selected+ :+key-deleted+ :+key-read+ :+key-unread+ :+key-color-re+ :+key-tree+ :+key-branch+ :+key-arrow+ :+key-data+ :+key-data-leaf+ :+key-purge-history-days-offset+ :+buffer-minimum-size-to-open+ :*allowed-status-visibility* :*allowed-attachment-type* :*software-configuration* :color-re-assign :re :color-name :color-value :attributes :parse :perform-missing-value-check :load-config-file :external-editor :gemini-downloading-animation :close-link-window-after-select-p :suggestion-window-selected-item-colors :gemini-default-favicon :gemini-update-gemlog-at-start-p :directory-symbol :gemini-fetch-favicon-p :gemini-link-colors :gemini-link-prefix-to-gemini :gemini-link-prefix-to-other :gemini-link-prefix-to-http :gemini-quote-prefix :gemini-quote-prefix :gemini-h1-prefix :gemini-h2-prefix :gemini-h3-prefix :gemini-bullet-prefix :gemini-preformatted-fg :gemini-subscription-url-fg :gemini-subscription-count-fg :gemini-certificates-window-colors :gemini-toc-padding-char :signature-file-path :vote-vertical-bar :crypted-mark-value :quick-help-header-colors :window-titles-ends :tags-histogram-foreground :tags-new-message-mark :conversation-window-read-colors :conversation-window-unread-colors :max-message-length :max-report-comment-length :quote-char :max-attachments-allowed :gempub-library-directory :color-regexps :ignore-users-regexps :ignore-users-boost-regexps :ignore-tag-regexps :win-bg :win-fg :win-height :win-width :command-separator-config-values :command-error-message-colors :command-info-message-colors :tree-config-colors :tree-config-rendering-values :make-tree-colormap :left-arrow :config-delete-fetched-mentions-p :config-gemini-fullscreen-toc-width :config-gemini-fullscreen-links-height :config-post-allowed-language :config-purge-history-days-offset :config-purge-cage-days-offset :config-notification-life :config-gemini-fragment-as-regex-p :config-notify-window-geometry :config-notification-icon :config-server-name :config-username :config-password-echo-character :config-win-focus-mark :config-gopher-line-prefix-directory :config-gopher-line-prefix-uri :config-gopher-line-prefix-unknown :config-gopher-line-prefix-binary-file :config-gopher-line-prefix-text-file :config-gopher-line-prefix-image-file :config-gopher-line-prefix-gif-file :config-gopher-line-prefix-search-index :config-gopher-line-prefix-attribute :config-gopher-line-prefix-foreground :link-regex->program-to-use :link-regex->program-to-use-buffer-size :use-tinmop-as-external-program-p :use-editor-as-external-program-p :thread-message-symbol :thread-message-read-colors :thread-message-unread-colors :thread-message-selected-colors :thread-message-deleted-colors :modeline-colors :modeline-fmt :date-fmt :message-window-locked-account-mark :message-window-unlocked-account-mark :message-window-account-locking-status-mark :message-window-line-mark-values :message-windows-visibility-marks :message-window-attachments-header :form-style :background :foreground :input-background :input-foreground :selected-background :selected-foreground :unselected-background :unselected-foreground)) (defpackage :tui-utils (:use :cl :alexandria :cl-ppcre :local-time :croatoan :config :constants :interfaces :text-utils) (:nicknames :tui) (:import-from :misc-utils :defalias) (:shadowing-import-from :text-utils :split-lines) (:export :make-win-background :make-croatoan-window :make-blocking-croatoan-window :make-screen :make-tui-char :make-tui-string :tui-format :decode-key-event :colorize-tree-element :colorize-tree-line :text-length :find-max-line-width :ncat-complex-string :to-tui-string :cat-complex-string :cat-tui-string :tui-char->char :tui-string->chars-string :tui-string-subseq :text-ellipsis :right-pad-text :text->tui-attribute :assemble-attributes :attribute-reverse :attribute-bold :attribute-underline :attribute-italic :attribute-blink :attribute-dim :attribute-invisible :combine-attributes :colorize-line :colorized-line->tui-string :apply-coloring :standard-error-notify-life :with-notify-errors :with-print-error-message :make-tui-char :make-tui-string :tui-string-apply-colors :copy-tui-string :apply-attributes)) (defpackage :command-line (:use :cl :alexandria :cl-ppcre :config :constants :text-utils :misc-utils) (:shadowing-import-from :misc :random-elt :shuffle) (:export :*start-folder* :*start-timeline* :*update-timeline* :*script-file* :*module-file* :*check-follow-requests* :*reset-timeline-pagination* :*notify-mentions* :*net-address* :*update-timeline-climb-message-tree* :*gemini-full-screen-mode* :*print-lisp-dependencies* :manage-opts)) (defpackage :specials (:use :cl :config :constants) (:export :*main-window* :*keybindings-suggestions-window* :*strings-suggestions-window* :*command-window* :*thread-window* :*message-window* :*send-message-window* :*follow-requests-window* :*tags-window* :*conversations-window* :*open-attach-window* :*open-message-link-window* :*gemini-streams-window* :*gemini-certificates-window* :*gemini-subscription-window* :*gemini-toc-window* :*chats-list-window* :*gempub-library-window* :*filesystem-explorer-window* :*gopher-window*)) (defpackage :complete (:use :cl :alexandria :osicat) (:export :*complete-function* :shortest-candidate :directory-complete :tilde-expand-string :folder-complete :timeline-complete-fn :ignored-username-complete :initialize-complete-username-cache :username-complete :visibility-complete :unfollowed-user-complete :followed-user-complete :tags-complete :conversation-folder :make-complete-gemini-iri-fn :complete-chat-message :complete-always-empty :bookmark-section-complete :bookmark-description-complete-clsr)) (defpackage :program-events (:use :cl :alexandria :priority-queue :config :constants :priority-queue :misc :box) (:shadowing-import-from :misc :random-elt :shuffle) (:shadowing-import-from :priority-queue :emptyp) (:export :+standard-event-priority+ :+minimum-event-priority+ :+maximum-event-priority+ :*process-events-immediately* :with-stop-event-dispatching :stop-event-dispatching-p :program-event :event-id :payload :condition-variable :priority :reinitialize-id :events-queue :lock :push-event :event-available-p :pop-event :remove-event :remove-event-if :find-event :ask-user-input-string-event :user-input-string-event :notify-user-event :remove-notify-user-event :change-window-title-event :save-timeline-in-db-event :timeline-type :localp :min-id :fetch-remote-status-event :process-event :search-next-event :search-message-gemini-fragment-event :search-regex-message-content-event :thread-search-message-body-event :search-direction :thread-search-message-meta-event :filesystem-tree-search-message-event :thread-goto-message :delete-all-status-event :quit-program-event :error-message-event :info-message-event :error-dialog-event :info-dialog-event :move-selected-tree-event :refresh-thread-windows-event :favourite-status-event :unfavourite-status-event :reblog-status-event :unreblog-status-event :unignore-user-event :send-message-change-subject-event :send-message-change-mentions-event :send-message-change-visibility-event :open-send-message-window-event :make-attachment :attachment-path :attachment-alt-text :send-message-add-attachment-event :send-message-event :with-sending-message-data :use-ui-notification :follow-user-event :unfollow-user-event :open-follow-requests-window-event :subscribe-tags-event :unsubscribe-tags-event :update-last-refresh-subscribe-tags-event :notify-fetched-new-tag-messages-event :tag-mark-got-messages-event :refresh-tag-window-event :update-conversations-event :change-conversation-name-event :old-name :new-name :refresh-conversations-window-event :ignore-conversations-event :delete-conversations-event :update-mentions-event :expand-thread-event :report-status-event :add-crypto-data-event :poll-vote-event :add-pagination-status-event :status-id :timeline :display-output-script-page :gemini-display-data-page :gemini-request-event :gemini-back-event :gemini-got-line-event :gemini-abort-all-downloading-event :gemini-push-behind-downloading-event :gemini-abort-downloading-event :gemini-compact-lines-event :gemini-enqueue-download-event :gemini-gemlog-subscribe-event :gemlog-cancel-subscription-event :gemlog-show-event :gemlog-refresh-all-event :gemini-toc-jump-to-section :gemini-toc-open :gemini-toc-scroll-begin :gemini-toc-scroll-end :gemini-toc-search :get-chat-messages-event :get-chats-event :chat-show-event :update-all-chat-messages-event :chat-post-message-event :chat-change-label-event :chat-create-event :search-link-event :search-toc-event :help-apropos-event :redraw-window-event :send-to-pipe-event :print-mentions-event :function-event :with-enqueued-process :dispatch-program-events)) (defpackage :api-pleroma (:use :cl :alexandria :config :constants :misc) (:shadowing-import-from :misc :random-elt :shuffle) (:export :chat-message :message-id :nreadp :emojis :updated-at :created-at :content :chat-id :attachment :account-id :chat :unread-count :last-message :account :create-chat :get-all-chats :post-chat-message :fetch-chat-messages :delete-chat-message :get-chat-messages :get-chats :post-on-chat :create-new-chat :get-following)) (defpackage :api-client (:use :cl :alexandria :config :constants :db-utils :interfaces :text-utils :misc) (:shadowing-import-from :misc :random-elt :shuffle) (:nicknames :client) (:export :*client* :*client-lock* :forget-credentials :authorize :defun-api-call :favourite-status :unfavourite-status :reblog-status :unreblog-status :get-timeline :update-timeline :tag->folder-name :tag-name :update-subscribed-tags :fetch-remote-status :get-remote-status :send-status :get-status-context :search-user :find-results :follow-user :unfollow-user :follow-requests :accept-follow-request :reject-follow-request :conversation-tree :id :last-status :status-tree :root :conversation-root-id :conversations :expand-conversations-tree :make-report :delete-conversation :delete-status :get-activity :application-credentials :bookmarks :bookmark :unbookmark :polls :poll-vote :get-notifications :delete-notification :sort-id< :id= :all-mentions :update-mentions-folder :expand-status-thread :make-placeholder-tag-histogram :init)) (defpackage :hooks (:use :cl :alexandria) (:export :*hook* :add-hook :remove-hook :run-hooks :run-hook :run-hook-compose :run-hook-until-failure :run-hook-until-success :*before-main-loop* :*before-quit* :*before-rendering-message-text* :*before-rendering-message-visible-rows* :*before-composing-message* :*before-sending-message* :*skip-message-hook* :*after-saving-message* :*before-displaying-links-hook* :*after-char-to-command-window* :*before-fire-string-event-command-window* :*after-delete-char-from-command-window*)) (defpackage :keybindings (:use :cl :alexandria :cl-ppcre :esrap :config :constants :text-utils :misc :mtree) (:shadowing-import-from :misc :random-elt :shuffle) (:export :*global-keymap* :*thread-keymap* :*tags-keymap* :*conversations-keymap* :*message-keymap* :*gemini-message-keymap* :*send-message-keymap* :*follow-requests-keymap* :*open-attach-keymap* :*open-message-link-keymap* :*open-gemini-link-keymap* :*gemini-downloads-keymap* :*gemini-certificates-keymap* :*chats-list-keymap* :*chat-message-keymap* :*gemlog-subscription-keymap* :*gemini-toc-keymap* :*gempub-library-keymap* :*filesystem-explorer-keymap* :*gopher-keymap* :define-key :init-keyboard-mapping :find-keymap-node :humanize-key :help-fields-get-function :help-fields-get-text :print-help)) (defpackage :2d-utils (:use :cl) (:export :iaabb2-min-x :iaabb2-max-x :iaabb2-min-y :iaabb2-max-y :make-iaabb2 :iaabb2~ :valid-iaabb2 :expand-iaabb2 :union-iaabb2 :iaabb2->irect2 :irect2->iaabb2 :irect2->iaabb2* :inside-iaabb2-p :iaabb2-intersect-p :iaabb2-inglobe-p :iaabb2-null-p :trasl-iaabb2 :trasl-irect2 :center-iaabb2)) (defpackage :windows (:use :cl :alexandria :cl-ppcre :access :config :constants :stack :text-utils :misc :mtree :specials :tui-utils) (:shadowing-import-from :misc :random-elt :shuffle) (:shadowing-import-from :stack :stack :stack-push :stack-pop :stack-empty-p) (:shadowing-import-from :text-utils :split-lines) (:local-nicknames (:c :croatoan)) (:export :key-config-holder :key-config :tree-holder :tree-color-map :render-arrow-value :render-leaf-value :render-branch-value :render-spacer-value :render-vertical-line-value :refresh-config-color-map :wrapper-window :croatoan-window :modalp :modal :with-croatoan-window :+min-shown-win-height+ :+min-shown-win-width+ :when-window-shown :keybindings :win-clear :win-width :win-height :win-x :win-y :win-box :win-bgcolor :win-fgcolor :win-refresh :win-close :maybe-close-window :win-raise-to-top :win-move-cursor :win-move-cursor-direction :win-move :win-resize :win-show :win-hide :win-shown-p :menu-select :win-width-no-border :win-height-no-border :with-window-width :with-window-height :with-window-sizes :calc-center-on-window-width :calc-bottom-of-window-height :print-text :refresh-config :refresh-config-colors :refresh-config-sizes :calculate :draw :aabb :remove-intersecting-window :draw-all :refresh-config-all :calculate-all :cursor-show :cursor-hide :add-flush-left-text :make-blocking-message-dialog :make-error-message-dialog :make-info-message-dialog :make-checklist-dialog :make-input-dialog :focus-marked-window :in-focus :in-focus-p :draw-focus-mark :border-window :uses-border-p :usable-window-width :window-uses-border-p :title-window :adjust-win-vertical-positioning-if-gemini-fullscreen)) (defpackage :notify-window (:use :cl :alexandria :cl-ppcre :access :config :constants :text-utils :misc :mtree :specials :windows :tui-utils) (:shadowing-import-from :misc :random-elt :shuffle) (:shadowing-import-from :text-utils :split-lines) (:local-nicknames (:c :croatoan)) (:export :notify-window :pending :notify-window-p :draw-pending :make-notification-window)) (defpackage :suggestions-window (:use :cl :alexandria :cl-ppcre :config :constants :text-utils :misc :specials :windows :tui-utils) (:shadowing-import-from :misc :random-elt :shuffle) (:shadowing-import-from :text-utils :split-lines) (:local-nicknames (:c :croatoan)) (:export :suggestions-window :paginated-info :current-page :update-suggestions :draw-pagination-info)) (defpackage :complete-window (:use :cl :alexandria :cl-ppcre :config :constants :text-utils :misc :tui-utils :specials :windows :suggestions-window) (:shadowing-import-from :text-utils :split-lines) (:shadowing-import-from :misc :random-elt :shuffle) (:local-nicknames (:c :croatoan)) (:export :+starting-item-index+ :complete-window :selected-item-row-index :selected-item-column-index :reset-selected-item :init)) (defpackage :keybindings-window (:use :cl :alexandria :cl-ppcre :config :constants :text-utils :misc :mtree :keybindings :specials :windows :suggestions-window :tui-utils) (:shadowing-import-from :text-utils :split-lines) (:shadowing-import-from :misc :random-elt :shuffle) (:local-nicknames (:c :croatoan)) (:export :keybindings-window :keybindings-tree :update-keybindings-tree :init)) (defpackage :point-tracker (:use :cl :alexandria :config :constants :misc :text-utils) (:shadowing-import-from :misc :random-elt :shuffle) (:export :point-tracker :point-position :point-fg :point-bg :prompt :no-prompt-point-pos :move-point-left :move-point-right :move-point :move-point-to-end :move-point-to-start :insert-at-point :delete-at-point)) (defpackage :modeline-window (:use :cl :alexandria :cl-ppcre :esrap :config :constants :misc :text-utils :windows :tui-utils) (:shadowing-import-from :misc :random-elt :shuffle) (:export :modeline-window :mapping-code->fn :modeline-src :modeline-text :modeline-fg :modeline-bg :expand-modeline-spec :refresh-modeline-config :add-modeline-char-expander)) (defpackage :line-oriented-window (:use :cl :alexandria :cl-ppcre :config :constants :text-utils :misc :mtree :keybindings :specials :windows :modeline-window :tui-utils) (:shadowing-import-from :text-utils :split-lines) (:shadowing-import-from :misc :random-elt :shuffle) (:import-from :keybindings-window :update-keybindings-tree) (:local-nicknames (:c :croatoan)) (:export :line :selected-fg :selected-bg :normal-fg :normal-bg :normal-text :selected-text :deleted-text :fields :index :selected :selectedp :row-oriented-widget :single-row-height :top-row-padding :rows :row-selected-index :y-current-row :top-rows-slice :bottom-rows-slice :renderizable-rows-data :unselect-all :select-row :select-first-row :adjust-selected-rows :adjust-rows-noop :adjust-rows-select-first :adjust-rows-select-last :adjust-selected-rows :selected-row :ignore-selecting-action :set-default-index :selected-row-fields :selected-row-delete :search-row :update-all-rows :append-new-rows :map-rows :rows-map-raw :do-rows :do-rows-raw :loop-rows :rows-length :rows-empty-p :rows-remove-if :rows-find-if :rows-safe-subseq :rows-elt :rows-last-elt :rows-first-elt :rows-position-if :rows->text-rows :rows->text :row-move :simple-line-navigation-window :selected-line-bg :selected-line-fg :unselected-line-bg :unselected-line-fg :resync-rows-db :make-blocking-list-dialog-window)) (defpackage :filesystem-tree-window (:use :cl :alexandria :cl-ppcre :config :constants :text-utils :misc :mtree :keybindings :specials :windows :line-oriented-window :tui-utils) (:shadowing-import-from :text-utils :split-lines) (:shadowing-import-from :misc :random-elt :shuffle) (:local-nicknames (:c :croatoan)) (:export :+octect-type+ :make-temporary-file-from-node :make-node-data :filesystem-tree-window :filesystem-root :filesystem-collect-tree :tree-path :tree-dir-p :tree-marked-p :close-treenode :expand-treenode :rename-treenode :delete-treenode :create-treenode :download-path :upload-path :recursive-delete-node :filesystem-query-path :mark-node :open-node :edit-node :close-connection :filter-node-children :resync-rows-db :init)) (defpackage :message-rendering-utils (:use :cl :alexandria :cl-ppcre :croatoan :config :constants :text-utils :misc-utils :db-utils :db) (:nicknames :msg-utils) (:shadowing-import-from :text-utils :split-lines) (:shadowing-import-from :misc :random-elt :shuffle) (:export :+temp-mention-prefix+ :add-mention-prefix :strip-mention-prefix :local-mention->acct :crypto-message-destination-user :maybe-crypt-message :attachment-type->description :attachment-type->metadata :status-attachments->text :message-original->text-body :message-original->text-header :poll->text :signature)) (defpackage :thread-window (:use :cl :cl-ppcre :config :constants :text-utils :misc :mtree :keybindings :specials :windows :modeline-window :line-oriented-window :tui-utils :message-rendering-utils) (:shadowing-import-from :text-utils :split-lines) (:shadowing-import-from :misc :random-elt :shuffle) (:import-from :keybindings-window :update-keybindings-tree) (:local-nicknames (:c :croatoan) (:a :alexandria)) (:export :message-line :thread-window :timeline-type :timeline-folder :mentions-count :grow-tree-to-fit-window :fit-timeline-to-window :go-message-down :go-message-up :search-next-message-body :search-previous-message-body :search-next-message-meta :search-previous-message-meta :search-next-unread :add-mention :remove-mention :goto-message :goto-first-message :goto-last-message :open-message :mark-selected-message-to-delete :mark-selected-message-prevent-delete :init)) (defpackage :message-window (:use :cl :alexandria :cl-ppcre :config :constants :text-utils :misc :mtree :keybindings :specials :windows :modeline-window :line-oriented-window :tui-utils) (:shadowing-import-from :text-utils :split-lines) (:shadowing-import-from :misc :random-elt :shuffle) (:local-nicknames (:c :croatoan)) (:export :message-window :metadata :adjust-rows-strategy :gemini-window-p* :gemini-window-p :display-gemini-text-p :display-chat-p :row-get-original-object :viewport-width :draw-downloading-animation :visible-rows :row-link-p :row-vertical-space-p :row-preformatted-p :row-invisible-p :row-visible-p :row-set-visible :row-set-invisible :row-hide-preformatted :row-show-pre-start :row-show-preformatted :row-hide-pre-start :set-default-preformatted-visibility :get-default-preformatted-visibility :pre-visible-p :toggle-default-preformatted-visibility :toggle-preformatted-block :text->rendered-lines-rows :row-find-original-object :row-position-original-object :extract-original-object :prepare-for-display-status-mode :prepare-for-rendering :scroll-down :scroll-up :scroll-end :scroll-left :scroll-right :scroll-begin :scroll-next-page :scroll-previous-page :search-regex :jump-to-group-id :generate-gemini-toc :gemini-toc-entry :gemini-toc-group-id :lines->uri :init :search-gemini-fragment)) (defpackage :gopher-window (:use :cl :cl-ppcre :config :constants :text-utils :misc :mtree :keybindings :specials :windows :modeline-window :line-oriented-window :tui-utils) (:shadowing-import-from :text-utils :split-lines) (:shadowing-import-from :misc :random-elt :shuffle) (:local-nicknames (:c :croatoan) (:a :alexandria)) (:export :gopher-window :gopher-window-p :current-gopher-url :go-to-next-link :go-to-previous-link :open-menu-link :init)) (defpackage :open-attach-window (:use :cl :alexandria :cl-ppcre :access :config :constants :text-utils :misc :mtree :specials :windows :line-oriented-window :tui-utils) (:shadowing-import-from :text-utils :split-lines) (:shadowing-import-from :misc :random-elt :shuffle) (:local-nicknames (:c :croatoan)) (:export :open-attach-window :status-id :refresh-view-links-window-config :resync-rows-db :open-attachment :init)) (defpackage :open-message-link-window (:use :cl :alexandria :cl-ppcre :access :config :constants :text-utils :misc :mtree :specials :windows :line-oriented-window :tui-utils) (:shadowing-import-from :text-utils :split-lines) (:shadowing-import-from :misc :random-elt :shuffle) (:local-nicknames (:c :croatoan)) (:export :open-message-link :init :init-gemini-links :forget-gemini-link-window :init-tour-links :init-chat-links :forget-chat-link-window)) (defpackage :gemini-certificates-window (:use :cl :alexandria :cl-ppcre :access :config :constants :text-utils :misc :mtree :specials :windows :line-oriented-window :tui-utils) (:shadowing-import-from :text-utils :split-lines) (:shadowing-import-from :misc :random-elt :shuffle) (:local-nicknames (:c :croatoan)) (:export :open-gemini-certificates-window)) (defpackage :gemini-subscription-window (:use :cl :alexandria :cl-ppcre :access :config :constants :text-utils :misc :mtree :specials :windows :line-oriented-window :tui-utils) (:shadowing-import-from :text-utils :split-lines) (:shadowing-import-from :misc :random-elt :shuffle) (:local-nicknames (:c :croatoan)) (:export :open-gemini-subscription-window)) (defpackage :gemini-page-toc (:use :cl :alexandria :cl-ppcre :access :config :constants :text-utils :misc :mtree :specials :windows :line-oriented-window :tui-utils) (:shadowing-import-from :text-utils :split-lines) (:shadowing-import-from :misc :random-elt :shuffle) (:local-nicknames (:c :croatoan)) (:export :highlight-current-section :open-toc-window)) (defpackage :command-window (:use :cl :alexandria :cl-ppcre :config :constants :text-utils :misc :mtree :keybindings :specials :windows :point-tracker :tui-utils) (:shadowing-import-from :text-utils :split-lines) (:shadowing-import-from :misc :random-elt :shuffle) (:import-from :keybindings-window :update-keybindings-tree) (:local-nicknames (:c :croatoan)) (:export :print-error :command-window :command-line :echo-character :event-to-answer :prompt :add-error-message :add-info-message :remove-messages :set-history-most-recent :manage-event :set-keybinding-mode :set-string-mode :init)) (defpackage :sending-message (:use :cl :alexandria :cl-ppcre :config :constants :text-utils :misc :mtree :keybindings :specials :windows :modeline-window :line-oriented-window :tui-utils) (:shadowing-import-from :text-utils :split-lines) (:shadowing-import-from :misc :random-elt :shuffle) (:local-nicknames (:c :croatoan)) (:export :message-ready-to-send :subject :attachments :reply-to :visibility :mentions :body :confirm-sending-window :message-data :init)) (defpackage :follow-requests (:use :cl :alexandria :cl-ppcre :access :config :constants :text-utils :misc :mtree :specials :windows :line-oriented-window :tui-utils) (:shadowing-import-from :text-utils :split-lines) (:shadowing-import-from :misc :random-elt :shuffle) (:local-nicknames (:c :croatoan)) (:export :follow-requests-window :init :process-requests)) (defpackage :tags-window (:use :cl :alexandria :cl-ppcre :access :config :constants :text-utils :misc :mtree :specials :windows :line-oriented-window :tui-utils) (:shadowing-import-from :text-utils :split-lines) (:shadowing-import-from :misc :random-elt :shuffle) (:local-nicknames (:c :croatoan)) (:export :tags-window :resync-rows-db :init)) (defpackage :conversations-window (:use :cl :alexandria :cl-ppcre :access :config :constants :text-utils :misc :mtree :specials :windows :line-oriented-window :tui-utils) (:shadowing-import-from :text-utils :split-lines) (:shadowing-import-from :misc :random-elt :shuffle) (:local-nicknames (:c :croatoan)) (:export :conversations-window :resync-rows-db :init)) (defpackage :chats-list-window (:use :cl :alexandria :cl-ppcre :access :config :constants :text-utils :misc :mtree :specials :windows :line-oriented-window :tui-utils) (:shadowing-import-from :text-utils :split-lines) (:shadowing-import-from :misc :random-elt :shuffle) (:local-nicknames (:c :croatoan)) (:export :chats-list-window :chat->text :open-chats-list-window)) (defpackage :gemini-viewer (:use :cl :alexandria :cl-ppcre :access :config :constants :text-utils :misc :specials :windows :line-oriented-window :tui-utils) (:shadowing-import-from :text-utils :split-lines) (:shadowing-import-from :misc :random-elt :shuffle) (:local-nicknames (:c :croatoan)) (:export :push-db-stream :remove-db-stream :remove-all-db-stream :find-db-stream-if :find-db-stream-url :ensure-just-one-stream-rendering :abort-download-stream :bury-download-stream :db-entry-to-foreground :gemini-metadata-p :maybe-initialize-metadata :make-gemini-metadata :gemini-metadata-links :gemini-metadata-source-file :gemini-metadata-history :gemini-metadata-p :copy-gemini-metadata :append-metadata-link :append-metadata-source :push-url-to-history :pop-url-from-history :current-gemini-url :history-back :view-source :gemini-stream :download-iri :start-time :download-stream :download-socket :support-file :octect-count :port :status-code :status-code-description :meta :path :host :thread :abort-downloading :downloading-allowed-p :request :open-gemini-stream-window :load-gemini-url)) (defpackage :gempub (:use :cl :alexandria :cl-ppcre :esrap :config :constants :text-utils :misc :specials :windows :line-oriented-window) (:shadowing-import-from :text-utils :split-lines) (:shadowing-import-from :misc :random-elt :shuffle) (:export :gempub-file-p :extract-metadata :sync-library :parse-search-gempub :open-gempub-library-window)) (defpackage :main-window (:use :cl :alexandria :cl-ppcre :access :config :constants :text-utils :misc :mtree :specials :windows :tui-utils) (:shadowing-import-from :text-utils :split-lines) (:shadowing-import-from :misc :random-elt :shuffle) (:local-nicknames (:c :croatoan)) (:export :focused-window :focused-keybindings :init :parse-subwin-w :parse-subwin-h)) (defpackage :ui-goodies (:use :cl :alexandria :cl-ppcre :access :config :constants :text-utils :misc :mtree :specials :windows :tui-utils :program-events) (:nicknames :ui) (:shadowing-import-from :text-utils :split-lines) (:shadowing-import-from :misc :random-elt :shuffle) (:local-nicknames (:fstree :filesystem-tree-window) (:c :croatoan)) (:export :tui-active-p :delete-message-status-marked-to-delete :open-manual :quit-program :clean-close-program :confirm-and-clean-close-program :notify :notify-procedure :with-blocking-notify-procedure :info-dialog :info-dialog-immediate :error-dialog :error-dialog-immediate :input-dialog-immediate :error-message :info-message :confirm-file-overwrite-dialog-immediate :confirm-dialog-immediate :request-error-window :ask-string-input :thread-go-up :thread-go-down :thread-goto-message :thread-goto-first-message :thread-goto-last-message :thread-search-next-message-body :thread-search-previous-message-body :thread-search-next-message-meta :thread-search-previous-message-meta :repeat-search :thread-search-next-unread-message :thread-open-selected-message :thread-mark-delete-selected-message :thread-mark-prevent-delete-selected-message :subscribe-to-hash :unsubscribe-to-hash :message-extract-links :message-scroll-up :message-scroll-down :message-scroll-left :message-scroll-right :message-scroll-begin :message-scroll-end :message-scroll-next-page :message-scroll-previous-page :message-window-go-up :message-window-go-down :message-search-regex :message-toggle-preformatted-block :focus-to-message-window :focus-to-thread-window :focus-to-send-message-window :focus-to-follow-requests-window :focus-to-tags-window :focus-to-conversations-window :focus-to-gopher-window :print-quick-help :apropos-help :apropos-help-global :move-message-tree :change-folder :change-timeline :update-current-timeline :update-current-timeline-backwards :refresh-thread :refresh-thread-totally :refresh-tags :status-tree->text :favourite-selected-status :unfavourite-selected-status :boost-selected-status :unboost-selected-status :ignore-user :unignore-user :message-exceeds-server-limit-p :exceeding-characters-notify :send-message :compose-message :reply-message :open-message-attach :open-all-message-attachments :open-message-attach-go-up :open-message-attach-go-down :open-message-attach-perform-opening :gemini-jump-to-link :close-open-attach-window :search-link-window :open-gemini-message-link-window :open-message-link :gemini-images-montage :open-message-link-go-up :open-message-link-go-down :open-message-link-perform-opening :open-message-link-open-enqueue :open-next-visible-link :open-previous-link :go-to-next-link :go-to-previous-link :copy-value-to-clipboard :copy-link-to-clipboard :close-open-message-link-window :open-message-link-window-scroll-begin :open-message-link-window-scroll-end :attach-go-up :attach-go-down :attach-delete :attach-add :follow-request-go-up :follow-request-go-down :follow-request-delete :start-follow-request-processing :cancel-follow-requests :process-follow-requests :change-subject :change-visibility :change-mentions :edit-message-body :close-focused-and-return-to-message :cancel-send-message :close-send-message-window :follow-user :unfollow-user :tag-go-up :tag-go-down :open-tag-folder :update-conversations :open-conversation :conversation-go-up :conversation-go-down :goto-conversation :ignore-conversation :delete-conversation :rename-converation :change-conversation-name :report-status :crypto-import-key :crypto-export-key :crypto-generate-key :show-about-window :show-welcome-window :reset-timeline-pagination :poll-vote :refresh-chats :refresh-chat-messages :close-chats-list-window :update-all-chats-data :update-all-chats-messages :open-chats-list-window :show-chat-to-screen :chat-loop :open-chat-link-window :change-chat-label :chat-create-new :chat-list-go-up :chat-list-go-down :open-url-prompt :open-net-address :open-gemini-address :net-address-history-back :address-go-back-in-path :address-go-root-path :gemini-view-source :gemini-abort-download :gemini-open-streams-window :gemini-open-certificates-window :gemini-certificate-window-move :gemini-certificate-window-go-down :gemini-certificate-window-go-up :gemini-close-certificate-window :gemini-delete-certificate :gemini-streams-window-up :gemini-streams-window-down :gemini-streams-window-close :gemini-streams-window-open-stream :gemini-refresh-page :gemini-subscribe-gemlog :gemini-certificate-information :gemini-open-gemlog-window :gemlogs-subscription-go-up :gemlogs-subscription-go-down :close-gemlog-window :show-gemlog-to-screen :gemlog-refresh-all :gemlog-cancel-subscription :send-to-pipe :send-message-to-pipe :shuffle-tour :clean-tour :clean-all-tour :add-links-to-tour :tour-mode-link :next-tour-link :show-tour-links :save-selected-message-in-tour :gemlog-add-unread-posts-tour :open-gemini-toc :gemini-toc-scroll-up :gemini-toc-scroll-down :gemini-toc-jump-to-entry :gemini-toc-close :gemini-toc-scroll-down-page :gemini-toc-scroll-up-page :pass-focus-on-left :pass-focus-on-right :pass-focus-on-bottom :pass-focus-on-top :pass-focus-next :ask-input-on-tofu-error :import-gemini-certificate :bookmark-gemini-page :bookmark-gopher-page :display-bookmark :delete-gemini-bookmark :display-latest-visited-urls :open-gempub-library :gempub-library-window-move :gempub-library-window-go-up :gempub-library-window-go-down :gempub-library-window-close :gempub-open-file :message-window-lock-scrolling :message-window-unlock-scrolling :eval-command :load-script-file :view-user-avatar :open-file-explorer :open-kami-address :file-explorer-expand-path :file-explorer-close-path :file-explorer-rename-path :file-explorer-download-path :file-explorer-upload-path :file-explorer-upload-path :file-explorer-delete-path :file-explorer-create-path :file-explorer-go-down :file-explorer-go-up :file-explorer-search :file-explorer-mark-entry :file-explorer-mark-by-regexp :file-explorer-delete-tree :file-explorer-delete-marked :file-explorer-scroll-begin :file-explorer-scroll-end :file-explorer-close-window :file-explorer-open-node :file-explorer-node-details :file-explorer-edit-file :file-explorer-upload-mirror :file-explorer-download-mirror :clear-cache :print-mentions)) (defpackage :scheduled-events (:use :cl :alexandria :cl-ppcre :config :constants :misc-utils :text-utils :specials) (:shadowing-import-from :text-utils :split-lines) (:shadowing-import-from :misc :random-elt :shuffle) (:local-nicknames (:c :croatoan)) (:export :refresh-refresh-all-chats-data :refresh-refresh-all-chats-messages :run-scheduled-events)) (defpackage :modules (:use :cl :cl-ppcre :config :constants :text-utils :resources-utils :specials :db-utils :windows :sending-message :keybindings :program-events :ui-goodies) (:local-nicknames (:a :alexandria)) (:shadowing-import-from :resources-utils :init) (:export :load-sys-module :load-module)) (defpackage :scripts (:use :cl :alexandria :cl-ppcre :config :constants :text-utils :misc-utils :api-client) (:shadowing-import-from :misc :random-elt :shuffle) (:export)) (defpackage :main (:use :cl :alexandria :cl-ppcre :config :constants :text-utils :command-line) (:shadowing-import-from :text-utils :split-lines) (:local-nicknames (:c :croatoan)) (:export))