From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Emanuel Berg Newsgroups: gmane.emacs.devel Subject: Re: buffer segments, uniform and automatic (was: Re: [Elisp: 8 out of 10 problems] I think the last one! (point)) Date: Tue, 13 Aug 2024 19:10:37 +0200 Message-ID: <87frr8fiwi.fsf@dataswamp.org> References: <875xs7zzik.fsf@dataswamp.org> <87ikw7xnji.fsf@dataswamp.org> <87jzgkftwi.fsf_-_@dataswamp.org> <875xs4ikdk.fsf@localhost> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="36425"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) To: emacs-devel@gnu.org Cancel-Lock: sha1:RVe77EWyyEXYYKuR91WlanRCsRo= Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Tue Aug 13 19:29:53 2024 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1sdvLD-0009Gk-Qh for ged-emacs-devel@m.gmane-mx.org; Tue, 13 Aug 2024 19:29:51 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sdvKL-0007L4-Bx; Tue, 13 Aug 2024 13:28:57 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sdv2m-0001N3-0A for emacs-devel@gnu.org; Tue, 13 Aug 2024 13:10:48 -0400 Original-Received: from ciao.gmane.io ([116.202.254.214]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sdv2k-0003gV-1W for emacs-devel@gnu.org; Tue, 13 Aug 2024 13:10:47 -0400 Original-Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1sdv2i-0009yI-8P for emacs-devel@gnu.org; Tue, 13 Aug 2024 19:10:44 +0200 X-Injected-Via-Gmane: http://gmane.org/ Mail-Followup-To: emacs-devel@gnu.org Mail-Copies-To: never Received-SPF: pass client-ip=116.202.254.214; envelope-from=ged-emacs-devel@m.gmane-mx.org; helo=ciao.gmane.io X-Spam_score_int: -16 X-Spam_score: -1.7 X-Spam_bar: - X-Spam_report: (-1.7 / 5.0 requ) BAYES_00=-1.9, HEADER_FROM_DIFFERENT_DOMAINS=0.249, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Tue, 13 Aug 2024 13:28:55 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.devel:322715 Archived-At: Ihor Radchenko wrote: >> -len is (- END BEG) >> -reg is (BEG END) >> -beg is BEG >> -end is END >> -cur is (buffer-substring-no-properties BEG END) [...] > > Check out thingatpt.el: `beginning-of-thing', > `end-of-thing', `thing-at-point', etc. > > "thing" can be anything, including page, paragraph, word, > link, sexp, etc You are right, didn't think of that. Let's see later if it can be reused. Right now, I'm stuck with this. It works for these segments: (pos--def "data" (pos--data)) (pos--def "para" (pos--para)) (pos--def "sntc" (pos--sntc)) But not for this: (pos--def "word" (pos--word)) It says about `forward-char' in the docstring: This function has a ‘byte-compile’ property ‘byte-compile-zero-or-one-arg’. See the manual for details. Maybe that is the reason? ;;; -*- lexical-binding: t -*- ;; ;; this file: ;; https://dataswamp.org/~incal/emacs-init/pos.el (defun pos--wash-str (str) (string-trim (replace-regexp-in-string "%" "%%" (replace-regexp-in-string "[\n[:blank:]]+" " " str)))) (defmacro pos--def (name spn) (let ( (reg (intern (format "%s-reg" name))) (beg (intern (format "%s-beg" name))) (end (intern (format "%s-end" name))) (cur (intern (format "%s-cur" name))) (len (intern (format "%s-len" name))) (goto-beg (intern (format "goto-%s-beg" name))) (goto-end (intern (format "goto-%s-end" name)))) `(progn (defun ,reg () (pos--reg ,spn)) (defun ,beg () (pos--beg ,spn)) (defun ,end () (pos--end ,spn)) (defun ,cur () (pos--cur ,spn)) (defun ,len () (pos--len ,spn)) (defun ,goto-beg () (pos--goto-beg ,spn)) (defun ,goto-end () (pos--goto-end ,spn)) ) )) (defun pos--reg (spn) (pcase-let* (( `(,beg ,end) spn )) (list beg end))) (defun pos--beg (spn) (car (pos--reg spn))) (defun pos--end (spn) (cadr (pos--reg spn))) (defun pos--cur (spn) (pcase-let* (( `(,beg ,end) (pos--reg spn) ) ( cur (pos--wash-str (buffer-substring-no-properties beg end)) )) cur)) (defun pos--len (spn) (length (pos--cur spn))) (defun pos--goto-beg (spn) (goto-char (pos--beg spn))) (defun pos--goto-end (spn) (goto-char (pos--end spn))) (defun pos--data () (save-mark-and-excursion (let ((min (point-min)) (max (point-max)) (beg) (end)) (goto-char min) (re-search-forward "." max t) (setq beg (match-beginning 0)) (goto-char max) (re-search-backward "." beg t) (setq end (match-end 0)) (when (and beg end (< beg end)) (list beg end))))) (defun pos--para () (save-mark-and-excursion (let ((beg (progn (start-of-paragraph-text) (point))) (end (progn (end-of-paragraph-text) (point)))) (list beg end)))) (defun pos--sntc () (save-mark-and-excursion (let ((end (forward-sentence)) (beg (forward-sentence -1))) (list beg end)))) (defun pos--word () (save-mark-and-excursion (let ((end (forward-word)) (beg (forward-word -1))) (list beg end)))) (pos--def "data" (pos--data)) (pos--def "para" (pos--para)) (pos--def "sntc" (pos--sntc)) (pos--def "word" (pos--word)) (provide 'pos) -- underground experts united https://dataswamp.org/~incal