1
0
Fork 0
tinmop/doc/tinmop.org

25 KiB
Raw Blame History

tinmop

Name

tinmop - a client for gemini, gopher, pleroma social network and 9p protocol over TLS

Synopsis

tinmop [OPTION]…

Description

This document assumes basic knowledge of how fediverse works. More information about this topic can be found on the following websites:

Tinmop proposes an extensible terminal interface to connect with Pleroma social network, the gemini and gopher protocol

Finally tinmop can connect to network file system using 9p protocol over TLS (using client certificates as authentication method).

For more information about this feature, please visit: https://kamid.omarpolo.com/.

Options

Without options the program will start a terminal interface and will try to connect to your instance (see /cage/tinmop/src/commit/df8c4a97d6545df768737e87e323d0257051e490/doc/Configuration)

-o, open-net-address ARG
Open net address (currentli only gemini or 9p)
-m, notify-mentions ARG
Notify messages that mentions the user
-R, reset-timeline-pagination
Reset the timeline pagination. By default the new toots are fetched starting from the last one downloaded from the instance, this switch will force the program to fetch the last message posted by users
-G, gemini-client-only
Start as gemini client only
-c, check-follows-requests
Checks for follow request at start
-e, execute-script SCRIPT-FILE
Execute a script file
-f, folder FOLDER-NAME
Start on that folder
-h, help
print program help and exit
-t, timeline TIMELINE-NAME
Start using this timeline
-u, update-timeline
Update the selected timeline
-v, version
Print program version and exit

Usage

Users of Tinmop supposed to interact with the social network using a terminal interface (TUI), The terminal screen layout is sketched below:

   +---------------+---------------------------+
   |               |                           |
   | tags window   |      thread windows       |
   |               |                           |
   |               |  modeline                 |
   +---------------+---------------------------+
   |               |                           |
   | conversations |      main window          |
   |    window     |                           |
   |               |                           |
   |               |                           |
   +---------------+---------------------------+
   |              command window               |
   +-------------------------------------------+

The screen is subdivided in five window:

tag window
shows the tag users subscribed for and available messages for each tag;
threads window
for a given timeline and folder (see /cage/tinmop/src/commit/df8c4a97d6545df768737e87e323d0257051e490/doc/Folders) show the discussions saved in user's local database;
conversations window
show the private conversations the user is having with others;
main window
show the body of the message selected in the tag window or gemini page
command window
the window where the user instruct the software to perform commands

Using the program in gemini exclusive mode (option "-G") the program layout is simplified:

   +------------------------------------------+
   |                                          |
   |               main window                |
   |                                          |
   |                                          |
   |                                          |
   +------------------------------------------+
   |              command window              |
   +------------------------------------------+

The main way to interact with the program is using the keyboard. By default you can move focus to each window (except command window that can not get focus explicitly) using 'M-arrow key' (meta is ALT on many keyboards). There is a contextual help that appears when the user input data that provide hints about commands and a quick help window that can be shown by hitting ? (if this keybinding has not been customized).

Command window keys

The command window has a few hardcoded command keys to interact with it:

  • the left and right arrow keys move the cursor;
  • the key home and end move the cursor to the start and end of

the input respectively;

  • canc and backspace delete the next and previous character

respectively;

  • the new line (often called enter key) send the input to the

program;

  • C-k (that is: "press 'control' and while pressed press 'k')

kills (deletes) the text from the cursor position to the end of the input previously typed;

  • press M-left and M-right (left alt and left or right

arrow together) to browse pages of the suggestion window; the suggestion window is a window that holds a previously inputted data that are compatible with the string the user is typing into the command window;

  • if suggestions are gemini URI press TAB to input the current

selected suggestion;

  • if suggestion window is not rendered, pressing up and down

arrow keys will cycle through input history, if there is not a suggestion window rendered pressing up and down will scroll on suggestions.

Folders

A folder is an object to groups messages for each timeline an arbitrary number of folders can be created, when the last message of a folder is deleted the folder is deleted as well.

Configuration

The configuration of tinmop is based on text files but there are available two different kind with different syntax and scope.

  • a key-value text files used to configure the access credential to

server and visual theme of the program (simple configuration);

  • common lisp source code. Used to write module (AKA plugin) and to

configure keybindings to interact with the software.

The distribution of this software comes with a bunch of pre-backed configuration files but user is expected to write a simple file with their credential to log into the server.

Simple configuration

This is a simple file with each entry in a single line that look like this:

# a line starting with a '#' is a comment

# a file can be included in another with this directive:
# use "shared.conf"

# The server instance name
server = server address

# your username
username = username

Not incidentally the information in the example above are the absolute minimum the user has to provide before starts the program and connect to pleroma (to use tinmop as a gemini browser only an empty file will suffice): the name you chose when you made the account on the server and the address of the server.

As you can see a line starting with a # is considered comment and skipped by the program

The file with this credential are confidential and must be put into user's home directory under the path $HOME/.local/share/tinmop/main.conf. Probably the directory tinmop does not exists on user system, if it does not exists must be created manually.

If the program was installed correctly two other files with simple semantics are located in your system wide configuration directory (usually /etc/tinmop/), please check these files for more information, as they are extensively commented.

Is worth mentioning again that, without an user configuration file, the program can be used as gemini client (see the "-G" command line switch on top of this manual).

Lisp program

These files contains Common lisp (see https://common-lisp.net/) source code. And are used both as a way to configure the program and to write module for tinmop itself.

These files are the only way to configure program's keybindings: sequence of pressing button to fire command commands (do not worry it is not too difficult!).

These files must be a valid Common Lisp program to allow the program to even starts. Again this is actual source code that is loaded end executed by the main program; be careful, do not copy and paste code from untrusted sources as this could results in a severe security damage.

Again in the configuration directory there is a (commented) file named init.lisp that user can use as their starting point to write their files. A custom init file, or other module files, must be located into the directory $HOME/.local/share/tinmop/.

However there is no need to write their own init file if user is happy with the provided one by the package maintainers.

First time start

After the configuration the program can be started but we are not ready to join the fediverse yet because tinmop need to be trusted by the server. Just follows the instruction on screen to register the application with your instance. This procedure should be followed once: when the program starts for the first time (but please note that there must be a file with valid credentials available).

There is no additional steps to follow to connect to gemspace, instead.

Gempub support

Tinmop maintains a gempub library scanning a directory on your file system (library directory); the library directory path can be set using the configuration directive:

 gempub.directory.library = /absolute/path/to/your/gempub/library

the default value is $XDG_DATA_HOME (usually something like $HOME/.local/share/tinmop/).

Using 'M-g g l' the library can be inspected using a simple query language (similar to SQL) that search in the metadata of the gempub files, example of query follows:

 where author like "calvino" and published < "1980"

 where author like "cal%" or published = "1980"

Valid search keys are:

  • title;
  • author;
  • language;
  • description;
  • publish-date;
  • revision-date;
  • published;
  • copyright.

You can use < > = != <= >= like operators for comparison and the two logical operator and and or, the character % act like a wildcard and means: 'any sequence of character'.

Note that the right hand side of the operator must be wrapped in quotes.

After the search is performed a window with the results is shown, selecting an item of this window will open the gempub and will add all its table of contents on the tour mode, so that the book could be browsed.

For more information on tour mode see below or use 'C-h A <enter> tour mode'.

Tour mode

Tinmop maintains a queue of links that can be then visited by the user, this queue is called tour.

There are two ways to add a link to the tour:

  • when a link window is open and focused pressing t will start a

prompt for link indices to be saved in the tour; the prompt expect a simple, comma or space separated, list of indices or index range, index range is a couple of index separated by a dash, example below:

 1 2 5 8-12

The string above will save the link index number 1, 2, 3, 5, 8, 9, 10, 11, 12 to the tour.

The other way to add links to the tour is using the command 'gemlog-add-unread-posts-tour' (default keychord: 'M-g s t a') that will add all the unread posts to the tour.

There are a few more useful command to manipulate the tour:

next-tour-link
('M-t t' or just 't' if a gemini window is focused)

follows the next link in the tour;

show-tour-links
('M-t s' or just 'T' if a gemini window is focused)

shows the contents of the tour in a link window

clean-all-tour
('M-t c')
shuffle-tour
('M-t S') shuffle the contents of the tour

How to get more help

For help with pleroma visit the pleroma website:

https://pleroma.social/

For information about gemini:

$ tinmop -o gemini://gemini.circumlunar.space

The program has an inline help (default binding for help is "?"), a manpage (default binding to view the manpage is "C-h m") and inline help can be searched (default: "C-h A").

Moreover you can have some useful hint at the program web page:

[https://www.autistici.org/interzona/tinmop/]

Default keybindings

Global keymap

!
gemini-search
>
open-net-address
?
print-quick-help
C-a
show-about-window
C-h A
apropos-help-global
C-h a
apropos-help
C-h h
print-quick-help
C-h m
open-manual
M-c
open-chats-list-window
M-down
pass-focus-on-bottom
M-e
eval-command
M-g c i
import-gemini-certificate
M-g c s
gemini-open-certificates-window
M-g g b s
display-bookmark
M-g g l
open-gempub-library
M-g s o
gemini-open-gemlog-window
M-g s r
gemlog-refresh-all
M-g s t a
gemlog-add-unread-posts-tour
M-l
load-script-file
M-left
pass-focus-on-left
M-right
pass-focus-on-right
M-s l
message-window-lock-scrolling
M-s u
message-window-unlock-scrolling
M-t S
shuffle-tour
M-t c
clean-all-tour
M-t s
show-tour-links
M-t t
next-tour-link
M-up
pass-focus-on-top
q
quit

Follow request window

C-J
process-follow-requests
d
follow-request-delete
down
follow-request-go-down
q
cancel-follow-requests
up
follow-request-go-up

Send post window

C-J
send-message
d
attach-delete
down
attach-go-down
e
edit-message-body
m
change-mentions
q
cancel-send-message
s
change-subject
up
attach-go-up
v
change-visibility

Thread window

/ b
thread-search-next-message-body
/ m
thread-search-next-message-meta
C-I
thread-search-next-unread-message
C-J
thread-open-selected-message
C-X m b
boost-selected-status
C-X m f
favourite-selected-status
C-X m r b
unboost-selected-status
C-X m r f
unfavourite-selected-status
C-X m s
subscribe-to-hash
C-X m t
move-message-tree
C-X m u
unsubscribe-to-hash
C-c c
change-conversation-name
C-c o
open-conversation
C-c u
update-conversations
C-f c
change-folder
C-t R
reset-timeline-pagination
C-t U
update-current-timeline-backwards
C-t c
change-timeline
C-t h r
refresh-tags
C-t u
update-current-timeline
C-u c k g
crypto-generate-key
C-u c k i
crypto-import-key
C-u c k s
crypto-export-key
C-u f
follow-user
C-u i
ignore-user
C-u r f
start-follow-request-processing
C-u r r
report-status
C-u u
unfollow-user
C-u v a
view-user-avatar
C-u x
unignore-user
D
delete-post-using-regex
M-u
delete-and-move-previous
N
repeat-search
P
poll-vote
U
thread-mark-prevent-delete-selected-message
X
refresh-thread-totally
\ \ b
thread-search-previous-message-body
\ \ m
thread-search-previous-message-meta
c
compose-message
d
delete-and-move-next
dc
thread-mark-delete-selected-message
down
thread-go-down
end
thread-goto-last-message
g
thread-goto-message
home
thread-goto-first-message
l
open-message-link
left
open-previous
n
thread-search-next-unread-message
r
reply-message
right
open-next
up
thread-go-up
v
open-message-attach
x
refresh-thread
|
send-message-to-pipe

Posts window

/
message-search-regex
C-J
message-scroll-down
N
repeat-search
down
message-scroll-down
end
message-scroll-end
home
message-scroll-begin
left
message-scroll-left
npage
message-scroll-next-page
ppage
message-scroll-previous-page
right
message-scroll-right
up
message-scroll-up
|
send-to-pipe
b
net-address-history-back

Gemini viewer window

/
message-search-regex
C-J
message-scroll-down
C-[
go-to-previous-link
C-]
go-to-next-link
C-b a
bookmark-gemini-page
C-b d
delete-gemini-bookmark
C-b s
display-bookmark
I M
collect and join together all the images linked from a gemini page and then display the resulting images
N
repeat-search
O
open-gemini-toc
T
show-tour-links
U
gemini-view-source
]
open-next-visible-link
b
net-address-history-back
c
gemini-open-certificates-window
d
gemini-open-streams-window
down
message-scroll-down
end
message-scroll-end
home
message-scroll-begin
l
open-message-link
left
message-scroll-left
npage
message-scroll-next-page
p
message-toggle-preformatted-block
ppage
message-scroll-previous-page
r
gemini-refresh-page
right
message-scroll-right
s
gemini-subscribe-gemlog
t
next-tour-link
up
message-scroll-up
|
send-to-pipe

Gemini page table of contents window

C-J
gemini-toc-scroll-down-page
down
gemini-toc-scroll-down
n
gemini-toc-scroll-down-page
p
gemini-toc-scroll-up-page
q
gemini-toc-close
up
gemini-toc-scroll-up

Gemini stream window

C-J
gemini-streams-window-open-stream
a
gemini-abort-download
down
gemini-streams-window-down
q
gemini-streams-window-close
up
gemini-streams-window-up

gemini certificates window

d
delete selected certificate
C-J
print information for the selected certificate
down
gemini-certificate-window-go-down
q
gemini-close-certificate-window
up
gemini-certificate-window-go-up

Gemini subscription window

C-J
show-gemlog-to-screen
d
gemlog-cancel-subscription
down
gemlogs-subscription-go-down
l
open-message-link
q
close-gemlog-window
up
gemlogs-subscription-go-up

Gempub library window

C-J
gempub-open-file
down
gempub-library-window-go-down
q
gempub-library-window-close
up
gempub-library-window-go-up

Post's tag window

C-J
open-tag-folder
U
unsubscribe-to-hash
down
tag-go-down
r
refresh-tags
up
tag-go-up

Conversations window

C-J
goto-conversation
C-c c
change-conversation-name
I
ignore-conversation
dc
delete-conversation
down
conversation-go-down
up
conversation-go-up

Attachments window

C-J
open-message-attach-perform-opening
a
open-all-message-attachments
down
open-message-attach-go-down
q
close-open-attach-window
up
open-message-attach-go-up

Links window

/
search-link-window
C-J
open-message-link-perform-opening
N
repeat-search
T
save-selected-message-in-tour
down
open-message-link-go-down
e
open-message-link-open-enqueue
q
close-open-message-link-window
t
tour-mode-link
up
open-message-link-go-up

Chats list window

C-J
show-chat-to-screen
R
refresh-chats
c
chat-create-new
down
chat-list-go-down
l
change-chat-label
q
close-chats-list-window
r
refresh-chat-messages
up
chat-list-go-up

Chat window

/
message-search-regex
M-c
write-to-chat
a
open-chat-link-window
down
message-scroll-down
end
message-scroll-end
home
message-scroll-begin
npage
message-scroll-next-page
ppage
message-scroll-previous-page
up
message-scroll-up

File explorer

/
file-explorer-search
C-J
file-explorer-open-node
D
file-explorer-delete-tree
M d
file-explorer-download-mirror
M u
file-explorer-upload-mirror
M-m
file-explorer-mark-by-regexp
N
repeat-search
X
file-explorer-delete-marked
a
file-explorer-create-path
c
file-explorer-close-path
d
file-explorer-download-path
down
file-explorer-go-down
e
file-explorer-edit-file
end
file-explorer-scroll-end
home
file-explorer-scroll-begin
i
file-explorer-node-details
m
file-explorer-mark-entry
q
file-explorer-close-window
r
file-explorer-rename-path
u
file-explorer-upload-path
up
file-explorer-go-up
x
file-explorer-expand-path

Gopher window

up
gopher-window:go-to-previous-link
down
gopher-window:go-to-next-link
k
gopher-window:go-to-previous-link
j
gopher-window:go-to-next-link
C-J
gopher-window:open-menu-link
b
net-address-history-back
C-b a
bookmark-gopher-page
C-b s
display-bookmark
C-b d
delete-gemini-bookmark

BUGS

There are many, totally unknown, hiding in the code; this is scary! 😱 Please help the programmer to nail them using the issue tracker.

Contributing

There is always need for help, you can join the developer, sending patches or translating the UI to your favourite language.

Just point your browser to the code repository.

See also the file CONTRIBUTE.org

Debug mode

If you uncomment the line:

;;(push :debug-mode *features*)

The program will be compiled in debug-mode this means that a lot of diagnostic output will be appended to a file named tinmop.log in the directory $HOME/.local/share/tinmop/.

Files

  • $HOME/.local/share/tinmop/db.sqlite3: the program database
  • $HOME/.local/share/tinmop/client: the program credentials to connect with the instance keep private!
  • $HOME/.local/share/tinmop/tinmop.log: this file is created only for debugging and should not be enabled in binary package distribution (see /cage/tinmop/src/commit/df8c4a97d6545df768737e87e323d0257051e490/doc/Contributing).
  • /etc/tinmop/default-theme.conf: default visual style
  • /etc/tinmop/shared.conf: some default configuration not related to themes
  • /etc/tinmop/init.lisp: system wide configuration
  • $HOME/.config/tinmop/init.lisp: user configuration
  • $HOME/.config/tinmop/main.conf: user configuration (simple format)

Privacy

The author of this software collects no user data information with this software.

But this software is a client to connect and interact to one or more remote computer. So potentially it could share a lot of information with other actors but just after the user allowed it to do so.

It is the user responsibility to checks the privacy conditions of the instance this software connect to.

By default, pressing "!" will contact the remote service located at: "gemini://houston.coder.town/search".

Moreover launching quick_quicklisp.sh will contact https://www.quicklisp.org/, check the quicklisp sources for details.

Acknowledgment

My deep thanks to the folks that provided us with wonderful SBCL and Common lisp libraries.

In particular i want to thanks the authors of the libraries Croatoan and Tooter for their help when I started to develop this program.

There are more people i borrowed code and data from, they are mentioned in the file LINCENSES.org

This program was born also with the help of CCCP: "Collettivo Computer Club Palermo".

Also thanks to "barbar" for testing of the installation scripts.