замерджил dev-quick_help в master. теперь удобно искать опкоды и такты команд.
спасибо, elf/2!
Вид для печати
замерджил dev-quick_help в master. теперь удобно искать опкоды и такты команд.
спасибо, elf/2!
Для начала было неплохо сделать подсчет с учетом 1 оператор в строке.
Большинство ведь именно так и пишут.
Еще хорошо бы что бы автоматом в большой регистр все мненики преобразовывались после ввода.
Вообще автодополение больше бесит чем помогает. Ввводишь команду, в конце по привычке хочешь нажать ENTER что бы перети на след строку и продолжить, в место этого ENTER срабатывает как закрытие окна автозаполенения и его нужно жать еще раз.
---------- Post added at 06:16 ---------- Previous post was at 06:15 ----------
Почему то при автодополнении TAB=ENTER. Какой в этом тайный смысл?
спорное мнение, мне в нижнем регистре более наглядно :)
---------- Post added at 07:08 ---------- Previous post was at 07:06 ----------
поставь делай побольше, чтоб хватило написать полностью мнемонику или операнд, но на метку оно уже всплывало, тогда бесить не будет
запишу в todo, если не забуду. правда все еще не оч ясно, так ли это надо, когда есть F1.
я как-то давно перепривык к маленьким буквам... но если очень надо, там есть uppercase, либо можно сделать поиск-замену на регулярках (типа, умный uppercase).
есть чуть-чуть.. надо тюнинговать, а чаще пока что вломы... попробуй тоже паузу поставь для подсказки побольше... по кр мере меня пока что возмущало автодополнение для регистров, но это лечится. что кроме этого будет - хз...
не понял как это. было, что без подсказок при нажатии таба делалось автодополнение - это отключено. а при подсказках что таб, что ентер - выбор варианта. а как должно быть? (и это вряд ли меняется).
на спектруме была привычка писать капсом, да (иногда просто не давали выбора). но сейчас мало тех, кто пишет исключительно на реале. мне редко попадаются старые исходники (тогда просто включил капс и дело с концом), чаше пишу новые без капса.
п.с. вот автодополнение на регистрах добивает... надо домутить.
п.п.с. обновил чуть-чуть файлик настроек плагина, теперь там можно раскомментировать выключение автодополнения или задать паузу перед автодополнением.
жалкое подобие XAS'ного автоформата, парсер тупейший, автоформатируем по enter'у
пишем с начала строки, без таба и пробела. если первый кусок строки похож на название регистра, то считаем что это LD. если кусок похож на флаг и второго аргумента нет, то это ret. если второй аргумент есть - call
мнемоники, регистры и флаги переводим в верхний регистр.
стоит на это тратить время?
Код:import re
from operator import methodcaller
unify = methodcaller('upper')
mnemonics = set('adc|add|and|bit|call|ccf|cp|cpl|cpd|cpdr|cpi|cpir|daa|dec|di|djnz|ei|ex|exx|halt|im|in|inc|ind|indr|inf|ini|inir|jp|jr|ld|ldd|lddr|ldi|ldir|neg|nop|exx|or|otdr|otir|out|outd|outi|pop|push|res|ret|reti|retn|rl|rla|rlc|rlca|rld|rr|rra|rrc|rrca|rrd|rst|sbc|scf|set|sla|sli|sll|sra|srl|sub|xor'.split('|'))
registers = set("a|b|c|d|e|h|l|i|r|xl|lx|xh|hx|ixl|ixh|yl|ly|yh|hy|iyl|iyh|af|bc|de|hl|sp|ix|iy|af'|(hl)|(de)|(bc)|(ix)|(iy)".split('|'))
flags = set('z|nz|c|nc|po|pe|p|m'.split('|'))
def format_args(args, extra):
r = []
if args:
r.append(' ')
if len(args) > 1:
r.append(','.join(args))
else:
r.append(args[0])
if extra:
r.append('\t')
r.append(extra)
return r
def parse_args(line, parts, split_base):
args = []
extra = None
for i, p in enumerate(parts[split_base:]):
if i > 1:
parts = re.split('\s+|,\s*', line, maxsplit=split_base + 2)
extra = parts[-1]
break
if p.startswith(';'):
parts = re.split('\s+|,\s*', line, maxsplit=split_base + i)
extra = parts[-1]
break
else:
if p.lower() in registers or p.lower() in flags:
args.append(unify(p))
else:
args.append(p)
return args, extra
class xasify(sublime_plugin.TextCommand):
def run(self, edit):
line = self.view.line(self.view.sel()[0])
l = self.view.substr(line)
if l.startswith((' ', '\t', ';')):
return
parts = re.split('\s+|,\s*', l)
tokens = []
if parts[0].lower() in mnemonics:
tokens.append('\t')
tokens.append(unify(parts[0]))
args, extra = parse_args(l, parts, 1)
elif len(parts) > 1 and parts[1].lower() in mnemonics:
tokens.append(parts[0])
tokens.append('\t')
tokens.append(unify(parts[1]))
args, extra = parse_args(l, parts, 2)
elif parts[0] in registers:
tokens.append('\t' + unify('LD'))
args, extra = parse_args(l, parts, 0)
elif parts[0] in flags:
args, extra = parse_args(l, parts, 0)
if len(args) == 1:
tokens.append('\t' + unify('RET'))
else:
tokens.append('\t' + unify('CALL'))
tokens.extend(format_args(args, extra))
new_line = ''.join(tokens)
self.view.replace(edit, line, new_line + '\n')
Код:{
"keys": ["enter"], "command": "xasify",
"context": [
{
"operand": "source.z80asm",
"operator": "equal",
"key": "selector"
}
]
}
а где можно про штормовое автодополнение почитать? в смысле есть ли где-нибудь правила по которым оно работает?
мой косяк :) как-то вот так надо написать
Код:if l.startswith((' ', '\t', ';')) or line.empty():
self.view.insert(edit, self.view.sel()[0].begin(), '\n')
return
Поставил Sublime Text 3, положил содержимое скачанного архива в %UserProfile%\AppData\Roaming\Sublime Text 3\Packages\User\
Появился пункт меню "Z80ASM", в нем почти все менюайтемы задизейблены (сеттинги открывают путсые файлы). Code Completion в рамках проекта не показывает метки из других мдулей (только имена модулей). ЧЯДНТ?
скорее всего надо было положить просто в Packages, без user.
Так еще хуже:
---------------------------
Sublime Text
---------------------------
Error loading syntax file "Packages/User/sublime-text-z80asm-master/z80asm/z80asm.tmLanguage": Unable to open Packages/User/sublime-text-z80asm-master/z80asm/z80asm.tmLanguage
---------------------------
OK
---------------------------
---------------------------
Sublime Text
---------------------------
Error loading colour scheme Packages/z80asm/z80asm.tmTheme: Unable to open Packages/z80asm/z80asm.tmTheme
---------------------------
OK
---------------------------
в плагине используется ${Packages}, т.е. путь до пэкэджей будет правильный, но вот папка z80asm должна лежать строго в Packages/, это описано в ридми.
Теперь оно так, но:
---------------------------
Sublime Text
---------------------------
Error loading syntax file "Packages/User/sublime-text-z80asm-master/z80asm/z80asm.tmLanguage": Unable to open Packages/User/sublime-text-z80asm-master/z80asm/z80asm.tmLanguage
---------------------------
OK
---------------------------
Alex Rider, не надо ничего в User пихать. удали все это.
В поседний раз правильно все положил. Sublime запомнил что-то внутри себя по поводу папки sublime-text-z80asm-master. Переустановка с чисткой папки c:\Users\%UserName%\AppData\Roaming\Sublime Text 3 помогла - теперь все отлично. Да, в первый раз я распаковал папку sublime-text-z80asm-master в папку User.
Они есть просят? А вот когда сырок колбасит после того как какой нить табоумелец поставил себе таб 8 символов, а то и хуже разные табы для первого в строе и остальных
не видел ни одного редактора, который бы не понимал табулыторы, даже на спектруме
---------- Post added at 11:14 ---------- Previous post was at 11:10 ----------
конечно просят... то ли один раз del нажать, то ли 8... потом после всяких редакторов-пробелоумельцев правишь исходник - задалбываешься... особенно это касается всяких там MS VS, которая то делает автовыравнивание, то нет. начинаешь подстраивать, а там и не по ширине табулыции и целая куча пробелов, так и хочется вспомнить мать БГ.
а какова его стандартная длинна?
Учим комбинации Ctrl+стрелка влево/вправо, Ctrl+Shift+стрелка влево/вправо :) а то пользуетесь клавиатурой как моя бабушка
---------- Post added at 11:29 ---------- Previous post was at 11:20 ----------
И если идентификатор 12 символов или больше длинной? Мышку юзаем или 12 раз стрелку клоцаем?
при том что есть комбинации кнопомк что бы скакать по куче прелов и словам, и всеравно сколько там пробелов 1 или 50
а в каких редакторах в которых можно код править они не поддерживаются? Даже notepad из виндокорбки умеет эти комбинации, правда чуть по кораличному
Когда сырок весь поведен от того что табы автора отличаются от тех что в редакторе вьювере это лечится гораздо сложнее, чем взять редактор который с табами работает нормально, я вот код Verilog пишу и дебажу в Active-HDL потом иногда в квартусе правлю смотрю, и очень бесит когда табы не совпадают
когда один редактор по табу вставляет 8 пробелов, а кто-то когда-то написал исходник с 12 пробелами, это тоже бесит и попробуй потом "полечить"... но это не суть, мне в обще пофиг, как сделаете, так и будет. Тебе ж тоже было пофиг? ты ж не хотел на тыренном работать?!
---------- Post added at 12:19 ---------- Previous post was at 12:17 ----------
руки отрывать авторам таких редакторов/вьюверов надо!
Источник - http://ru.wikipedia.org/wiki/ТабуляцияЦитата:
Традиционно эти позиции располагаются каждые 8 знакомест
---------- Post added at 12:22 ---------- Previous post was at 12:19 ----------
И да, мы сейчас говорим об АСМе, а не верилоге, си, паскали и пр...
нету стандарта на таб, поэтому не ясно кому руки оторвать
и сколько редакторов видел где таб 8 символов? Самое частое это 4 символа
Т.е. надо продолжать метки ставить по убогому: PROC01, LAB65, а не по человечески? EnterPoin, SetCursorPosition итд
TAB = 4 символа, 8 - перебор
Не встречал ни разу ;)
Почему вдруг? Ставь метку "SetCursorPosition", а сами команды будут уже с новой строки...
а ты что предлагаешь? ты так и не озвучил величину отступа. или ты предлагаешь, написав "loop" сделав отступ в стандартные 8 символов, а потом, когда введешь "SetCursorPosition" материться и биться об стену, потому что лестница начнется в тексте?
Ну и чем плох стиль-то? и длинные метки повсеместно юзаются и ничего лесенкой не колбасит!