将Cygwin Emacs设为Windows explorer默认打开程序
由于我在平日的学习与工作中会经常用到Cygwin中的Emacs,很自然地想到应该将emacsclient作为指定文件类型在Windows explorer中的默认打开程序。这样,便可以直接双击文件后在Emacs中编辑,从而省去了在Cygwin命令行下手动输入路径与文件名的麻烦,亦可以用方便快捷的Windows explorer替代Emacs Dired mode。要实现这样的功能,需要解决两个问题:
- 从Windows文件路径格式到Cygwin路径格式的转换。
- 对于XP操作系统,中文文件名为GBK编码,而Cygwin使用的是UTF-8编码。为此需要对(包含中文的)文件路径进行编码转换。
我的解决办法是:创建一个Windows批处理文件emacsclient.bat,将指定文件类型的默认打开程序与之关联。该批处理文件获取在Windows explorer中被双击的文件路径名,用UTF-8编码存入临时文件。然后,从该文件中提取出路径字符串,将其作为emacsclient的参数调用执行。该批处理文件emacsclient.bat的内容如下:
@echo off
touch "/cygdrive/c/.emacsclient_gbk.tmp"
cygpath %1 > C:\.emacsclient_gbk.tmp
iconv -f GBK -t UTF-8 -o "/cygdrive/c/.emacsclient_utf8.tmp" "/cygdrive/c/.emacsclient_gbk.tmp"
for /f "usebackq delims=:" %%f in ("C:\.emacsclient_utf8.tmp") do emacsclient-w32.exe "%%f"
@echo on
其中,
touch "/cygdrive/c/.emacsclient_gbk.tmp"
调用Cygwin的touch命令生成临时文件.emacsclient_gbk.tmp,用于存放GBK编码的待打开文件路径名。需要注意,由于touch是Cygwin命令,作为其参数的临时文件路径名应采用Cygwin格式。 然后,调用cygpath命令,将待打开文件路径名(以%1参数传入emacsclient.bat)作为标准输出重定向到C:\.emacsclient_gbk.tmp。需要注意,由于此时的标准输出重定向是在Windows批处理文件中做的,所以临时文件.emacsclient_gbk.tmp的路径应采用Windows格式。值得一提的是,在首次调用emacsclient.bat前,临时文件.emacsclient_gbk.tmp尚未生成,而Windows批处理命令并不支持标准输出重定向到一个不存在的文件。所以,在这之前调用touch命令生成该临时文件是必须的。 再调用iconv命令进行编码转换,将UTF-8编码的路径名存入.emacsclient_utf8.tmp文件。
iconv -f GBK -t UTF-8 -o "/cygdrive/c/.emacsclient_utf8.tmp" "/cygdrive/c/.emacsclient_gbk.tmp"
最后,从.emacsclient_utf8.tmp文件中提取出文件路径名,交由emacsclient-w32程序打开。
将Cygwin Emacs设为Windows explorer默认打开程序的更多相关文章
- 如何选择windows 10 系统中默认打开程序
有时候我们会遇到打开某些文件需要通过open with 选择打开的应用程序,然后再点选always open with. 但是有时候这个方法不起作用,我们可以用如下方法: 1.从settings找到a ...
- 【转载】win10解决设置默认打开方式不生效问题(双击每次都要选择默认打开程序)
win10解决设置默认打开方式不生效问题(双击每次都要选择默认打开程序) 以下文章 部分选自 https://blog.csdn.net/shan165310175/article/details/8 ...
- Ubuntu 16.04修复PDF默认使用ImageMagick打开无法设置其它默认的问题(默认打开程序设置)
打开:~/.config/mimeapps.list 去掉以下几项: image/pdf=display-im6.desktop image/pdf=display-im6.q16.desktop;d ...
- 如何设定editplus为txt默认打开程序?
如何设定editplus为txt默认打开程序? 如图操作即可:
- window 下Notepad++设置为文本文件的默认打开程序失败
1.右键Notepad++的可执行程序,选择"属性" -- "兼容性" , 设置Notepad++以管理员的身份运行 2.打开Notepad++ ," ...
- Windows设置.txt文件默认打开程序
一.配置某个程序默认打开哪些类型的文件(以firefox为例) 依次打开”控制面板\程序\默认程序“,点击”设置默认程序“ 在右侧列表找到firefox,选中 以firefox为例,”将此程序设置为默 ...
- 不能设置sublime text作为默认打开程序
删除 HKEY_CURRENT_USER\Software\Classes\Applications下的Sublime_Text.exe项.你就发现可以设置为默认打开方式了
- win8中如何设定editplus为txt默认打开程序
设定EditPlus为TXT默认打开方式吧. 首选,打开我们的EditPlus 接着,点击[工具]菜单,点击[参数设置]这个菜单项 来到设定界面 找到[设置&语法]这个选项,然后可以看到里面有 ...
- 修改Unity中Lua文件的默认打开程序
项目中引用了XLua,而Lua文件又是以txt文件结尾的,当修改系统的扩展脚本编辑器为vs后双击lua文件(xx.txt)默认也使用vs打开了,无提示的黑白文本编辑 昨办? -. 后来看到网上有写Un ...
随机推荐
- Windows平台分布式架构实践负载均衡
Windows平台分布式架构实践 - 负载均衡 概述 最近.NET的世界开始闹腾了,微软官方终于加入到了对.NET跨平台的支持,并且在不久的将来,我们在VS里面写的代码可能就可以通过Mono直接在Li ...
- 多线程中lock用法的经典实例
多线程中lock用法的经典实例 一.Lock定义 lock 关键字可以用来确保代码块完成运行,而不会被其他线程中断.它可以把一段代码定义为互斥段(critical section),互斥段在一 ...
- VBS get,post函数
Function gethttp(gethttp_url) Dim http_get Set http_get=Server.CreateObject("MSXML2.ServerXMLHT ...
- 模板方法(Template)模式
模板方法(Template)模式 前言 前段时间在亚马逊买了一本<CLR>的书,当时搞活动买一送一,然后挑了一本<漫谈设计模式>,一位不相识的大牛写的,这几天闲来无事,翻了几页 ...
- linux extract rar files
Extract rar-archives If you need to extract rar files in Linux, you have to download and install unr ...
- 设计模式20---设计模式之备忘录模式(Memento)(行为型)
1.讲解备忘录模式 备忘录模式(Memento Pattern)又叫做快照模式(Snapshot Pattern)或Token模式,是GoF的23种设计模式之一,属于行为模式. 1.1定义 在不破坏封 ...
- Push Notification总结系列(一)
Notification系列概括: 1.Push Notification简介和证书说明及生成配置 2.Push Notification的iOS处理代码和Provider详解 3.Push Noti ...
- 2013.5.A
题1 高低位交换 [问题描述] 给出一个小于2^32的正整数.这个数可以用一个32位的二进制数表示(不足32位用0补足).我们称这个二进制数的前16位为“高位”,后16位为“低位”.将它的高低位交换, ...
- C# 多线程学习总结
C# 多线程学习总结 C#多线程学习(一) 多线程的相关概念 什么是进程? 当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源.而一个进程又是由多个线程所组成的. ...
- OA小助手
基于 WPF + Modern UI 的 公司OA小助手 开发总结 前言: 距离上一篇博客,整整一个月的时间了.人不能懒下来,必须有个阶段性的总结,算是对我这个阶段的一个反思.人只有在总结的过程中才会 ...