11 Star 43 Fork 13

outersky / JingTerm

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

JingTerm

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

为了个人日常使用定制的终端,使用Python+Gtk编写,部分逻辑借鉴于deepin的vala版本的 终端应用

screenshot1

欢迎一起研究、完善“JingTerm”

现在代码量不到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下面测试通过。

  1. 首先需要安装依赖:
sudo apt install git gir1.2-vte-2.91
  1. 克隆代码:
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
  • 右键窗口顶部可以显示所有标签页的菜单,在Tab超多的情况下比较有用。菜单项都带了终端顺序编号,如果移动了Tab的顺序,菜单里面显示的终端序号是不变的,但是在菜单里面的位置会调整。 顶部菜单

终端内的右键菜单

  • 主菜单: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.pymapKeyEvent 函数:

    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
        }
  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)

  • 基本功能已经完善,满足日常工作基本需要
MIT License Copyright (c) 2021 outersky Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

JingTerm : “静”终端 , 静静的做一个好用的Linux终端 展开 收起
Python 等 2 种语言
MIT
取消

发行版 (3)

全部

贡献者

全部

近期动态

加载更多
不能加载更多了
Python
1
https://gitee.com/outersky/JingTerm.git
git@gitee.com:outersky/JingTerm.git
outersky
JingTerm
JingTerm
master

搜索帮助