Emacs 在 25 版本后,支持了动态模块(dynamic modules),这为 Emacs 插件的开发打开了新的一扇大门,任何能够编译生成符合 Emacs ABI 要求的语言都可以使用。...> // 声明该模块是 GPL 兼容的 int plugin_is_GPL_compatible; // 模块的入口函数,相当于普通 C 程序的 main int emacs_module_init...(env, args[i]); } return env->make_integer(env, ret); } void define_elisp_function(emacs_env *env...c_add, "C-based adder", NULL); emacs_value symbol = env->intern (env, "c-add"); emacs_value args[...•用Rust扩展Emacs功能 | NIL,这篇文章算是对官方文档的中文翻译,供读者参考 热加载 使用 emacs-module-rs 开发的动态模块,会暴露一个 reload 的函数 emacs_rs_module_init
整理记录一下emacs编辑代码,浏览代码用到的工具和方法。日常开发的项目基本上用了。其中有些快捷键是默认的,有些是自定义的,如果不习惯,可以根据自己需要重新定义。...我把我的emacs的安装目录上传到了:gitee 和github。可以直接作为.emacs.d。emacs 28 29 都可以。网上代码搜索这里可以直接搜索代码,但我没怎么用过。...比如:跳转到定义:helm-gtags-dwim M-.查找函数或变量的被引用位置:helm-gtags-find-rtag M-r跳转之后返回:helm-gtags-pop-stack M-,项目范围内查找...跳转到光标所在处定义xref-find-definitions M-.查找光标所在处的引用lsp-find-references M-r跳转之后返回xref-go-back M-,buffer内查找函数和变量...光标所在当前的thing(不管是否在开头)比C-s稍快 比上面多一个M快捷键symbol-overlay M-i 高亮函数范围内的符号。锁定。可以取消。可以高亮多个。
除了《静态分析C语言生成函数调用关系的利器——calltree》一文中介绍的calltree,我们还可以借助cflow辅助我们阅读理解代码。...(转载请指明出于breaksoftware的csdn博客) cflow的说明和安装 cflow是一款静态分析C语言代码的工具,通过它可以生成函数的调用关系。...我只列出我觉得有意思的几个参数: -T输出函数调用树状图 -m指定需要分析的函数名 -n输出函数所在行号 -r输出调用的反向关系图 ...+-main() void) at timer.c:13> +-ev_timer_init() +-timeout_cb() void timeout_cb (EV_P...,我们不会使用ASCII文本的方式去查看函数调用关系,因为调用是相当复杂的,而文本图并不适合人去理解。
与 flush-lines 命令类似,但是匹配的行会作为整体加到 kill ring 中 • 新配置 kill-transform-function 字符在添加到 kill ring 中的预处理函数 •...,并且提供了一个专门的 script symbol 用于表示: (set-fontset-font t 'emoji '("My New Emoji Font" ....(fset 'yes-or-no-p 'y-or-n-p) • 新选项 copy-directory-create-symlink 在 src dir 为软链时, copy-directory 的 dst...dir 是否也为软链,默认 false。...• remove-hook 改成 interactive 命令 • 新增命令 shortdoc-display-group 之前节目[7]中多次提到过的功能,按函数类型归类,展示其用法 shortdoc
挫败感的主要来源是对 ELisp 里相关概念的不熟悉,比如 xref 为了能打开 symbol 定义的文件,需要提供一个 xref-location 对象,默认提供了两种实现,xref-buffer-location...后来测试了下不行,然后去看 buffer location 的定义,position 的类型是 fixnum,既然是个数字,应该表示的是 offset,那么又一个问题,是 0 开始还是 1 开始呢?...而且程序员都很懒、很忙,去仔细看 manual 不现实,而且 Emacs 的 manual 我感觉有些“重”了,文字太多了,看的累,我需要的仅仅是个很 copy 的示例,然后再根据我的需求改改就好了,就行...clojuredocs 那样,比如 reduce[2] 页面: 幸好在 Emacs China TG 组交流“心得”后,发现了 elisp-demos[3] 插件,可以在 helpful 页面中展示函数的用法...• https://github.com/chrisdone/elisp-guide 引用链接 [1] feature: https://github.com/clojure-emacs/cider/pull
Symbol是什么?symbol是ES6标准中新增的一种基本数据类型,symbol 的值是通过 Symbol()函数返回的,每一个 symbol 的值都是唯一的,即使传入相同的描述值。...注:Symbol 函数不允许通过 new 的方式调用Symbol的作用是什么?因为每一个 symbol 的值都是唯一的,所以不会出现重复的现象,所以symbol 类型的值可以作为对象的属性标识符使用。...Symbol.iteratorSymbol.iterator 为每一个对象定义了默认的迭代器。该迭代器可以被 for...of 循环使用,当我们需要遍历一个对象的时候,iterator函数就会被调用。...迭代器就是为实现对不同集合进行统一遍历操作的一种机制,在es6中有三类结构生来就具有Iterator属性:数组、类数组对象、Map和Set结构。Symbol.iterator是如何实现遍历的呢?...执行的是异步的迭代。我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!
); void jtNext(); void showTime(); void fAuto(const QString &); //定义的各种slots函数,以便触发后产生相应操作 private...0 为默认值,代表这是一个新的窗口 { setupUi(this); //这个函数是Ui_Pic类的一个内联函数,用来设置自身的界面布局和组件分布,还有组件和窗口的形状大小和位置,参数信息来源于之前使用...QPixmap p(pic[i]); //根据索引定义图片 lbPic->setPixmap(p); //显示设定的图片 } void Pic::jtPre() //跳到前一张 { i-...QPixmap p(pic[i]); //根据索引定义图片 lbPic->setPixmap(p); //显示设定的图片 } void Pic::jtNext() //跳到下一张 { i++;...p(pic[i]); //根据索引定义图片 lbPic->setPixmap(p); //显示设定的图片 } void Pic::showTime() //显示时间 { QDateTime
本文以Source Insight 4.00.0086版本为例讲解常用设置。...相对于其它主流的开源代码编辑器(Notepad++、Sublime Text、Emacs、Vim等),因为Source Insight能自动创建并维护它自己高性能的符号数据库,包括函数、变量、类、结构体和工程源文件里定义的其它类型的符号...2.2选中单词后自动高亮 Options->File Type Options…->Editing Options->勾选Highlight references to selected symbol。...这里设置只对上面窗口1:符号窗口(Symbol Window)和窗口4:项目文件夹浏览窗口(Project Folder Browser)有效,另外两个窗口无效。...2.6打开Source Insight相关窗口 (1)打开Symbol Window。 View->Symbol Window。快捷键:Alt+F8。
void mul(); void mod(); //定义的各种slots函数,以便触发后产生相应操作 private: }; #endif ---- calc.cpp #include //printf 的声明在此 #include "calc.h" //这个文件中包含了Calc类的定义 QString res(""); //定义一个res的QString来存放结果 float...) //构造函数的实现,parent = 0 为默认值,代表这是一个新的窗口 { setupUi(this); //这个函数是Ui_Calc类的一个内联函数,用来设置自身的界面布局和组件分布,还有组件和窗口的形状大小和位置...,参数信息来源于之前使用designer生成的XML文件calc.ui le->setText(res); //将le的内容设置为res,此时为“” le->setAlignment(Qt...QString对象赋值给res le->setText(res); //将结果显示出来 res=QString(""); //清空暂存的内容 } void Calc::add() //加法操作函数实现
可执行文件的符号表(symbol table)记录了某个可执行文件中的函数名、全局变量、宏定义等符号信息,这些信息对于我们调试十分重要。...,这样可以使得 C++ 函数名具有可读性。...对于已定义的符号,查找符号地址的行号。对于未定义符号,查找指向符号重定位入口的行号。...对于不记录符号大小的目标文件格式,此选项不起作用,除非使用了--size sort,在这种情况下,将显示计算的大小 -s, --print-armap 当列出库中成员的符号时,同时列出索引。...这些符号通常被特定目标文件用于某些特殊处理,当包含在正常符号列表中时通常不起作用。
都抽象为 文件,所以在 UNIX/Linux 系统中 一切皆文件 一切皆文件 不仅仅对磁盘,还包括鼠标,键盘,显示器这些设备,那么对这些设备的操作也都抽象成了对 文件的I/O操作 关于 标准I/O 可以参看前面一篇文章...标准IO库的常用函数 下面是一些 标准IO库中的常用函数 File *fopen(const char*path,const char *mode) int fseek(FILE *stream, long...//求字符串长度 (string.h中的strlen函数有相同功能) { int i=0; for(;*s!...len=slen(s); char tmpc='\0'; //之所以将各种变量定义后,同时进行赋值初始化,是为了避免不可知不可控的状况 for(i=0;i函数可以应对绝大部分的IO需求 fopen/fclose fread/fwrite fseek/ftell/rewind 通过各方面资料弄懂其参数的意义和返回值的类型,是熟练掌握的基础 原文地址
Emacs配置文件3 ;;普通设置 (setq inhibit-startup-message t);关闭起动时闪屏 (setq visible-bell t);关闭出错时的提示声 (show-paren-mode...和外部其他程序的粘贴 (setq mouse-yank-at-point t);支持中键粘贴 ;(show-paren-mode 't); 高亮显示匹配括号 ;;自动插入匹配的括号 ;;...'gdb);启动gdb (global-set-key [(f6)] 'gdb-many-windows);启动窗口gdb (global-set-key [f1] 'goto-line);设置M-g为goto-line.../)] 'semantic-ia-complete-symbol-menu) ;(semantic-load-enable-minimum-features) ;(semantic-load-enable-code-helpers...indent-tabs-mode nil) ;;; hungry-delete and auto-newline ; (c-toggle-auto-hungry-state 2) ;;按键定义
前言 UNIX/Linux 的缔造者们将数据的 来源和目标 都抽象为 文件,所以在 UNIX/Linux 系统中 一切皆文件 一切皆文件 不仅仅对磁盘,还包括鼠标,键盘,显示器这些设备 那么目录算不算文件呢.../stat.h> // stat 结构体的定义在里面 #define MAX 1000 int main() { char *dirpath="/home/emacs/c"; DIR *dir...-- DIR 代码中有一个这样的定义 DIR *dir=NULL; DIR 是一种新的结构体 emacs@ubuntu:/usr/include$ grep DIR dirent.h | grep...的详细定义 通过查资料,得知 __dirstream 有如下定义 struct __dirstream { void *__fd; //`struct hurd_fd'...在 dirent.h 中对常用的目录操作函数作了声明 /* Open a directory stream on NAME.
都抽象为 文件,所以在 UNIX/Linux 系统中 一切皆文件 一切皆文件 不仅仅对磁盘,还包括鼠标,键盘,显示器这些设备,那么对这些设备的操作也都抽象成了对 文件的I/O操作 关于 标准I/O 可以参看之前的文章...,缓冲区由开发者自己来定义和管理 Tip: 文件I/O 并不是ISO C的组成部分,而 标准I/O 属于ISO C的组成部分 ---- 文件IO库的常用函数 下面是一些 文件IO库中的常用函数 int...函数包含其中,缺少这个头文件read,write,close 会报错 #include //open函数包含其中,还有一些重要的宏定义 int main(int argc,char...*argv[]) //带参数的主函数 { int fr=0,fw=0,rres=0,res=-1; char tmpc='\0'; char *fileA="/home/emacs/file.../a.png"; char *fileB="/home/emacs/file/b.png"; //定义与初始化各种变量 if(3 !
前言 当前的计算系统除了包括对数据有 加工和处理 以外还有 搬运 这个 搬运 代表着 输入和输出 ,及 input/output ,简称 I/O UNIX/Linux 的缔造者们将数据的 来源和目标 都抽象为...)可以参看 Linux C API 参考手册 在线文档 这里分享一下我在学习 文件 I/O 库过程中的笔记和心得 ---- 概要 ---- 文件IO库的常用函数 下面是一些 文件IO库 中的常用函数 int... //open函数包含其中,还有一些重要的宏定义 typedef struct student //student 结构体定义 { int id; char name[5...,SEEK_SET 代表的是0,这个宏是在fcntl.h中定义的,意思是偏移量相对位置为文件的开头 if(sizeof(int)!...代表的是1,这个宏是在fcntl.h中定义的,意思是偏移量相对位置为当前位置 } lseek(fa,sizeof(ST)-sizeof(int),SEEK_SET); //重新将文件指针定位到第一个分数的位置
类生成规则 JVM 设计之初只是为 Java 语言考虑,所以最基本的概念是 class,除了八种基本类型,其他都是对象。...我们知道 Clojure 里面很多“函数”其实是用宏实现的,宏在编译时会进行展开,生成新代码,上面代码中的ns、defn都是宏,展开后(在 Cider + Emacs 开发环境下,C-c M-m)可得...但是在正式的生产环境,这种重定向对性能有影响,而且也没有重复定义函数的必要,所以可以在服务启动时指定-Dclojure.compiler.direct-linking=true来避免这类重定向,官方称为...需要注意的是,var 重定义对那些已经 direct linking 的代码是透明的。...正如上一篇文章的介绍,这三个方法正是 Compiler 的入口函数,这也就解释了上面 REPL 中的实验: 每次重定义一个函数,都会生成一个新 DynamicClassLoader 实例去加载其实现。
力扣 (LeetCode)-两数之和,有效的括号,两数相加|刷题打卡-3月1日 力扣 (LeetCode)-合并两个有序链表,删除排序数组中的重复项,JavaScript笔记|刷题打卡-3月2日 力扣...用ES6的限定作用域Symbol实现类 ES6新增了一种叫做Symbol的基本类型,它是不可变的,可以用作对象的属性。...示例: // 声明了Symbol类型的变量_items,在类的constructor函数中初始化它的值 let _items = Symbol(); class Stack { constructor...使用闭包: // 当Stack函数里的构造函数被调用时,会返回Stack类的一个实例 let Stack = (function () { const items = new WeakMap();...括号生成 一、题目描述 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
dc、icc、innovus等芯片中后端eda的脚本一般是tcl格式,但是eda基于扩展了很多很多命令,如果能够高亮这些eda命令,将大大方便了脚本的编写和修改。...因此,总结了几点需求: 1、高亮tcl自身的关键字,如set、puts、for等。...2、注释、字符串显示高亮颜色 3、高亮标点符号,如[、]、{、}、/、\、* 4、支持自定义dc、icc、innovus等工具的命令为关键字,并指定颜色 5、支持常见后缀,如.tcl、.enc、.do、....cmd、.sdc、.view等 下面是经过实践,可用的一个emacs major mode,取名tcl-like-mode。...) ("\\[" 0 'punc-symbol-face) ("\\]" 0 'punc-symbol-face) ;; dc cmd ("\\b\\(get_designs
__key, int __msgflg) __THROW; __msgflg 是读写权限的组合,相关的宏在 bits/ipc.h 中有所定义 返回值为一个整型,即消息队列的ID ---- msgsnd...__msgflg 控制函数行为的标志 , 一般取0 , 表示忽略 ---- msgrcv msgrcv 的原型定义在 sys/msg.h 中 /* Receive message from message...函数调用成功时,该函数返回放到接收缓存区中的字节数,消息被复制到由msgp指向的用户分配的缓存区中,然后删除消息队列中的对应消息; 失败时返回-1 ---- msgctl msgctl 的原型定义在 sys...msgid_ds结构中给出的值 #define IPC_STAT 2 /* Get `ipc_perm' options. */ //把msgid_ds结构中的数据设置为消息队列的当前关联值...,仍在使用这一队列的进程在下次对队列进行操作时会出错返回 函数成功时返回0,失败时返回-1 ---- msqid_ds 在 bits/msq.h 中有关于 msqid_ds 的定义 /* Structure
直接调用函数,无需消息传递,避免了IPC机制带来的额外开销,还避免了内核空间到用户空间的上下文切换,因而性能优异,同时在设计上又汲取了微内核(Microkernelkernel) 的精华:模块化设计、抢占式内核...,但是加载模块的过程会报license问题 int init_module (void) //insmod 过程中此模块执行的函数 { printk (KERN_INFO "Hello world...\n"); //打印输出,并且返回 return 0; } void cleanup_module (void) //rmmod 过程中此模块执行的函数 { printk (KERN_INFO...= /opt/linux-2.6.32.10/ #定义内核目录 ?...= 的意义是如果KERNELDIR没有被定义过,那么KERNELDIR的值就是/opt/linux-2.6.32.10/,如果KERNELDIR先前被定义过了,那么这条语句将什么都不做 PWD :=