<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Posts on Ἀθανάσιος Α.</title>
    <link>https://thanosapollo.org/el/posts/</link>
    <description>Recent content in Posts on Ἀθανάσιος Α.</description>
    <generator>Hugo</generator>
    <language>el</language>
    <lastBuildDate>Wed, 04 Mar 2026 13:04:07 +0200</lastBuildDate>
    <atom:link href="https://thanosapollo.org/el/posts/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Patrologia Graeca: 1500&#43; Ἑλληνικά Πατερικά κείμενα, Ἐλεύθερα</title>
      <link>https://thanosapollo.org/el/posts/patrologia-graeca-bebliotheca/</link>
      <pubDate>Wed, 04 Mar 2026 00:00:00 +0200</pubDate>
      <guid>https://thanosapollo.org/el/posts/patrologia-graeca-bebliotheca/</guid>
      <description>&lt;p&gt;Ἔψαχνα γιὰ πατερικὸ περιεχόμενο γιὰ τὸ ἔργο μου &lt;a href=&#34;https://bebliotheca.thanosapollo.org&#34;&gt;Bebliotheca&lt;/a&gt;, μιὰ
ψηφιακὴ ἀναδημιουργία τῆς βιβλιοθήκης τῆς Κωνσταντινούπολης.  Ἡ καλύτερή
μου ἐπιλογὴ ἦταν νὰ βρῶ τὸ ἔργο τῆς &lt;a href=&#34;https://en.wikipedia.org/wiki/Patrologia_Graeca&#34;&gt;Patrologia Graeca τοῦ Migne&lt;/a&gt;, ἀλλὰ
σχεδὸν καμία &lt;em&gt;ἐλεύθερη&lt;/em&gt; πηγὴ δὲν ἔχει τὸ πρωτότυπο ἑλληνικὸ κείμενο σὲ
κατάλληλη κατάσταση.&lt;/p&gt;
&lt;p&gt;Εὐτυχῶς, ὁ καθηγητὴς &lt;a href=&#34;https://en.wikipedia.org/wiki/Anthony_Kaldellis&#34;&gt;Ἀντώνιος Καλδέλλης&lt;/a&gt; προσέφερε καθοδήγηση
δείχνοντάς μου ἕνα mirror ἑνὸς πλέον νεκροῦ ἔργου ἀπὸ τὸ &lt;strong&gt;Πανεπιστήμιο
Αἰγαίου&lt;/strong&gt;, γιὰ τὸ ὁποῖο βρῆκα archive &lt;a href=&#34;https://web.archive.org/web/20070917124937/http://patrologia.ct.aegean.gr/&#34;&gt;ἐδῶ&lt;/a&gt;.  Αὐτὸ τὸ ἔργο περιέχει 143
ἀπὸ τοὺς 161 τόμους τῆς &lt;a href=&#34;https://en.wikipedia.org/wiki/Patrologia_Graeca&#34;&gt;Patrologia Graeca τοῦ Migne&lt;/a&gt;, σὲ τέλεια κατάσταση.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Ἔψαχνα γιὰ πατερικὸ περιεχόμενο γιὰ τὸ ἔργο μου <a href="https://bebliotheca.thanosapollo.org">Bebliotheca</a>, μιὰ
ψηφιακὴ ἀναδημιουργία τῆς βιβλιοθήκης τῆς Κωνσταντινούπολης.  Ἡ καλύτερή
μου ἐπιλογὴ ἦταν νὰ βρῶ τὸ ἔργο τῆς <a href="https://en.wikipedia.org/wiki/Patrologia_Graeca">Patrologia Graeca τοῦ Migne</a>, ἀλλὰ
σχεδὸν καμία <em>ἐλεύθερη</em> πηγὴ δὲν ἔχει τὸ πρωτότυπο ἑλληνικὸ κείμενο σὲ
κατάλληλη κατάσταση.</p>
<p>Εὐτυχῶς, ὁ καθηγητὴς <a href="https://en.wikipedia.org/wiki/Anthony_Kaldellis">Ἀντώνιος Καλδέλλης</a> προσέφερε καθοδήγηση
δείχνοντάς μου ἕνα mirror ἑνὸς πλέον νεκροῦ ἔργου ἀπὸ τὸ <strong>Πανεπιστήμιο
Αἰγαίου</strong>, γιὰ τὸ ὁποῖο βρῆκα archive <a href="https://web.archive.org/web/20070917124937/http://patrologia.ct.aegean.gr/">ἐδῶ</a>.  Αὐτὸ τὸ ἔργο περιέχει 143
ἀπὸ τοὺς 161 τόμους τῆς <a href="https://en.wikipedia.org/wiki/Patrologia_Graeca">Patrologia Graeca τοῦ Migne</a>, σὲ τέλεια κατάσταση.</p>
<blockquote>
<p>Μπορεῖτε νὰ πάρετε τὰ pdfs ἀπὸ τὸ ἔργο τοῦ Πανεπιστημίου Αἰγαίου <a href="/pg-migne.tar.gz">ἐδῶ</a> ὡς
<code>tar.gz</code> ἀπὸ ἐμένα.</p>
</blockquote>
<p>Ἔχω πλέον προσθέσει αὐτὰ τὰ κείμενα στὴ Bebliotheca, κάτω ἀπὸ τὴν
ἐτικέτα <code>#patristic</code>. Θὰ προσαρμόσω τοὺς τίτλους σὲ μιὰ σωστὴ
μετάφραση στὴν Κοινὴ Ἑλληνικὴ γιὰ νὰ ἀκολουθήσω τὸ θέμα τῆς
<em>&ldquo;Βιβλιοθήκης τῆς Κωνσταντινούπολης&rdquo;</em>.</p>
<h2 id="current-corpus-statistics-of-bebliotheca">Current Corpus Statistics of Bebliotheca</h2>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>CORPUS STATISTICS:
</span></span><span style="display:flex;"><span>  Total unique works:       2690
</span></span><span style="display:flex;"><span>  Greek texts:              2316
</span></span><span style="display:flex;"><span>  English translations:     757
</span></span><span style="display:flex;"><span>  Latin texts:              374
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>TRANSLATION COVERAGE:
</span></span><span style="display:flex;"><span>  Greek with English:       571 (24%)
</span></span><span style="display:flex;"><span>  Greek with Latin:         0 (0%)
</span></span><span style="display:flex;"><span>  All three languages:      0
</span></span><span style="display:flex;"><span>  Greek without translation:1745 (75%)
</span></span><span style="display:flex;"><span>  English-only works:       0
</span></span><span style="display:flex;"><span>  Latin-only works:         188
</span></span></code></pre></div>]]></content:encoded>
    </item>
    <item>
      <title>Ἤμαξ παντοῦ, ἀκόμα καί σέ Wayland</title>
      <link>https://thanosapollo.org/el/posts/use-emacs-everywhere/</link>
      <pubDate>Sat, 19 Jul 2025 00:00:00 +0300</pubDate>
      <guid>https://thanosapollo.org/el/posts/use-emacs-everywhere/</guid>
      <description>Πῶς νά χρησιμοποιήσεις τὸ ἤμαξ γιά εἰσαγωγή κειμένου σέ κάθε ἐφαρμογή κάτω ἀπό Wayland</description>
      <content:encoded><![CDATA[<p>Τελευταία χάρη στό ὅτι προτιμῶ νά γράφω μὲ πολυτονικό παντοῦ καί στήν
εὐκολία ποῦ μοῦ παρέχει τὸ ἤμαξ γιά αὐτὸ, ἀποφάσισα νά βρῶ τρόπο
γιά τὸ ὅτι θα πληκτρολογῶ νά εἶναι μὲ ἤμαξ.</p>
<p>Τὸ παρακάτω κομμάτι κώδικα ἀνοίγει ἕνα παράθυρο ἤμαξ γιά εἰσαγωγή
κειμένου καί τὸ γράφει στο πρόγραμμα/ἐφαρμογή ποῦ ἔχουμε ἀνοιχτό μὲ
<code>wtype</code>.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(defun thanos/wtype-text (text)
</span></span><span style="display:flex;"><span>  <span style="color:#e6db74">&#34;Process TEXT for wtype, handling newlines properly.&#34;</span>
</span></span><span style="display:flex;"><span>  (let* ((has-final-newline (string-match-p <span style="color:#e6db74">&#34;\n$&#34;</span> text))
</span></span><span style="display:flex;"><span>         (lines (split-string text <span style="color:#e6db74">&#34;\n&#34;</span>))
</span></span><span style="display:flex;"><span>         (last-idx (<span style="color:#a6e22e">1-</span> (<span style="color:#a6e22e">length</span> lines))))
</span></span><span style="display:flex;"><span>    (string-join
</span></span><span style="display:flex;"><span>     (cl-loop for line in lines
</span></span><span style="display:flex;"><span>              for i from <span style="color:#ae81ff">0</span>
</span></span><span style="display:flex;"><span>              collect (cond
</span></span><span style="display:flex;"><span>                       <span style="color:#75715e">;; Last line without final newline</span>
</span></span><span style="display:flex;"><span>                       ((and (<span style="color:#a6e22e">=</span> i last-idx) (not has-final-newline))
</span></span><span style="display:flex;"><span>                        (<span style="color:#a6e22e">format</span> <span style="color:#e6db74">&#34;wtype -s 350 \&#34;%s\&#34;&#34;</span>
</span></span><span style="display:flex;"><span>                                (replace-regexp-in-string <span style="color:#e6db74">&#34;\&#34;&#34;</span> <span style="color:#e6db74">&#34;\\\\\&#34;&#34;</span> line)))
</span></span><span style="display:flex;"><span>                       <span style="color:#75715e">;; Any other line</span>
</span></span><span style="display:flex;"><span>                       (<span style="color:#66d9ef">t</span>
</span></span><span style="display:flex;"><span>                        (<span style="color:#a6e22e">format</span> <span style="color:#e6db74">&#34;wtype -s 350 \&#34;%s\&#34; &amp;&amp; wtype -k Return&#34;</span>
</span></span><span style="display:flex;"><span>                                (replace-regexp-in-string <span style="color:#e6db74">&#34;\&#34;&#34;</span> <span style="color:#e6db74">&#34;\\\\\&#34;&#34;</span> line)))))
</span></span><span style="display:flex;"><span>     <span style="color:#e6db74">&#34; &amp;&amp; &#34;</span>)))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>(defun thanos/type ()
</span></span><span style="display:flex;"><span>  <span style="color:#e6db74">&#34;Launch a temporary frame with a clean buffer for typing.&#34;</span>
</span></span><span style="display:flex;"><span>  (interactive)
</span></span><span style="display:flex;"><span>  (let ((frame (make-frame <span style="color:#f92672">&#39;</span>((name <span style="color:#f92672">.</span> <span style="color:#e6db74">&#34;emacs-float&#34;</span>)
</span></span><span style="display:flex;"><span>                             (fullscreen <span style="color:#f92672">.</span> <span style="color:#ae81ff">0</span>)
</span></span><span style="display:flex;"><span>                             (undecorated <span style="color:#f92672">.</span> <span style="color:#66d9ef">t</span>)
</span></span><span style="display:flex;"><span>                             (width <span style="color:#f92672">.</span> <span style="color:#ae81ff">70</span>)
</span></span><span style="display:flex;"><span>                             (height <span style="color:#f92672">.</span> <span style="color:#ae81ff">20</span>))))
</span></span><span style="display:flex;"><span>        (buf (<span style="color:#a6e22e">get-buffer-create</span> <span style="color:#e6db74">&#34;emacs-float&#34;</span>)))
</span></span><span style="display:flex;"><span>    (with-selected-frame frame
</span></span><span style="display:flex;"><span>      (switch-to-buffer buf)
</span></span><span style="display:flex;"><span>      (with-current-buffer buf
</span></span><span style="display:flex;"><span>    (<span style="color:#a6e22e">erase-buffer</span>)
</span></span><span style="display:flex;"><span>    (org-mode)
</span></span><span style="display:flex;"><span>    (setq-local header-line-format
</span></span><span style="display:flex;"><span>                    (<span style="color:#a6e22e">format</span> <span style="color:#e6db74">&#34; %s to insert text or %s to cancel.&#34;</span>
</span></span><span style="display:flex;"><span>                            (<span style="color:#a6e22e">propertize</span> <span style="color:#e6db74">&#34;C-c C-c&#34;</span> <span style="color:#e6db74">&#39;face</span> <span style="color:#e6db74">&#39;help-key-binding</span>)
</span></span><span style="display:flex;"><span>                (<span style="color:#a6e22e">propertize</span> <span style="color:#e6db74">&#34;C-c C-k&#34;</span> <span style="color:#e6db74">&#39;face</span> <span style="color:#e6db74">&#39;help-key-binding</span>)))
</span></span><span style="display:flex;"><span>    (local-set-key (kbd <span style="color:#e6db74">&#34;C-c C-k&#34;</span>)
</span></span><span style="display:flex;"><span>               (lambda () (interactive)
</span></span><span style="display:flex;"><span>             (kill-new (<span style="color:#a6e22e">buffer-string</span>))
</span></span><span style="display:flex;"><span>             (<span style="color:#a6e22e">delete-frame</span>)))
</span></span><span style="display:flex;"><span>    (local-set-key (kbd <span style="color:#e6db74">&#34;C-c C-c&#34;</span>)
</span></span><span style="display:flex;"><span>               (lambda () (interactive)
</span></span><span style="display:flex;"><span>             (call-process-shell-command
</span></span><span style="display:flex;"><span>                          (thanos/wtype-text (<span style="color:#a6e22e">buffer-string</span>))
</span></span><span style="display:flex;"><span>                          <span style="color:#66d9ef">nil</span> <span style="color:#ae81ff">0</span>)
</span></span><span style="display:flex;"><span>             (<span style="color:#a6e22e">delete-frame</span>)))))))
</span></span></code></pre></div><p>Τὸ μόνο ποῦ ἔχεις νά κάνεις τώρα εἶναι νά καθορίσεις ἕνα συνδυασμό
πλήκτρων <em>(keyboard shortcut)</em> γιά τὸ <code>emacsclient --eval '(thanos/type)'</code>.</p>
<p>Στό Hyprland ποῦ τρέχω ἔχω τὸ παρὸν στίς ρυθμίσεις:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>bind = $mainMod, j, exec, emacsclient --eval &#39;(thanos/type)&#39;
</span></span><span style="display:flex;"><span>windowrulev2 = float,class:^(emacs)$,title:^(emacs-float)$ # Launch as a floating window.
</span></span></code></pre></div>]]></content:encoded>
    </item>
    <item>
      <title>Ἤμαξ σημειώσεις &amp; ἡμερολόγιο μὲ org-gnosis [Βίντεο]</title>
      <link>https://thanosapollo.org/el/posts/org-gnosis-overview/</link>
      <pubDate>Mon, 03 Mar 2025 00:00:00 +0200</pubDate>
      <guid>https://thanosapollo.org/el/posts/org-gnosis-overview/</guid>
      <description>Video overview about org-gnosis</description>
      <content:encoded><![CDATA[<p>Μόλις ἀνέβασα ἕνα βίντεο μὲ θέμα: <strong>«Ἤμαξ σημειώσεις &amp; ἡμερολόγιο μὲ
org-gnosis»</strong>, εἶναι διαθέσιμο γιά προβολή στό
<a href="https://youtu.be/5SkLa7jGjl0">YouTube</a>.</p>
<p><em>Σημειώσεις Βίντεο</em></p>
<h2 id="org-γνῶσις-σύνοψις">Org Γνῶσις Σύνοψις</h2>
<ul>
<li>
<p><strong>Org Gnosis</strong> <em>Ὀργάνωση γνώσεων</em></p>
</li>
<li>
<p>Τὸ <code>org-gnosis</code> εἶναι ἕνα ἁπλό καὶ λυτό σύστημα ἀνάλυσης
<a href="https://orgmode.org/">org-mode</a> σημειώσεων. Ὀργανώνει τά δεδομένα
τῶν σημειώσεων σὲ μία sqlite βάση δεδομένων.</p>
<ul>
<li>Προσφέρει ἕνα τρόπο ἐργασίας παρόμοιο μὲ &ldquo;roam&rdquo; πρόγραμματα, ὄπως
Roam Research, Logseq &amp; org-roam</li>
</ul>
</li>
<li>
<p>Στό org-gnosis ὑπάρχουν 2 τύποι σημειώσεων, γνῶσις nodes &amp; ἡμερόλογια nodes</p>
</li>
</ul>
<h2 id="ἐγκατάσταση-ρυθμίσεις">Ἐγκατάσταση &amp; Ρυθμίσεις</h2>
<blockquote>
<p>Ἀναφερθεῖτε στήν <a href="https://thanosapollo.org/el/projects/org-gnosis/">σελίδα</a> τοῦ ἔργου γιά τίς πιό πρόσφατες ὁδηγίες ἐγκατάστασης</p>
</blockquote>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(use-package org-gnosis
</span></span><span style="display:flex;"><span>  :ensure <span style="color:#66d9ef">t</span>
</span></span><span style="display:flex;"><span>  :init
</span></span><span style="display:flex;"><span>  (<span style="color:#a6e22e">define-prefix-command</span> <span style="color:#e6db74">&#39;thanos/notes-map</span>)
</span></span><span style="display:flex;"><span>  (<span style="color:#a6e22e">define-prefix-command</span> <span style="color:#e6db74">&#39;thanos/journal-map</span>)
</span></span><span style="display:flex;"><span>  :config
</span></span><span style="display:flex;"><span>  <span style="color:#75715e">;; I put my databse inside org-gnosis-dir to keep it in sync</span>
</span></span><span style="display:flex;"><span>  <span style="color:#75715e">;; between machines, using git.</span>
</span></span><span style="display:flex;"><span>  (setf org-gnosis-db (emacsql-sqlite-open
</span></span><span style="display:flex;"><span>             (<span style="color:#a6e22e">expand-file-name</span> <span style="color:#e6db74">&#34;data.db&#34;</span> org-gnosis-dir)))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  (setf org-gnosis-dir <span style="color:#e6db74">&#34;~/Notes&#34;</span>
</span></span><span style="display:flex;"><span>  org-gnosis-node-templates
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#39;</span>((<span style="color:#e6db74">&#34;Default&#34;</span> (lambda () <span style="color:#e6db74">&#34;&#34;</span> <span style="color:#e6db74">&#34;#+startup: content\n&#34;</span>)))
</span></span><span style="display:flex;"><span>  org-gnosis-journal-templates
</span></span><span style="display:flex;"><span>  <span style="color:#f92672">&#39;</span>((<span style="color:#e6db74">&#34;2050 Plan&#34;</span> journal/plan-2050)
</span></span><span style="display:flex;"><span>    (<span style="color:#e6db74">&#34;Empty&#34;</span> (lambda () <span style="color:#e6db74">&#34;&#34;</span> <span style="color:#e6db74">&#34;#+startup: content\n&#34;</span>)))
</span></span><span style="display:flex;"><span>  org-gnosis-show-tags <span style="color:#66d9ef">t</span>
</span></span><span style="display:flex;"><span>  org-gnosis-create-as-gpg <span style="color:#66d9ef">t</span>
</span></span><span style="display:flex;"><span>  org-gnosis-completing-read-func <span style="color:#a6e22e">#&#39;</span>org-completing-read)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  (defun journal/plan-2050 ()
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;My journaling template for 2050-01-01.&#34;</span>
</span></span><span style="display:flex;"><span>    (let ((days-remaining (<span style="color:#a6e22e">-</span> (time-to-days (<span style="color:#a6e22e">encode-time</span> <span style="color:#ae81ff">0</span> <span style="color:#ae81ff">0</span> <span style="color:#ae81ff">0</span> <span style="color:#ae81ff">1</span> <span style="color:#ae81ff">1</span> <span style="color:#ae81ff">2050</span>))
</span></span><span style="display:flex;"><span>               (time-to-days (<span style="color:#a6e22e">current-time</span>)))))
</span></span><span style="display:flex;"><span>      (<span style="color:#a6e22e">format</span>
</span></span><span style="display:flex;"><span>       <span style="color:#e6db74">&#34;\nDays until 2050: *%s* \n\n* Records\n\n* Daily notes\n* Goals\n%s&#34;</span>
</span></span><span style="display:flex;"><span>       days-remaining (org-gnosis-todos))))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  :bind ((<span style="color:#e6db74">&#34;C-c n&#34;</span> <span style="color:#f92672">.</span> thanos/notes-map)
</span></span><span style="display:flex;"><span>   (<span style="color:#e6db74">&#34;C-c j&#34;</span> <span style="color:#f92672">.</span> thanos/journal-map)
</span></span><span style="display:flex;"><span>   :map thanos/notes-map
</span></span><span style="display:flex;"><span>         (<span style="color:#e6db74">&#34;f&#34;</span> <span style="color:#f92672">.</span> org-gnosis-find)
</span></span><span style="display:flex;"><span>   (<span style="color:#e6db74">&#34;i&#34;</span> <span style="color:#f92672">.</span> org-gnosis-insert)
</span></span><span style="display:flex;"><span>   (<span style="color:#e6db74">&#34;t&#34;</span> <span style="color:#f92672">.</span> org-gnosis-find-by-tag)
</span></span><span style="display:flex;"><span>   :map thanos/journal-map
</span></span><span style="display:flex;"><span>   (<span style="color:#e6db74">&#34;j&#34;</span> <span style="color:#f92672">.</span> org-gnosis-journal)
</span></span><span style="display:flex;"><span>   (<span style="color:#e6db74">&#34;f&#34;</span> <span style="color:#f92672">.</span> org-gnosis-journal-find)
</span></span><span style="display:flex;"><span>   (<span style="color:#e6db74">&#34;i&#34;</span> <span style="color:#f92672">.</span> org-gnosis-journal-insert)
</span></span><span style="display:flex;"><span>   :map org-gnosis-mode-map
</span></span><span style="display:flex;"><span>   (<span style="color:#e6db74">&#34;C-c C-.&#34;</span> <span style="color:#f92672">.</span> org-gnosis-insert-tags)
</span></span><span style="display:flex;"><span>   (<span style="color:#e6db74">&#34;C-c i&#34;</span> <span style="color:#f92672">.</span> org-id-get-create)
</span></span><span style="display:flex;"><span>   (<span style="color:#e6db74">&#34;C-c C-o&#34;</span> <span style="color:#f92672">.</span> thanos/org-open-at-point)))
</span></span></code></pre></div><h3 id="epa-easypgp-assistant">EPA (EasyPGP Assistant)</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(use-package epa
</span></span><span style="display:flex;"><span>  :defer <span style="color:#66d9ef">t</span>
</span></span><span style="display:flex;"><span>  :config
</span></span><span style="display:flex;"><span>  (setf epa-keys-select-method <span style="color:#e6db74">&#39;minibuffer</span>
</span></span><span style="display:flex;"><span>  epa-file-encrypt-to <span style="color:#f92672">&#39;</span>(<span style="color:#e6db74">&#34;your-pgp-key&#34;</span>)
</span></span><span style="display:flex;"><span>  <span style="color:#75715e">;; Do not prompt for key selection, we are only using the above key.</span>
</span></span><span style="display:flex;"><span>  epa-file-select-keys <span style="color:#e6db74">&#39;silent</span>))
</span></span></code></pre></div>]]></content:encoded>
    </item>
    <item>
      <title>Ἤμαξ Ως Προσομοιωτής Τερματικοῦ [Video]</title>
      <link>https://thanosapollo.org/el/posts/emacs-shells-video/</link>
      <pubDate>Sat, 25 Jan 2025 00:00:00 +0200</pubDate>
      <guid>https://thanosapollo.org/el/posts/emacs-shells-video/</guid>
      <description>Μικρό βίντεο γιὰ χρήση Ἤμαξ ὡς τερματικό</description>
      <content:encoded><![CDATA[<p>Μόλις ἀνέβασα ἕνα μικρό βίντεο γιὰ τῆν χρήση τοῦ κειμενογράφου Ἤμαξ ὡς
τερματικοῦ, μπορεῖτε νὰ τὸ δεῖτε στὸν YouTube σύνδεσμο
<a href="https://youtu.be/Qo7WQjbE2io">ἐδῶ</a>.</p>
<p><em>Ἀκολουθοῦν οι σημειώσεις ποῦ παρουσιάστηκαν στὸ βίντεο, μεταφρασμένες στά Ἑλληνικά</em></p>
<ul>
<li>Ὀ Ἤμαξ προσφέρει τῆν δυνατότητα χρήσης ἐργαλείων κελύφους &amp; ἴσως
εἶναι ὀ πιὸ ἐπεκτεινόμενος προσομοιωτής τερματικοῦ διαθέσιμος σήμερα.</li>
<li>Προσφέρει ἕνα ἐνσωματωμένο περιβάλλον γιὰ ἐπεξεργασία κειμένου
καὶ γιά ἐργαλεῖα κελύφους.</li>
</ul>
<h2 id="χρησιμοποιώντας-ἐντολές-κελύφους-μέσα-ἀπό-μπάφερς">Χρησιμοποιώντας ἐντολές κελύφους μέσα ἀπό μπάφερς</h2>
<h3 id="shell-command">shell-command</h3>
<ul>
<li><code>M-! CMD &lt;RET&gt;</code></li>
<li>Ἐκτελεῖ τῆν CMD ἐντολή κελύφους καὶ δείχνει τὸ ἀποτέλεσμα σὲ ἕνα
νέο buffer</li>
</ul>
<h3 id="async-shell-command">async-shell-command</h3>
<ul>
<li><code>M-&amp; CMD &lt;RET&gt;</code></li>
<li>Ἐκτελεῖ τῆν CMD ἐντολή κελύφους <em>ἀσύγχρονα</em>, καὶ δείχνει τὸ ἀποτέλεσμα σὲ ἕνα
νέο buffer</li>
</ul>
<h3 id="shell-command-on-region">shell-command-on-region</h3>
<ul>
<li><code>M-| CMD &lt;RET&gt;</code></li>
<li>Ἐκτελεῖ τῆν CMD ἐντολή κελύφους μὲ τῆν ἐπιλεγμένη περιοχή ὠς τήν
«παροχή» (input).</li>
</ul>
<h2 id="ἤμαξ-ως-προσομοιωτής-τερματικοῦ">Ἤμαξ Ως Προσομοιωτής Τερματικοῦ</h2>
<h3 id="shell">Shell</h3>
<ul>
<li><code>M-x shell</code></li>
<li>Ἕνα υπό-κέλυφος ποῦ δέχεται ἐντολές μέσα ἀπό ἕνα μπάφερ, ἀπό τὸν
ὅποιο σοῦ παρέχει καὶ τὸ ἀποτέλεσμα. Δέχεται ἐντολές διαδραστικά</li>
</ul>
<h4 id="my-configuration">My configuration</h4>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(use-package shell
</span></span><span style="display:flex;"><span>  :defer <span style="color:#66d9ef">t</span>
</span></span><span style="display:flex;"><span>  :config
</span></span><span style="display:flex;"><span>  (defun thanos/shell (n)
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;Create or switch to a shell buffer.&#34;</span>
</span></span><span style="display:flex;"><span>    (interactive <span style="color:#e6db74">&#34;P&#34;</span>)
</span></span><span style="display:flex;"><span>    (let* ((num (if n (<span style="color:#a6e22e">prefix-numeric-value</span> n) <span style="color:#66d9ef">nil</span>))
</span></span><span style="display:flex;"><span>           (buf-name (if num (<span style="color:#a6e22e">format</span> <span style="color:#e6db74">&#34;*shell&lt;%d&gt;*&#34;</span> num) <span style="color:#e6db74">&#34;*shell*&#34;</span>)))
</span></span><span style="display:flex;"><span>      (shell buf-name)))
</span></span><span style="display:flex;"><span>  :bind ((<span style="color:#e6db74">&#34;C-c v&#34;</span> <span style="color:#f92672">.</span> thanos/shell)
</span></span><span style="display:flex;"><span>         :map shell-mode-map
</span></span><span style="display:flex;"><span>         (<span style="color:#e6db74">&#34;C-l&#34;</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">&#39;comint-clear-buffer</span>))
</span></span><span style="display:flex;"><span>  :hook ((shell-mode <span style="color:#f92672">.</span> (lambda () (display-line-numbers-mode <span style="color:#ae81ff">-1</span>)))))
</span></span></code></pre></div><h3 id="eshell">Eshell</h3>
<ul>
<li><code>M-x eshell</code></li>
<li>Κέλυφος γραμμένο σὲ Emacs Lisp</li>
</ul>
<h4 id="my-configuration-1">My configuration</h4>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(use-package esh-mode
</span></span><span style="display:flex;"><span>  :defer <span style="color:#66d9ef">t</span>
</span></span><span style="display:flex;"><span>  :config
</span></span><span style="display:flex;"><span>  <span style="color:#75715e">;; Prompt</span>
</span></span><span style="display:flex;"><span>  (defun eshell-git-info ()
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;Return a string with git info.&#34;</span>
</span></span><span style="display:flex;"><span>    (when (<span style="color:#a6e22e">eq</span> (<span style="color:#a6e22e">call-process</span> <span style="color:#e6db74">&#34;git&#34;</span> <span style="color:#66d9ef">nil</span> <span style="color:#66d9ef">nil</span> <span style="color:#66d9ef">nil</span> <span style="color:#e6db74">&#34;rev-parse&#34;</span> <span style="color:#e6db74">&#34;--is-inside-work-tree&#34;</span>) <span style="color:#ae81ff">0</span>)
</span></span><span style="display:flex;"><span>      (let* ((branch-raw (shell-command-to-string <span style="color:#e6db74">&#34;git rev-parse --abbrev-ref HEAD&#34;</span>))
</span></span><span style="display:flex;"><span>             (branch (if (or (string-match-p <span style="color:#e6db74">&#34;^fatal&#34;</span> branch-raw)
</span></span><span style="display:flex;"><span>                             (string-match-p <span style="color:#e6db74">&#34;^error&#34;</span> branch-raw))
</span></span><span style="display:flex;"><span>                         <span style="color:#e6db74">&#34;Unknown&#34;</span>
</span></span><span style="display:flex;"><span>                       (string-trim branch-raw)))
</span></span><span style="display:flex;"><span>             (dirty (not
</span></span><span style="display:flex;"><span>                     (string= <span style="color:#e6db74">&#34;&#34;</span> (string-trim (shell-command-to-string <span style="color:#e6db74">&#34;git status --porcelain&#34;</span>)))))
</span></span><span style="display:flex;"><span>             (dirty-info (if dirty <span style="color:#e6db74">&#34; ✎&#34;</span> <span style="color:#e6db74">&#34; ✔&#34;</span>)))
</span></span><span style="display:flex;"><span>        (<span style="color:#a6e22e">concat</span> (<span style="color:#a6e22e">propertize</span> <span style="color:#e6db74">&#34;⎇ &#34;</span> <span style="color:#e6db74">&#39;face</span> <span style="color:#e6db74">&#39;modus-themes-fg-green-warmer</span>)
</span></span><span style="display:flex;"><span>                (<span style="color:#a6e22e">propertize</span> branch <span style="color:#e6db74">&#39;face</span> <span style="color:#e6db74">&#39;modus-themes-fg-magenta-warmer</span>)
</span></span><span style="display:flex;"><span>                (<span style="color:#a6e22e">propertize</span> dirty-info <span style="color:#e6db74">&#39;face</span>
</span></span><span style="display:flex;"><span>                            (if dirty <span style="color:#e6db74">&#39;modus-themes-fg-red</span> <span style="color:#e6db74">&#39;modus-themes-fg-green</span>))))))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  (defun eshell-prompt-multiline ()
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;Eshell Multiline Git prompt.&#34;</span>
</span></span><span style="display:flex;"><span>    (let ((separator (<span style="color:#a6e22e">propertize</span> <span style="color:#e6db74">&#34; | &#34;</span> <span style="color:#e6db74">&#39;face</span> <span style="color:#e6db74">&#39;font-lock-comment-face</span>))
</span></span><span style="display:flex;"><span>          (hr (<span style="color:#a6e22e">propertize</span> (<span style="color:#a6e22e">concat</span> <span style="color:#e6db74">&#34;\n&#34;</span> (<span style="color:#a6e22e">make-string</span> (<span style="color:#a6e22e">/</span> (<span style="color:#a6e22e">window-total-width</span>) <span style="color:#ae81ff">2</span>) <span style="color:#e6db74">?─</span>) <span style="color:#e6db74">&#34;\n&#34;</span>) <span style="color:#e6db74">&#39;face</span> <span style="color:#e6db74">&#39;font-lock-comment-face</span>))
</span></span><span style="display:flex;"><span>          (dir (<span style="color:#a6e22e">propertize</span> (<span style="color:#a6e22e">format</span> <span style="color:#e6db74">&#34;%s&#34;</span> (abbreviate-file-name (eshell/pwd))) <span style="color:#e6db74">&#39;face</span> <span style="color:#e6db74">&#39;modus-themes-fg-yellow-warmer</span>))
</span></span><span style="display:flex;"><span>          (git-info (eshell-git-info))
</span></span><span style="display:flex;"><span>          (time (<span style="color:#a6e22e">propertize</span> (<span style="color:#a6e22e">format-time-string</span> <span style="color:#e6db74">&#34;%H:%M:%S&#34;</span>) <span style="color:#e6db74">&#39;face</span> <span style="color:#e6db74">&#39;font-lock-comment-face</span>))
</span></span><span style="display:flex;"><span>          (sign (if (<span style="color:#a6e22e">=</span> (<span style="color:#a6e22e">user-uid</span>) <span style="color:#ae81ff">0</span>)
</span></span><span style="display:flex;"><span>                    (<span style="color:#a6e22e">propertize</span> <span style="color:#e6db74">&#34;\n#&#34;</span> <span style="color:#e6db74">&#39;face</span> <span style="color:#e6db74">&#39;modus-themes-fg-blue-intense</span>)
</span></span><span style="display:flex;"><span>                  (<span style="color:#a6e22e">propertize</span> <span style="color:#e6db74">&#34;\nλ&#34;</span> <span style="color:#e6db74">&#39;face</span> <span style="color:#e6db74">&#39;modus-themes-fg-red-warmer</span>))))
</span></span><span style="display:flex;"><span>      (<span style="color:#a6e22e">concat</span> hr dir separator git-info separator time sign <span style="color:#e6db74">&#34; &#34;</span>)))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  (setf eshell-prompt-function <span style="color:#e6db74">&#39;eshell-prompt-multiline</span>
</span></span><span style="display:flex;"><span>        eshell-highlight-prompt <span style="color:#66d9ef">nil</span>)
</span></span><span style="display:flex;"><span>  <span style="color:#75715e">;; Aliases</span>
</span></span><span style="display:flex;"><span>  (defun eshell/o (file)
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;Open FILE.&#34;</span>
</span></span><span style="display:flex;"><span>    (find-file file))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  (defvar thanos/aliases
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&#39;</span>((ll <span style="color:#f92672">.</span> <span style="color:#e6db74">&#34;ls -lah&#34;</span>)
</span></span><span style="display:flex;"><span>      (clear <span style="color:#f92672">.</span> clear-scrollback)))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  (defun thanos/set-eshell-aliases (aliases)
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;Set ALIASES as eshell aliases.&#34;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#75715e">;; Remove aliases file</span>
</span></span><span style="display:flex;"><span>    (when (and eshell-aliases-file
</span></span><span style="display:flex;"><span>               (<span style="color:#a6e22e">file-exists-p</span> eshell-aliases-file))
</span></span><span style="display:flex;"><span>      (<span style="color:#a6e22e">delete-file</span> eshell-aliases-file))
</span></span><span style="display:flex;"><span>    (<span style="color:#a6e22e">mapc</span> (lambda (alias)
</span></span><span style="display:flex;"><span>            (let ((name (<span style="color:#a6e22e">symbol-name</span> (<span style="color:#a6e22e">car</span> alias)))
</span></span><span style="display:flex;"><span>                  (command (<span style="color:#a6e22e">cdr</span> alias)))
</span></span><span style="display:flex;"><span>              (eshell/alias name
</span></span><span style="display:flex;"><span>                            (cond
</span></span><span style="display:flex;"><span>                             ((<span style="color:#a6e22e">stringp</span> command) command)
</span></span><span style="display:flex;"><span>                             ((<span style="color:#a6e22e">symbolp</span> command) (<span style="color:#a6e22e">symbol-name</span> command))
</span></span><span style="display:flex;"><span>                             (<span style="color:#66d9ef">t</span> (<span style="color:#a6e22e">error</span> <span style="color:#e6db74">&#34;Unsupported alias command type&#34;</span>))))))
</span></span><span style="display:flex;"><span>          aliases))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  <span style="color:#75715e">;; Rebinds</span>
</span></span><span style="display:flex;"><span>  (defun thanos/eshell-clear ()
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;Interactive call for clear-scrollback.&#34;</span>
</span></span><span style="display:flex;"><span>    (interactive)
</span></span><span style="display:flex;"><span>    (eshell/clear-scrollback))
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  (defun thanos/eshell-preview-insert ()
</span></span><span style="display:flex;"><span>    (interactive)
</span></span><span style="display:flex;"><span>    (completion-preview-insert)
</span></span><span style="display:flex;"><span>    <span style="color:#75715e">;; This funciton just deletes the extra space inserted after</span>
</span></span><span style="display:flex;"><span>    <span style="color:#75715e">;; completion.</span>
</span></span><span style="display:flex;"><span>    (<span style="color:#a6e22e">delete-char</span> <span style="color:#ae81ff">-1</span>))
</span></span><span style="display:flex;"><span>  :bind ((<span style="color:#e6db74">&#34;C-c e&#34;</span> <span style="color:#f92672">.</span> eshell)
</span></span><span style="display:flex;"><span>         :map eshell-mode-map
</span></span><span style="display:flex;"><span>         (<span style="color:#e6db74">&#34;C-l&#34;</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">&#39;thanos/eshell-clear</span>)
</span></span><span style="display:flex;"><span>         (<span style="color:#e6db74">&#34;&lt;tab&gt;&#34;</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">&#39;thanos/eshell-preview-insert</span>)
</span></span><span style="display:flex;"><span>         (<span style="color:#e6db74">&#34;C-M-i&#34;</span> <span style="color:#f92672">.</span> <span style="color:#e6db74">&#39;completion-at-point</span>))
</span></span><span style="display:flex;"><span>  :hook ((eshell-mode <span style="color:#f92672">.</span> (lambda ()
</span></span><span style="display:flex;"><span>                          (thanos/set-eshell-aliases thanos/aliases)
</span></span><span style="display:flex;"><span>                          (display-line-numbers-mode <span style="color:#ae81ff">-1</span>)
</span></span><span style="display:flex;"><span>                          (eshell-cmpl-mode <span style="color:#ae81ff">-1</span>)))))
</span></span></code></pre></div><h3 id="eat">Eat</h3>
<p><em><a href="https://codeberg.org/akib/emacs-eat">Emulate a terminal (Eat)</a></em></p>
<ul>
<li>xterm-like προσομοιωτής, γραμμένος σὲ Emacs Lisp</li>
</ul>
<h4 id="my-configuration-2">My configuration</h4>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-emacs-lisp" data-lang="emacs-lisp"><span style="display:flex;"><span>(use-package eat
</span></span><span style="display:flex;"><span>  :ensure <span style="color:#66d9ef">t</span>
</span></span><span style="display:flex;"><span>  :config
</span></span><span style="display:flex;"><span>  (setf eshell-visual-commands <span style="color:#66d9ef">nil</span>
</span></span><span style="display:flex;"><span>        eat-term-name <span style="color:#e6db74">&#34;xterm-256color&#34;</span>)
</span></span><span style="display:flex;"><span>  :bind ((<span style="color:#e6db74">&#34;C-c V&#34;</span> <span style="color:#f92672">.</span> eat))
</span></span><span style="display:flex;"><span>  :hook ((eshell-mode <span style="color:#f92672">.</span> eat-eshell-mode)
</span></span><span style="display:flex;"><span>         (eshell-mode <span style="color:#f92672">.</span> eat-eshell-visual-command-mode)
</span></span><span style="display:flex;"><span>         (eat-mode <span style="color:#f92672">.</span> (lambda () (visual-line-mode <span style="color:#ae81ff">-1</span>)))))
</span></span></code></pre></div><h3 id="term-ansi-term">Term &amp; Ansi-Term</h3>
<ul>
<li><code>M-x term</code> | <code>M-x ansi-term</code>
<ul>
<li><strong>ansi-term</strong> εἶναι το ίδιο με term, ἐκτός ὅτι πάντα
δημιουργεῖ νέο μπάφερ καὶ θεωρεῖ <code>C-x</code> ὠς escape-char.</li>
</ul>
</li>
<li>Ἐκτελεῖ ἕνα υπο-κέλυφος ποῦ δέχεται ἐντολές μέσα ἀπό ἕναν Ἤμαξ
μπάφερ.</li>
</ul>
<h4 id="πως-τὸ-χρησιμοποιοῦμαι">Πως τὸ χρησιμοποιοῦμαι</h4>
<ul>
<li>Ὅταν βρισκόμαστε σὲ <code>term-mode</code>, <code>C-c CHAR</code> εἶναι τὸ ἴδιο μὲ <code>C-x CHAR</code>
<ul>
<li>πχ <code>C-c o</code> εἶναι τὸ ἴδιο μὲ <code>C-x o</code></li>
</ul>
</li>
<li><code>C-c C-j</code> ἀλλάζει σὲ <code>term-line-mode</code> <em>ποῦ ἐπιτρέπει μετακίνηση τοῦ κέρσορα</em></li>
<li><code>C-c C-k</code> ἐπιστρέφει σὲ <code>term-char-mode</code></li>
</ul>]]></content:encoded>
    </item>
  </channel>
</rss>
