代码拉取完成,页面将自动刷新
JingTerm : “静”终端,静静的做一个好用的Linux终端,所有功能都可以用键盘控制,代码仅仅1000行!
为了个人日常使用定制的终端,使用Python+Gtk编写,部分逻辑借鉴于deepin的vala版本的 终端应用 。
现在代码量不到1000行,主要都在term.py(终端核心代码),term_notebook.py(多Tab支持的代码),我已经尽量写了代码注释,欢迎各路大侠指正!
tony@tonybook:/data/work/gitee/JingTerm$ wc -l *.py
69 context_menu.py
72 keymap.py
86 main.py
31 tab.py
231 term_notebook.py
381 term.py
870 总用量
在Deepin 20.1下面测试通过。
sudo apt install git gir1.2-vte-2.91
git clone https://gitee.com/outersky/JingTerm.git
main.py
jingterm.desktop
中的有关路径, 然后用文件管理器中直接鼠标双击静终端
(英文系统请点击 JingTerm
) 即可,为了方便使用,建议驻留在任务栏{ JingTerm }
拖拽即可Alt + F
Ctrl + Alt + Up/Down
或者 Ctrl+鼠标滚轮
Shift + Page_Up/Page_Down
Alt + Up/Down/Left/Right
来改变窗口大小Ctrl+鼠标点击
打开链接Ctrl + T
Ctrl + W
Ctrl + Page_Down
Ctrl + Page_Up
Ctrl + Alt + Page_Up
Ctrl + Alt + Page_Down
F2
或者鼠标右键->Renametony@tonybook:/data/work/gitee/JingTerm
将简化成:~ok:d~w~g~JingTerm
Ctrl + Alt + \
或者 鼠标右键点击Ctrl + Alt + /
模板文件可以定义在: ~/.config/jingterm/templates.py
文件中,如:
def menu():
global template_menu
template_menu = [
('python','enterln:python','title:Python'),
('work',[
('/www','enterln:cd /var/www','title:WWW'),
('/prj1','enterln:cd /data/work/python/prj1','title:Prj1'),
])
# 以!开头的名字表示批量模式,后面[]内所有的命令会分不同的tab打开执行
('!work-all',[
('/www','enterln:cd /var/www','title:WWW'),
('/prj1','enterln:cd /data/work/python/prj1','title:Prj1'),
]),
]
menu()
每项为一个Tuple,第一个元素为右键菜单显示的名称,后面的都是指令,对于一些简单的场景,可以不用写expect
了。
enterln:python
title:Python
sleep:2.5
Tuple的第二个元素如果是数组,那么该定义被认为是子菜单。
如果Tuple的第一个名称以感叹号开头 (!
) 那么后面的数组里面定义的每一行会在单独的Tab中打开并执行,如上述的配置文件最后一条 !work-all
,就会同时新建2个Tab。
快捷键请看文件 term.py
的 mapKeyEvent
函数:
def mapKeyEvent(self):
return {
"Ctrl + Shift + c": lambda: self.copy_clipboard(), # 复制到剪贴板
"Ctrl + Shift + v": lambda: self.paste_clipboard(), # 从剪贴板黏贴
"Ctrl + t": lambda: self.notebook.new_term(), # 开一个新的tab
"Ctrl + w": lambda: self.notebook.close_term(self), # 关闭当前tab,如果是最后一个,则退出应用
"Ctrl + Page_Down": lambda: self.notebook.next_term(), # 切换到下一个Tab
"Ctrl + Page_Up": lambda: self.notebook.previous_term(), # 切换到前一个Tab
"Ctrl + Alt + Page_Down": lambda: self.notebook.move_to_next(), # 将Tab右移一个位置
"Ctrl + Alt + Page_Up": lambda: self.notebook.move_to_previous(), # 将Tab左移一个位置
"Ctrl + Alt + \\": lambda: self.popup_menu(), # 弹出右键菜单(包含有模板子菜单)
"Ctrl + Alt + /": lambda: self.popup_template_menu(), # 仅仅弹出模板菜单
"Ctrl + Alt + Up": lambda: self.notebook.increase_opacity(), # 增加透明度
"Ctrl + Alt + Down": lambda: self.notebook.decrease_opacity(), # 降低透明度
"Alt + f": lambda: self.notebook.window.do_max(None), # 最大化
"Alt + Left": lambda: self.resize_window(-20, 0), # 变窄
"Alt + Right": lambda: self.resize_window(20, 0), # 变宽
"Alt + Up": lambda: self.resize_window(0, -20), # 变矮
"Alt + Down": lambda: self.resize_window(0, 20), # 变高
"F2": lambda: self.notebook.rename_term() # 修改title
}
如果要修改模板菜单配置文件的位置,请看context_menu.py
的load_menu
函数:
def load_menu(self):
# 如果有本地配置文件, 就优先加载
cfg_file = '{}/.config/jingterm/templates.py'.format(os.getenv('HOME'))
...
字体颜色等,可以在app.css
文件中配置, 但是终端的字体现在要在term.py
的__init__
中定义:
#设置字体,貌似GTK的css不起作用,只能在代码里面设置
font_desc = Pango.FontDescription("Noto Sans Mono 12")
self.set_font(font_desc)
expect
指令此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。