<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Masimaro的专栏]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/lanuage</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; lanuage]]></copyright><item><title><![CDATA[《elisp 每日一练》—— Body 代码块]]></title><link>https://blog.csdn.net/lanuage/article/details/165293608</link><guid>https://blog.csdn.net/lanuage/article/details/165293608</guid><author>lanuage</author><pubDate>Mon, 14 Sep 2026 10:43:16 +0800</pubDate><description><![CDATA[前面我们介绍了中的init-valueglobalkeymaplighter关键字，了解了它对于开关变量、快捷键和 mode line 显示上的管理。现在我们进入关于的最后一个步骤，看看如何利用body管理minor mode 中自定义的资源。]]></description><category></category></item><item><title><![CDATA[《elisp 每日一练》——状态栏显示管理与modeline 动态更新]]></title><link>https://blog.csdn.net/lanuage/article/details/165226365</link><guid>https://blog.csdn.net/lanuage/article/details/165226365</guid><author>lanuage</author><pubDate>Sun, 13 Sep 2026 13:30:10 +0800</pubDate><description><![CDATA[本章的内容我们先介绍了，它是一个列表，Emacs每次更新显示都会解析列表并根据列表计算的值来更新 mode line 显示。我们通过中的:lighter定义的内容会通过调用被追加到中。而中存在一个名为的符号，它也是一个列表，内部会通过解析来实现 minor mode 的名称。]]></description><category></category></item><item><title><![CDATA[《elisp 每日一练》——minor mode 快捷键管理]]></title><link>https://blog.csdn.net/lanuage/article/details/165102576</link><guid>https://blog.csdn.net/lanuage/article/details/165102576</guid><author>lanuage</author><pubDate>Sat, 12 Sep 2026 10:55:35 +0800</pubDate><description><![CDATA[本节我们就不设置练习了，读者可以尝试自行写一些代码来验证mode 关闭和开启时快捷键的启用与否，以及实验一下全局keymap 和 mode keymap冲突时，Emacs是如何处理的。本节内容比较简单，实际上keymap关键就是定义了一个快捷键的keymap，并且在此基础上进行了防御编程，防止输入无效的值。根据上面的代码，我们实际上可以不在keymap关键字中定义快捷键，在全局定义一个mode名称-map的keymap 变量，在最后会自动检查变量是否存在并且帮我们完成绑定。甚至你可以直接操作。]]></description><category></category></item><item><title><![CDATA[《elisp 每日一练》——minor mode 开关变量的管理]]></title><link>https://blog.csdn.net/lanuage/article/details/164976182</link><guid>https://blog.csdn.net/lanuage/article/details/164976182</guid><author>lanuage</author><pubDate>Fri, 11 Sep 2026 11:35:42 +0800</pubDate><description><![CDATA[上一节我们将定义 minor mode 的宏展开并分析了它的作用。它主要是定义用于切换mode启用开关的变量和函数，以及在切换时进行模式的管理和hook的切换。默认ninor mode 创建时处于管理状态，而且minor mode启动时只对当前buffer生效。本节我们来讨论如何通过控制开关变量来改变这两点。]]></description><category></category></item><item><title><![CDATA[《elisp 每日一练》—— Minor Mode 变量生成机制与状态控制]]></title><link>https://blog.csdn.net/lanuage/article/details/164816421</link><guid>https://blog.csdn.net/lanuage/article/details/164816421</guid><author>lanuage</author><pubDate>Thu, 10 Sep 2026 10:55:14 +0800</pubDate><description><![CDATA[函数结束之后，它又定义了一个这个变量我们刚刚看到，它在函数中被使用。我们看到该变量没有采用定义成 buffer-local 类型的变量，而是使用defvar定义成了全局变量。Emacs 中的hook变量通常都是全局变量，这个我们在讨论hook的时候再来解释这段代码虽然我们不知道是个什么东西，但是从名字上应该能猜出来，它是变量文档。我们通过C-h v查看hook变量时显示的内容。它的作用是如果没有指定 hook变量的文档，它帮我们指定一个默认的变量文档。接着我们看到两个 put它向custom。]]></description><category></category></item><item><title><![CDATA[《elisp 每日一练》——文件与目录的回顾与综合练习]]></title><link>https://blog.csdn.net/lanuage/article/details/164745222</link><guid>https://blog.csdn.net/lanuage/article/details/164745222</guid><author>lanuage</author><pubDate>Wed, 09 Sep 2026 15:14:31 +0800</pubDate><description><![CDATA[到此为止，我们关于文件和目录的内容就介绍完了，Emacs中的文件与目录操作和其他编程语言相比唯一可能需要注意的是emacs 中的普通的文件读写操作与buffer和一些hook相关，读写也是基于buffer在进行的。]]></description><category></category></item><item><title><![CDATA[《elisp 每日一练》——目录的CRUD]]></title><link>https://blog.csdn.net/lanuage/article/details/164589234</link><guid>https://blog.csdn.net/lanuage/article/details/164589234</guid><author>lanuage</author><pubDate>Tue, 08 Sep 2026 11:17:13 +0800</pubDate><description><![CDATA[在之前的一系列的文章中，我们讨论了有关文件的一些操作，包括文件读写与文件的属性。我们今天开始讨论目录的操作。]]></description><category></category></item><item><title><![CDATA[《elisp 每日一练》——文件属性]]></title><link>https://blog.csdn.net/lanuage/article/details/164454155</link><guid>https://blog.csdn.net/lanuage/article/details/164454155</guid><author>lanuage</author><pubDate>Mon, 07 Sep 2026 10:50:42 +0800</pubDate><description><![CDATA[将相对路径或者带有家目录字符的路径转化为绝对路径获取参数传入的文件路径所在的目录去掉文件路径中的目录，得到单纯的文件名获取文件的扩展名路径拼接文件或者目录是否存在是否为普通文件，排除目录、符号链接、Socket等特殊文件是否为符号链接，如果是，则返回链接指向的真实文件的路径文件是否具有读写权限读取文件或者目录的属性关于属性读取，我们可以使用nth加上索引来获取列表中的内容，也可以调用开头的一组函数来获取。]]></description><category></category></item><item><title><![CDATA[《elisp 每日一练》—— 低成本的文件读写]]></title><link>https://blog.csdn.net/lanuage/article/details/164366899</link><guid>https://blog.csdn.net/lanuage/article/details/164366899</guid><author>lanuage</author><pubDate>Fri, 04 Sep 2026 13:28:22 +0800</pubDate><description><![CDATA[上一节我们了解了文件读写的一些api，并且通过一个保存灵感的小例子了解了Emacs中文本的操作。实际在Emacs中读写文本无外乎两种目的，第一种是用户需要编辑文本并最终保存，第二种是要读取文件内容作为参数或者内容完成后续的工作。例如利用配置文件控制Emacs的行为或者插件的行为。对于第一种我们可以使用正规的find-file和将文件加载到一个buffer中，并且保存的时候使用进行保存。但是这种方式太重了。Emacs在正式读写文件的时候有一些附加动作，如果我们只是简单的要里面的文本，这种开销有点太大了。]]></description><category></category></item><item><title><![CDATA[《elisp》 每日一练——文件的读写]]></title><link>https://blog.csdn.net/lanuage/article/details/164331248</link><guid>https://blog.csdn.net/lanuage/article/details/164331248</guid><author>lanuage</author><pubDate>Thu, 03 Sep 2026 13:31:19 +0800</pubDate><description><![CDATA[截至到上一篇博文，我们讨论了buffer、window和快捷键相对深入一点的问题。本来作为章节的结尾今天要进行回顾和综合性的练习。但是这个专题的有些内容在前面的练习中已经出现过，并且关于buffer、window 的综合练习我现在也想不出什么能减少对新内容依赖的东西了。所以这次就打破惯例，跳过练习，直接进入文件相关专题。]]></description><category></category></item><item><title><![CDATA[《elisp 每日一练》——minibuffer输入读取和set-transient-map 临时热键状态机]]></title><link>https://blog.csdn.net/lanuage/article/details/164292440</link><guid>https://blog.csdn.net/lanuage/article/details/164292440</guid><author>lanuage</author><pubDate>Wed, 02 Sep 2026 10:45:41 +0800</pubDate><description><![CDATA[我们在前面介绍了给用户提供选项，让用户输入，但是如何处理这种需要用户主动输入的情况呢？本节我们将介绍一些主动读取用户输入的接口，然后补充一个我们在前面练习中涉及到的函数。]]></description><category></category></item><item><title><![CDATA[《elisp 每日一练》—— Minibuffer 与 completing-read]]></title><link>https://blog.csdn.net/lanuage/article/details/164254197</link><guid>https://blog.csdn.net/lanuage/article/details/164254197</guid><author>lanuage</author><pubDate>Tue, 01 Sep 2026 10:16:33 +0800</pubDate><description><![CDATA[通过前面一段时间的学习，我们学习了如何与窗口进行交互。现在我们进入minibuffer的交互。从标题上看我们本节主要就是再介绍一遍，这个函数我们前面已经多次用到过，读者如果不熟悉，可以再一次阅读本文，如果已经熟悉了，可以跳过。]]></description><category></category></item><item><title><![CDATA[《elisp 每日一练》——Window 锁定与专属窗口]]></title><link>https://blog.csdn.net/lanuage/article/details/164213047</link><guid>https://blog.csdn.net/lanuage/article/details/164213047</guid><author>lanuage</author><pubDate>Mon, 31 Aug 2026 13:25:49 +0800</pubDate><description><![CDATA[我们想象这样一个场景，假设你精心布局了当前的编程窗口，左边是文件树、右边一个大窗口区域是代码编辑区域，右侧有一个小的显示当前类和函数定义的缩率图，下面有输出的日志。但是你运行某个命令弹出了*Help*或者*Compile*占用了你的某个窗口，本来对整个项目可以一览无余的，现在不得不重新关掉这个新显示的窗口。整个场景想想就糟心。我们有没有办法固定这些布局，新弹出的窗口不要破话它。Emacs一般是只有你想不到，没有它办不到的。]]></description><category></category></item><item><title><![CDATA[《elisp 每日一练》——Window 树与布局状态恢复]]></title><link>https://blog.csdn.net/lanuage/article/details/164188125</link><guid>https://blog.csdn.net/lanuage/article/details/164188125</guid><author>lanuage</author><pubDate>Sun, 30 Aug 2026 12:59:02 +0800</pubDate><description><![CDATA[前面的文章中，我们介绍了可以通过来创建窗口，也介绍了通过遍历窗口并且通过overlay机制实现了一个简单、直观的快速跳转窗口的功能。今天我们来深入了解背后的原理。]]></description><category></category></item><item><title><![CDATA[《elisp 每日一练》—— 变量定义与赋值]]></title><link>https://blog.csdn.net/lanuage/article/details/164171723</link><guid>https://blog.csdn.net/lanuage/article/details/164171723</guid><author>lanuage</author><pubDate>Sat, 29 Aug 2026 17:19:42 +0800</pubDate><description><![CDATA[平时我们在看网上的一些配置Emacs的代码时应该注意到了，有多种多样的elisp 变量声明方式，defvar、setq、setq-default、setq-local、let 等等。今天我们深入buffer和window 机制的第二天我们打算来引入一种新的变量类型：buffer local变量，并以此来区分这几种声明变量的方式。]]></description><category></category></item><item><title><![CDATA[《elisp 每日一练》——Indirect Buffer]]></title><link>https://blog.csdn.net/lanuage/article/details/164141109</link><guid>https://blog.csdn.net/lanuage/article/details/164141109</guid><author>lanuage</author><pubDate>Fri, 28 Aug 2026 10:42:52 +0800</pubDate><description><![CDATA[前面我们了解了buffer、window相关的机制，并且学习了操作它们的一些api函数。现在我们继续更深入的探索有关buffer和window的内容。]]></description><category></category></item><item><title><![CDATA[《elisp 每日一练》——命令与快捷键的综合练习]]></title><link>https://blog.csdn.net/lanuage/article/details/164114290</link><guid>https://blog.csdn.net/lanuage/article/details/164114290</guid><author>lanuage</author><pubDate>Thu, 27 Aug 2026 11:24:30 +0800</pubDate><description><![CDATA[到目前我们已经全面了解如何将一个函数定义为交互式命令并且将它绑定到一个快捷键上。现在我们来针对之前的内容做一个综合性的小练习。]]></description><category></category></item><item><title><![CDATA[《elisp 每日一练》——Minor Mode Keymap 绑定]]></title><link>https://blog.csdn.net/lanuage/article/details/164086422</link><guid>https://blog.csdn.net/lanuage/article/details/164086422</guid><author>lanuage</author><pubDate>Wed, 26 Aug 2026 13:31:42 +0800</pubDate><description><![CDATA[在之前的内容中，介绍了可以存储keymap绑定的几个位置，并且说明了查找的顺序。同时我们也提到绑定到minor mode 中的快捷键只有在minor mode 被激活时才有能生效。那么Emacs 是如何管理 minor mode 中的快捷键的呢？]]></description><category></category></item><item><title><![CDATA[《elisp 每日一练》—— 前缀按键]]></title><link>https://blog.csdn.net/lanuage/article/details/164048202</link><guid>https://blog.csdn.net/lanuage/article/details/164048202</guid><author>lanuage</author><pubDate>Tue, 25 Aug 2026 10:37:51 +0800</pubDate><description><![CDATA[上一节我们提到Emacs中keymap上某个键可以绑定一个具体的函数，也可以绑定另一个keymap，如果绑定另一个keymap，它就变成了一个前缀键，本篇我们来讨论前缀和自建keymap。]]></description><category></category></item><item><title><![CDATA[《elisp 每日一练》——全局与局域 Keymap 按键映射]]></title><link>https://blog.csdn.net/lanuage/article/details/164021251</link><guid>https://blog.csdn.net/lanuage/article/details/164021251</guid><author>lanuage</author><pubDate>Mon, 24 Aug 2026 13:50:35 +0800</pubDate><description><![CDATA[在Emacs中，按键并不是直接映射给函数的，而是通过Keymap（按键映射表） 进行中转。keymap本质上是一个将“事件类型”映射到“命令”或其他keymap的查找表。下面我们来探讨一下，从按下快捷键到最终执行对应的交互式函数，这中间发生了什么。首先我们按下快捷键，Emacs 通过拿到了这个快捷键。文本属性键映射: 如果按键发生在特定文本上，会查找该文本的keymap或local-map属性: 用于仿真其他编辑器的键映射: 用于覆盖 minor mode 键映射。]]></description><category></category></item></channel></rss>