Ἤμαξ Ὡς Προσομοιωτὴς Τερματικοῦ
Ἤμαξ Ὡς Προσομοιωτὴς Τερματικοῦ [Βίντεο]#
- Ὁ Ἤμαξ προσφέρει βελτιωμένη ἐμπειρία γιὰ ἀλληλεπίδραση μὲ ἐργαλεῖα
κελύφους & μπορεῖ νὰ εἶναι ὁ πιὸ ἐπεκτάσιμος προσομοιωτὴς τερματικοῦ
ποὺ διατίθεται.
- Παρέχει ἀπρόσκοπτη ἐνσωμάτωση ἀνάμεσα σὲ ἐργαλεῖα κελύφους &
δυνατότητες ἐπεξεργασίας.
Χρήση ἐντολῶν κελύφους μέσα ἀπὸ ἕνα μπάφερ#
shell-command#
M-! CMD <RET>- Ἐκτέλεσε τὴν ἐντολὴ κελύφους CMD καὶ ἐμφάνισε τὴν ἔξοδο.
async-shell-command#
M-& CMD <RET>- Ἐκτέλεσε τὴν ἐντολὴ κελύφους CMD ἀσύγχρονα, καὶ ἐμφάνισε τὴν ἔξοδο
shell-command-on-region#
M-| CMD <RET>- Ἐκτέλεσε τὴν ἐντολὴ κελύφους CMD μὲ τὰ περιεχόμενα τῆς περιοχῆς ὡς
εἴσοδο· προαιρετικὰ ἀντικατέστησε τὴν περιοχὴ μὲ τὴν ἔξοδο
Ἤμαξ ὡς Προσομοιωτὴς Τερματικοῦ#
Shell#
M-x shell- Ὑποκέλυφος μὲ εἴσοδο καὶ ἔξοδο μέσῳ ἑνὸς μπάφερ τοῦ
Ἤμαξ. Μπορεῖς ἔπειτα νὰ δίνεις ἐντολὲς διαδραστικά.
Ἡ διαμόρφωσή μου#
(use-package shell
: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
Ἡ διαμόρφωσή μου#
(use-package eshell
: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#
Προσομοίωση τερματικοῦ (Eat)
- Προσομοιωτὴς τύπου xterm, γραμμένος σὲ Emacs Lisp.
- Παρόλο ποὺ εἶναι αὐτοτελὲς τερματικὸ γιὰ τὸν Ἤμαξ, παρόμοιο μὲ τὸ
term,
τὸ ἔχω χρησιμοποιήσει κυρίως γιὰ νὰ ἐνισχύσω τὸ eshell.
Ἡ διαμόρφωσή μου#
(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 σημειώνεται ὡς χαρακτῆρας διαφυγῆς.
- Τρέχει ὑποκέλυφος μὲ εἴσοδο καὶ ἔξοδο μέσῳ ἑνὸς μπάφερ τοῦ Ἤμαξ.
Πῶς νὰ τὸ χρησιμοποιήσεις#
- Ὅσο βρίσκεσαι σὲ
term-mode τὸ C-c CHAR ἰσοδυναμεῖ μὲ C-x CHAR.- Παράδειγμα τὸ
C-c o εἶναι ἡ καθολικὴ δέσμευση C-x o other-window
C-c C-j ἀλλάζει σὲ term-line-mode ποὺ ἐπιτρέπει πλοήγηση παρόμοια μὲ τοῦ κελύφουςC-c C-k ἐπιστρέφει σὲ term-char-mode