Kabuk / terim modunda istemleri ve önceki çıktıları düzenlenemez hale getirmenin bir yolu var mı?


9

Bu kuşkusuz yüzeysel bir sorudur.

Her ne kadar ansi-termilk açtığımda doğru davranmaya başlasa da, birkaç komuttan sonra 'düzenlenebilir' moda dönüşüyor gibi görünüyor, örneğin, C-a(satır başlangıcı) ve ardından C-k(satır öldür), tüm istemi siliyor.

Estetik akıl sağlığım için, istemleri ve önceki çıktıyı düzenlenemez hale getirmenin bir yolu var shellmı? (Anlamlı farklılıklar göz önüne alındığında ansi terimini hariç tutmak için güncellendi.)

Emacs 24.4'te zsh kullanıyorum; İşletim Sistemi, Virtual Box üzerinden LXDE'dir (Ubuntu 14.04).

(İdeal olarak hala imlecimi hareket ettirebilirdim ...)


1
Hiç şans eseri "garip" bir işletim sistemi kullanıyor musunuz? Genellikle kabuk kipinde Ca komut isteminin başlangıcından sonra komut satırının başına atlar ve en başa atlamak için ikinci bir Ca gerekir. Windows ve Solaris'te (eski bir yaşamda) genellikle Ca'nın en başa atladığını, MacOS, Linux vb.
Mark Aufflick

@ Mark A: Orijinal yayını, mevcut kurulumum da dahil olmak üzere birkaç ayrıntı daha içerecek şekilde güncelledim.
iceman

Ansi teriminin açıklanan davranışı, garip bir varsayılan veya satır moduna geçtiğiniz gibi geliyor C-c C-j. Bu varsayılanı bulmayı deneyin veya ile char moduna geçin C-c C-k.
wasamasa

1
Yana shell-mode/ term-modesırasıyla yapmak / yapma kaynaklanıyor comint-mode, buradan aynı anda iki çok farklı sorular soruyorsun. Bunu iki ayrı soruya bölmek ister misiniz?
purple_arrows

Yanıtlar:


16

comint -erifer modları (gibi shell, ielm...) filtre işlevlerini destekler, aşağıdaki snippet çıktıyı ve istemi salt okunur yapar:

(setq comint-prompt-read-only t)

(defun my-comint-preoutput-turn-buffer-read-only (text)
  (propertize text 'read-only t))

(add-hook 'comint-preoutput-filter-functions 'my-comint-preoutput-turn-buffer-read-only)

Gelince ansi-term(türetilmiş almayan COMINT , iki operasyon modları da bulunuyor) char modekabuğun bağlamaları ve mümkün olduğunca onun içinde çalışan yazılıma doğru olarak kalır ve line modesenin kadar düzenlemek için tampon sizi lütfen izin veren. Komut çıktısını düzenlemek için genellikle kalmalı char mode(bağlı C-c C-k) ve zaman zaman line mode(bağlı C-c C-j) konumuna geçmelisiniz .


Bu gerçekten güzeldi, ama çalışmayı durdurdu… :( Çok daha fazla kod alan bir çalışma çözümüm var → github.com/michalrus/dotfiles/commit/…
Michal Rus

Dunno, hala benim için 25.2'de çalışıyor.
wasamasa

Bir anlamda, bu metni silemezsiniz, ancak bu değişmez metinle yeni, serpiştirme ekleyebilirsiniz.
Michal Rus

1
Görüyorum, bunu özel olarak test etmedim.
wasamasa

Hata! Bakan herkes için bir değişiklik daha. Daha önce bazı boşlukları kaçırmıştım. Bu benim için mükemmel çalışıyor. github.com/michalrus/dotfiles/blob/…
Michal Rus

2

Karıştırma zaman termile shell-mode, değişken comint-use-prompt-regexpbazen kurulum desteği almak gibi görünüyor. Bu, tarif ettiğiniz gibi davranışa neden olur: kabuk modunda C-a satırın başına gider C-k, istem de dahil olmak üzere tüm satırı öldürür.

Basit bir düzeltme sıfırlamak için comint-use-prompt-regexpbirlikte C-: (setq comint-use-prompt-regexp nil)imleç hareketi tuşları farkında kullanımı metin özelliklerine kabuk modunu zorlayarak,.

Bunun GNU Emacs kılavuzunda nasıl çalıştığına dair bir açıklama var: https://www.gnu.org/software/emacs/manual/html_node/emacs/Shell-Prompts.html


1

Değişkeni comint-prompt-read-onlyiçin özelleştirmeyi deneyin t.

Bu etkilenecek shell-modeve diğerlerinden etkilenecek comint-mode, ancak etkilenmeyecektir term-mode.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.