首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用emacs/elisp获取当前缓冲区信息的开始/结束?

如何使用emacs/elisp获取当前缓冲区信息的开始/结束?
EN

Stack Overflow用户
提问于 2010-08-26 03:26:59
回答 2查看 1.3K关注 0票数 6

我有以下代码来运行将输入作为范围的figlet。如何修改此代码以检查是否未指定b或e,将b设为当前缓冲区的开头,将e设为当前缓冲区的结尾?

代码语言:javascript
复制
(defun figlet-region (&optional b e) 
  (interactive "r")
  (shell-command-on-region b e "/opt/local/bin/figlet" (current-buffer) t)
  (comment-region (mark) (point)))
(global-set-key (kbd "C-c C-x") 'figlet-region)

已添加

肖恩帮我找到了这个问题的答案

代码语言:javascript
复制
(defun figlet-region (&optional b e) 
  (interactive)
  (let ((b (if mark-active (min (point) (mark)) (point-min)))
        (e (if mark-active (max (point) (mark)) (point-max))))
   (shell-command-on-region b e "/opt/local/bin/figlet" (current-buffer) t)
  (comment-region (mark) (point))))
(global-set-key (kbd "C-c C-x") 'figlet-region)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-26 03:35:37

如下所示:

代码语言:javascript
复制
(defun figlet-region (&optional b e) 
  (interactive "r")
  (shell-command-on-region
   (or b (point-min))
   (or e (point-max))
   "/opt/local/bin/figlet" (current-buffer) t)
  (comment-region (mark) (point)))

但请注意,当以交互方式运行此命令时,将始终设置be

你也可以这样做:

代码语言:javascript
复制
(require 'cl)

(defun* figlet-region (&optional (b (point-min)) (e (point-max)))
  # your original function body here
    )

编辑:

所以我猜你的意思是,即使区域处于非活动状态,你也希望能够以交互方式运行该命令?那么这可能会对你起作用:

代码语言:javascript
复制
(defun figlet-region ()
  (interactive)
  (let ((b (if mark-active (min (point) (mark)) (point-min)))
        (e (if mark-active (max (point) (mark)) (point-max))))
    # ... rest of your original function body ...
      ))
票数 7
EN

Stack Overflow用户

发布于 2010-08-26 03:34:39

试一试

代码语言:javascript
复制
(unless b (setq b (point-min)))
(unless e (setq e (point-max)))
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3569501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档