내 목표는 대시보드를 만들어 소프트웨어 개발의 최종 활용도를 높이는 것입니다. 첫째, Tilix나 Terminator를 사용하면 이미 가능한 수직/수평 분할을 원합니다(저는 Tmux를 별로 좋아하지 않습니다). 하지만 마우스로 스크립트를 실행하는 방법이 없습니다. 나는 종종 스크립트를 실행하고 코드를 정리하거나 검사하는 것을 좋아합니다. 내가 하는 일은 터미널에 초점을 맞추고 위쪽 화살표를 누른 다음 Enter를 누르는 것뿐입니다. 이는 버튼을 클릭하는 것만큼 쉽지 않습니다.
사용자 정의 명령이나 스크립트를 실행할 수 있는 버튼을 상단(또는 다른 곳)에 추가할 수 있는 터미널이 있습니까? 예를 들어 "확인"을 클릭하면 특정 터미널에서 실행되고 해당 출력을 표시해야 하는 "scripts/check.sh"가 실행될 수 있습니다.
제가 사용하는 또 다른 버튼은 코드를 변경한 후 업데이트하는 등 실행 중인 프로그램을 다시 시작하는 버튼입니다.
답변1
Terminator
플러그인을 확인해 보세요 Custom Commands Menu
.
터미네이터의 기본 설정에서 활성화한 다음 마우스 오른쪽 버튼 클릭 메뉴에서... 꽤 명확해야 합니다.
메뉴 항목 대신 버튼을 원하는 경우 그에 따라 터미네이터의 사용자 인터페이스를 수정하는 것은 비교적 간단한 Python 및 GTK 프로그래밍 과제일 수 있습니다.
\n
또한, 후행을 추가하지 않도록 , 즉 명령을 즉시 실행하지 않도록 Terminator의 소스 코드를 수정해야 한다고 생각합니다 . 플러그인의 소스 코드(터미네이터의 공식 소스 코드)와 줄바꿈이 추가된 위치를 쉽게 찾을 수 있습니다. (업스트림에서는 해당 UI 토글을 추가하는 패치를 기꺼이 받아들일 것이라고 생각합니다.)
그렇기 때문에 이러한 기능을 갖춘 터미널 에뮬레이터는 소수에 불과하다고 생각합니다.
예를 들어 "확인"을 클릭하면 특정 터미널에서 실행되고 해당 출력을 표시해야 하는 "scripts/check.sh"가 실행될 수 있습니다.
터미널을 시작하면 거의 항상(*) 프로세스, 즉 일반적으로 셸도 실행됩니다.
같은 터미널에서 다른 프로그램을 같은 방식으로 "실행"할 수는 없습니다.옆에당신의 껍질. 두 사람은 투입물과 아마도 다른 자원을 놓고 서로 싸울 것입니다. "실행 중"이란 이미 실행 중인 항목에 대해 묻는 것을 의미합니다.껍데기애플리케이션을 실행하세요.
이를 수행하는 방법은 해당 키를 누른 것처럼 가장하는 것입니다. 즉, 입력을 터미널에 합성한 다음 이를 쉘에 전달하는 것입니다. [사용자 정의 명령 플러그인 소스 코드의 특정 단계는 vte.feed_child()
메서드를 사용하여 수행됩니다. ]
그러나 본질적인 문제가 있습니다. 쉘이 입력을 기다리는 프롬프트에 있는지, 입력 행이 현재 비어 있는지 또는 특수 모드(예: 문자 반복 계산)가 활성화되어 있는지 알 수 있는 방법이 없습니다. 즉, 이러한 입력 문자가 문자 그대로 해석되어 실행하려는 명령을 형성할지 여부를 알 수 있는 방법이 없습니다.
부분 명령을 입력하면 원하는 버튼에 텍스트가 추가됩니다. 모든 키 입력이 메뉴 등을 호출하는 응용 프로그램을 가질 수 있습니다. scripts/check.sh
파일에 대해 다양한 무작위 vim 편집 명령을 수행하는 유사한 문자열을 vim의 명령 모드에 삽입할 수 있습니다 . 등.
어떤 경우에는 미리 정의된 텍스트를 붙여넣는 것이 원하는 대로 정확하게 이루어지기도 합니다. 다른 경우에는 쉽게 많은 피해를 입힐 수 있습니다. 그리고 터미널은 실제로 어떤 일이 일어날지 알 수 없으므로 그러한 오류로부터 사용자를 보호할 수 없습니다.
이것이 바로 사람들이 그러한 UI 기능보다는 쉘 별칭 및 기능, 대화형 쉘 명령 편집 및 관련 기능(예: 기록 검색)을 선호하는 경향이 있는 이유입니다.
(*) VTE(터미네이터에서 사용하는 터미널 에뮬레이션 라이브러리)의 프로그래밍을 자세히 살펴보면 다음을 알 수 있습니다.예어떤 명령도 실행하지 않고(셸도 포함) 해당 터미널을 유휴 상태로 둔 다음 버튼을 추가하여 해당 터미널에서 직접 즐겨찾는 명령을 실행할 수 있습니다. 완료되면 버튼 중 하나를 사용하여 다른 명령을 실행할 수 있습니다. 하지만 다시 말하지만, 다음 명령을 입력할 수 있는 쉘이 없습니다. 이 경우 상황에 대해 걱정할 필요가 없습니다. 그러나 나는 이 가능성을 탐구하는 것이 노력할 가치가 있는지 정말로 확신하지 못합니다.
답변2
내가 아는 한은 아니다.
어떤 형태의 분할 터미널을 사용하는 경우 dialog
측면 중 하나에서 실행할 수 있습니다. 예를 들면 다음과 같습니다.
list=( */ )
folder=$( dialog --title "List directory" --cancel-label "Exit" \
--no-items --menu "Please choose one folder: " \
--output-fd 1 10 40 0 ${list[@]///} )
echo $folder
터미널에 따라 마우스를 사용할 수도 있습니다.
그러나 콘솔 모드(거의 아무도 사용하지 않음)에서 실행하지 않는 한 별도의 창을 만드는 것이 훨씬 쉽습니다. tk
이 작업을 수행하는 방법을 알아보려면 좋아하는 언어(TCL/Tk, Perl/Tk, Python tkinter 또는 Bash/Tk)를 확인하세요 .
대시보드에 터미널 창을 포함하려면 다음을 사용할 수 있습니다.
from tkinter import *
import os
root = Tk()
termf = Frame(root, height=400, width=500)
root.attributes("-fullscreen", True)
termf.pack(fill=BOTH, expand=YES)
wid = termf.winfo_id()
os.system('xterm -into %d -geometry 400x500 -sb -e "ls; sleep 10" &' % wid)
root.mainloop()