[Share Experiences] JingTerm : “静”终端,静静的做一个好用的Linux终端,V1.0发布
Tofloor
poster avatar
outersky
deepin
2021-01-04 01:39
Author

https://gitee.com/outersky/JingTerm

JingTerm : “静”终端,静静的做一个好用的Linux终端,所有功能都可以用键盘控制!

为了个人日常使用定制的终端,使用Python+Gtk编写,部分代码借鉴于deepin的vala版本的 终端应用 (deepin官方已放弃),还用了里面部分的svg图片。

 

screenshot1

运行

克隆代码:

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+鼠标点击 打开链接

Tab

  • 新建Tab: Ctrl + T
  • 关闭Tab: Ctrl + W
  • 切换到下一个Tab:Ctrl + Page_Down
  • 切换到上一个Tab:Ctrl + Page_Up
  • 将本Tab前移一个位置:Ctrl + Alt + Page_Up
  • 将本Tab后移一个位置:Ctrl + Alt + Page_Down
  • 重命名Tab: F2 或者鼠标右键->Rename
  • Tab标题自动缩短: 当标题太长时,会自动进行缩短简化,比如:tony@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: 输入一段文本,并带回车, 如:enterln:python
  • title: 修改Tab的标题,如:title:Python
  • sleep: 暂停n秒,通常用于ssh远程连接较慢的情况,如:sleep:2.5

模板菜单的子菜单:

Tuple的第二个元素如果是数组,那么该定义被认为是子菜单。

模板菜单的批量模式:

如果Tuple的第一个名称以感叹号开头 (!) 那么后面的数组里面定义的每一行会在单独的Tab中打开并执行,如上述的配置文件最后一条 !work-all,就会同时新建2个Tab。

开发说明:

  1. 快捷键请看文件 term.py 的 on_key_press_event 函数:

    def on_key_press_event(self, widget, key_event):
            keyevent_name = get_keyevent_name(key_event)
            # print(keyevent_name)
            if keyevent_name == "Ctrl + Shift + c":
                self.copy_clipboard() #复制到剪贴板
                return True
            elif keyevent_name == "Ctrl + Shift + v":
                self.paste_clipboard() #从剪贴板黏贴
                return True
            elif keyevent_name == "Ctrl + t":
                self.notebook.new_term() #开一个新的tab
                return True
            elif keyevent_name == "Ctrl + w":
                self.notebook.close_term(self) #关闭当前tab,如果是最后一个,则退出应用
                return True
            ...
  2. 如果要修改模板菜单配置文件的位置,请看context_menu.pyload_menu函数:

        def load_menu(self):
            # 如果有本地配置文件, 就优先加载
            cfg_file = '{}/.config/jingterm/templates.py'.format(os.getenv('HOME'))
            ...
  3. 字体颜色等,可以在app.css文件中配置, 但是终端的字体现在要在term.py__init__中定义:

        #设置字体,貌似GTK的css不起作用,只能在代码里面设置
        font_desc = Pango.FontDescription("Noto Sans Mono 12")
        self.set_font(font_desc)

TODO

  • 怎么能够实现双击标签栏的空白处新建Tab,拖拽空白可以移动窗口?
  • 模板指令现在只有简单的sleep功能,需要增加内容的检测,类似于expect指令
  • 增加多种主题的支持,包括窗口的主题和终端里面的颜色主题

发布历史

V1.0(2021-01-03)

  • 基本功能已经完善,满足日常工作基本需要
Reply Favorite View the author
All Replies
liwl
deepin
2021-01-04 02:37
#1

good job!

是否支持快捷键调整透明度?意思就是设置透明度之后,通过快捷键切换透明非透明?

鼠标双击复制时,是否支持分隔符自定义,比如以逗号或者空格分割

Reply View the author
outersky
deepin
2021-01-04 02:59
#2
liwl

good job!

是否支持快捷键调整透明度?意思就是设置透明度之后,通过快捷键切换透明非透明?

鼠标双击复制时,是否支持分隔符自定义,比如以逗号或者空格分割

调整透明度 : 

Ctrl + Alt + Up/Down

 

双击时候选择的分隔符我现在还不知道咋自定义  

Reply View the author
liwl
deepin
2021-01-05 21:57
#3

老铁,花了2天,终于运行起来了。

很多依赖没有装,而且main.py的app_dir在我这里为空,我只能直接定义路径启动的。

英文看着累啊

我也不敢提啥意见,希望老铁继续完善!做一个功能强大的静静的终端!

Reply View the author
outersky
deepin
2021-01-06 01:26
#4
liwl

老铁,花了2天,终于运行起来了。

很多依赖没有装,而且main.py的app_dir在我这里为空,我只能直接定义路径启动的。

英文看着累啊

我也不敢提啥意见,希望老铁继续完善!做一个功能强大的静静的终端!

你都遇到了哪些问题啊?咋解决的?

如果你有时间列一下的话,我回头都写到安装说明里面去。

多谢!

Reply View the author
outersky
deepin
2021-01-06 01:27
#5
liwl

老铁,花了2天,终于运行起来了。

很多依赖没有装,而且main.py的app_dir在我这里为空,我只能直接定义路径启动的。

英文看着累啊

我也不敢提啥意见,希望老铁继续完善!做一个功能强大的静静的终端!

记的更新一下代码,我修复了一些问题

Reply View the author
outersky
deepin
2021-01-06 02:23
#6
liwl

老铁,花了2天,终于运行起来了。

很多依赖没有装,而且main.py的app_dir在我这里为空,我只能直接定义路径启动的。

英文看着累啊

我也不敢提啥意见,希望老铁继续完善!做一个功能强大的静静的终端!

我用虚拟机安装了一个全新的deepin,然后发现系统自带python3.7, 只要再装2个依赖就可以了

sudo apt install  git  gir1.2-vte-2.91
Reply View the author
SamLukeYes
deepin
2021-01-06 02:36
#7

有下拉终端的模式吗

Reply View the author
liwl
deepin
2021-01-06 03:12
#8
outersky

我用虚拟机安装了一个全新的deepin,然后发现系统自带python3.7, 只要再装2个依赖就可以了

sudo apt install  git  gir1.2-vte-2.91

全新安装没问题的话,就行。我在物理机和虚拟机试了,可能虚拟机前期我卸载了很多东西,依赖不全,物理机还可以

Reply View the author
outersky
deepin
2021-01-06 03:53
#9
SamLukeYes

有下拉终端的模式吗

目前还没有

Reply View the author