Bram Moolenaar, 23.02.2009:
> 
> Markus Heidelberg wrote:
> 
> > Bram Moolenaar, 22.02.2009:
> > > 
> > > Patch 7.2.123
> > > Problem:    Typing 'q' at more prompt for ":map" output still displays 
> > > another
> > >             line, causing another more prompt. (Markus Heidelberg)
> > > Solution:   Quit listing maps when 'q' typed.
> > > Files:      src/getchar.c
> > 
> > This only fixes a few of the examples from the bug report.
> > It still occurs for both :map and :tselect
> 
> Each of these have to be dealt with separately.  I just found and fixed
> the ":tselect" problem.  Any others?  Please give a reproducable
> example.

In Konsole terminal emulator with $LINES=24 and $COLUMNS=80:
./vim -u NONE -U NONE -N
:so AlignMapsPlugin.vim
:map<CR>ddjjq
or
:map<CR>dddddddddq (9 times d)

Seems to be dependent on the line wrapping as you suggested in a
previous mail.

The AlignMapsPlugin.vim is the latest from vim.org, just to get enough
mappings with long lines.


--~--~---------~--~----~------------~-------~--~----~
You received this message from the "vim_dev" maillist.
For more information, visit http://www.vim.org/maillist.php
-~----------~----~----~----~------~----~------~--~---

" AlignMapsPlugin: Alignment maps based upon and " Maintainer: Dr. Charles E. Campbell, Jr. " Date: Oct 24, 2008 " " NOTE: the code herein needs vim 6.0 or later " needs v6 or later " needs v5 or later " Copyright: Copyright (C) 1999-2008 Charles E. Campbell, Jr. {{{1 " Permission is hereby granted to use and distribute this code, " with or without modifications, provided that this copyright " notice is copied with it. Like anything else that's free, " AlignMaps.vim is provided *as is* and comes with no warranty " of any kind, either expressed or implied. By using this " plugin, you agree that in no event will the copyright " holder be liable for any damages resulting from the use " of this software. " " Usage: {{{1 " Use 'a to mark beginning of to-be-aligned region, Alternative: use V " move cursor to end of region, and execute map. (linewise visual mode) to " The maps also set up marks 'y and 'z, and retain mark region, execute same " 'a at the beginning of region. map. Uses 'a, 'y, and 'z. " " The start/end wrappers save and restore marks 'y and 'z. " " Although the comments indicate the maps use a leading backslash, " actually they use (:he mapleader), so the user can " specify that the maps start how he or she prefers. " " Note: these maps all use . " " Romans 1:20 For the invisible things of Him since the creation of the {{{1 " world are clearly seen, being perceived through the things that are " made, even His everlasting power and divinity; that they may be " without excuse. " --------------------------------------------------------------------- " Load Once: {{{1 if &cp finish endif let s:keepcpo= &cpo set cpo&vim " ===================================================================== " Maps: {{{1 " --------------------------------------------------------------------- " WS: wrapper start map (internal) {{{2 " Produces a blank line above and below, marks with 'y and 'z if !hasmapto('WrapperStart') map WS AlignMapsWrapperStart endif nmap > AlignMapsWrapperStart :set lz:call AlignMaps#WrapperStart(0) vmap > AlignMapsWrapperStart :set lz:call AlignMaps#WrapperStart(1) " --------------------------------------------------------------------- " WE: wrapper end (internal) {{{2 " Removes guard lines, restores marks y and z, and restores search pattern if !hasmapto('WrapperEnd') nmap WE AlignMapsWrapperEnd endif nmap > AlignMapsWrapperEnd :call AlignMaps#WrapperEnd():set nolz " --------------------------------------------------------------------- " Complex C-code alignment maps: {{{2!= "" if !hasmapto('AM_a?') |map a? AM_a?|endif if !hasmapto('AM_a,') |map a, AM_a,|endif if !hasmapto('AM_a<') |map a< AM_a<|endif if !hasmapto('AM_a=') |map a= AM_a=|endif if !hasmapto('AM_abox') |map abox AM_abox|endif if !hasmapto('AM_acom') |map acom AM_acom|endif if !hasmapto('AM_adcom')|map adcom AM_adcom|endif if !hasmapto('AM_aocom')|map aocom AM_aocom|endif if !hasmapto('AM_ascom')|map ascom AM_ascom|endif if !hasmapto('AM_adec') |map adec AM_adec|endif if !hasmapto('AM_adef') |map adef AM_adef|endif if !hasmapto('AM_afnc') |map afnc AM_afnc|endif if !hasmapto('AM_afnc') |map afnc AM_afnc|endif if !hasmapto('AM_aunum')|map aunum AM_aenum|endif if !hasmapto('AM_aenum')|map aenum AM_aunum|endif if exists("g:alignmaps_euronumber") && !exists("g:alignmaps_usanumber") if !hasmapto('AM_anum')|map anum AM_aenum|endif else if !hasmapto('AM_anum')|map anum AM_aunum|endif endif map > AM_a? WS:AlignCtrl mIp1P1lC ? : : : : :'a,.Align:'a,'z-1s/\(\s\+\)? /?\1/eWE map > AM_a, WS:'y,'zs/\(\S\)\s\+/\1 /ge'yjma'zk:call AlignMaps#CharJoiner(","):silent 'y,'zg/,/call AlignMaps#FixMultiDec()'z:exe "norm \AM_adec"WE map > AM_a< WS:AlignCtrl mIp1P1=l << >>:'a,.AlignWE map > AM_a= WS:AlignCtrl mIp1P1=l:AlignCtrl g :=:'a,'zAlign :\==WE map > AM_abox WS:let g:alignmaps_iws=substitute(getline("'a"),'^\(\s*\).*$','\1','e'):'a,'z-1s/^\s\+//e:'a,'z-1s/^.*$/@&@/:AlignCtrl m=p01P0w @:'a,.Align:'a,'z-1s/@/ * /:'a,'z-1s/@$/*/'aYP:s/./*/g0r/'zkYp:s/./*/g0r A/:exe "'a-1,'z-1s/^/".g:alignmaps_iws."/e"WE map > AM_acom WS:'a,.s/\/[*/]\/\=/@&@/e:'a,.s/\*\//@&/e:'y,'zs/^\( *\) @/\1@/e'zk:call AlignMaps#StdAlign(2):'y,'zs/^\(\s*\) @/\1/e:'y,'zs/ @//egWE map > AM_adcom WS:'a,.v/^\s*\/[/*]/s/\/[*/]\*\=/@&@/e:'a,.v/^\s*\/[/*]/s/\*\//@&/e:'y,'zv/^\s*\/[/*]/s/^\( *\) @/\1@/e'zk:call AlignMaps#StdAlign(3):'y,'zv/^\s*\/[/*]/s/^\(\s*\) @/\1/e:'y,'zs/ @//egWE map > AM_aocom WS:AlignPush:AlignCtrl g /[*/]:exe "norm \AM_acom":AlignPopWE map > AM_ascom WS:'a,.s/\/[*/]/@&@/e:'a,.s/\*\//@&/e:silent! 'a,.g/^...@\/[*/]/s/@//ge:AlignCtrl v ^\s*\/[*/]:AlignCtrl g \/[*/]'zk:call AlignMaps#StdAlign(2):'y,'zs/^\(\s*\) @/\1/e:'y,'zs/ @//egWE map > AM_adec WS:'a,'zs/\([^ \t/(]\)\([*&]\)/\1 \2/e:'y,'zv/^\//s/\([^ \t]\)\s\+/\1 /ge:'y,'zv/^\s*[*/]/s/\([^/][*&]\)\s\+/\1/ge:'y,'zv/^\s*[*/]/s/^\(\s*\%(\K\k*\s\+\%([a-zA-Z_*(&]\)\...@=\)\+\)\([*(&]*\)\s*\([a-zA-Z0-9_()]\+\)\s*\(\(\[.\{-}]\)*\)\s*\(=\)\=\s*\(.\{-}\)\=\s*;/\...@\2#@\...@\6@\7;@/e:'y,'zv/^\s*[*/]/s/\*\/\s*$/@*\//e:'y,'zv/^\s*[*/]/s/^\s\+\*/@@@@@* /e:'y,'zv/^\s*[*/]/s/^@@@@@\*\(.*[^*/]\)$/&@*/e'yjma'zk:AlignCtrl v ^\s*[*/#]:call AlignMaps#StdAlign(1):'y,'zv/^\s*[*/]/s/@ //ge:'y,'zv/^\s*[*/]/s/\(\s*\);/;\1/e:'y,'zv/^#/s/# //e:'y,'zv/^\s\+[*/#]/s/\([^/*]\)\(\*\+\)\( \+\)/\1\3\2/e:'y,'zv/^\s\+[*/#]/s/\((\+\)\( \+\)\*/\2\1*/e:'y,'zv/^\s\+[*/#]/s/^\(\s\+\) \*/\1*/e:'y,'zv/^\s\+[*/#]/s/[ \...@]*$//e:'y,'zs/^[*]/ */eWE map > AM_adef WS:AlignPush:AlignCtrl v ^\s*\(\/\*\\/\/\):'a,.v/^\s*\(\/\*\\/\/\)/s/^\(\s*\)#\(\s\)*define\s*\(\I[a-zA-Z_0-9(),]*\)\s*\(.\{-}\)\($\\/\*\)/#\1\2define @\...@\4@\5/e:'a,.v/^\s*\(\/\*\\/\/\)/s/\($\\*\/\)/@&/e'zk:call AlignMaps#StdAlign(1)'yjma'zk:'a,.v/^\s*\(\/\*\\/\/\)/s/ @//gWE map > AM_afnc :set lz:silent call AlignMaps#Afnc():set nolz map > AM_aunum WS:'a,'zs/\%([0-9.]\)\s\+\zs\([-+.]\=\d\)/@\1/ge:'a,'zs/\(\(^\|\s\)\d\+\)\(\s\+\)@/\...@\3@/ge:'a,'zs/\.@/\.0@/ge:AlignCtrl mp0P0r:'a,'zAlign [...@]:'a,'zs/@/ /ge:'a,'zs/\(\.\)\(\s\+\)\([0-9.,eE+]\+\)/\1\3\2/ge:'a,'zs/\([eE]\)\(\s\+\)\([0-9+\-+]\+\)/\1\3\2/geWE map > AM_aenum WS:'a,'zs/\%([0-9.]\)\s\+\([-+]\=\d\)/\...@\2/ge:'a,'zs/\.@/\.0@/ge:AlignCtrl mp0P0r:'a,'zAlign [,@]:'a,'zs/@/ /ge:'a,'zs/\(,\)\(\s\+\)\([-0-9.,eE+]\+\)/\1\3\2/ge:'a,'zs/\([eE]\)\(\s\+\)\([0-9+\-+]\+\)/\1\3\2/geWE " --------------------------------------------------------------------- " html table alignment {{{2 if !hasmapto('AM_Htd')|map Htd AM_Htd|endif map > AM_Htd WS:'y,'zs%<[tT][rR]><[tT][dD][^>]\{-}>\<[tT][dD][^>]\{-}>\%@&@%g'yjma'zk:AlignCtrl m=Ilp1P0 @:'a,.Align:'y,'zs/ @/@/:'y,'zs/@ <[tT][rR]>/<[tT][rR]>/ge:'y,'zs/@//geWE " --------------------------------------------------------------------- " character-based right-justified alignment maps {{{2 if !hasmapto('AM_T|')|map T| AM_T||endif if !hasmapto('AM_T#') |map T# AM_T#|endif if !hasmapto('AM_T,') |map T, AM_T,o|endif if !hasmapto('AM_Ts,') |map Ts, AM_Ts,|endif if !hasmapto('AM_T:') |map T: AM_T:|endif if !hasmapto('AM_T;') |map T; AM_T;|endif if !hasmapto('AM_T<') |map T< AM_T<|endif if !hasmapto('AM_T=') |map T= AM_T=|endif if !hasmapto('AM_T?') |map T? AM_T?|endif if !hasmapto('AM_T@') |map T@ AM_T@|endif if !hasmapto('AM_Tab') |map Tab AM_Tab|endif if !hasmapto('AM_Tsp') |map Tsp AM_Tsp|endif if !hasmapto('AM_T~') |map T~ AM_T~|endif map > AM_T| WS:AlignCtrl mIp0P0=r :'a,.AlignWE map > AM_T# WS:AlignCtrl mIp0P0=r #:'a,.AlignWE map > AM_T, WS:AlignCtrl mIp0P1=r ,:'a,.AlignWE map > AM_Ts, WS:AlignCtrl mIp0P1=r ,:'a,.Align:'a,.s/\(\s*\),/,\1/geWE map > AM_T: WS:AlignCtrl mIp1P1=r ::'a,.AlignWE map > AM_T; WS:AlignCtrl mIp0P0=r ;:'a,.AlignWE map > AM_T< WS:AlignCtrl mIp0P0=r <:'a,.AlignWE map > AM_T= WS:'a,'z-1s/\s\+\([*/+\-%&\~^]\==\)/ \1/e:'a,'z-1s@ \+\([*/+\-%&\~^]\)=...@\1=@ge:'a,'z-1s/; */;@/e:'a,'z-1s/==/\="\\"/ge:'a,'z-1s/!=/\x="!\"/ge:AlignCtrl mIp1P1=r = @:AlignCtrl g =:'a,'z-1Align:'a,'z-1s/; *@/;/e:'a,'z-1s/; *$/;/e:'a,'z...@\([*/+\-%&\~^]\)\( \+\)=...@\2\1=@ge:'a,'z-1s/\( \+\);/;\1/ge:'a,'z-1s/\xff/=/geWE:exe "norm acom" map > AM_T? WS:AlignCtrl mIp0P0=r ?:'a,.Align:'y,'zs/ \( *\);/;\1/geWE map > AM_T@ WS:AlignCtrl mIp0P0=r @:'a,.AlignWE map > AM_Tab WS:'a,.s/^\(\t*\)\(.*\)/\=submatch(1).escape(substitute(submatch(2),'\t','@','g'),'\')/:AlignCtrl mI=r @:'a,.Align:'y+1,'z-1s/@/ /gWE map > AM_Tsp WS:'a,.s/^\(\s*\)\(.*\)/\=submatch(1).escape(substitute(submatch(2),'\s\+','@','g'),'\')/:AlignCtrl mI=r @:'a,.Align:'y+1,'z-1s/@/ /gWE map > AM_T~ WS:AlignCtrl mIp0P0=r ~:'a,.Align:'y,'zs/ \( *\);/;\1/geWE " --------------------------------------------------------------------- " character-based left-justified alignment maps {{{2 if !hasmapto('AM_t|') |map t| AM_t||endif if !hasmapto('AM_t#') |map t# AM_t#|endif if !hasmapto('AM_t,') |map t, AM_t,|endif if !hasmapto('AM_ts,') |map ts, AM_ts,|endif if !hasmapto('AM_t:') |map t: AM_t:|endif if !hasmapto('AM_t;') |map t; AM_t;|endif if !hasmapto('AM_t<') |map t< AM_t<|endif if !hasmapto('AM_t=') |map t= AM_t=|endif if !hasmapto('AM_w=') |map w= AM_w=|endif if !hasmapto('AM_t?') |map t? AM_t?|endif if !hasmapto('AM_t~') |map t~ AM_t~|endif if !hasmapto('AM_t@') |map t@ AM_t@|endif if !hasmapto('AM_m=') |map m= AM_m=|endif if !hasmapto('AM_tab') |map tab AM_tab|endif if !hasmapto('AM_tml') |map tml AM_tml|endif if !hasmapto('AM_tsp') |map tsp AM_tsp|endif if !hasmapto('AM_tsq') |map tsq AM_tsq|endif if !hasmapto('AM_tt') |map tt AM_tt|endif map > AM_t| WS:AlignCtrl mIp0P0=l :'a,.AlignWE map > AM_t# WS:AlignCtrl mIp0P0=l #:'a,.AlignWE map > AM_t, WS:AlignCtrl mIp0P1=l ,:'a,.AlignWE map > AM_ts, WS:AlignCtrl mIp0P1=l ,:'a,.Align:'a,.s/\(\s*\),/,\1/geWE map > AM_t: WS:AlignCtrl mIp1P1=l ::'a,.AlignWE map > AM_t; WS:AlignCtrl mIp0P1=l ;:'a,.Align:'y,'zs/\( *\);/;\1/geWE map > AM_t< WS:AlignCtrl mIp0P0=l <:'a,.AlignWE map > AM_t= WS:call AlignMaps#Equals()WE map > AM_w= WS:'a,'zg/=/s/\s\+\([*/+\-%&\~^]\==\)/ \1/e:'a,'zg/=/s@ \+\([*/+\-%&\~^]\)=...@\1=@ge:'a,'zg/=/s/==/\="\\"/ge:'a,'zg/=/s/!=/\="!\"/ge'zk:AlignCtrl mWp1P1=l =:AlignCtrl g =:'a,'z-1g/=/Align:'a,'z-1g/=/s...@\([*/+\-%&\~^!=]\)\( \+\)=...@\2\1=@ge:'a,'z-1g/=/s/\( \+\);/;\1/ge:'a,'z-1v/^\s*\/[*/]/s/\/[*/]/@&@/e:'a,'z-1v/^\s*\/[*/]/s/\*\//@&/e'zk:call AlignMaps#StdAlign(1):'y,'zs/^\(\s*\) @/\1/e:'a,'z-1g/=/s/\xff/=/ge:'y,'zg/=/s/ @//egWE map > AM_t? WS:AlignCtrl mIp0P0=l ?:'a,.Align:.,'zs/ \( *\);/;\1/geWE map > AM_t~ WS:AlignCtrl mIp0P0=l ~:'a,.Align:'y,'zs/ \( *\);/;\1/geWE map > AM_t@ WS::call AlignMaps#StdAlign(1):WE map > AM_m= WS:'a,'zs/\s\+\([*/+\-%&\~^]\==\)/ \1/e:'a,'zs@ \+\([*/+\-%&\~^]\)=...@\1=@ge:'a,'zs/==/\="\\"/ge:'a,'zs/!=/\="!\"/ge'zk:AlignCtrl mIp1P1=l =:AlignCtrl g =:'a,'z-1Align:'a,'z...@\([*/+\-%&\~^!=]\)\( \+\)=...@\2\1=@ge:'a,'z-1s/\( \+\);/;\1/ge:'a,'z-s/%\ze[^=]/ @%@ /e'zk:call AlignMaps#StdAlign(1):'y,'zs/^\(\s*\) @/\1/e:'a,'z-1s/\xff/=/ge:'y,'zs/ @//egWE map > AM_tab WS:'a,.s/^\(\t*\)\(.*\)$/\=submatch(1).escape(substitute(submatch(2),'\t',"\",'g'),'\')/:if &ts == 1exe "AlignCtrl mI=lp0P0 \"elseexe "AlignCtrl mI=l \"endif:'a,.Align:exe "'y+1,'z-1s/\/".((&ts == 1)? '\t' : ' ')."/g"WE map > AM_tml WS:AlignCtrl mWp1P0=l \\\@:'a,.AlignWE map > AM_tsp WS:'a,.s/^\(\s*\)\(.*\)/\=submatch(1).escape(substitute(submatch(2),'\s\+','@','g'),'\')/:AlignCtrl mI=lp0P0 @:'a,.Align:'y+1,'z-1s/@/ /gWE map > AM_tsq WS:'a,.AlignReplaceQuotedSpaces:'a,.s/^\(\s*\)\(.*\)/\=submatch(1).substitute(submatch(2),'\s\+','@','g')/:AlignCtrl mIp0P0=l @:'a,.Align:'y+1,'z-1s/[...@]/ /gWE map > AM_tt WS:AlignCtrl mIp1P1=l \\\@:'a,.AlignWE " ===================================================================== " Menu Support: {{{1 " ma ..move.. use menu " v V or ctrl-v ..move.. use menu if has("menu") && has("gui_running") && &go =~ 'm' && !exists("s:firstmenu") let s:firstmenu= 1 if !exists("g:DrChipTopLvlMenu") let g:DrChipTopLvlMenu= "DrChip." endif if g:DrChipTopLvlMenu != "" let s:mapleader = exists("g:mapleader")? g:mapleader : '\' let s:emapleader= escape(s:mapleader,'\ ') exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.<<\ and\ >>'.s:emapleader.'a< '.s:mapleader.'a<' exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Assignment\ ='.s:emapleader.'t= '.s:mapleader.'t=' exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Assignment\ :='.s:emapleader.'a= '.s:mapleader.'a=' exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Backslashes'.s:emapleader.'tml '.s:mapleader.'tml' exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Breakup\ Comma\ Declarations'.s:emapleader.'a, '.s:mapleader.'a,' exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.C\ Comment\ Box'.s:emapleader.'abox '.s:mapleader.'abox' exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Commas'.s:emapleader.'t, '.s:mapleader.'t,' exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Commas'.s:emapleader.'ts, '.s:mapleader.'ts,' exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Commas\ With\ Strings'.s:emapleader.'tsq '.s:mapleader.'tsq' exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Comments'.s:emapleader.'acom '.s:mapleader.'acom' exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Comments\ Only'.s:emapleader.'aocom '.s:mapleader.'aocom' exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Declaration\ Comments'.s:emapleader.'adcom '.s:mapleader.'adcom' exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Declarations'.s:emapleader.'adec '.s:mapleader.'adec' exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Definitions'.s:emapleader.'adef '.s:mapleader.'adef' exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Function\ Header'.s:emapleader.'afnc '.s:mapleader.'afnc' exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Html\ Tables'.s:emapleader.'Htd '.s:mapleader.'Htd' exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.(\.\.\.)?\.\.\.\ :\ \.\.\.'.s:emapleader.'a? '.s:mapleader.'a?' exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Numbers'.s:emapleader.'anum '.s:mapleader.'anum' exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Numbers\ (American-Style)'.s:emapleader.'aunum aunum '.s:mapleader.'aunum aunum' exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Numbers\ (Euro-Style)'.s:emapleader.'aenum '.s:mapleader.'aenum' exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Spaces\ (Left\ Justified)'.s:emapleader.'tsp '.s:mapleader.'tsp' exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Spaces\ (Right\ Justified)'.s:emapleader.'Tsp '.s:mapleader.'Tsp' exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Statements\ With\ Percent\ Style\ Comments'.s:emapleader.'m= '.s:mapleader.'m=' exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Symbol\ <'.s:emapleader.'t< '.s:mapleader.'t<' exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Symbol\ \|'.s:emapleader.'t\| '.s:mapleader.'t|' exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Symbol\ @'.s:emapleader.'t@ '.s:mapleader.'t@' exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Symbol\ #'.s:emapleader.'t# '.s:mapleader.'t#' exe 'menu '.g:DrChipTopLvlMenu.'AlignMaps.Tabs'.s:emapleader.'tab '.s:mapleader.'tab' unlet s:mapleader unlet s:emapleader endif endif " ===================================================================== " Restore: {{{1 let &cpo= s:keepcpo unlet s:keepcpo " ============================================================================== " Modelines: {{{1 " vim: ts=4 nowrap fdm=marker

Raspunde prin e-mail lui