终端模拟器编译c语言,编写你自己的Terminal emulator

安装开发依赖环境

在apt包管理器系中,使用以下命令安装

apt install libvte-2.91-dev

介绍

VTE是一个使用GTK构建的一个终端模拟器库, 能够处理DPI的更改。很多终端模拟器软件都基于VTE库,包括GNOME Terminal, XFCE Terminal, Deepin Terminal,Guake等等。这个库非常简洁,你可以很快就写出来一个自己终端模拟器。

下面就来写一个例子。

一个简单的终端

我们先写一个默认的终端,会使用C语言编写。另一个可选的是使用Vala。

#include

int

main(int argc, char *argv[])

{

GtkWidget *window, *terminal;

/* 初始化GTK,窗口和terminal */

gtk_init(&argc, &argv);

terminal = vte_terminal_new();

window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

gtk_window_set_title(GTK_WINDOW(window), "myterm");

/* Start a new shell */

gchar **envp = g_get_environ();

gchar **command = (gchar *[]){g_strdup(g_environ_getenv(envp, "SHELL")), NULL };

g_strfreev(envp);

vte_terminal_spawn_async(VTE_TERMINAL(terminal),

VTE_PTY_DEFAULT,

NULL, /* working directory */

command, /* command */

NULL, /* environment */

0, /* spawn flags */

NULL, NULL, /* child setup */

NULL, /* child pid */

-1, /* timeout */

NULL, NULL, NULL);

/* 连接一些信号 */

g_signal_connect(window, "delete-event", gtk_main_quit, NULL);

g_signal_connect(terminal, "child-exited", gtk_main_quit, NULL);

/* 将组件添加到窗口, 然后进入事件循环 */

gtk_container_add(GTK_CONTAINER(window), terminal);

gtk_widget_show_all(window);

gtk_main();

}

使用以下命令进行编译:

gcc -O2 -Wall $(pkg-config --cflags vte-2.91) term.c -o term $(pkg-config --libs vte-2.91)

然后运行./term

9f2b987dfba3

基于VTE的Terminal

更多定制

你可以在VTE文档更改终端默认特性,下面有三个例子。

颜色配置

使用以下代码定义自己的颜色

#define CLR_R(x) (((x) & 0xff0000) >> 16)

#define CLR_G(x) (((x) & 0x00ff00) >> 8)

#define CLR_B(x) (((x) & 0x0000ff) >> 0)

#define CLR_16(x) ((double)(x) / 0xff)

#define CLR_GDK(x) (const GdkRGBA){ .red = CLR_16(CLR_R(x)), \

.green = CLR_16(CLR_G(x)), \

.blue = CLR_16(CLR_B(x)), \

.alpha = 0 }

vte_terminal_set_colors(VTE_TERMINAL(terminal),

&CLR_GDK(0xffffff),

&(GdkRGBA){ .alpha = 0.85 },

(const GdkRGBA[]){

CLR_GDK(0x111111),

CLR_GDK(0xd36265),

CLR_GDK(0xaece91),

CLR_GDK(0xe7e18c),

CLR_GDK(0x5297cf),

CLR_GDK(0x963c59),

CLR_GDK(0x5E7175),

CLR_GDK(0xbebebe),

CLR_GDK(0x666666),

CLR_GDK(0xef8171),

CLR_GDK(0xcfefb3),

CLR_GDK(0xfff796),

CLR_GDK(0x74b8ef),

CLR_GDK(0xb85e7b),

CLR_GDK(0xA3BABF),

CLR_GDK(0xffffff)

}, 16);

效果如下

9f2b987dfba3

截图_2020-01-16_16-43-29.png

杂项设置

VTE可以设置很多选项来来改变默认的配置

vte_terminal_set_scrollback_lines(VTE_TERMINAL(terminal), 0);

vte_terminal_set_scroll_on_output(VTE_TERMINAL(terminal), FALSE);

vte_terminal_set_scroll_on_keystroke(VTE_TERMINAL(terminal), TRUE);

vte_terminal_set_mouse_autohide(VTE_TERMINAL(terminal), TRUE);

分别可以设置

关闭滚动缓冲

输出的时候不会自滚动

按键时自动滚到末尾

鼠标自动隐藏

改变标题

static gboolean

on_title_changed(GtkWidget *terminal, gpointer user_data)

{

GtkWindow *window = user_data;

gtk_window_set_title(window,

vte_terminal_get_window_title(VTE_TERMINAL(terminal))?:"Terminal");

return TRUE;

}

然后,在main方法里连接信号,让程序一旦运行就调用改变标题

g_signal_connect(terminal, "window-title-changed",

G_CALLBACK(on_title_changed), GTK_WINDOW(window));

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/421388.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

转:C#串口编程

本文用来简单介绍一下C#串口编程的知识,主要以实例为内容。 凡是串口设备和计算机交互的时候都用到串口,在C#中我们如何来操作串口呢? 大话串口工作原理 实际串口是用来和外部设备进行交换数据的,我抽象出下面一个图形&#xff0c…

android c聊天功能,Android实现简单C/S聊天室应用

Android的网络应用:简单的C/S聊天室,供大家参考,具体内容如下服务器端:提供两个类创建ServerSocket监听的主类:MyServer.java负责处理每个Socket通信的线程类:ServerThread.java客户端:是一个Android应用程序>Multi…

android tabpageindicator 参数,Android实现Tab布局的4种方式(Fragment+TabPageIndicator+ViewPager)...

Android现在实现Tab类型的界面方式越来越多,今天就把常见的实现方式给大家来个总结。目前写了:1、传统的ViewPager实现2、FragmentManagerFragment实现3、ViewPagerFragmentPagerAdapter实现4、TabPageIndicatorViewPagerFragmentPagerAdapter1、传统的V…

基于visual Studio2013解决C语言竞赛题之0304整除数

&#xfeff;&#xfeff;&#xfeff;&#xfeff;题目解决代码及点评按照题目要求&#xff0c;判断数值对3和5取模的结果&#xff0c;是否为0#include <stdio.h> #include <stdlib.h> void main() {int a;printf("please input a\n");scanf_s("%d…

利用CSS、JavaScript及Ajax实现图片预加载的三大方法及优缺点分析

预加载图片是提高用户体验的一个很好方法。图片预先加载到浏览器中&#xff0c;访问者便可顺利地在你的网站上冲浪&#xff0c;并享受到极快的加载速度。这对图片画廊及图片占据很大比例的网站来说十分有利&#xff0c;它保证了图片快速、无缝地发布&#xff0c;也可帮助用户在…

html鼠标悬停位置,html – 当我将鼠标悬停在其上时,我想隐藏图像并在其位置显示文本...

不确定我是否理解你想要的东西,但这对你有用吗&#xff1f;初始案例#wrapper {position: relative;}.text {opacity: 0;position: absolute;bottom: 0;}.hover:hover {opacity: 0;}.hover:hover .text {opacity: 1;}text​扩展案例#wrapper {display: inline-block;position: …

Java多线程、线程池及线程同步(synchronized关键字、悲观锁、乐观锁)

1.进程与线程定义 进程包含线程&#xff0c;如一个百度网盘进程&#xff0c;该进程的线程可以有上传&#xff0c;下载。 2.创建线程的三种方式 方式1-继承Thread类 方式2-实现Runnabled接口 1.常规写法 2.匿名内部类写法 方式3-实现Callable接口 示例代码&#xff1a; f1.get…

html聚光灯特效,css实现聚光灯效果的代码分享

简介CSS Variables&#xff0c;一个并不是那么新的东西&#xff0c;但对css来说绝对是一场革命。之前使用变量的时候&#xff0c;需要借助sass、less等预处理工具来实现&#xff0c;现在我们可以直接使用css来声明变量。兼容性老规矩&#xff0c;先来看下兼容性兼容性一片绿&am…

dw替换多个html标签,DW查找替换的技巧

在开发建设网站的过程中&#xff0c;也许我们会遇到这样的情况&#xff0c;当我们的网站已经进行了相当部分&#xff0c;但是发现还需要对某些细节进行修改。这时候不可能完全的依靠手工去更改了&#xff0c;怎么办呢&#xff1f;利用Dreamwaver中查找替换也许能够帮助实现这些…

面试计算机应用技术自我介绍,计算机应用专业面试的自我介绍

计算机应用专业面试的自我介绍我叫**是**财经职业学院的一名信息管理系计算机及应用专业的应届毕业生。三年的专业课和相关的辅修课学习&#xff0c;让我在计算机领域内有了比较扎实的理论基础。通过在学校机房和个人电脑的不断练习&#xff0c;并能比较系统地把所学的知识用到…

基于visual Studio2013解决面试题之0203栈实现

&#xfeff;&#xfeff;&#xfeff;题目解决代码及点评/*用模板类实现栈*//* 标准输入输出流头文件 */ #include <iostream> /* 将标准库的std命名空间下标示符提升到全局 */ using namespace std;/* 定义栈模板库 */ template <class T> class stack { public:…

html地图缩放比例,百度地图之添加控件——比例尺、缩略图、平移缩放

地图控件概述百度地图上负责与地图交互的UI元素称为控件。百度地图API中提供了丰富的控件&#xff0c;您还能够经过Control类来实现自定义控件。javascript地图API中提供的控件有&#xff1a;cssControl&#xff1a;控件的抽象基类&#xff0c;全部控件均继承此类的方法、属性。…

通过Servlet的response绘制页面验证码

java部分 package com.servlet;import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.PrintWriter; import java.util.Random;import javax.servlet.ServletException…

MVC + LigerUI 做后台管理还真是清爽

LigerUI是基于Jquery&#xff0c;轻量级UI框架。具体可以看官方演示 http://www.ligerui.com/ 我的简单后台 模拟Winodw桌面效果&#xff0c;挺不错呢。最喜欢的还是他的&#xff0c;下拉列表绑定Grid&#xff0c;主从表字段关联选择方便。 当然他也不是很好&#xff0c;也不少…

继续教育统考计算机和英语难度怎么样,网络教育英语统考90分的难度怎么样

网络教育本科生统考考90分是比较高的分值&#xff0c;考生报考网络教育难度并不是很大&#xff0c;考试科目分别是大学英语和计算机应用基础两门。网络教育统考考90分难不难网教统考英语考90分是比较有难度的&#xff0c;英语一总分100分&#xff0c;想考90很难很难&#xff0c…

怎样用计算机制作思维导图,如何使用电脑制作成思维导图,这个方法简单又实在...

原标题&#xff1a;如何使用电脑制作成思维导图&#xff0c;这个方法简单又实在我上周发现&#xff0c;其实我们办公室里面很多同事都不知道怎么制作思维导图的。起因是我们老板在烦恼一个项目&#xff0c;而这个项目的对接人就需要我们做一份思维导图给他的&#xff0c;说要让…

计算机桌面锁屏设置,怎么设置电脑锁屏

怎么设置电脑锁屏当在使用电脑的时候难免会遇到中途离开的情况&#xff0c;可能就是一小会&#xff0c;此时不想关机&#xff0c;也不想让别人在此期间操作电脑&#xff0c;因此就需要为电脑添加一个密码使它处于锁屏状态&#xff0c;那么具体怎样设置才能让电脑锁屏呢?第一步…