• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

JingTerm: JingTerm : “静”终端 , 静静的做一个好用的Linux终端

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称:

JingTerm

开源软件地址:

https://gitee.com/outersky/JingTerm

开源软件介绍:

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)

  • 基本功能已经完善,满足日常工作基本需要

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
woterm: WoTerm开源代码发布时间:2022-03-25
下一篇:
container_migrate: 在Docker+k8s环境下实现Pod在线迁移发布时间:2022-03-25
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap