Μόλις ἀνέβασα ἕνα μικρό βίντεο γιὰ τῆν χρήση τοῦ κειμενογράφου Ἤμαξ ὡς τερματικοῦ, μπορεῖτε νὰ τὸ δεῖτε στὸν YouTube σύνδεσμο ἐδῶ.
Ἀκολουθοῦν οι σημειώσεις ποῦ παρουσιάστηκαν στὸ βίντεο, μεταφρασμένες στά Ἑλληνικά
- Ὀ Ἤμαξ προσφέρει τῆν δυνατότητα χρήσης ἐργαλείων κελύφους & ἴσως εἶναι ὀ πιὸ ἐπεκτεινόμενος προσομοιωτής τερματικοῦ διαθέσιμος σήμερα.
- Προσφέρει ἕνα ἐνσωματωμένο περιβάλλον γιὰ ἐπεξεργασία κειμένου καὶ γιά ἐργαλεῖα κελύφους.
Χρησιμοποιώντας ἐντολές κελύφους μέσα ἀπό μπάφερς
shell-command
M-! CMD <RET>
- Ἐκτελεῖ τῆν CMD ἐντολή κελύφους καὶ δείχνει τὸ ἀποτέλεσμα σὲ ἕνα νέο buffer
async-shell-command
M-& CMD <RET>
- Ἐκτελεῖ τῆν CMD ἐντολή κελύφους ἀσύγχρονα, καὶ δείχνει τὸ ἀποτέλεσμα σὲ ἕνα νέο buffer
shell-command-on-region
M-| CMD <RET>
- Ἐκτελεῖ τῆν CMD ἐντολή κελύφους μὲ τῆν ἐπιλεγμένη περιοχή ὠς τήν «παροχή» (input).
Ἤμαξ Ως Προσομοιωτής Τερματικοῦ
Shell
M-x shell
- Ἕνα υπό-κέλυφος ποῦ δέχεται ἐντολές μέσα ἀπό ἕνα μπάφερ, ἀπό τὸν ὅποιο σοῦ παρέχει καὶ τὸ ἀποτέλεσμα. Δέχεται ἐντολές διαδραστικά
My configuration
(use-package shell
:defer t
:config
(defun thanos/shell (n)
"Create or switch to a shell buffer."
(interactive "P")
(let* ((num (if n (prefix-numeric-value n) nil))
(buf-name (if num (format "*shell<%d>*" num) "*shell*")))
(shell buf-name)))
:bind (("C-c v" . thanos/shell)
:map shell-mode-map
("C-l" . 'comint-clear-buffer))
:hook ((shell-mode . (lambda () (display-line-numbers-mode -1)))))
Eshell
M-x eshell
- Κέλυφος γραμμένο σὲ Emacs Lisp
My configuration
(use-package esh-mode
:defer t
:config
;; Prompt
(defun eshell-git-info ()
"Return a string with git info."
(when (eq (call-process "git" nil nil nil "rev-parse" "--is-inside-work-tree") 0)
(let* ((branch-raw (shell-command-to-string "git rev-parse --abbrev-ref HEAD"))
(branch (if (or (string-match-p "^fatal" branch-raw)
(string-match-p "^error" branch-raw))
"Unknown"
(string-trim branch-raw)))
(dirty (not
(string= "" (string-trim (shell-command-to-string "git status --porcelain")))))
(dirty-info (if dirty " ✎" " ✔")))
(concat (propertize "⎇ " 'face 'modus-themes-fg-green-warmer)
(propertize branch 'face 'modus-themes-fg-magenta-warmer)
(propertize dirty-info 'face
(if dirty 'modus-themes-fg-red 'modus-themes-fg-green))))))
(defun eshell-prompt-multiline ()
"Eshell Multiline Git prompt."
(let ((separator (propertize " | " 'face 'font-lock-comment-face))
(hr (propertize (concat "\n" (make-string (/ (window-total-width) 2) ?─) "\n") 'face 'font-lock-comment-face))
(dir (propertize (format "%s" (abbreviate-file-name (eshell/pwd))) 'face 'modus-themes-fg-yellow-warmer))
(git-info (eshell-git-info))
(time (propertize (format-time-string "%H:%M:%S") 'face 'font-lock-comment-face))
(sign (if (= (user-uid) 0)
(propertize "\n#" 'face 'modus-themes-fg-blue-intense)
(propertize "\nλ" 'face 'modus-themes-fg-red-warmer))))
(concat hr dir separator git-info separator time sign " ")))
(setf eshell-prompt-function 'eshell-prompt-multiline
eshell-highlight-prompt nil)
;; Aliases
(defun eshell/o (file)
"Open FILE."
(find-file file))
(defvar thanos/aliases
'((ll . "ls -lah")
(clear . clear-scrollback)))
(defun thanos/set-eshell-aliases (aliases)
"Set ALIASES as eshell aliases."
;; Remove aliases file
(when (and eshell-aliases-file
(file-exists-p eshell-aliases-file))
(delete-file eshell-aliases-file))
(mapc (lambda (alias)
(let ((name (symbol-name (car alias)))
(command (cdr alias)))
(eshell/alias name
(cond
((stringp command) command)
((symbolp command) (symbol-name command))
(t (error "Unsupported alias command type"))))))
aliases))
;; Rebinds
(defun thanos/eshell-clear ()
"Interactive call for clear-scrollback."
(interactive)
(eshell/clear-scrollback))
(defun thanos/eshell-preview-insert ()
(interactive)
(completion-preview-insert)
;; This funciton just deletes the extra space inserted after
;; completion.
(delete-char -1))
:bind (("C-c e" . eshell)
:map eshell-mode-map
("C-l" . 'thanos/eshell-clear)
("<tab>" . 'thanos/eshell-preview-insert)
("C-M-i" . 'completion-at-point))
:hook ((eshell-mode . (lambda ()
(thanos/set-eshell-aliases thanos/aliases)
(display-line-numbers-mode -1)
(eshell-cmpl-mode -1)))))
Eat
- xterm-like προσομοιωτής, γραμμένος σὲ Emacs Lisp
My configuration
(use-package eat
:ensure t
:config
(setf eshell-visual-commands nil
eat-term-name "xterm-256color")
:bind (("C-c V" . eat))
:hook ((eshell-mode . eat-eshell-mode)
(eshell-mode . eat-eshell-visual-command-mode)
(eat-mode . (lambda () (visual-line-mode -1)))))
Term & Ansi-Term
M-x term
|M-x ansi-term
- ansi-term εἶναι το ίδιο με term, ἐκτός ὅτι πάντα
δημιουργεῖ νέο μπάφερ καὶ θεωρεῖ
C-x
ὠς escape-char.
- ansi-term εἶναι το ίδιο με term, ἐκτός ὅτι πάντα
δημιουργεῖ νέο μπάφερ καὶ θεωρεῖ
- Ἐκτελεῖ ἕνα υπο-κέλυφος ποῦ δέχεται ἐντολές μέσα ἀπό ἕναν Ἤμαξ μπάφερ.
Πως τὸ χρησιμοποιοῦμαι
- Ὅταν βρισκόμαστε σὲ
term-mode
,C-c CHAR
εἶναι τὸ ἴδιο μὲC-x CHAR
- πχ
C-c o
εἶναι τὸ ἴδιο μὲC-x o
- πχ
C-c C-j
ἀλλάζει σὲterm-line-mode
ποῦ ἐπιτρέπει μετακίνηση τοῦ κέρσοραC-c C-k
ἐπιστρέφει σὲterm-char-mode