mailing-list for TeXmacs Users

Text archives Help


[TeXmacs] A simple "quick postscript-scaler" plugin


Chronological Thread 
  • From: Jalady Christophe <address@hidden>
  • To: address@hidden
  • Subject: [TeXmacs] A simple "quick postscript-scaler" plugin
  • Date: Sun, 26 Oct 2008 19:08:05 +0100

Hi,

I try learning how to hack TeXmacs. So I made a simple plugin in Scheme.

The purpose of this plugin is to give the ability to quickly resize by +/- 10% a bitmap with two key-shortcut: "Ctrl -" and "Ctrl +".

You need to place the cursor just after the bitmap and then press "Ctrl -" or "Ctrl +"; the picture is automatically resized.

To install the plugin (for now), just eval the small scheme script (I will provide later a better packaging, more texmacs-friendly). To do that:

1- type [M-x] ('Alt' or 'Windows-key' with the 'x' key).
2- type "load" [Enter]
3- Enter the full path name to the script: /full/path/name/to/ps-scaler.scm


Enjoy !

Christophe.


(define (inside-postscript-p) 
	(equal? (tree-label (cursor-tree)) 'postscript))

(texmacs-modes (inside-postscript% (inside-postscript-p)))

; Return true if 'str' si a "magnification": i.e. "[*,/]number"
(define (magnification? str)
	(let ((s (string-trim-both str)))
	  (if (or (string-starts? s "*") (string-starts? s "/"))
	      (if (number? (string->number (string-tail s 1)))
		  #t
		  #f)
	      #f)))


(define (magnification->number magnstr)
	(let ((s (string-trim-both magnstr)))
	     (cond ((string-starts? s "*")
		    (if (number? (string->number (string-tail s 1)))
		        (string->number (string-tail s 1))
		        #f))
		   ((string-starts? str "/")
		    (if (number? (string->number (string-tail s 1)))
		        (/ 1.0 (string->number (string-tail s 1)))
		        #f))
		   (#t #f))))


; Return the width of a postscript tree.
(define (postscript-width ps-tree) 
  (tree->string (tree-ref ps-tree 1)))

; Return the height of a  postscript tree.
(define (postscript-height ps-tree) 
  (tree->string (tree-ref ps-tree 2)))

;set the scale width to 'w' (string) of a postscript tree. 
(define (postscript-set-width! ps-tree w) 
  (tree-set! (tree-ref ps-tree) 1 w))

;set the height to 'h' (string) of a postscript tree. 
(define (postscript-set-height! ps-tree h) 
  (tree-set! (tree-ref ps-tree) 2  h))

;scale the postscript width-scale by 's' (float)
(define (postscript-scale-width! ps-tree s) 
  (let* ((w (postscript-width ps-tree)) 
	(nv w))
    (cond ((equal? w "")
	   (set! nv (string-concatenate (list "*" (float->string s)))))
	  ((magnification? w) 
	   (set! nv (string-concatenate (list "*" (number->string (* s (magnification->number w)))))))
	  ((length? w)
	   (set! nv (length-mult s w))))
    (postscript-set-width! ps-tree nv)))
		
; Scale the postscript height-scale by 's' (float)
(define (postscript-scale-height! ps-tree s) 
  (let* ((h (postscript-height ps-tree)) 
	(nv h))
    (cond ((equal? h "") 
	   (set! nv (string-concatenate (list "*" (float->string s)))))
	  ((magnification? h) 
	   (set! nv (string-concatenate (list "*" (number->string (* s (magnification->number h)))))))
	  ((length? h) 
	   (set! nv (length-mult s h))))
    (postscript-set-height! ps-tree nv)))
	

; Scale the postscript height and width by 's' (float)
(define (postscript-scale-size ps-tree s) 
	(postscript-scale-width! ps-tree s)
	(postscript-scale-height! ps-tree s))

(kbd-map (:mode inside-postscript?) ("C--" (postscript-scale-size (cursor-tree) 0.9)))
(kbd-map (:mode inside-postscript?) ("C-+" (postscript-scale-size (cursor-tree) 1.1)))





Archive powered by MHonArc 2.6.19.

Top of page